1.5 좋은 소프트웨어의 기준
소프트웨어의 특성을 좌우하는 여러 품질 기준이 존재한다. 사용성(usability)이나 신뢰도(reliability)와 같이 사용자가 인지할 수 있는 것을 외부 품질이라고 한다. 내부 품질의 향상은 개발자가 외부 품질을 개선하는데 도움을 줄 수 있다. (ex: 잘 작성된 요구사항, 설계 문서)
소프트웨어의 신뢰도(reliability)
- 사용자가 소프트웨어를 신뢰하는 정도. 오랜 시간 작동되며, 알려진 치명적 오류가 없으며, 오류발생 후에 무난히 복구되며 강건하다는 의미를 포함
- 소프트웨어 고장 함수가 욕조 곡선과 유사한 형태를 가지는 경우가 있음
소프트웨어는 마모되지 않는데, 그 이유로
- 버그를 수정하거나 새로운 기능을 추가하면서 새롭게 생기는 오류 때문
- 예상하지 못했던 기반 하드웨어나 운영체제를 변경하는 경우가 생김
- 사용자가 SW에 익숙해지면서 적정 용량이나 성능을 초과하는 입력을 주어 SW가 스트레스를 받게 되고, 충분히 테스트되지 못한 기능들이 사용되어 오류 발생
소프트웨어의 정확성(corretness)
- 신뢰도와 아주 밀접한 관계. 차이점으로는 소프트웨어의 행위가 요구사항에 비추어 아주 작은 차이가 있는 경우에 이것은 결함으로 간주
- 지정된 시간 안에 컴퓨터 시스템에서 처리할 수 있는 작업량
소프트웨어의 사용성(usability)
- 본래의 설계 목적에 따라 효율성 있게 사용할 수 있는 정도
- prototyping 기술을 적용하여 개발되면 사용성을 높일 수 있다
소프트웨어의 상호운영성(interoperability)
- 소프트웨어 시스템이 다른 시스템과 공존하며 협력할 수 있는 능력을 의미한다.
소프트웨어의 유지보수성(maintainability)
- 소프트웨어는 유연하기 때문에 변경되기 쉽다.
- 유지보수 작업은 새로운 기능 추가, 기존 기능 개선, 환경의 변화에 따른 기존 기능의 수정, 그리고 존재하는 오류를 수정하는 경우가 있다.
소프트웨어의 이식성(portability)
- 다른 환경에서 쉽게 동작이 가능하다면 소프트웨어의 이식성이 좋다고 한다.
소프트웨어의 검사성(verifiability)
- 위에서 기술한 품질 요소들을 포함하여 소프트웨어의 속성들을 쉽게 검사할 수 있는 경우에 검사성이 좋다고 한다.
- 측정하는 손쉬운 방법 중 하나는 성능이나 정확성과 같은 품질 요소를 검사하기 위한 코드를 삽입하는 것이다.
소프트웨어의 추적성(traceability)
- 요구사항들 간 또는 요구사항, 시스템 설계, 소스 코드 간의 관계를 정의하고 기록하며 유지할 수 있는 방법이 있어야 추적성이 높다고 말할 수 있다.
다음과 같은 관계 정보가 유지되어야 한다.
- 요구사항으로부터 요구사항을 제안한 관련자를 파악
- 관련성이 있는 요구사항들을 파악
- 요구사항으로부터 관련 설계 문서를 파악
- 설계 문서로부터 관련 코드 조각을 파악
- 요구사항으로부터 테스트 계획서를 파악
- 테스트 계획서로부터 테스트 케이스를 파악