개인적인 일이든 회사 업무든 우리는 무언가를 만들 때가 있습니다. 그리고 이런 창작 활동은 처음에 계획한대로 진행되기 힘들기에 원하는대로 작업이 진행되고 있는지 테스트 진행이 필요합니다. 테스팅이 잘 진행되면 진행될수록 산출물의 품질과 신뢰도가 향상되고, 개인적으로도 원하는 작업물을 만들 확률이 크게 증가합니다. 이번에는 이런 테스팅 작업을 수행할 때의 일반적인 원리에 대해 정리하고 저의 경험과 생각을 덧붙여 글을 써보도록 하겠습니다.
1. 완벽한 테스트는 불가능하다.
- 테스팅은 결함이 존재함을 밝히는 것으로 결함이 없다는 것을 밝히는 것이 아니다. 결함이 전혀 발견되지 않은 경우라도 결함이 없다고 증명할 수는 없다.
- 이 세상에 존재하는 모든 가능성을 테스팅하는 것은 가능하지 않다.
아무리 신경써서 꼼꼼히 테스트를 진행하더라도 결함이 없는 완벽한 상태의 산출물을 만들었다고 확신할 수는 없습니다. 우리의 인지능력과 시간은 한정되어 있기에 절대로 모든 케이스를 테스트할 수 없습니다. 특히 많은 사람들이 사용하는 시스템을 제작할 때는 정말 예측하지 못한 일이 많이 발생합니다.
고등학교 2학년때 저는 학교 프로젝트로 심박 측정기를 제작하였습니다. 완성도가 높은 결과물이라 생각하고 자신있게 전시장에서 전시하고 있었는데 전시 1시간도 안되서 심박측정기에 결함이 발생했습니다. 이 심박측정기를 다른 학생들이 사용할 때, 심박측정센서에 손가락을 살포시 올려놔야 하는데 이걸 손가락으로 꾹 눌러버리는 학생들이 자꾸 등장하자 센서 모듈에 물리적 결함이 발생해 제대로된 측정이 불가능한 상태가 된 것입니다. 결국 가장 중요한 선생님들의 평가에서 제대로된 시연을 진행하지 못했고, 그렇게 아무런 평가도 듣지 못하고 프로젝트 시연회가 끝나버렸습니다.
개발자들이 아무리 자신있게 제품을 출시하더라도 모든 사용자들이 이 제품을 어떻게 사용할지 절대 예측할 수 없습니다. 이러한 상황을 인지하고 유저 테스트를 진행한다고 하더라도 이 제품이 극저온에서 제대로 동작하는지, 극고온 높은 습도에서 정상적으로 동작하는지 알 수 없습니다. 이걸 예상하고 온도,습도 테스트까지 하더라도 이 세상에 존재하는 모든 상황에서 결함이 발생하지 않을 것이라고 예측할 수 없습니다. 그래도 완벽한 테스트가 불가능하다라는 것을 인지하고 있다면 더 창의적으로 테스트를 설계해 결함을 줄일 확률을 높일 수 있습니다.
2. 개발 초기에 시작한다.
- 개발 초기에 테스트를 설계하면, 초기부터 준비된 테스트를 레벨별로 실행가능
- 재작업시간을 줄여 개발 기간을 단축할 수 있음
- 결함은 늦게 수정하면 할수록 비용이 높아짐
처음에는 작은 결함이였더라도 이 결함이 방치된 채로 시간이 흘러 상황이 변하게 되면 손쉽게 해결하지 못하는 큰 결함으로 바뀔 가능성이 커집니다. '매도 먼저 맞는 게 낫다'라는 속담도 있듯이, 결함도 일찍 해결할수록 해결비용이 줄어들게 됩니다. 건물을 건설하는데 기반이 되는 철근부터 문제가 있다면 그 건물이 마무리 단계의 작업을 하고있더라도 다시 철거해서 철근부터 다시 세워야 할 것입니다. 결함을 해결하지 않고 개발을 진행한다면 결함을 기반으로 개발을 진행하는 것이기에 제대로된 작업물이 나올 가능성이 크게 줄어들고, 결함 위에 건축된 모든 것들을 철거하고 다시 설계해야 할 수도 있습니다.
3. 파레토법칙(80대 20법칙)
- 자체적으로 복잡한 구조를 가지고 있는 모듈에 결함이 집중된다.
- 경험이 미흡한 부분에서 결함이 집중된다.
'전체 결과의 80%가 전체 원인의 20%에서 일어나는 현상'을 파레토(Pareto) 법칙이라고 부릅니다. 이 용어는 경영학에서 처음 사용되었으나, 통계가 발달하고 데이터가 쌓일수록 자연이나 사회현상의 매우 많은 곳에서 상위 20%가 전체의 80%를 가져가는 파레토 법칙 현상이 더욱 포착되고 있습니다. 이 현상은 개발현장에서도 똑같이 발견됩니다. 일반적으로 전체 모듈(개발의 일부분)의 20%에서 80%의 결함이 포착됩니다.
전체 개발의 50%를 테스트했을때 발생한 결함의 수가 나머지 50%를 테스트했을 때 발생한 결함의 수와 같다고 생각하면 안됩니다. 프로젝트 환경은 어디서 어떤 일이 발생할지 예측하기 힘든 복잡계에 속하기 때문에 섣부른 예측으로 일정을 관리하게 되면 일정을 준수하지 못하는 상황이 발생할 수도 있습니다. 비즈니스 관계에서 가장 중요한 요소중 하나는 신뢰임으로, 상위 20%의 신뢰를 지키기 위해 언제 어디서 결함이 창발할지 모른다는 것을 인지하고 여유있는 일정을 계획하는 습관이 필요합니다.
'공학 > 소프트웨어' 카테고리의 다른 글
플래닝 포커와 프레젠톡 (0) | 2020.09.30 |
---|---|
테스트의 원리 -2 (0) | 2020.09.30 |
협업 도구 정리 (0) | 2020.09.25 |
객체지향기법과 자판기 (0) | 2020.09.25 |
객체지향기법과 붕어빵 (0) | 2020.09.25 |