소프트웨어의 개발, 운용, 유지보수 및 폐기에 대한 체계적인 공학적 접근 방법.
대두 배경: 소프트웨어 위기
소프트웨어의 대형화·복잡화로 인해 발생한 위기 현상:
- 정확하고 검증 가능한 SW 개발의 어려움
- 고객이 요구한 SW 비용 불만족
- SW 개발 일정 지연
- SW 유지보수의 어려움
- “THERE’S NO SILVER BULLET”
소프트웨어의 정의
코딩 이전/이후 모든 산출물:
- 위키피디아: Computer programs, libraries and related non-executable data, such as online documentation or digital media
- Roger S. Pressman: Instruction(computer programs), Data structures, Documents
- Watts Humphrey: A program and all the associated information and materials needed to support its installation, operation, repair and enhancement
프로세스 관점에서는 소스 코드와 관련된 모든 산출 문서들 (소스 코드, 요구사항 명세서, 아키텍처 설계서 등).
소프트웨어의 특징과 그에 따른 대응
| 특징 | 대응 |
|---|---|
| 구조가 눈에 보이지 않음 (비가시성, Invisibility) | 가시화 (문서화) |
| 비선형(Non Linearity)의 복잡한 구조 | 설계 복잡도 감소 (디자인 패턴) |
| Does not wear out but changes | 운영/유지 보수 |
| 사람 중심(Human Intensive) 작업 | 리뷰/테스팅 (V&V: Verification, Validation) |
이 특징으로 인한 개발의 어려움:
- 최종 산출물이 개발 과정에서 확인되지 않음
- 오류 발견 시기를 놓치거나 해결책을 못 찾는 경우 발생
- 프로젝트 지연 및 예상 범위 초과로 인한 실패 가능성 ↑
프로젝트 성공률 (2011~2015):
| 구분 | 2011 | 2012 | 2013 | 2014 | 2015 |
|---|---|---|---|---|---|
| 성공 | 29% | 27% | 31% | 28% | 29% |
| 도전 | 49% | 56% | 50% | 55% | 52% |
| 실패 | 22% | 17% | 19% | 17% | 19% |
소프트웨어 공학의 정의 (권위자별)
- IEEE: Application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of Software
- Friedrich L. Bauer: The establishment and use of sound engineering principles in order to obtain economically SW that is reliable and works efficiently on real machines
- Watts Humphrey: The disciplined application of engineering, scientific, and mathematical principles, methods and tools to the economical production of quality SW
소프트웨어 공학의 목표
- 재사용 및 생산성 향상
- 소프트웨어 품질 향상
- 개발/유지보수 비용 절감
- 일정(납기) 준수
관련 표준 분류
| 구분 | 생명 주기 | 프로세스 평가 |
|---|---|---|
| 전반적인 품질 | SWEBOK / CMMI (미국) | ISO/IEC/IEEE 12207 / ISO/IEC/IEEE 15504 |
| 자동차 (유럽) | Automotive SPICE | |
| 안전 | ISO 26262 / ISO 21448 | |
| 사이버 보안 | ISO/SAE 21434 |
SWEBOK V3.0 지식 영역
- Software Requirements, Software Design, Software Construction, Software Testing, Software Maintenance
- Software Configuration Management, Software Engineering Management, Software Engineering Process, Software Engineering Models and Methods, Software Quality
- Software Engineering Professional Practice, Software Engineering Economics, Computing Foundations, Mathematical Foundations, Engineering Foundations