소프트웨어 구축 및 품질
소프트웨어 구축 및 품질은 작동하는 코드를 체계적으로 생성하는 것과 소프트웨어가 요구사항 및 품질 목표를 충족하는지 확인하고 보장하는 기술(테스트, 검증, 검토 및 측정)에 관한 것입니다.
Definition
소프트웨어 구축은 코딩, 검증, 단위 테스트 및 디버깅을 통해 작동하는 소프트웨어를 상세하게 생성하는 것이며, 소프트웨어 품질은 소프트웨어가 명시적 및 묵시적 요구사항을 충족하는 정도를 의미하며, 이는 검증, 확인 및 품질 관리 활동을 통해 보장됩니다.
Scope
이 영역은 코딩 표준, 방어적 프로그래밍, 단위 테스트를 포함한 소프트웨어 구축 관행; 소프트웨어 테스트 수준 및 기술; 검증 및 확인; 정적 및 동적 분석; 코드 검토 및 리팩토링; 소프트웨어 품질 속성 및 측정 지표; 그리고 정확성 증명을 위한 형식적 방법을 다룹니다. 이는 신뢰할 수 있는 소프트웨어를 생산하고 보장하는 활동들을 통합합니다.
Sub-topics
Core questions
- 정확하고, 가독성이 높으며, 유지보수가 가능한 코드를 생성하는 관행은 무엇입니까?
- 테스트, 검토 및 분석을 통해 결함은 어떻게 감지됩니까?
- 소프트웨어 품질은 어떻게 정의되고, 측정되며, 보장됩니까?
- 정확성은 테스트만으로는 불가능하고 형식적 증명을 통해서만 확립될 수 있는 경우는 언제입니까?
Key theories
- 테스트는 결함의 부재가 아닌 존재를 드러냅니다.
- 테스트는 결함이 존재함을 보여줄 수 있지만, 결함의 부재를 증명할 수는 없습니다. 따라서 효과적인 테스트는 철저한 실행보다는 체계적인 사례 선택을 통해 결함을 찾을 확률을 극대화하는 것을 목표로 합니다.
- 검증 및 확인
- 검증은 소프트웨어가 사양에 따라 올바르게 구축되었는지 확인하는 반면, 확인은 사용자 요구를 충족하는 올바른 소프트웨어가 구축되었는지 확인합니다. 이들은 수명 주기 전반에 걸쳐 검토, 분석 및 테스트를 포괄합니다.
- 품질은 내재되어 구축되는 것이지, 나중에 테스트로 확인되는 것이 아닙니다.
- 품질은 최종 단계의 검사보다는 구축 관행, 설계 및 프로세스 규율에서 비롯됩니다. 결함 예방 및 조기 감지는 후기 수정보다 훨씬 저렴합니다.
Clinical relevance
구축 및 품질 활동은 시스템의 신뢰성, 보안성 및 유지보수성을 결정하며 결함 비용의 대부분을 차지합니다. 조기적이고 체계적인 검증은 현장 오류 및 재작업을 줄여주며, 이는 신뢰할 수 있는 소프트웨어를 제공하는 데 핵심적입니다.
Evidence & guidelines
ISO/IEC 25010은 소프트웨어 제품 품질 모델을 정의하며, SWEBOK의 소프트웨어 구축, 테스트 및 품질 지식 영역은 합의된 참조 지침을 제공합니다.
History
체계적인 테스트는 1970년대 Myers에 의해 명확화되었고, 구조적 프로그래밍과 검증은 같은 시대에 Dijkstra와 Hoare에 의해, 구축 장인정신은 1990년대 McConnell에 의해 제시되었습니다. ISO/IEC 25010과 같은 품질 모델 및 표준은 품질 속성과 측정을 통합했습니다.
Debates
- 테스트 대 형식적 검증
- 정확성에 대한 신뢰가 광범위한 테스트에 기반해야 하는지 아니면 형식적 증명에 기반해야 하는지에 대한 논쟁이 있습니다. 테스트는 대규모 시스템에 적용 가능하지만 정확성을 보장할 수는 없으며, 형식적 방법은 더 높은 비용으로 강력한 보장을 제공하지만 중요한 구성 요소에만 사용됩니다.
Key figures
- Glenford Myers
- Steve McConnell
- C. A. R. Hoare
- Edsger Dijkstra
Related topics
Seminal works
- myers2011
- mcconnell2004
- swebok2014
Frequently asked questions
- 테스트가 프로그램이 정확하다는 것을 증명할 수 있습니까?
- 아니요. 테스트는 유한한 입력 집합을 실행하며 결함을 드러낼 수 있지만, 결함의 부재를 증명할 수는 없습니다. 모든 입력에 대한 정확성을 증명하려면 형식적 검증이 필요하며, 이는 시스템의 제한적이거나 중요한 부분에만 실현 가능합니다.
- 품질이 버그의 부재와 동일합니까?
- 아니요. 소프트웨어 품질은 다차원적이며, 기능적 정확성 외에도 신뢰성, 성능, 보안, 유용성 및 유지보수성과 같은 속성을 포함합니다. 버그가 거의 없는 프로그램이라도 유지보수가 어렵거나 보안에 취약하다면 품질이 낮을 수 있습니다.