소프트웨어 공학은 단순 프로그래밍을 넘어 소프트웨어의 전 생명주기에 걸친 개발, 운용 및 유지보수 등을 체계적, 효율적으로 접근하는 학문분야다.
대충 프로젝트 관리, 테스팅, 품질 보증과 같은 내용이 포함되어 있다.
프트웨어의 규모와 복잡도가 너무 증가해 일일이 작성하고 테스트 하는것 만으로는 부족하기에 필요하다고 한다.
소프트웨어 공학을 적용하면 기간 내에 높은 품질의 소프트웨어를 개발하고, 프로젝트&유지보수 비용을 줄일 수 있다.
다양한 정의들이 있지만 미국 국방부(DoD)에 따르면 아래와 같다.
소프트웨어의 속성이 그것이 의도된 최종 사용을 수행하는 데
어느 정도로 기여하는지에 대한 정도
품질의 특징
프로그램이 기능의 명세에 따라 동작하면 '정확'합니다.
가정 :
1. 시스템의 명세가 사용 가능합니다.
2. 프로그램이 명세를 만족하는지 명확하게 판단할 수 있습니다.
신뢰성은 사용자가 그것에 의존할 수 있는지에 따릅니다. 이는 종속성과 같은 의미입니다.
제품의 실패에 대한 빈도와 중요성을 측정하는 것입니다.
실패: 허용되는 운영 조건 하에서 발생하는 불편한 효과나 동작을 의미합니다.
통계적인 행동으로 정의할 수 있습니다: MTTR(평균 수리 시간), MTTF(평균 고장 시간), MTBF(평균 고장 간격)
강건성은 요구 사항 명세에서 예상하지 못한 상황에서도 합리적으로 동작하면 튼튼하다고 할 수 있습니다.
이는 운영 조건의 범위, 유효한 입력으로 인한 불편한 결과의 가능성,
제품이 유효하지 않은 입력을 받았을 때의 효과의 수용성 등 여러 요소의 기능입니다.
성능은 효율성(공간, 시간)과 동일시됩니다.
시스템의 사용성에 영향을 미칩니다.
성능 평가
사용하기 쉬움
시스템을 하드웨어 환경에 쉽게 구성하고 적응시킬 수 있는 용이성
검증 가능한 속성이 안전하게 검증될 수 있다면, 그것은 검증 가능하다고 할 수 있습니다.
이는 형식 분석 방법이나 테스팅을 통해 수행될 수 있습니다.
유지 보수
기존 컴포넌트를 사용하여 새 제품을 구축합니다.
예시: 과학 라이브러리, 모티프, 유닉스 쉘 등
재사용 수준
다른 환경에서 실행할 수 있다면, 그것은 이식성이 있다고 말할 수 있습니다.
내부 제품 품질입니다.
시스템이 다른 시스템과 공존하고 협력하는 능력
오픈 시스템 개념
소프트웨어 생산 과정의 품질
프로세스: 과정의 효율성을 측정하기 위함
Difficult to measure: 단순한 척도 : LOC
툴은 생산성을 증가시킵니다.
공정 관련 요소
공정 관련
모든 단계와 현재 상태가 문서화되어 있으면 가시적이라고 할 수 있습니다.
이를 통해 각각의 영향을 파악하고 결정을 내리는 데 도움을 줍니다.
참고: [Software Engineering] 소프트웨어 공학이란?, 소프트웨어 공학의 필요성, 좋은 소프트웨어의 특성