1.4 소프트웨어 공학 품질
* 소프트웨어 공학의 목표?
* 질 좋은 소프트웨어?
- (예) 신발의 품질 요소(발이 편한지, 내구성이 있는지, 용도에 적합한지, 디자인이 마음에 드는지)
* 소프트웨어 품질을 정의하기 어려운 이유?
- 매우 많은 품질 요소들이 소프트웨어에 내포
- 관련자에 따라 중요하게 생각하는 품질 요소가 다름
1.4.1 소프트웨어 품질 관점
* 고객
- SW 구매, 주문 주체
- 경제적 관점에서 평가
* 사용자
- 신뢰도 및 효율성
- 배우고, 사용하기 쉽게
* 개발자
- 오류가 적은 SW
- 문서화가 잘된 SW
* 개발관리자
- 매출이 증가하는 SW
- 고개 지출 절약되는 SW
* 소프트웨어 품질에 대한 관점
- 발주자(최소 비용, 생산성, 융통성)
- 사용자(효율성, 기능의 정확성, 이해 용이성, 사용 용이성, 일관된 통합)
- 유지 보수자(신뢰성, 이식성, 재사용성, 유지 보수성, 상호 운용성)
1.4.2 소프트웨어 품질 특성
- 사용 용이성(usability), 효율성(efficiency), 신뢰성(reliability), 재사용성(reusability), 유지 보수성(maintainability)
* 사용 용이성(usability)
- 사용자가 소프트웨어를 사용하기 쉬운 성질
- 초보자가 쉽게 배울 수 있는 특성
- 전문가가 효율적으로 사용할 수 있는 특성
- 오류를 쉽게 다룰 수 있는 특성
* 효율성(efficiency)
- 자원 사용이 적은 것
- CPU시간, 메모리
- 디스크 용량, 네트워크 대역
* 신뢰성(reliability)
- 결함이 적은 SW
- 구현과 변경이 쉬운 설계
- 고장 시 쉽게 복구 가능한 SW
* 유지 보수성
- 소프트웨어를 쉽게 변경할 수 있는 성질
* 재사용성
- SW 부품을 조금만 변경하여 다른 시스템에서 사용
1.4.3 SW 품질 요소는 trade-off 관계
* 효율성 <-> 이해 용이성
* 신뢰성 <-> 효율성
* 사용용이성 <-> 효율성
1.4.4 좋은 엔지니어링 작업이란?
- 품질 목표 설정
- 시스템 디자인
- 특정 디자인 요소의 최적화
1.4.5 외부 품질 요소
* 정확성(Correctness)
- 기능적으로 맞게 동작, 표준에 적합
- 요구 분석서의 기능과 일치하는지 점검
* 신뢰성(Reliability)
- 소프트웨어가 주어진 기간동안 제대로 작동할 확률
- 오류에 비례
- 정확성을 위한 필요조건
* 강인성(Robustness)
- 요구 명세에 표시하지 않은 상황(오류 입력)에서도 제대로 작동하는 성질
* 성능(Performance)
- 수행속도
- 알고리즘의 시간 복잡도
- 시뮬레이션, 스트레스 테스트
* 사용 용이성(Usability)
- 시스템을 친근하게 느낄 수 있는 성질
- 사용 대상에 따라 달라질 수 있음
- 사용자 인터페이스, Human factor
* 유지 보수성(Maintainability)
- 보수성 : 정해진 기간에 SW 결함을 해결할 수 있는 성질
- 진화성 : 잠재적 발전 가능성
* 재사용성(Reusability)
- 소프트웨어 부품(라이브러리, 클래스 등)의 성질
- 확장 가능성 : openness
- 적응성 : adaptability
- 이용 용이성 : closeness
1.4.6 내부 품질 요소
- 원시코드에 있는 주석의 분량
- 종복 구조의 깊이로 측정되는 프로그램의 복잡성


