원리[3]에는 “개발 초기에 테스팅을 시작하라.”라고 하는데, 테스트는 개발이 완료된 후에 하는 거 아닌가요? 테스팅을 어떻게 개발 초기에 시작하나요?
ISTQB 버전
ISTQB Syllabus 2018
답변
소프트웨어 테스팅 원칙
소프트웨어 테스트는 결함이나 버그를 식별하기 위해 소프트웨어 또는 응용 프로그램을 구현하는 절차입니다.
응용 프로그램이나 소프트웨어를 테스트하려면 제품 결함을 없애고 테스트 엔지니어가 노력과 시간을 들여 소프트웨어를 테스트하는 데 도움이되는 몇 가지 원칙을 따라야합니다.
테스트는 결함이 있음을 보여줍니다.
철저한 테스트는 불가능
초기 테스트
결함 클러스터링
살충제 패러독스
테스트는 정황에 따라 다르다.
오류 부재의 궤변
Software Development Life-Cycle 알아두기
"테스팅을 일찍 시작한다."는 말에서 품고 있는 시간 순서의 기준은 SDLC(Software Development Life-Cycle)의 전체 구조 중 앞단에서 테스팅을 수행하라는 의미입니다.
위 그림에서 보시는 바와 같이 소프트웨어 개발에는 어느 정도 정형화된 순서가 존재하며, 어떤 개발 방법론을 사용하던 위의 구조가 큰 틀에서 변경되거나 해체되지는 않습니다. 그러므로, 소프트웨어 종사자라면 프로그래머이든, 테스터이든, PM이든, 누구든지 간에 기본적으로 이해하고 있어야 하는 내용입니다.
이에 대해서는 자세한 소개를 할 기회가 있을 때 다시 긴 이야기를 나눌 수 있도록 하겠습니다. 본 글을 읽으시는 독자분들 중 궁금한 점이 있으시면, 일단 잘 정리된 사이트들이 많으므로 인터넷 검색을 통해 지식을 정리하시면 좋겠습니다.
원리[3] - 개발 초기에 테스팅을 시작하라(Early Testing)
자세한 내용을 다루기 전에 소프트웨어 테스팅과 관련한 일반적인 내용으로 「소프트웨어 테스팅의 7가지 원칙」 중 3번째 원리는 다음과 같습니다.
나중에 결함을 발견하고 수정하는 것에 비해, 초기에 테스트를 수행하여 미리 문제점을 발견하고 수정하는 경우가 훨씬 비용 및 시간을 줄일 수 있습니다.
개발 초기는 개발 진행과 동시에 요구사항 분석서 및 설계서 등 개발 중간 산출물의 분석을 통해 테스트 케이스를 작성하거나 테스트 분석/설계를 도출하는 과정을 통해 결함을 발견하는 것을 의미합니다.
간단히 생각하면 쉽습니다. 요구사항 분석 단계에서 찾아낸 이슈는 해당 요구사항을 정리한 사람과만 이야기 하면 되지만, 개발이 완료되고 서비스 중인 경우에는 고객 관리자, 프로그래머, 테스터, 기획자, 사업 부서 관리자 등 많은 사람들과 협의를 거쳐야 합니다. 그 모든 것이 비용이죠.
소프트웨어 개발 단계 별 투입되는 비용의 비율은 대략적으로 아래와 같습니다.
이에 대한 이야기는 프로젝트의 ROI(Return On Investment)에 대한 이야기입니다. ROI를 쉽게 설명하면 "투자 회수율" 혹은 "투자 대비 수익률"을 이야기합니다. 더 쉽게 이야기하면 "얼마 정도를 투자해서 어느 정도의 수익을 거두는가"에 대한 이야기입니다.
ROI 개념은 다양한 분야에서 사용하고 있는 개념이므로, 이와 관련한 자세한 자료들을 보고 싶으시면 검색 사이트에서 "ROI 분석 사례 (구글 링크)"라는 키워드에서부터 찾기 시작하시면 됩니다.
결함 발견 시점과 수정 비용의 상관관계
ROI는 다음 그림에서 보는 바와 같이 조기에 해결하면 빠르고, 뒤로 미룰수록 해결하기 위한 비용이 늘어나는 경우가 일반적입니다. 조금만 투자하고 많이 수익을 내는 것이 비즈니스의 기본이기 때문에 투자 비용이 늘어난다는 의미는 수익률이 나빠진다는 의미입니다.
일반적으로 '요구사항 취합/분석' 단계에서의 발견한 이슈 처리와 '고객에게 출시된 후'의 이슈 처리의 차이는 소프트웨어 개발에서는 약 100배~1000배 정도가 난다고 알려져 있습니다.
결함 발견 시점이 늦어질수록 수정 비용은 지속적으로 증가합니다.
개발 단계별 수정 비용 : 요구사항(낮음) < 설계 < 개발 < 테스트 < 유지보수(높음)
그러므로, ROI 효율을 높일 수 있는 가장 좋은 방법은 사실 "테스팅 활동" 그 자체보다는 "리뷰(Review)"라고 부르는 활동들입니다. 이와 관련된 설명은 본 블로그의 다른 필자들이 작성하신 "시스템이나 문서에 대한 엄격한 테스팅"에 대한 의미는 무엇인가요? 포스팅을 참고하여 주세요.
개발 초기 테스팅 진행 시 대략적 가이드라인
일반적으로 "테스팅" 활동은 "개발이 완료된 후" 진행한다고 생각하는 경우가 많습니다. 그래서 개발 초기에 진행하는 테스팅이 낯설기도 하고, 어렵게 느껴지기도 합니다. 개발 초기 테스팅을 진행하실 때는 아래의 사항들을 고려하여 진행하시면 됩니다.
개발 프로세스 내에서 최대한 앞에서 테스트/리뷰 활동을 진행하는 게 ROI 효율을 높일 수 있음을 프로젝트 구성원들에게 인지시킵니다.
개발 시작과 동시에 테스트를 계획합니다.
전략적 접근을 고려합니다.
개발 산출물(요구분석서, 설계서)을 분석하여 테스트 케이스 도출 과정을 통해 결함을 발견하는 것입니다.
명세 기반 기법을 이용해 체계적인 테스트 케이스 도출, 문서상의 결함을 발견, 리뷰 미팅에 참석하여 인시던트를 알리고, 실제 결함 여부를 결정합니다.
위 가이드라인을 참고하시면서 잊지 않으셔야 하는 건 "소프트웨어에서의 이슈를 조기 탐지(Early Detection on Issues of Software)할수록 투자 비용이 줄어들고, 고로 수익률이 개선된다."라는 점입니다.
소프트웨어 오류 원인 및 분포
해외의 전문가가 발표한 일반적인 소프트웨어에서의 오류 분포는 아래와 같습니다.
오류 분포 : 요구사항(56%), 설계(27%), 코드(10%), 기타(7%)
앞서 여러 전문 서적, 지식 체계, 해외 전문가들의 증명을 통해 "조기 탐지한 이슈의 조기 처리"가 ROI를 개선한다고 하였습니다. 그리고 위 그림에서 보는 바와 같이 요구사항 및 설계 오류가 오류 원인의 80% 이상을 차지하므로, 개발 초기에 테스팅을 진행하여 개발 초기에 예상되는 이슈들을 모두 처리한다면 ROI 효율이 향상되는 것입니다.