테스팅의 7가지 원리

테스팅에는 주의해야 하거나 반드시 짚고 넘어가야 할 점이 있습니다.

따라서 많은 사람들이 가장 중요한 7가지를 정했습니다.(누가 정했는지는 모름)

 

1. 테스팅은 결함이 존재함을 밝히는 행동이지, 결함이 없음을 밝히는 활동이 아니다.

테스팅은 '결함을 찾기 위한 활동'입니다. 

결함을 발견하여 최종적으로 테스팅하는 소프트웨어, 시스템의 완성도를 높이기 위한 활동인 것입니다.

하지만 어디까지나 결함을 밝히는 것일 뿐 "이 소프트웨어는 결함이 없이 완벽합니다!"를 증명하기 위한 활동이 아닙니다. 

소프트웨어는 내,외부의 다양한 환경 조건으로 인해 예상하지 못할 결함이 발견될 수 있기에 결함이 없다고 보증할 수 없습니다.

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

대상의 모든 것을 테스팅하는 것은 정말 어렵습니다.

만약 가능하다고 해도 진행하는 데 시간과 비용이 너무 많이 필요합니다. 

기업 입장에서 이런 방식은 아주 효율적이지 못합니다.

소프트웨어의 모든 입력과 사전 조건의 모든 조합을 테스팅하겠다는 말인데...

아주 간단한 소프트웨어를 제외하고는 불가능하다고 보는 것이 맞습니다.

따라서 완전무결한 테스팅보다는 리스크 분석과 이에 따른 우선순위를 토대로 테스트를 진행하는 것이 훨씬 효율적이며 테스트 효과도 좋게 나타납니다.

3. 조기 테스팅으로 시간과 비용을 절약할 수 있다.

초기에 결함을 찾기 위해서는 정적, 동적 테스트 활동 모두 SDLC중 가능한 한 빨리 시작해야 합니다.

초기부터 시작하는 테스팅을 Shift Left라고 합니다.

일찍 진행하는 테스팅은 추가적인 개발 시간, 비용을 줄이거나 없앨 수 있습니다.

4. 결함은 집중된다.

파레토 법칙: 결과의 80%는 전체의 20%에서 나타난다. 

테스팅에서 발견하는 대부분의 결함은 소수의 모듈에 집중되어 발생하는 경향이 있습니다.

그렇기에 테스팅 노력을 한 곳에 집중시키는 것이 중요합니다.

'완벽한 테스팅은 불가능하다' 항목에서 알 수 있듯이 리스크 분석을 통해 테스트의 우선순위를 설정하는 것이 중요합니다.

예상되는 결함의 집중 영역과 테스트의 운영 중 실제 관측한 결함 집중 영역은 리스크 분석의 주요 입력값으로 사용됩니다.

5. 살충제 패러독스에 유의하라.

살충제 패러독스: 같은 살충제를 반복해서 살포하면 살충제의 효과가 점차 떨어지는 현상.

이는 테스트에서도 적용되어 만약 같은 테스트를 계속 반복 실행한다면, 해당 테스트론 더 이상의 결함을 발견할 수 없게 됩니다. 

새로운 결함을 발견하기 위해서는 새로운 테스트를 작성하여 실행해야 합니다.

6. 테스팅은 정황에 의존적이다.

Context: 정황, 맥락, 문맥

 

개발 중인 소프트웨어와 시스템의 정황에 따라 그에 맞는 테스트를 적용해야 합니다.

보안을 최우선으로 하는 제어 소프트웨어는 모바일 메신저 App과는 다른 context의 테스트를 사용해야 합니다.

Agile 프로젝트와 순차적 SDLC도 다른 방식의 테스트를 사용합니다.

7. 오류 부재는 궤변이다.

오류가 없는 시스템을 위해 테스터가 모든 테스팅을 진행하고, 존재하는 모든 결함을 발견하는 것은 불가능합니다.

게다가 결함을 많이 찾아서 수정한 것이 시스템의 성공과 비례한다고 생각하는 것은 궤변입니다.

예를들어 아주 복잡하고 사용하기 불편하고 기능이 모자란 시스템이 단순히 버그가 없다고 성공할리가 없는 것과 같습니다.