소프트웨어 테스트 자동화에 관한 생각

by 블루웨일

제가 직장을 다닐 때 했었던 업무 중 하나인 소프트웨어 테스트 자동화에 대해서 이야기를 해 보고자 합니다. 처음 테스트 자동화를 도입하다 보면 여러 가지 시행착오로 인하여 투자한 자원 대비 기대만큼의 효과를 보지 못하는 경우가 많습니다. 테스트 자동화를 도입하는 조직에 조금이나마 도움이 되었으면 하는 바람으로 글을 써 봅니다.




테스트 자동화(Test Automation)란?

먼저 기본적인 이해를 돕기 위해서 어떤 제품이 사양서(Specification)대로 동작을 하는지 확인(Verification) 및 검증(Validation)하는 업무를 테스트라고 정의하고, 이런 테스트를 기존에 주로 사람이 수행하던 것을 자동화 도구(컴퓨터)를 이용하여 자동으로 수행하는 것을 테스트 자동화라고 쉽게 이해하시면 될 것 같습니다.


왜 테스트 자동화를 도입하는가?

회사나 조직에서 테스트 자동화를 도입하는 이유는 테스트 비용과 관련이 있습니다. 제품의 기능이 복잡해지고 수행할 테스트의 양이 많아짐에 따라 사람의 공수를 대신할 수 있는 자동화 도구의 도입이 필요하게 되었습니다.


단순 계산으로 사람은 보통 하루에 8시간 동안 일을 할 수 있지만 자동화 도구는 24시간 동안 쉬지 않고 일을 할 수 있기 때문에 이론적으로 자동화를 통한 테스트 수행 시 사람 대비 3배의 효과를 발휘할 수 있습니다. 사람의 실수(Human error) 없이 일관성 있는 테스트 결과를 보장하고 사람이 긴 시간 동안 수행해야 하는 테스트(비 기능 테스트)를 할 수 있는 장점도 있습니다. 이러한 장점 때문에 제가 참여했었던 프로젝트의 고객사에서는 테스트 자동화 환경 구축 및 자동으로 수행한 결과를 제출할 것을 기본으로 요구하였습니다.


테스트 자동화 프로세스

테스트 자동화를 도입하기로 결정한 후에 기본적으로 따라야 하는 과정이 있습니다.


사양서 분석 및 자동화 영역 선정

먼저 제품의 개발과 테스트를 위한 사양서를 1차 분석합니다. 이 단계에서 기능 별로 상위 레벨의 테스트 케이스(High level TestCase)를 만들어서 전체 기능 중 어떤 부분을 자동화할지를 검토하게 됩니다.


테스트 자동화 도구 및 테스트 환경 구축

