본문 바로가기

공학/소프트웨어

테스트의 원리 -2

반응형

 

 지난번 글에서는 '완벽한 테스트는 불가능하다, (테스트는)개발 초기에 시작한다, 파레토법칙'에 대해 정리해보았다. 이 세가지 주제에 대해 공부하면서 테스팅도 복잡계에 속함을 알 수 있었고, 아무리 숙련된 전문가도 테스팅 환경에 대해 예측할 수 없음을 알 수 있었다. 사람은 복잡계에서 정확한 예측은 불가능하지만, 모든것을 예상하지 못한다는 것을 인지하면 역설적으로 무언가를 예측할 확률이 조금 더 올라가는듯 하다.

이번에는 나머지 테스트 원리들을 정리하며 테스트에 대한 글을 마무리해보고자 한다. 나머지 원리들도 복잡계의 기본 원리를 떠올린다면 더 쉽게 이해할 수 있을 것이다. 이번에 핵심 주제는 '핵심이 뭔지 파악하자' 라고 요약할 수 있다. 속도보다 방향이 중요하다는 말이 있듯이, 개발에서도 방향을 잘 잡아야 성공적으로 프로젝트를 끝낼 수 있을 것이다.


 

1. 살충제 페러독스

- 벌레에게 같은 살충제를 사용하다보면 내성이 생기게 된다.

- 동일한 테스트 케이스로 테스트를 반복한다면 나중에는 더이상 새로운 결함을 찾아내지 못한다. 마치 살충제에 내성이 생긴 벌레처럼

- 잠재된 결함을 더 발견하기 위해서는 테스트 케이스를 정기적으로 리뷰하고 개선하는 활동이 필요하다.

한 테스트 방식으로 오류를 검출했다고 같은 방식으로 계속 테스트를 진행하는 것은 잘못된 행동이다. 물론 개발이 진행되면서 기존에 테스트한 내용이 여전히 문제가 없는지 확인해야 하는 것은 맞지만, 새로운 기능이 추가되면서 기능간 에러가 발생할 경우의 수가 증가함으로 개발이 진행됨에 따라 새로운 테스트 방법을 계속해서 고민해내야 한다.

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

- 테스트를 진행해야 하는 프로젝트의 성격에 따라 필요한 테스팅 방식이 달라진다.

- 개발하고자 하는 대상이 어떤 환경에서 사용하고, 개발 의뢰자가 무엇을 원하냐에 따라 테스트의 방식이 달라져야 한다.

테스트는 왜 개발을 진행하느냐에 따라 다르게 진행되어야 합니다. 안정성이 중요한 프로젝트라면 안정성을 우선적으로 테스트해야 하고, 재미가 중요한 프로젝트라면 사람들의 시선을 얼마나 사로잡는지에 대해 테스트를 진행해야 합니다. 시간은 한정적이기에 모든 테스트를 진행할 수 없습니다. 상황에 꼭 필요한 테스트를 우선적으로 진행하면서 테스트를 진행해야 합니다.

저는 개발 학원을 다닌 경험이 있는데, 이 학원 과정의 꽃은 바로 많은 사람들 앞에서 발표하는 프로젝트를 만드는 과정입니다. 실제 사람들을 대상으로 판매하는 것이 아닌, 발표회를 위해서 프로젝트를 진행한다 할 때 안정성은 생각보다 중요하지 않을 수 있습니다. 보통 이런 프로젝트는 짧은 시간 시연하고 발표하기에 안정성이 낮아도 시연중 에러가 발생할 가능성이 적습니다. 발표회중 사소한 에러가 발생하더라도 '어차피 발표회인데 뭐' 하고 가볍게 생각하고 넘어갈 가능성이 큽니다. 이런 발표회에서 가장 중요한 것은 '사람들의 시선을 얼마나 사로잡을 수 있냐' 입니다. 아무리 안정적인 프로젝트를 위해 다른 팀들보다 몇 배로 노력하더라도 사람들은 그 노력을 알아주지 않습니다. 애초에 노력의 방향 자체가 잘못된 것입니다. 이런 헛수고를 덜기 위해서 내가 진행하는 프로젝트에서 가장 중요하게 보아야 할 부분이 무엇인지 생각하고 상황에 맞게 테스트를 진행해야 합니다.

3. 부재의 궤변

- 사용자 또는 비지니스 요구를 충족시켜주지 못한다면, 결함이 모두 발견하여 제거하였다고 하더라도 품질이 높다고 볼 수 없다

- 오류가 없다는 것이 제품이 올바르게 동작한다는 것을 의미하는건 아니다.

아무리 오류가 없고 깔끔하게 동작한다 하더라도, 그 동작이 사용자가 원하는 동작이 아니라면 무슨 소용이 있을까요, 오류를 제거하는 것도 중요하지만 가장 중요한 것은 원래 요구사항에 맞게 개발을 진행해나가는 것입니다. 오류의 제거는 요구사항을 만족시키기 위해서 진행되어야 합니다. 정말 치명적인 오류가 아니라면 오류 제거를 위해 요구사항을 포기하는건 잘못된 선택일 가능성이 큽니다. 에러가 없는 개발이 아닌, 사용자에게 꼭 필요한 개발을 할 수 있게 주의합시다.

반응형

'공학 > 소프트웨어' 카테고리의 다른 글

플래닝 포커와 프레젠톡  (0) 2020.09.30
테스트의 원리 -1  (0) 2020.09.30
협업 도구 정리  (0) 2020.09.25
객체지향기법과 자판기  (0) 2020.09.25
객체지향기법과 붕어빵  (0) 2020.09.25