도서 및 강의/소프트웨어 테스트 전문가(CSTS) 가이드

1장 테스트 개요 - 1.2 오류, 결함, 장애

간쥬 2025. 11. 21. 20:27

1.2 오류, 결함, 장애

  1. 개념
  2. 결함 유형
  3. 개발 단계별 결함
  4. 테스팅, 디버깅, 재테스팅

1.2.1 개념

소프트웨어를 개발할 때 기대, 약속된 소프트웨어의 동작에 대한 기준을 요구사항이라고 함

ex) USB가 삽입되었을 때 오디오가 재생되어야 한다 -> 라는 동작을 요구함

 

장애(Failure)

프로그램의 실행 결과와 요구사항에 명시된 결과에 차이가 있음을 의미

ex) USB가 삽입되었는데 오디오가 재생되지 않음

 

결함(Defect)

소프트웨어 내에 장애를 유발할 수 있는 문제를 말함

 

오류(Error)

결함이 생기게 한 개발자의 행위

 

1.2.2 결함 유형

 

누락(Omission)

요구 명세에 명세된 요구사항이 시스템의 구현에 반영되지 않은 결함

ex) 재생 버튼 터치 시 오디오 재생 -> 버튼 터치해도 오디오 재생되지 않음

기능적인 것뿐만 아니라 성능, 보안, 안전, 신뢰도 등 품질 요소에 관한 누락 포함

 

부정확한(Incorrect) 구현

요구 명세에 명시된 요구사항이 소프트웨어에 부정확하게 반영된 결함

ex) 재생 버튼 터치 시 오디오 재생 -> 버튼 터치했을 때 비디오가 재생됨

기능적인 것뿐만 아니라 성능, 보안, 안전, 신뢰도 등 품질 요소에 관한 누락 포함

 

비관련(Extraneous) 결함

요구 명세와 관련되지 않은 구현

당장 직접적인 장애를 유발하지 않을 수도 있음

But 시스템의 기능 및 품질에 기여하지 않는 무의미한 코드가 존재한다면 불필요한 관리를 유발해 결국에는 다른 결함을 초래할 수 있음

ex) 재생 버튼 터치 시 오디오 재생 -> 현재 위치 파악하는 코드가 삽입되어 있음 -> 장애를 발생하진 않지만 불필요한 코드

 

1.2.3 개발 단계별 결함

결함은 소스 코드를 포함해 모든 개발 산출물에서 존재할 수 있음

개발자는 개발하는 각 단계에서 오류를 범할 수 있으므로 각 단계의 산출물에는 결함 존재 가능

ex) 요구사항에는 +1 -> 설계서에서 +2로 오표기 -> 소스 코드 +2로 개발되었을 경우 설계서 작성 단계에서 결함 발생

 

결함이 발생한 단계에서 제거하지 않고 이후 개발 단계에 전달되면 이 결함을 제거하기 위하여 더 많은 비용이 소요됨

ex) 요구분석 단계 결함 제거 0.1-0.2 일 때, 코딩에서 결함 제거할 경우 1 소요

 

So 결함 해결에 소요되는 비용을 최소화하기 위해 각 개발 단계의 결과물을 테스트하여 최대한 빨리 검출하고 제거할 필요 있음

 

1.2.4 테스트, 디버깅, 재테스팅

테스팅

요구사항과 소프트웨어의 실제 동작과의 차이를 확인

동적 테스트는 결함의 존재 여부를 알 수 없는 상황에서 결함의 발견을 목적으로 프로그램을 실행

예상 결과와 다른 결과를 보일 때, 결함이 존재한다고 추측

테스트 환경과 테스트 케이스

어떤 환경에서 어떤 입력값을 사용했을 때 예상되는 결과와 실제 출력 결과 등만을 기록하고 어떤 모듈에서 발생했고 어떻게 수정해야 되는지는 관여하지 않음

 

디버깅

테스팅을 통하여 결함의 존재를 확인한 후에 수행되며 결함의 위치를 파악하고 제거

 

재태스팅(Re-testing)

디버깅에서 수정하고 난 후에 실제로 결함이 제거되었는지 확인

초기에 결함을 검출한 테스트 케이스를 이용하여 테스팅을 다시 수행