프로젝트와 기능의 특성에 따라서 자동화 도구로 상용화 Tool을 사용할지 아니면 자체 개발한 자동화 Tool을 사용할지를 장단점을 고려해서 선택합니다. 또한 사양서 분석 결과를 기반으로 자동화 스크립트 개발에 사용할 언어(C, Python, C#, Excel)와 SW Tool 등의 어떤 테스트 환경을 사용할지를 관련 부서와 검토하여 결정합니다.


자동화 테스트 케이스 선정 및 스크립트 개발

요구 사항을 상세히 분석하여 테스트 케이스(Low level TestCase)를 만들고 어떤 TestCase를 자동화할지 분석하고 선정합니다. 우선순위가 높은 기본 기능, 반복적인 테스트, 매우 장 시간 수행이 필요한 테스트가 자동화의 후보가 됩니다. 반면에 복잡한 테스트나 사람만이 수행 가능한 테스트(감성적인 부분)는 자동화에서 제외합니다. 자동화할 TestCase를 모두 선별하고 나면 앞에서 구축한 자동화 Tool을 이용하여 스크립트로 개발합니다. 스크립트 개발 후 실제 제품으로 수행을 해서 스크립트의 동작 상에 문제가 없는 것을 여러 차례 확인합니다.


자동화 테스트 수행 결과 판정

개발된 스크립트를 새로운 소프트웨어가 나올 때마다 자동으로 수행한 결과(Passed of Failed)를 확인합니다. 자동화 테스트 결과 문제가 있음으로 처리된 테스트(Failed)는 수동으로 한번 더 수행하여 테스트 결과가 정확한 지 확인합니다.

실제 Test 결과는 Failed인데 자동화 Test 결과는 Passed인 경우(False passed)
- 제품의 문제점을 자동화 테스트 결과가 Pass로 실제 제품의 문제점을 걸러내지 못하기 때문에 심각한 이슈입니다.
실제 Test 결과는 Passed인데 자동화 테스트 결과는 Failed인 경우(False failed)
- 제품에는 문제가 없는데, 자동화 테스트 결과를 잘못 처리한 경우로 False passed만큼은 심각하지 않지만 사람의 추가 공수가 들어가므로 역시 개선되어야 하는 이슈입니다.


유지보수

테스트 자동화 수행 중 자동화 Tool이나 Script 관련 발견된 문제점을 개선하고 반영합니다. "자동화 테스트 케이스 선정 및 스크립트 개발" 단계에서 모든 문제점들을 개선하는 것이 최선이지만 실제 수행하다 보면 제품 테스트 단계에서도 예상 치 못한 문제점들이 발견됩니다.


자동화의 성공을 위한 중요한 고려 사항은..

테스트 자동화를 도입 시 성공률이 몇 %라고 예상하시나요? 20% 정도 된다는 해외의 기사를 몇 년 전에 본 적이 있습니다. 지금은 기술이 많이 발전하고 많은 Funding이 되어서 성공률이 더 높아졌을 것으로 생각됩니다만 여전히 난이도가 높은 과제임은 분명합니다.


제 경험상 여러 프로젝트에 자동화를 도입하면서 성공에 중요한 몇 가지 중요 고려 사항(Key factors)이 있다는 것을 알았습니다.


올바른 장기 목표 설정과 경영층의 의지가 필요하다.

테스트 자동화의 성공에 있어서 가장 중요한 부분이 아닐까 생각합니다. 일반적으로 테스트 자동화 Tool 및 테스트 환경이 안정되기까지 일반 개발 프로젝트와 마찬 가지의 공수와 노력이 들어가는 긴 과정이 필요합니다. 그렇지만 단기간 내에 성과를 기대하는 경영층(Top management)의 바람으로 자동화가 산으로 가거나 꽃을 피우기까지 성과를 보지 못하고 폐기될 수도 있습니다. 시간이 오래 걸리더라도 자동화 프로젝트를 오래 이끌어 갈 경영층의 의지와 펀딩이 뒷받침되어야 성공 가능성을 높일 수 있습니다.


자동화가 가능한 영역과 그렇지 않은 영역을 정확하게 분석하고 분류한다.

테스트 자동화를 시작하면서 모든 사람들의 기대는 "가능하면 많은 TestCase를 자동화 하자"가 됩니다. 실제로 해 보면 자동화가 안 되는 부분이 생각보다 많고 쉽지 않다는 사실을 인지하게 됩니다. 그래서 사양서와 자동화 Tool에 대한 정확한 분석을 바탕으로 자동화가 가능한 기능과 영역에 대한 현실적인 목표를 세우는 것이 중요합니다. 윗선에서도 "전체 TestCase 중 50 프로는 자동화해야 하지 않겠나?"와 같은 근거 없는 지시 사항은 지양해야 합니다.


자동화 조직과 인원 구성에 많은 리소스를 할당한다.

소수의 인원만 추가해 주면서 또는 기존 인원이 자동화 업무를 같이 병행하여 수행할 것을 기대하는 경우가 있습니다. 앞에서 언급하였듯이 테스트 자동화도 일반 개발 프로젝트만큼의 공수가 필요한 개념으로 이해하고 그에 맞게 적당한 인원이 필요합니다. 가능하면 자동화 업무만 할 수 있도록 전담으로 조직 및 인원을 구성해야 합니다.




10년 정도 테스트 자동화 관련 업무를 하면서 많은 우여곡절이 있었습니다. 경영층을 설득시키는 과정과 보고 업무를 하는 과정이 쉽지 만은 않았습니다. 하지만 과거에 없었던 업무 프로세스를 새로 만들고 유관부서와의 협의를 통해서 의미있는 결과물을 만들어 가는 과정은 재미있었던 것 같습니다.

keyword
팔로워 432
작가의 이전글집안 정리정돈 하기