개발자, 당신은 테스트는 테스터의 일이라 생각하는가?

8595309436_412802c9ed_z
Source : http://flic.kr/p/e6xd3h

‘구글은 소프트웨어를 어떻게 테스트하는가’를 읽어 보면 구글의 테스트에 대해서 잘 파악할 수 있는데, 구글에서 테스트 관련 직군은 크게 세 가지로 나누는 것을 알 수 있다. 이 직군은 SWE(Software Engineer), SWT(Software Engineer in Test), TE(Test Engineer)다. SWE는 흔히 말하는 개발자다. 개발자로서 자신이 맡은 단위기능에 대한 테스트를 담당한다. SWT는 단위기능보다 조금 더 큰 테스트, 구글에서 말하는 중형 테스트를 수행할 수 있도록, 목(mock)이나 페이크(fake) 객체를 만들고 테스트 인프라를 만드는 역할을 한다. TE는 대형 테스트를 담당하는데, 사용자 입장에서 제품을 테스트하는 역할을 한다.

책을 읽으면서 테스트에 대해서 이런 저런 생각을 해 볼 수 있어서 좋았다. 특히 그 중에서 많은 생각을 한 건, 개발자 입장에서 테스트였다. 구글의 테스트 관련 직군에서 알 수 있듯이, 사용자 입장에서 제품을 바라보는 TE를 제외하고 개발자 쪽에서 순수하게 테스트만을 담당하는 테스트 엔지니어는 없는 듯하다. 우리 나라에서 흔히 이야기하는 테스터에 가까운 직군은 SWT인데, 이 SWT가 하는 일은 주로 테스트를 할 수 있는 환경 구축에 초점을 맞춘 것 같다.

다양한 관점에서 테스트를 할 때, 가장 어려운 건 의존성을 끊는 일이다. 일반적인 웹 애플리케이션의 경우, DB환경이나 사용자 세션처럼 환경과 밀접한 것들의 의존성을 끊고 테스트를 하려면 이런 것들에 대한 목이나 페이크를 만들어야 한다. 이런 작업이 바로 SWT의 몫이라 할 수 있다. 말하자면 구글에서는 일반적으로 테스터들이 개발자들을 대신해서 기능 테스트하는 게 아니라, SWT는 테스트의 엔지니어링 측면에서 일을 하는 것이다. 결국 개발자라 할 수 있는 SWE가 자신이 만든 기능에 대한 테스트에 책임을 지는 게 구글의 테스트 문화이다.

테스트를 업으로 하시는 분들과 이야기하거나 개발자와 테스트에 대해서 이야기하면, 테스트를 바라보는 미묘한 차이를 느낄 수 있다. 개발자들은 테스트보다 기능 개발에 많은 초점을 맞춘다. 따라서 개발자는 테스트를 기능 개발하고 나서 하는 부과 업무라 느낀다. 이런 이유로, 구글에서는 개발자들이 하는 단위 수준의 테스트 업무를 테스터들이 맡아서 하는 회사도 있다. 결국 이런 관점이 있는 회사에서 테스트를 하는 테스터가 제공할 수 있는 테스트의 수준은 3가지 범주로 나뉠 수 있다.

1단계는 도구를 사용해서 정적검증과 동적검증을 하는 수준이다. 도구를 돌려서 레포트를 뽑거나 테스트 커버리지를 만족하는 테스트 케이스 추출에 초점이 맞춰진다. 2단계는 1단계보다는 상위 개념의 것으로서, 1단계의 검증 결과를 토대로 코드의 어느 곳에 문제가 많은지 알려 주는 것이다. 3단계는 테스트와 개발자가 나뉜 환경에서 가장 바람직한? 것으로 인식되는 단계로서, 2단계에서 발견한 문제를 해결하려면 코드를 어떻게 수정해야 하는지 알려주는 것이다. 그런데 3단계 수준의 서비스를 제공하다 보면, 개발자와 테스터 간 미묘한 권력 투쟁?이 발생할 때가 있다. 개발자의 고유의 업무 영역이라는 개발 영역이 침범받는단 생각을, 개발자들이 할 수 있기 때문이다.

이런 상태에서 개발 정치학?적인 테스트의 타협점은 2단계 수준에서 머문다. 그런데 이 상태가 되면, 잘 알려진 “품질은 테스트할 수 없다.”란 명제를 증명하는 좋은 사례 연구가 탄생한다는 점이다. 품질의 정의에 따라서 달라지지만, 품질을 좌우하는 것은 대개 설계에서 어떤 선택을 하느냐이다. 즉 설계가 나쁘고 그 설계를 구현하는 코드가 그냥 그렇다면, 품질은 좋아질 수 없다. 만약 관점을 달리해서 개발자란 자신이 개발한 기능이 잘 동작하고 문제가 없는 테스트에 대한 구현도 해야 한다고 정의한다면, 일반적인 테스터의 업을 개발자의 것으로 만들 수 있다. 말하자면 개발하면서 본인 만든 기능에 대한 완결성을 추구할 수 있을 것이다.

그렇다면 이런 환경에서 테스터들은 무엇을 해야 할까? 자신의 업이 없어질 것을 걱정해야 할까? 아니다. 오히려 구글처럼 더욱 부가가치가 놓은 테스트 업무를 할 수 있다. 즉 단순히 도구를 돌려서 문제를 발견하는 것을 떠나서 더욱 테스트를 효율적 효과적으로 할 수 있는 환경을 구축하고, 그런 환경 속에서 더 많은 고품질의? 버그를 발견할 수 있을 것이다. 결국 회사의 테스트 품질을 높이는 것은 테스터의 역할도 큰 몫을 하지만, 개발자가 테스트에 대해서 어떻게 생각하느냐도 매우 중요하다.

글 : 신승환
출처 : http://www.talk-with-hani.com/archives/1667

%d bloggers like this: