1 소개 (Introduction to Software Engineering) 1.1 소프트웨어 (Software) - 소프트웨어 정의 : 프로그램 vs. 소프트웨어 (vs. 코드) - 소프트웨어의 중요성 : 1970년대 하드웨어(컴퓨터)를 팔면 끼워주는 부속물 : 2010년대 소프트웨어 중심 사회 (모바일 게임 광고 vs. 아파트 광고) - 소프트웨어의 특징 (No Silver Bullet by Frederick P. Brooks, Jr.) : Complex -> 동일한 모듈을 반복해서 규모를 크게 만들 수 없다. 비선형적으로 규모가 커진다. 이러한 복잡성이 만들기 어렵고, 비용이 많이 들고, 관리하기 어렵게 만든다. : Conformity -> 요구사항에 따라 수정해야 한다. 요구사항이 어떤 근본적인 이유라기 보다 사람이 기관이 각자의 필요에 따라 정한 것이다. 이 특징으로 인한 어려움은 소프트웨어만 재설계하는 것으로 한번에 모두 해결할 수 없다. : Changeability -> 소프트웨어는 끊임없이 변경할 것을 요구받는다. 그 이유는 일단 하드웨어는 변경하는데 비용이 더 많이든다는 생각이 있다. 또한 성공한 소프트웨어는 새로운 영역에 적용해보고 싶다는 사용자 요구사항이 생기기 마련이고 그러다보면 새로운 기능을 추가하거나 새로운 컴퓨팅 환경에서 동작하도록 변경해야한다. : Invisible -> 소프트웨어의 실체는 실행하면서 발생하는 동작이 결정한다. 그러한 실체를 몇 가지 공식이나 다이어그램으로 완벽하게 표현할 수 있다면 좋겠지만 아직 그러한 방법은 존재하지 않는다. 소프트웨어를 'visible'하게 만드는 방법이 없기 때문에 소프트웨어를 설계하는 과정이나 소프트웨어에 대한 커뮤니케이션이 어렵다. - 소프트웨어 유형 : Custom software (주문형 소프트웨어) 고객이 1인/1기관인 소프트웨어 : Package software (COTS: Commercial Off-the-shelf) 마크에서 물건을 고르는 것과 같이 구매하는 소프트웨어 범용 소프트웨어 : Embedded software 한가지 전용 목적으로 만드는 소프트웨어 (예: 출입카드 확인) 자원이 제한된(CPU 성능, 주 기억장치 용량) 임베디드 컴퓨터에서 동작하므로 자원 사용량을 고려해서 주의깊게 작성해야 함 : SaaS (Software as a Service) 클라우드 환경에 접속해서 사용하는 소프트웨어 (개인 컴퓨터에 설치하지 않아도 됨) 인터넷 속도가 빨라지고 서버 가상화 기술의 발전으로 원격에서 실행해도 개인 컴퓨터에서 실행하는 소프트웨어와 차이가 매우 줄어듬 : 기타 (교재 참고) : 표1.1 각 소프트웨어 유형에 따라 1) 사용되는 카피의 수 2) 요구되는 하드웨어 성능 3) 개발 인력 - 소프트웨어와 시스템 : 소프트웨어는 보통 독립적으로 존재하는 경우 보다 컴퓨터 등 여러 시스템과 관계를 맺고 있는 시스템의 구성 요소로 존재한다 1.2 소프트웨어 공학의 필요성 (Why Software Engineering?) - 소프트웨어를 활용한 비즈니스에서 흔히 발생하는 고 비용, 프로젝트 지연, 낮은 안전성, 유지보수 문제를 해결해야 한다. - SE의 필요성 : Software Crisis : 참고. 소프트웨어공학의 역사 (키워드) * NATO conference: Software engineering 용어 * Software crisis * Fred Brooks, The Mythical Man Month (OS/360 개발 경험) * Therac-25 사건 * No silver bullet to solve software crisis : Silver bullets - Tools, Discipline, Formal methods, Process, ... => a range of silve bullets * Lightweight methodologies : Agile, XP, Software product lines, Aspects(Generative programming, templates, ...) - 고 비용 (교재 P.28 참고) : LOC (Lines of code) : MM (Man-month) 소프트웨어와 하드웨어 비용을 계산해보기 - 프로젝트 지연 및 취소 : 소프트웨어 크기에 다라 지연 및 취소 비율이 급증 - 소프트웨어 결함으로 인한 손해 (Reliability) : 아리안 로켓 폭발 사례 * 동영상 https://www.youtube.com/watch?v=W3YJeoYgozw * 발표자료 https://www.slideshare.net/sommerville-videos/ariane-5-launcher-failure-30036896 1) 아리안 로켓 폭발의 원인은 SW 결함 overflow 예외 발생으로 로켓이 날라가는 중에 시스템을 Shutdown 시킴 2) 특히 SW validation failure 3) Arian4 SW를 재사용 4) Arian4와 달리 Arian5는 더 무거운 로켓을 선적할 수 있고 이 변화로 인한 overflow를 제대로 검증하지 못했음 (이와 관련한 요구사항이 없었음) 5) 비용문제로 재사용한 SW를 철저히 리뷰하거나 테스트하지 않음 참고: * http://discussworldthing.blogspot.kr/2012/01/software-bugs-causing-catastrophic.html * http://catless.ncl.ac.uk/Risks/ - 유지보수 : 소프트웨어 수명 전체를 고려할 때 유지보수 비용은 소프트웨어 개발 비용을 초과한다. 1.3 소프트웨어 공학이란? (What is Software Engineering) - SE 정의 : By IEEE Computer Society : Watts Humphrey - 소프트웨어공학에서 해결하려고 하는 주요 소프트웨어 문제 : 크기와 복잡도 : 품질과 생산성 : 일관성과 재현성 : 각종 변경 - 규모 (크기와 복잡도) : 화학 vs. 화공 : 대규모 프로젝트의 경우, 정형화된 개발 방법과 정형화된 프로젝트 관리 필요 : 소규모, 중규모, 대규모 - 품질과 생산성 : ISO 9126 또는 ISO/IEC25010 (SW 품질을 평가하는 국제 표준) SQuRE (Software product Quality Requirements and Evaluation) 8가지 SW 품질 속성 * Functionality : 필요한 기능을 제공하는지 * Reliability : 오랫동안 기능을 제대로 수행하는지 * Usability : 편리하게 사용할 수 있는지 * Efficiency : 효율적으로 실행하는지 * Maintainability : 나중에 추가 수정하기 쉬운지 * Portability : 다른 컴퓨팅 환경으로 쉽게 옮길 수 있는지 * Security : 권한을 부여한 범위 안에서만 사용하도록 제한하는지 * Compatibility : 호환성이 있는지 : LOC / MM - 일관성과 재현성 : 공장의 제품 생산 : ISO 9001 (품질경영시스템 인증) http://www.ksa.or.kr/iso.do : CMM - Capability Maturity Model (교재 P.659) 소프트웨어 개발 프로세스를 잘 지키는지 검사하는 기준 - 변화 : 각종 변화에 대응하는 방법 필요 1.4 소프트웨어공학의 접근 방법 - 앞서 나열한 주요 소프트웨어 문제에 대해 소프트웨어공학에서 어떻게 해결하려는가 - 소프트웨어 개발의 요소 : 사람, 기술, 절차 : SE는 특히 절차를 강조 - 소프트웨어 개발 프로세스 : (계획,) 요구분석, 설계, 코딩, 테스팅(, 유지보수) : 표1.3 : 2장의 주제 - 품질 보증(SQA) : Verification, Validation (그림 1.13) - 프로젝트 관리 : 프로젝트 관리에서 하는 일 1) 각 단계의 자원 할당 2) 작업 일정 3) 단계 분할 4) 단계 완료 확인 5) 위험 요소 분석 납기를 맞출 수 있는가 비용 초과 예상 품질 목표 달성 여부 등등 : 프로젝트 관리를 위한 측정 기준(Metric) 필요 1) 제품 측정 기준 (Product Metrics) 2) 절차 측정 기준 (Process Metrics) : 3장의 주제 1.5 소프트웨어공학 지식 체계 - SWEBOK (Software Engineering Body of Knowledge) : 소프트웨어 공학이 다루는 분야 (교재 P.47, 교재 Chapter와 연관) [과제] 1) 소프트웨어공학 역사를 간략히 요약하시오. 참고: 위키피디아 https://en.wikipedia.org/wiki/History_of_software_engineering 2) Arian 5 로켓 폭발에 관한 Ian Sommerville 교수의 동영상과 슬라이드를 살펴보고 그 내용을 요약하시오. 3) Frederick P. Brooks, Jr.의 No silver bullet 논문 중 P.3 ~ P.5에서 소프트웨어 특징 (Complexity, Conformity, Changeability, Invisibility) 설명을 간단히 요약 번역하시오.