본문 바로가기

유용한 정보들

[테스팅] 소프트웨어 테스팅의 7가지 기본 원칙

테스팅의 원칙


테스팅(Testing)은 소프트웨어의 규모가 점점 커지면서 최근 들어 그 필요성이 더욱 강조되고 있습니다. 


오늘은 테스팅의 기본적인 7가지 원칙에 대해서 포스팅 하도록 하겠습니다.


 원리 1 - 테스팅은 결함이 존재함을 밝히는 활동이다. 


 테스팅은 소프트웨어의 잠재적인 결함을 줄일 수는 있지만 결함이 전혀 발견되지 않는 경우라도 해당 소프트웨어에 결함이 없다고 증명할 수 없음.

● 테스팅은 결함이 존재함을 밝히는 활동이다.


 원리 2 - 완벽한 테스팅은 불가능하다. 


모든 가능성(입력과 사전 조건의 모든 조합)을 테스팅하는 것은 불가능

● 일반적으로 완벽한 테스팅이 불가능한 이유는 다음과 같다.

1. 무한 경로 - 프로그램에는 너무 많은 실행 결로가 있어 모두 테스트 할 수 없음.

2. 무한 입력값 - 가능한 입력 값의 조합이 너무 많아서 모두 테스트 할 수 없음.

3. 무한 타이밍 - User Interface가 복잡하고, GUI 이벤트 발생 순서의 모든 조합을 완벽하게 테스트할 수 없음.


 원리 3 - 테스팅은 개발 초기에 시작해야 한다. 


테스팅 활동은 소프트웨어 개발 주기에서 가능한 초기부터 시작해야 함.


 원리 4 - 결함 집중 


결함은 소수의 특정 모듈에 집중되어 발생하고 고장(Failure)을 초래하는 경향을 보임.

● 일반적으로 결함이 집중 될 수 있는 모듈은 다음의 특성을 가지고 있음.

1. 자체적으로 복잡한 구조를 가지고 있는 모듈

2. 시스템의 다른 부분 또는 다른 모듈과 복잡한 상호 작용을 하는 모듈(복잡한 인터페이스)

3. 개발 난이도가 높거나 최신 기술을 사용한 모듈

4. 기존에 개발된 것을 재 사용하지 않고 새롭게 개발한 모듈

5. 크기가 큰 모듈 / 경험이 미흡한 개발 팀에서 개발한 모듈


 원리 5 - 살충제 패러독스(Pesticide Paradox) 

동일한 테스트를 반복 수행하면 해당 테스트에 면역이 생겨 새로운 버그를 더 이상 찾지 못함 .

● 새로운 결함이나 미처 발견하지 못한 결함을 찾기 위해서는 테스트 케이스 업데이트가 중요함.


 원리 6 - 테스트는 정황(Context)에 의존적이다. 


테스트는 정황에 따라 다르게 진행해야 한다. 예를 들어 안전이 최우선인 소프트웨어는 Web 사이트를 검증할 때와는 다른 방식이 필요함.


 원리 7 - 오류-부재의 궤변(Absence of errors fallcy) 


개발한 제품이 사용자의 필요와 기대에 부응하지 못하고 쓸모가 없다면 결함을 찾는 활동은 의미가 없음.

● 사용자의 요구를 충족시키지 못하면 결함이 없어도 품질이 높다고 볼 수 없음.

● 개발한 제품은 요구 사항과 일치하고 사용에 적합해야 함.



마무리하면서 소프트웨어 테스트의 7가지 원칙의 내용을 바탕으로 성공적인 테스팅이란? 무엇인지 정리해 보았습니다.


"소프트웨어 테스팅은 결함이 존재함을 밝히는 것이며 사용자와 비지니스의 요구 사항에 따라 테스트의 대상 제품이 개발되었는지 확인하는 것이다. 
완벽한 테스팅은 불가능하기 때문에 리스크(Risk)를 기반으로 결함이 집중되어 있을 만한 곳을 예측하여 효과적인 테스팅이 될 수 있도록 테스트 기획이 되어야 하고 가능한 개발 초기부터 테스팅이 수행되어야 한다.
테스트 정황을 반영하기 위해 테스트 제품의 특성과 테스트 요구 사항 등을 고려하여 테스트를 설계하고 도출한 테스트 케이스는 지속적으로 업데이트 및 유지 보수 관리를 해야 한다. 
과거 설계한 테스트 케이스를 계속 재활용하기 보다는 새로운 테스트 케이스를 추가하여 지속적으로 결함을 발견할 수 있도록 하여야 한다."


오늘도 즐거운 하루 되세요.