소프트웨어공학 (Software Engineering)

Testing, Debugging

깡또아빠 2022. 5. 4. 18:31

프로그램에서 결함을 발견하는 것이 테스트를 수행하는 목적입니다. 즉 결함이 없음을 보이려는 것이 아닙니다. 

"프로그램 테스트는 결함이 있음을 보여줄 뿐, 결함이 없음을 증명할 수는 없다." [Dahi Djjkstra Hoare]

 

현실에서는 완전한/완벽한 테스트를 수행하는 것이 불가능합니다. 

테스트를 수행하는 인원, 시간의 제약도 있지만 테스트 조건과 입력값 그리고 순서에 따라 테스트 케이스가 기하학적으로 늘어날 수 있기 때문입니다. 

 

그렇기 때문에 효율적인 테스트 케이스를 만들어서 수행하는 것을 고려해야 합니다. 

 

테스트를 수행하고 나온 결함은 디버깅을 수행하여 해결합니다.

그리고 재테스트(Re-test)를 통해서 결함이 해결되었음을 확인할 수 있습니다. 

 

Difference between Testing and Debugging

 

출처: https://twitter.com/Impact_QA/status/1269868514766057472/photo/1

 

재테스트(Re-test)는 결함이 발생한 항목만 할 수도 있고, 반대로 전체 항목을 테스트를 범위(회귀테스트, Regression test)로 할 수도 있습니다. 

 

참고로 회귀테스트 (Regression test)는

"정상 동작하던 기능이 SW 수정 후 문제가 발생하는 회귀 결함의 유무를 확인하기 위해 이전 테스트 케이스를 다시 실행하며 확인하는 테스트 입니다."

 

가장 좋은 것은 전체 항목을 테스트 하는 것이 좋겠지만, 앞서 말씀 드린 것처럼 현실에서는 한계적인 상황이 존재합니다.

즉 전략적으로 선택해서 수행하는 것을 고려해야 합니다.

 

감사합니다.