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