소프트웨어 공학 (Software Engineering) 소개 문양세 강원대학교 IT대학 컴퓨터과학전공
In this chapter … 소프트웨어 공학을 배우기에 앞서서, 또한, We will cover … 소개 소프트웨어 공학을 배우기에 앞서서, 소프트웨어 및 소프트웨어 시스템에 대해서 정의해보고, 소프트웨어 위기와 이에 따른 소프트웨어 공학의 필요성을 생각해 본다. 또한, 좋은 소프트웨어란 무엇인지 정의해보고, 소프트웨어 공학에서 사용하는 주요 모형들을 살펴본 후, 소프트웨어 개발에 영향을 미치는 요소들을 생각해 본다. We will cover … 소프트웨어와 시스템 다루는 문제 도전 과제 접근 방법 근본 지식
소프트웨어와 우리 생활 소개 의존성 (dependability)
In this chapter … 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
소프트웨어의 중요성 (1/2) 실생활과 소프트웨어(컴퓨터) 소개 실생활과 소프트웨어(컴퓨터) 리니지? 스타크? 서든어택? 클래시오브클랜, 애니팡1/2 ? Oh, NO! 일상사에서… 공과금 고지서, 항공기 예약/발권, 병원 기록, 초본/등본, 스마트폰, … 학교로 보면… 수강 신청, 성적 입력 및 열람, 학사 관리, …
소프트웨어의 중요성 (2/2) 정보 혁명의 토대는 컴퓨터이며, 그 잠재력은? 물론, 소프트웨어이다. 소개 정보 혁명의 토대는 컴퓨터이며, 그 잠재력은? 물론, 소프트웨어이다. 소프트웨어는 과거 “편리” 추구에서 현재는 “생존”에 필수적 요소가 되어가고 있다. 정치, 경제(1차, 2차 3차 산업 공통), 사회, 교육, 국방, 예술, 의료, 오락, … 경쟁에서의 승리 제품의 적기 공급 제품? 소프트웨어 자체 혹은 내재가 기본… 소프트웨어의 결함 생명과 재산에 치명적 결과 우주왕복선 폭발 지진해일(쓰나미) 예보, …
콜롬비아, 챌린저호 폭발 소개
NEIS 오류 소개
소프트웨어의 정의 소프트웨어 정의 소프트웨어 생산 협의: 프로그램 자체 소개 소프트웨어 정의 협의: 프로그램 자체 광의: 프로그램 + 프로그램의 개발, 운용, 보수에 필요한 정보 일체 (소프트웨어 생산 결과물 일체) 소프트웨어 생산 소프트웨어는 프로그램의 동적인 실체 프로그램은 형식 언어로 표현된 지적 노동의 결과물 제조업 vs. 서비스업(소프트웨어는 제작이 아니라 창조적 노력이 포함된 개발) 닳아 없어지는 것이 아니라 소용없어 못쓰게 됨 논리적인 요소로 구성(유지보수가 어려움) 소프트웨어 산업(2012년 국내 SW 시장은 250억달러 규모)
소프트웨어 산업 (1/3) 소개
소프트웨어 산업 (2/3) 소개
소프트웨어 산업 (3/3) 소개
소프트웨어의 특성 비가시성(Invisibility) 테스트 가능(Testability) 소개 비가시성(Invisibility) 테스트 가능(Testability) 복잡성(Complexity) 특히 제3자가 보았을 경우 변형성(Conformity)/변경성(Changeability) 장수(Longevity) 죽지 않는다. 단지 사라질 뿐이다. 복제 가능(Duplicability) 생명공학의 모태? 응용에 의존(Application dependability) 일반적으로, 몇 개 핵심 부품을 만들어 조립해 쓸 수가 없다.
소프트웨어 시스템 유기적으로 상호 작용하는 객체들의 모임 특징 소개 유기적으로 상호 작용하는 객체들의 모임 S/W는 독립적으로 존재하는 것이 아니라 컴퓨터를 기반으로 여러 시스템이 유기적인 관계를 맺고 있다. 은행의 업무 전산화 예제: 현금 자동 인출기, 중앙 컴퓨터, 계좌 DB, 은행 업무 처리 절차,입출금 전표, 은행원, … 특징 시너지 효과: 독립적인 의미를 갖지 않고, 통합되었을 때 의미를 가짐 역동적으로 발전, 변경 상충되는 요구와 이해 관계의 절충 (최적의 모범 답안이 아닌 절충안에 해당) 교통체계
정보 시스템 (Information System) 소개 자료의 분류, 저장, 검색에 초점 데이터베이스를 대화식(interactive)으로 접근 조직의 문제 해결을 위한 도구 정보 시스템의 예제 항공권 예약 시스템 신용 카드 검색 서비스 뱅킹 시스템 정보 시스템의 특징 대규모 자료를 관리하며, (일반적으로) 정적이 아님 시스템 분석과 유지보수가 중요함 MIS (Management Information System, 경영 정보 시스템) [위키] 운영, 관리, 의사결정을 위하여 정보를 제공하는 시스템 DSS(Decision Support System), KDD(Knowledge Discovery in Database)
제어 시스템 (Control System) 소개 사건을 감지하여 처리하고 자동적으로 보고 센서의 감지 (Ubiquitous Sensors) 제어 기기의 상태 보고 운영자의 입력 처리 사용자 및 운영자 인터페이스 제어 시스템 예제 교통 제어 공정 제어 컨베이어 벨트 제어 수치 제어 의료 시스템 초음파 검사, 메디슨… 무기 ( DARPA, FBI, … 테러 방지) 항공 제어 재난, 방재 산업 산불 감지, 지진 감지
(오리지널) 탑재 시스템 (Embedded System) 소개 주된 기능이 계산이 아닌 시스템의 구성 요소의 일부 (A system that is logically incorporated in a larger system whose primary function is NOT computation.) 탑재 시스템 예제 전자 기계 장치, 공정 제어 시스템 비행기 유도, 스위칭 시스템(교환기 등) 환자 감시 시스템, 레이다 추적 시스템 탑재 시스템 특징 대규모, 장기 사용, 테스트하기 어려움 인터페이스가 복잡, 비동기, 병렬, 분산 대규모 자료를 접근, 변경, 출력 실시간 제어 인터페이스 엄격한 요구: 실시간 반응, 고장에 대한 안전, 신뢰성
(요즘의) Embedded System 소형 디바이스에 들어가는 소프트웨어 Embedded Software를 어떻게 배워~ 소개 소형 디바이스에 들어가는 소프트웨어 PDA, 휴대폰용 운영체제, 게임, 영상 재생, … 소형 센서에 탑재되는 소프트웨어 … Embedded Software를 어떻게 배워~ 프로그램(C, Java, Assembly, …)을 잘하고, 운영체제(Windows, UNIX/Linux), DBMS를 잘 이해하는 등의 기본에 충실하면 쉽게 적응할 수 있어요… 안드로이드를 배워 봅시다.
소프트웨어의 분류 (1/2) 기능적 분류 개발 과정에 따른 분류 하드웨어 환경에 따른 분류 소개 기능적 분류 응용 소프트웨어(Application Software): 증권 처리, 학사 관리, 워드 프로세서, … 시스템 소프트웨어(System Software): 운영체제, DBMS, Compiler, … 개발 과정에 따른 분류 Prototype Product: 상품화 이전이나 완성된 소프트웨어 Package: 시험을 거쳐서 상품화된 소프트웨어 (주문형 소프트웨어: 고객의 목적에 맞도록 패키지된 소프트웨어) 하드웨어 환경에 따른 분류 Mainframe Parallel Processing or Distributed Processing PC & Workstation, Fault tolerant system 모바일 디바이스 스마트폰
소프트웨어의 분류 (2/2) 적용 분야에 따른 분류 통신용, 프로그래밍 언어, 사용자 인터페이스, 데이터베이스, 분산처리, … 소개 적용 분야에 따른 분류 통신용, 프로그래밍 언어, 사용자 인터페이스, 데이터베이스, 분산처리, … 문서 작성, 거래 처리, 개발 도구, 멀티미디어, … 전자 정부, 전자 상거래, 가상 도서관, …
시스템 네 가지 중요 성질 서브 시스템: 밀접한 연관이 있는 여러 서브시스템으로 구성 소개 네 가지 중요 성질 서브 시스템: 밀접한 연관이 있는 여러 서브시스템으로 구성 기능적 분할: 규모가 작은 부속 시스템(서브 시스템)들로 나눌 수 있음 시스템 경계: 시스템과 주변 환경을 구분하는 경계, 입력과 출력이 만나는 곳 자동화 경계: 자동화된 부분과 수동작업 부분을 나누는 경계
In this chapter … 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
제품으로 만든 소프트웨어 견고한(industrial strength) 소프트웨어 소프트웨어 (개발의) 문제점 소개 견고한(industrial strength) 소프트웨어 학생이나 아마추어가 만든 소프트웨어 수준이 아님 이식의 용이함, 사용의 편리함 등 품질 요소가 고려되어야 함 견고하지 않으면, 사용자 불편을 넘어서 재산과 인명에 피해를 줄 수 있음 소프트웨어 (개발의) 문제점 (1) 고비용 (2) 지연과 낮은 신뢰도 (3) 유지보수와 재작업
(1) 고비용 LOC로 계산한 소프트웨어 비용 사례 1억원의 소프트웨어가 1천만원 정도의 하드웨어에서 실행됨 소프트웨어 위기 소개 LOC로 계산한 소프트웨어 비용 사례 (작은 프로그램도) 5만 라인은 넘음 5만 라인은 4천만원 내지 1억 2천만원 정도의 비용이 듦 (인건비) 1억원의 소프트웨어가 1천만원 정도의 하드웨어에서 실행됨 소프트웨어 위기
(2) 지연과 낮은 신뢰도 계획에서 벗어난 컴퓨터 관련 개발 프로젝트 예상대로 작동하지 않는 사례 다른 요소(하드웨어)와 다름 소개 계획에서 벗어난 컴퓨터 관련 개발 프로젝트 600여 회사를 조사하였더니 35% 이상 예상대로 작동하지 않는 사례 방위산업 보고: 70% 이상이 소프트웨어 오류에서 기인 아폴로 로켓의 초기 실패도 소프트웨어에서 기인 자동차 급발진 사고도 소프트웨어 문제일 가능성이 높음 다른 요소(하드웨어)와 다름 전기, 기계 시스템: 노후화에 의한 물리적 특성에 의해 오류가 발생함 소프트웨어: 노후화에 의한 것이 아니며, 주로 설계, 개발 과정에 유입된 오류에 의한 것 챌린저호 사고: 소프트웨어 결함에서 기인
(3) 유지보수와 재작업 소프트웨어의 유지보수가 필요한 이유 (오류가 아니더라도) 소프트웨어는 자주 변경됨 소개 소프트웨어의 유지보수가 필요한 이유 여느 제품처럼 부품이 마모되거나 교체할 필요가 있어서 유지보수 하는 것이 아님 시스템에 남아 있는 오류가 있기 때문에 유지보수가 필요함 많은 오류가 시스템 가동된 후에, 혹은 오랜 사용 후에 발견됨 (오류가 아니더라도) 소프트웨어는 자주 변경됨 소프트웨어는 자주 업그레이드 됨 (기능 및 서비스 추가) 하드웨어 등의 동작 환경이 변할 경우도 변경이 필요함 코드에 (사용자 및 개발자의) 의도가 잘 드러나지 않음 시간이 지날 수록 의도가 숨겨지며, 여러 사람이 관련된 경우 특히 그러함
소프트웨어 개발의 또 다른 문제점 개발 예산이 초과되고, 일정이 지연되는 경우가 많다. 소개 개발 예산이 초과되고, 일정이 지연되는 경우가 많다. 개발 일정과 비용 예측이 부정확하다. 과거 프로젝트에 대한 경험이 잘 축적되지 않을 뿐 아니라, 과거 데이터가 현재에 잘 적용되지 않는 경우가 많다. 프로그래머 개인 역량에 따라 소프트웨어 개발 성패가 좌우된다. 프로그래머 개인의 능력과 경험이 중요하여, 작업의 정량적인 분석이 어렵다. 잘 키운 슈퍼 프로그래머 하나가 열 … 안 부럽다. 소프트웨어 품질을 평가하기가 어렵다. 체계적인 시험이 없으면, 운영 중에 많은 오류가 발생한다. 다른 공산품과 같은 불량품 관리, 품질 보증에 대한 확실한 정량적 개념이 없다. 다른 공산품의 경우, “불량률 0에 도전,” “무재해 100만시간 달성 목표”
In this chapter … 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
소프트웨어 공학 소프트웨어 공학의 정의 소프트웨어 공학의 목표 품질(Quality), 생산성(Productivity) 소개 소프트웨어 공학의 정의 질 좋은 소프트웨어를 경제적으로 생산하기 위하여 공학, 과학 및 수학적 원리와 방법을 적용하는 것 - Watts Humphrey, SEI 소프트웨어의 개발, 운용, 유지보수 및 소멸에 대한 체계적인 접근 방법 - IEEE Computer Society 품질, 효율, 비용에 관한 공학적인 접근 원리 - F. Brooks 소프트웨어 공학의 목표 품질 좋은 소프트웨어를 최소의 비용으로 계획된 일정에 맞추어 개발한다. 품질(Quality), 생산성(Productivity)
다루는 문제 사용자의 요구를 만족시키기 위하여, 소프트웨어를 체계적으로 개발하는 것 소프트웨어 공학에서 다루는 주요 요소 소개 사용자의 요구를 만족시키기 위하여, 소프트웨어를 체계적으로 개발하는 것 소프트웨어 공학에서 다루는 주요 요소 (1) 규모 문제 (2) 품질과 생산성 (3) 일관성과 재현성 (4) 변경
(1) 규모 문제 소개 수십 만, 수백 만 줄의 프로그램은, 수백 줄의 프로그램을 개발하는 데 사용하는 방법과는 다른 방법을 적용해야 함 엔지니어링 식 접근 방법 – 방법, 절차, 도구 사용
(2) 품질과 생산성 엔지니어링 작업에서는 비용, 일정, 품질과 같은 변수가 중요 소개 엔지니어링 작업에서는 비용, 일정, 품질과 같은 변수가 중요 비용: Man-Month로 측정 (인건비와 직결) 일정: 짧은 time-to-market (기술의 급격한 발전에 따라 갈수록 짧아짐) 품질
(3) 일관성과 재현성 일관성 프로세스의 표준화가 필요 재현성 프로젝트의 결과를 어느 정도 정확하게 예측가능 소개 일관성 프로젝트의 결과를 어느 정도 정확하게 예측가능 더 높은 품질의 제품을 생산 (기관/회사는 일관성 있는 품질 수준을 유지해야) 프로세스의 표준화가 필요 ISO 9001 CMM(Capability Maturity Model) 재현성 개발하는 시스템 마다 높은 품질과 생산성을 갖도록 만드는 것 개발 능력, 결과의 재현성 일관성과 유사한 개념
(4) 변경 소프트웨어는 계속 진화하고 변경됨 비즈니스 환경 및 소프트웨어 기술도 빠르게 발전 소개 소프트웨어는 계속 진화하고 변경됨 비즈니스 환경 및 소프트웨어 기술도 빠르게 발전 변경을 조절하고 수용하는 것이 또 하나의 과제
In this chapter … 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
접근 방법 프로젝트를 수행하는 동안 얻은 품질과 생산성은 여러 가지 요인에 의해 좌우됨 소개 프로젝트를 수행하는 동안 얻은 품질과 생산성은 여러 가지 요인에 의해 좌우됨 프로젝트 삼각 균형(triangle seesaw) 높은 품질과 생산성은 좋은 기술, 좋은 프로세스(혹은 방법), 잘 훈련된 인력을 사용하여 얻을 수 있음 소프트웨어 공학의 기본 접근법 소프트웨어를 개발하는 프로세스를 개발된 제품, 즉 소프트웨어와 분리함 적절한 “소프트웨어 프로세스”의 설계와 관리는 소프트웨어 공학의 중요 연구 목표임
단계적 프로세스 소개 제2장에서 소개할 폭포수 모형과 유사
일반적인 개발 단계 소개 분석 시스템을 위하여 무엇을 만들 것인가? 1. 분석 전략 수립(3장) 2. 요구 결정(3장) 초점 주요작업과 기술 결과물 분석 시스템을 위하여 무엇을 만들 것인가? 1. 분석 전략 수립(3장) 2. 요구 결정(3장) 3. 사용 사례 분석(4장) 4. 구조적 모델링(5장) 5. 동적 모델링(6장) 요구 명세서 설계 시스템을 어떻게 구축할 것인가? 6. 설계 전략 수립(7장) 7. 아키텍처 설계(7장) 8. 인터페이스 설계(9장) 9. 프로그램 설계 10. 데이터베이스, 파일 설계(8장) 설계 명세서 구현 시스템의 코딩과 단위 시험 11. 프로그래밍(10장) 12. 단위 테스팅(10장) 13. 시스템 안정화 및 유지보수(11장) 새 시스템, 유지보수 계획 테스팅 시스템이 요구에 맞게 실행되나? 14. 통합 테스팅(2장) 15. 시스템 테스팅(2장) 16. 인수 테스팅(2장) 17. 시스템의 설치(2장) 18. 프로젝트 관리 계획 테스팅 결과 보고서
In this chapter … 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
SE와 다른 분야와의 관계 소개
SWEBOK (1/2) 소개 SWEBOK: Software Engineering Body of Knowledge [IEEE, 2004]
SWEBOK (2/2) 소개
In this chapter … 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
Homework #1 소개