소프트웨어 공학 (Software Engineer- ing)
소개
문양세
강원대학교 IT 대학 컴퓨터과학전공
Software Engineering by Yang-Sae Moon
Page 2
소프트웨어 공학을 배우기에 앞서서 ,
소프트웨어 및 소프트웨어 시스템에 대해서 정의해보고 ,
소프트웨어 위기와 이에 따른 소프트웨어 공학의 필요성을 생각해 본다 .
또한 ,
좋은 소프트웨어란 무엇인지 정의해보고 ,
소프트웨어 공학에서 사용하는 주요 모형들을 살펴본 후 ,
소프트웨어 개발에 영향을 미치는 요소들을 생각해 본다 .
We will cover …
소프트웨어
소프트웨어 공학의 필요성
소프트웨어 공학이란 ?
소프트웨어 공학의 접근 방법
소프트웨어 공학 지식 체계
In this chapter …
소개소프트웨어와 우리 생활
소개
의존성 (dependability)
Software Engineering by Yang-Sae Moon
Page 4
In this chapter …
1.1 소프트웨어
1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?
1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계
소개
실생활과 소프트웨어 ( 컴퓨터 )
리니지 ? 스타크 ? LOL, 배틀그라운드 ? 클래시오브클랜 ? Oh, NO!
일상사에서… 공과금 고지서 , 항공기 예약 / 발권 , 병원 기록 , 초본 / 등본 , 스마트폰 ,
…
학교로 보면… 수강 신청 , 성적 입력 및 열람 , 학사 관리 , …
소프트웨어의 중요성 (1/2)
소개
Software Engineering by Yang-Sae Moon
Page 6
정보 혁명의 토대는 컴퓨터이며 , 그 잠재력은 ? 물론 , 소프트웨어이 다 .
소프트웨어는 과거 “편리” 추구에서 현재는 “생존”에 필수적 요소가 되어 가고 있다 .
정치 , 경제 , 사회 , 문화 , 교육 , 국방 , 예술 , 의료 , 오락 , …
경쟁에서의 승리 제품의 적기 공급 제품 ? 소프트웨어 자체 혹은 내재가 기본…
소프트웨어의 결함 생명과 재산에 치명적 결과
우주왕복선 폭발
지진해일 ( 쓰나미 ) 예보 , …
소프트웨어의 중요성 (2/2)
소개
소프트웨어 정의
협의 : 프로그램 자체
광의 : 프로그램 + 프로그램의 개발 , 운용 , 보수에 필요한 정보 일체 ( 소프트웨어 생산 결과물 일체 )
소프트웨어 생산
소프트웨어는 프로그램의 동적인 실체
프로그램은 형식 언어로 표현된 지적 노동의 결과물
제조업 vs. 서비스업 ( 소프트웨어는 제작이 아니라 창조적 노력이 포함된 개발 )
닳아 없어지는 것이 아니라 소용없어 못쓰게 됨
논리적인 요소로 구성 ( 유지보수가 어려움 )
소프트웨어의 정의
소개
Software Engineering by Yang-Sae Moon
Page 8
비가시성 (Invisibility) 테스트 가능 (Testability)
복잡성 (Complexity) 특히 제 3 자가 보았을 경우
변형성 (Conformity)/ 변경성 (Changeability)
장수 (Longevity) 죽지 않는다 . 단지 사라질 뿐이다 .
복제 가능 (Duplicability) 생명공학의 모태 ?
응용에 의존 (Application dependability)
일반적으로 , 몇 개 핵심 부품을 만들어 조립해 쓸 수가 없다 .
소프트웨어의 특성
소개
소프트웨어의 유형
소개
Software Engineering by Yang-Sae Moon
Page 10
유기적으로 상호 작용하는 객체들의 모임
S/W 는 독립적으로 존재하는 것이 아니라 컴퓨터를 기반으로 여러 시스템이 유기적인 관 계를 맺고 있다 .
은행의 업무 전산화 예제 : 현금 자동 인출기 , 중앙 컴퓨터 , 계좌 DB, 은행 업무 처리 절차 , 입출금 전표 , 은행원 , …
특징
시너지 효과 : 독립적인 의미를 갖지 않고 , 통합되었을 때 의미를 가짐
역동적으로 발전 , 변경
상충되는 요구와 이해 관계의 절충 ( 최적의 모범 답안이 아닌 절충안에 해당 ) 교통체계
소프트웨어 시스템
소개
기능적 분류
응용 소프트웨어 (Application Software): 증권 처리 , 학사 관리 , 워드 프로세서 , …
시스템 소프트웨어 (System Software): 운영체제 , DBMS, Compiler, …
개발 과정에 따른 분류
Prototype
Product: 상품화 이전이나 완성된 소프트웨어
Package: 시험을 거쳐서 상품화된 소프트웨어
( 주문형 소프트웨어 : 고객의 목적에 맞도록 패키지된 소프트웨어 )
하드웨어 환경에 따른 분류
Mainframe
Parallel Processing or Distributed Processing
PC & Workstation, Fault tolerant system
Real time system, In-memory system, mobile system
소프트웨어의 분류 (1/2)
소개
Software Engineering by Yang-Sae Moon
Page 12
적용 분야에 따른 분류
통신용 , 프로그래밍 언어 , 사용자 인터페이스 , 데이터베이스 , 분산처리 , …
문서 작성 , 거래 처리 , 개발 도구 , 멀티미디어 , …
전자 정부 , 전자 상거래 , 가상 도서관 , …
소프트웨어의 분류 (2/2)
소개
서브 시스템 : 밀접한 연관이 있는 여러 서브시스템으로 구성
기능적 분할 : 규모가 작은 부속 시스템 ( 서브 시스템 ) 들로 나눌 수 있음
시스템 경계 : 시스템과 주변 환경을 구분하는 경계 , 입력과 출력이 만나는 곳 자동화 경계 : 자동화된 부분과 수동작업 부분을 나누는 경계
시스템의 네 가지 중요 성질
소개
Software Engineering by Yang-Sae Moon
Page 14
In this chapter …
1.1 소프트웨어
1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?
1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계
소개
제품으로 만든 소프트웨어
견고한 (industrial strength) 소프트웨어
학생이나 아마추어가 만든 소프트웨어 수준이 아님
이식의 용이함 , 사용의 편리함 등 품질 요소가 고려되어야 함
견고하지 않으면 , 사용자 불편을 넘어서 재산과 인명에 피해를 줄 수 있음
소프트웨어 ( 개발의 ) 문제점
(1) 고비용
(2) 지연과 낮은 신뢰도 (3) 유지보수와 재작업
소개
Software Engineering by Yang-Sae Moon
Page 16
(1) 고비용
LOC(Lines of Code): 소프트웨어 규모를 측정하는데 가장 널리 사용됨 MM(Man-Month): 소프트웨어 개발에 드는 인적 비용
소프트웨어 생산성 : MM 당 생산하는 프로그램의 LOC
경험적 사례 : 5 만 라인은 4 천만 - 1 억 2 천만원 정도의 비용이 듦 ( 인건비 )
소프트웨어 위기
소개
(2) 지연과 낮은 신뢰도
계획에서 벗어난 컴퓨터 관련 개발 프로젝트
600 여 회사를 조사하였더니 35% 이상
예상대로 작동하지 않는 사례
방위산업 보고 : 70% 이상이 소프트웨어 오류에서 기인
아폴로 로켓의 초기 실패도 소프트웨어에서 기인
자동차 급발진 사고도 소프트웨어 문제일 가능성이 높음
다른 요소 ( 하드웨어 ) 와 다름
전기 , 기계 시스템 : 노후화에 의한 물리적 특성에 의해 오류가 발생함
소프트웨어 : 노후화에 의한 것이 아니며 , 주로 설계 , 개발 과정에 유입된 오류에 의한 것
챌린저호 사고 : 소프트웨어 결함에서 기인
소개
Software Engineering by Yang-Sae Moon
Page 18
(3) 유지보수와 재작업
소프트웨어의 유지보수가 필요한 이유
여느 제품처럼 부품이 마모되거나 교체할 필요가 있어서 유지보수 하는 것이 아님
시스템에 남아 있는 오류가 있기 때문에 유지보수가 필요함
많은 오류가 시스템 가동된 후에 , 혹은 오랜 사용 후에 발견됨
( 오류가 아니더라도 ) 소프트웨어는 자주 변경됨
소프트웨어는 자주 업그레이드 됨 ( 기능 및 서비스 추가 )
하드웨어 등의 동작 환경이 변할 경우도 변경이 필요함
코드에 ( 사용자 및 개발자의 ) 의도가 잘 드러나지 않음
시간이 지날 수록 의도가 숨겨지며 , 여러 사람이 관련된 경우 특히 그러함
소개
소프트웨어 개발의 또 다른 문제점
개발 예산이 초과되고 , 일정이 지연되는 경우가 많다 .
개발 일정과 비용 예측이 부정확하다 .
과거 프로젝트에 대한 경험이 잘 축적되지 않을 뿐 아니라 , 과거 데이터가 현재에 잘 적용되지 않는 경우가 많다 .
프로그래머 개인 역량에 따라 소프트웨어 개발 성패가 좌우된다 .
프로그래머 개인의 능력과 경험이 중요하여 , 작업의 정량적인 분석이 어렵다 .
잘 키운 슈퍼 프로그래머 하나가 열 … 안 부럽다 .
소프트웨어 품질을 평가하기가 어렵다 .
체계적인 시험이 없으면 , 운영 중에 많은 오류가 발생한다 .
다른 공산품과 같은 불량품 관리 , 품질 보증에 대한 확실한 정량적 개념이 없다 .
다른 공산품의 경우 , “ 불량률 0 에 도전 ,” “ 무재해 100 만시간 달성 목표”
소개
Software Engineering by Yang-Sae Moon
Page 20
In this chapter …
1.1 소프트웨어
1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?
1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계
소개
소프트웨어 공학
소프트웨어 공학의 정의
질 좋은 소프트웨어를 경제적으로 생산하기 위하여 공학 , 과학 및 수학적 원리와 방법을 적용하는 것 - Watts Humphrey, SEI
소프트웨어의 개발 , 운용 , 유지보수 및 소멸에 대한 체계적인 접근 방법 - IEEE Computer Society
품질 , 효율 , 비용에 관한 공학적인 접근 원리 - F. Brooks
소프트웨어 공학의 목표
품질 좋은 소프트웨어를
최소의 비용으로
계획된 일정에 맞추어 개발한다 .
품질 (Quality), 생산성 (Productivity)
소개
Software Engineering by Yang-Sae Moon
Page 22
다루는 문제
사용자의 요구를 만족시키기 위하여 , 소프트웨어를 체계적으로 개발하는 것
소프트웨어 공학에서 다루는 주요 요소
(1) 규모 문제 (2) 품질과 생산성 (3) 일관성과 재현성 (4) 변경
소개
(1) 규모 문제
수십 만 , 수백 만 줄의 프로그램은 , 수백 줄의 프로그램을 개발하는 데 사용하는 방법과는 다른 방법을 적용해야 함
엔지니어링 식 접근 방법 – 방법 , 절차 , 도구 사용
소개
Software Engineering by Yang-Sae Moon
Page 24
(2) 품질과 생산성 (1/2)
엔지니어링 작업에서는 비용 , 일정 , 품질과 같은 변수가 중요 비용 : Man-Month 로 측정
( 인건비와 직결 )
일정 : 짧은 time-to-market ( 기술의 급격한 발전에 따라 갈수록 짧아 짐 )
품질
소개
(2) 품질과 생산성 (2/2)
소개
품질을 나타내는 속성
기능성 (functionality):
소프트웨어가 사용될 때 원래 정한 또는 내재된 요구를 만족하는 기능을 제공하는 능력
신뢰성 (reliability):
소프트웨어가 정해진 수준의 성능을 유지할 수 있는 능력
사용용이성 (usability):
쉽게 이해되고 배울 수 있고 사용될 수 있는 능력
효율성 (efficiency):
사용되는 자원의 양에 따라 적절한 성능을 제공할 수 있는 능력
유지보수성 (maintainability):
정정 , 개선 , 적응시킬 목적으로 수정될 수 있는 능력
이식성 (portability):
별도의 작동이나 수단 없이 다양한 환경에서 적응될 수 있는 능력
Software Engineering by Yang-Sae Moon
Page 26
(3) 일관성과 재현성
일관성
프로젝트의 결과를 어느 정도 정확하게 예측가능
더 높은 품질의 제품을 생산 ( 기관 / 회사는 일관성 있는 품질 수준을 유지해야 )
프로세스의 표준화가 필요
ISO 9001
CMM(Capability Maturity Model)
재현성
개발하는 시스템 마다 높은 품질과 생산성을 갖도록 만드는 것
개발 능력 , 결과의 재현성 일관성과 유사한 개념
소개
(4) 변경
소프트웨어는 계속 진화하고 변경됨
비즈니스 환경 및 소프트웨어 기술도 빠르게 발전
변경을 조절하고 수용하는 것이 또 하나의 과제
소개
Software Engineering by Yang-Sae Moon
Page 28
In this chapter …
1.1 소프트웨어
1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?
1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계
소개
소프트웨어 공학의 접근 방법 (1/2)
프로젝트를 수행하는 동안 얻은 품질과 생산성은 여러 가지 요인에 의해 좌우됨
품질을 좌우하는 세 가지 :
인력 , 프로세스 , 기술 프로젝트 삼각 균형 (triangle seesaw)
높은 품질과 생산성은 좋은 기술 , 좋은 프로세스 ( 혹은 방법 ), 잘 훈련 된 인력을 사용하여 얻을 수 있음
소개
Software Engineering by Yang-Sae Moon
Page 30
소프트웨어 공학의 접근 방법 (2/2)
소프트웨어 공학의 기본 접근법
소프트웨어를 개발하는 프로세스를 개발된 제품 , 즉 소프트웨어와 분리함
적절한 “소프트웨어 프로세스”의 설계와 관리는 소프트웨어 공학의 중요 연구 목표임
소프트웨어 공학은 소프트웨어 제작 과정에 집중
알고리즘 , 운영체제 , 데이터베이스 등은 소프트웨어 제품 자체에 초점
소프트웨어 엔지니어링 작업의 종류
소프트웨어 개발 프로세스 – 시스템에 대한 비전과 개념을 목표로 하는 컴퓨터 환경에 실 행되는 소프트웨어로 바꾸는 작업
품질 보증 – SQA(Software Quality Assurance) 개발작업이 적절히 수행되었는지 확 인
프로젝트 관리 – 개발과 품질보증 작업을 관리하고 감독
소개
단계적 개발 프로세스 (1/3)
소개
단계적 개발 프로세스를 따르는 이유
소프트웨어의 문제를 나눠 여러 개발 단계에서 다른 관점을 다루기 때문
개발하는 동안 정해진 시점에 품질과 진행을 체크할 수 있음
Software Engineering by Yang-Sae Moon
Page 32
단계적 개발 프로세스 (2/3)
소개
요구분석 : 소프트웨어 시스템이 풀어야 할 문제를 이해하기 위한 작업
시스템이 목표를 어떻게 성취 ? Vs 시스템으로부터 무엇이 필요한가 ?
문제 분석 : 문제와 그 배경을 잘 이해하고 개발할 시스템의 요구 찾기
요구 정리 : 요구명세서 (requirement specification)
시스템의 기능 이외에도 설계에 영향을 주는 모든 요인을 문서에 기술
설계 : 요구문서에 기술된 문제의 솔루션을 계획
요구를 어떻게 만족시킬 것인지 추구
아키텍처 설계 : 시스템을 여러 컴포넌트의 집합체로 보고 각 컴포넌트들이 요청한 결과 를 위하여 어떻게 상호작용 하는지에 초점
상세설계 : 각 모듈의 내부 논리를 작성
단계적 개발 프로세스 (3/3)
소개
코딩
시스템 설계를 프로그래밍 언어로 변환
코딩 작업 중에는 읽기 쉽고 이해하기 쉬운 프로그램이 되어야함
단순함과 명확성을 추구
테스팅 : 소프트웨어의 결함을 찾아냄
소프트웨어의 문제를 나눠 여러 개발 단계에서 다른 관점을 다루기 때문
소프트웨어 개발 단계에서 사용되는 중요한 품질 제어 수단
프로그램에 포함된 요구 , 설계 , 코딩 오류를 밝힘
단위 테스팅 (unit testing): 모듈이나 컴포넌트를 개별적으로 시험
통합 테스팅 (integration testing): 모듈 사이의 연결을 시험
인수 테스팅 (acceptance testing): 시스템이 잘 실행되는지 고객에게 데모
Software Engineering by Yang-Sae Moon
Page 34
일반적인 개발 단계
소개
단계 초점 주요작업과 기술 결과물
분석 시스템을 위하여 무엇을 만들 것인가 ?
1. 분석 전략 수립 (3 장 ) 2. 요구 결정 (3 장 ) 3. 사용 사례 분석 (4 장 ) 4. 구조적 모델링 (6 장 ) 5. 동적 모델링 (6 장 )
요구 명세서
설계 시스템을 어떻게 구축할 것인가 ?
6. 설계 전략 수립 (7 장 ) 7. 아키텍처 설계 (5 장 ) 8. 인터페이스 설계 (7 장 ) 9. 프로그램 설계
10. 데이터베이스 , 파일 설계 (7 장 )
설계 명세서
구현 시스템의 코딩과 단위 시험
11. 프로그래밍 (8 장 ) 12. 단위 테스팅 (9 장 )
13. 시스템 안정화 및 유지보수 (10 장 )
새 시스템 , 유지보수 계 획
테스팅 시스템이 요구에 맞게 실행되나 ?
14. 통합 테스팅 (9 장 ) 15. 시스템 테스팅 (9 장 ) 16. 인수 테스팅 (9 장 ) 17. 시스템의 설치 (9 장 ) 18. 프로젝트 관리 계획
테스팅 결과 보고서
품질 보증
소개
품질 보증 : 개발되고 있는 소프트웨어가 요구와 품질 수준을 만족시킬 것이라는 것을 보장하는 작업
검토 (verification)
개발작업이 프로젝트를 위해 선택된 프로세스와 방법에 맞게 수행되었는지 체크
요구된 소프트웨어 결과물이 품질 수준에 맞게 생산되었는지 검사
확인 (validation) : 개발 프로세스에 의해 생성된 결과물의 정확성을 체 크
정적 확인 (static validation): 소프트웨어를 실행시키지 않고 결과물의 정확성을 체크
동적 확인 (dynamic validation) : 소프트웨어를 실행시켜 잘 작동하는지 확인
테스팅
동적 확인 작업 , 테스트 결과가 예상되는 결과와 일치하는지 체크
Software Engineering by Yang-Sae Moon
Page 36
프로젝트 관리
소개
프로세스와 관련된 이슈를 적절히 관리
진행 과정에 자원을 어떤 작업에 할당할 것인지 기술
소프트웨어 계획은 프로젝트의 개발 프로세스를 모니터링하고 제어하는데 사용되는 기준이 됨
프로세스 관리
객관적인 데이터가 필요 소프트웨어 메트릭이 사용
프로덕트 메트릭 : 개발한 프로덕트 , 소프트웨어 자체의 특성을 계량화
프로세스 메트릭 : 소프트웨어 개발에 사용된 프로세스의 생산성을 계량화
In this chapter …
1.1 소프트웨어
1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?
1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계
소개
Software Engineering by Yang-Sae Moon
Page 38
SE 와 다른 분야와의 관계
소개
SWEBOK (1/2)
소개
SWEBOK: Software Engineering Body of Knowledge [IEEE, 2004]
Software Engineering by Yang-Sae Moon
Page 40
SWEBOK (2/2)
소개
In this chapter …
1.1 소프트웨어
1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?
1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계
소개
Software Engineering by Yang-Sae Moon
Page 42
Homework #1
소개