Keyword
automation code defect density, coverage, traceability matrix, equivalent manual test effort, metrics, test logging, test reporting
TAS 지표의 선택
이번 절에서는 테스트 자동화 전략, TAS의 효과 및 효율성을 모니터링하기 위해 사용될 지표에 대해 알아본다. 이것은 프로젝트의 테스트 매니저가 SUT와 SUT의 기능 및 비기능 테스트를 모니터링하기 위해 사용하는 SUT 관련 지표와는 별개다. 테스트 자동화 지표는 테스트 자동화 매니저 및 테스트 자동화 엔지니어가 테스트 자동화 목표에 대한 진행상황을 추적하고 테스트 자동화 솔루션의 변경 사항이 미치는 영향을 모니터링할 수 있게 해준다.
TAS 지표는 외부 지표와 내부 지표로 나누어 볼 수 있다. 외부 지표는 TAS가 다른 활동 (특히 테스팅 활동) 에 미치는 영향을 측정하는데 사용된다. 내부 지표는 TAS가 목표를 달성하는데에 얼마나 효과적이고 효율적인지를 측정하는 데 사용된다.
측정된 TAS 지표는 일반적으로 아래를 포함한다.
각각 설명하면 아래와 같다.
TAS의 이점을 측정하고 보고하는 것이 특히 중요하다. 이는 일정 기간 동안 관련된 사람 수로 계산하는 비용은 쉽게 보이지만, 외부 사람들이 이러한 비용을 볼 수는 있어도, TAS의 이점을 알지 못할 수 있기 때문이다.
어떠한 이점이라도 측정은 TAS의 목표에 따라 결정된다. 일반적으로 시간 또는 리소스의 전략, 테스트 수행 갯수의 증가(커버리지 폭이나 깊이 또는 실행 빈도) 또는 반복 가능성의 증가, 자원의 보다 더 나은 활용, 수작업 오류의 감소와 같은 이점을 포함한다. 가능한 측정 기준은 아래를 포함한다.
테스트 자동화는 일반적으로 수동 테스트의 노력을 절약해준다. 이 노력이란, 다른 종류의 매뉴얼 테스트에 사용될 수 있다. 이러한 추가 테스트에서 발견된 결함도 TAS의 간접적 이익이라고 판단할 수 있다. TAS가 없었다면 이러한 테스트는 수행되지 않았을 것이고, 그에 따라 추가 결함도 발견되지 않았을 것이다.
테스트 자동화의 주요 비용 중 하나는 테스트를 자동화하는데에 필요한 노력이다. 이는 종종 동일한 테스트를 매뉴얼로 수행하는 비용보다 더 많이 들며, 따라서 테스트 자동화의 사용 확대를 결정하는 데에 방해가 될 수 있다. 특정 자동 테스트를 구현하는 비용은, 테스트 그 자체에 크게 좌우되나, 사용하는 스크립팅 방법, 테스트 도구에 대한 친숙도, 환경, 테스트 자동화 엔지니어의 기술 수준 등 다른 요소도 영향을 미친다.
더 크거나 더 복잡한 테스트는 짧거나 간단한 테스트 보다 자동화 하는데에 더 오랜 시간이 걸리기 때문에, 테스트 구축 비용을 계산하는 방법 중 하나는 평균 구축 시간을 기준으로 하는 것이다. 이것은 같은 기능을 목표로 하는 테스트나 특정 테스트 레벨에서의 테스트 집합에 대한 평균 비용을 고려하여 더 세분화할 수도 있다. 다른 접근법으로는 구축 비용을 매뉴얼 테스트 수행 노력의 배수로 표현하는 것이다. (Equivalent Manual Test Effort, EMTE ) 예를 들어서 테스트 케이스를 자동화 하는데 매뉴얼 테스트 코스트의 2배가 필요할 수 있다.
자동화된 테스트 실행 중 발견된 SUT 실패를 분석하는 것은 매뉴얼 테스트보다 훨씬 더 복잡할 수 있다. 왜냐하면, 매뉴얼 테스트를 수행하는 테스트 담당자가 실패로 이어지는 어떠한 이슈들을 이미 알고 있는 경우가 많기 때문이다. 이것은 3.1.4의 설계 수준과 5.3, 5.4의 보고 수준에서 설명한대로 완화될 수 있다. 이 측정치는 실패한 테스트 케이스 당 평균으로 표현할 수 있거나 EMTE의 배수로 표현할 수 있다. 후자는 자동화된 테스트가 복잡성 및 실행 길이에 따라 크게 다른 경우에 특히 적합하게 표현할 수 있다.
SUT 및 TAS의 로깅은 실패를 효율적으로 분석하는데 중요한 역할을 한다. 로깅은 효율적으로 분석을 하는 데에 충분한 정보를 제공해야한다. 중요한 로깅 기능은 아래와 같다.
반면 SUT는 매뉴얼 테스트 혹은 자동 테스트 결과와 관계 없이, 모둔 수행된 작업을 로깅해야한다. 내부 오류는 기록되어야하며 크래시 덤프나 스택 트레이스도 제공되어야한다.
자동화된 테스트를 SUT와 동기화 하는데 필요한 유지 보수 코스트는 매우 클 수 있으며, 궁극적으로는 TAS로 인해 얻는 이점을 초과할 수도 있다. 이것은 많은 자동화 시도의 실패 원인이 되었다. 유지보수 코스트를 모니터링하는 것은 유지보스 코스트가 증가하지 않도록 방지하거나 줄이기 위한 조치를 취할 필요성을 강조하는 데 중요하다.
유지보수 코스트의 측정은 새로운 SUT 버전 배포마다 유지보수가 필요한 모든 자동 테스트 케이스의 총 합으로 표현할 수 있다. 또한 업데이트된 자동 테스트케이스 당 평균으로 표현되거나 EMTE의 배수로 표현될 수 있다. 관련 지표는 유지 보수가 필요한 테스트케이스 수 또는 비율이다.
자동화된 테스트케이스의 유지보수 코스트를 확인할 수 있거나, 파악이 되는 경우에 이 정보는 특정 기능을 구현하거나 특정 결함을 수정할 지 여부를 판단하는 데에 중요한 역할을 할 수 있다. 소프트웨어 변경으로 인한 테스트케이스 유지보수에 필요한 코스트는 SUT의 변경과 함께 고려되어야 한다.
자동 테스트의 일반적인 문제로는 하나의 소프트웨어 결함으로 인해 많은 테스트가 실패할 수 있다는 점이다. 테스트의 목적은 소프트웨어의 결함을 찾아내는 것이지만, 여러 테스트가 동일한 이슈를 찾아내는 것은 낭비이다. 이것은 특히 자동 테스트의 경우, 각 실패한 테스트를 분석하는 데 필요한 리소스가 꽤나 클 수 있기 때문이다. 주어진 이슈에 대해 실패한 자동 테스트 케이스 수를 측정하면, 이러한 문제가 발생할 수 있는지를 나타낼 수 있다. 해결책으로는 자동 테스트의 설계와 실행을 선택하는 것에 있다.
자동 테스트 실행 시간은 결정하기 쉬운 지표 중 하나이다. TAS 초기에는 중요하지 않을 수 있으나, 자동화된 테스트케이스의 갯수가 증가함에 따라 이 지표는 매우 중요해질 수 있다.
이 지표는 테스트 자동화 프로젝트의 진행 상황을 나타낼 수 있다. 그러나 자동화된 테스트 케이스 갯구 만으로는 많은 정보를 얻을 수 없다. 예를 들어 테스트 커버리지가 증가했는지 어떤지는 알 수 없다.
이것은 일반적인 지표로, 자동화된 테스트가 성공한 횟수와 예상 결과를 달성하지 못한 횟수를 추적한다. 실패는 SUT의 결함으로 인한 것인지, 환경 문제나 TAS 자체의 문제로 인한 것인지는 분석해야한다.
여러 이전 지표들에서 보았듯, 테스트 실패를 분석하는 것은 상당한 시간이 걸릴 수 있다. 이것은 문제가 SUT가 아 TAS 또는 테스트케이스에 있을 때 더욱 좌절하게 될 것이다. 잘못된 실패 false-fail 의 갯수는 낮아야하며, 이것은 TAS에 대한 신뢰도를 낮출 수 있다. 반대로 실패했지만 찾지 못하는 경우 false-pass 의 경우는 위험하다. 이 경우가 발생하게 되면 SUT에 결함이 있었지만 자동 테스트가 이것을 식별해내지 못해 PASS 결과로 통보하게 된다. 이 경우 잠재적인 이슈를 탐지해내지 못하게 된다. 이것은 확인이 제대로 이루어지지 않거나 잘못된 테스트 오라클을 사용했거나 혹은 테스트 케이스가 잘못된 기대결과를 가졌을 수도 있다.
오탐의 경우 테스트 코드의 결함 (자동 테스트코드 결함 밀도 참조) 으로 인해 발생할 수도 있으나, 불안정한 SUT로 인해 발생할 수도 있다. Test hook의 침입 수준도 오탐을 유발할 수 있다.
다양한 테스트케이스가 제공하는 SUT의 코드 커버리지를 아는 것은, 유용한 정보를 얻을 수 있다. 이것은 회귀 테스트 스위트의 코드 커버리지와 같은, 높은 수준에서 측정될 수 있다. 적절한 커버리지를 나타내는 절대적인 비율은 없으며, 가장 단순한 소프트웨어를 제외하고 100% 코드 커버리지는 달성할 수 없다. 그러나, 일반적으로 커버리지가 높을수록 소프트웨어 배포의 전반적인 리스크가 감소하므로 커버리지가 높으면 높을 수록 좋다고 여겨진다. 이 지표는 SUT의 활동을 나타낼 수도 있다. 예를 들어 코드 커버리지가 감소하면, 신규 기능이 SUT에 추가되었으나 해당 테스트 케이스가 자동화 테스트 스위트에 추가되지 않았음을 의미할 수 있다.
자동화 스크립트 개발을 모니터링하는데 이용할 수 있는 많은 지표가 있다. 대부분은 SUT 소스 코드 지표와 유사하다. 코드 라인(Line of Code, LOC) 과 순환 복잡도는 지나치게 크거나 복잡한 스크립트를 강조하여 재설계가 필요할 수 있음을 의미할 수 있다.
주석과 실행 가능한 코드의 비율은 스크립트의 문서화 및 주석의 범위를 나타낼 수 있다. 스크립트 표준에 대한 비준수 항목의 갯수는, 해당 표준이 얼마나 잘 준수되고 있는지를 측정할 수 있게해준다.
자동화 코드는 SUT의 코드와 다를 것 없이, 결함을 포함할 수 있는 소프트웨어다. 자동화 코드가 SUT코드보다 덜 중요하게 취급되어서는 안된다. 좋은 코딩 실습과 표준이 적용되어야 하며, 결과는 코드 결함 밀도와 같은 지표로 모니터링 되어야 한다. 이 지표는 구성관리 시스템의 지원으로 더 쉽게 수집할 수 있다.
동일한 환경과 동일한 테스트 단계를 수행하는 데 걸리는 시간의 차이는 SUT에 문제가 있음을 나타낼 수 있다. SUT가 동일한 기능을 동일한 시간 내에 수행하지 않는다면 확인이 필요하다. 이것은 시스템에 허용되지 않는 변동성이 있을 수 있음을 나타내며, 부하가 증가되면 더 악화될 수 있다. TAS는 SUT의 성능을 저해하지 않을 만큼 충분히 잘 동작해야한다. 만약 SUT의 성능이 중요한 요구사항인 경우에, TAS는 해당 요구사항을 고려하여 설계되어야한다.
위와 같이 많은 지표에서 특정 시간의 측정값보다 시간 경과에 따른 변화 방식(추세)가 더 가치가 있을 수 있다. 예를 들어 유지보수가 필요한 자동 테스트케이스 당 평균 유지보수 코스트가, 이전 2번의 릴리즈의 SUT보다 증가했다는 것을 알게되면, 증가 원인을 파악하고 이러한 흐름을 역전시키기 위한 조치를 취해야할 수 있다.
측정 비용은 가능한 낮아야하며, 이것은 종종 수집 및 리포트의 자동화를 통해 달성할 수 있다.
테스트 자동화 전략의 핵심은 자동화된 테스트웨어이며, 자동화된 테스트웨어는 사용 정보를 기록하도록 기능을 적용할 수 있다. 추상화가 구조화된 테스트웨어와 결합된 경우, 기본 테스트웨어에 적용된 모든 개선 사항은 상위 수준의 모든 자동화 테스트 스크립트에 적용될 수 있다. 예를 들어 테스트 실행의 시작 및 종료 시간을 기록하도록 기본 테스트웨어를 개선하면, 모든 테스트에 적용될 수 있다.
많은 테스트 도구의 스크립트들은 개별 테스트, 테스트 셋 및 전체 테스트 스위트에 대해 실행 전, 중, 후에 정보를 기록하고 로그로 남길 수 있는 기능을 통해 측정 및 리포트를 지원한다.
각 테스트 실행 흐름에 관한 리포트는 이전 테스트 실행 결과를 고려하여 트렌드 (예를 들면 테스트 성공률의 변화) 를 강조할 수 있는 분석기능을 갖추어야한다.
자동화된 테스트는 일반적으로 테스트 실행과 테스트 검증의 자동화 둘 다 필요하며 후자의 경우, 테스트 결과의 특정 요소를 사전에 정의한 기대 결과와 비교하여 달성할 수 있다. 이 비교는 일반적으로는 테스트 도구에 의해 수행되는 것이 제일 좋다. 이 비교의 결과로 보고되는 내용에 대해서는 고려되어야한다. 테스트의 상태 (통과 혹은 실패)가 정확하게 결정되는 것이 중요하다. 실패의 경우에는 실패 원인에 대해 스크린샷등과 같은 더 많은 정보들이 필요하다.
테스트의 실제 결과와 예상 결과에서 예상되는 차이를 구별하는 것이 항상 사소한 것은 아니지만 도구 지원은 예상치 못한 차이를 강조하면서 예상되는 차이(예: 날짜 및 시간)를 무시하는 비교를 정의하는 데 큰 도움이 될 수 있습니다.
자동화된 테스트케이스 실행의 정보가 다른 도구에서 사용될 때, 이 정보를 서드파티 도구에 적절한 형식으로 제공하는 것이 가능하다. 이것은 종종 기존 테스트 도구 기능을 통해 이루어지거나, 다른 프로그램과 일치하는 형식으로 출력되는 맞춤형 보고서를 생성하는 것으로 달성할 수 있다.
테스트 결과는 차트로 시각화되어야한다. 테스트 실행의 문제를 나타내기 위해 색상을 사용하는 것을 고려해야한다. 예를 들어 테스트 실행/자동화의 진행 상황을 표시하기 위해 신호등 색상을 사용할 수 있다. 관리자는 테스트 결과를 한 눈에 보기 위해 시각적 요약에 특히 관심이 있으며, 더 많은 정보가 필요할 때 세부 사항을 탐색할 수 있다.
로깅은 TAS에서 매우 중요하며, 테스트 자동화 자체와 SUT에 대한 로깅을 포함한다. 테스트 로그는 잠재적 문제를 분석하는데에 자주 사용되는 소스다. 다음 섹션에서는 TAS 또는 SUT로 분류된 테스트 로깅의 예를 설명한다.
TAS 로깅 (TAF 또는 테스트 케이스 자체가 정보를 로깅하는지 여부는 중요하진 않으며 상황에 따 다름) 은 아래를 포함해야한다.
SUT 로깅은 아래를 포함해야한다.
모든 다양한 로깅 정보는 쉽게 검색할 수 있어야한다. TAS가 로그 파일에서 식별한 문제는 SUT의 로그 파일에서도 쉽게 식별될 수 있어야 하며, 그 반대의 경우도 마찬가지이다. 다양한 로그를 타임스탬프와 동기화하면 오류가 보고될 때 발생한 일을 상호 연관시키는데 도움이 된다.
테스트 로고는 테스트 케이스/테스트 스위트의 실행 단계, 작업 및 응답에 대한 세부 정보를 제공해야한다. 그러나 로그만으로는 전체 실행 결과에 대한 좋은 개요를 제공할 수는 없다. 이를 위해 보고 기능이 필요하다. 각 테스트 스위트를 실행 후, 간결한 보고서를 작성하고 배포할 수 있어야한다. 재사용 가능한 보고서 생성 구성 요소를 사용할 수 있어야 한다.
테스트 실행 보고서에는 실행 결과, 테스트된 시스템 및 테스트가 실행된 환경에 대한 개요가 포함되어야하고, 이해관계자들에게 적합한 형태여야한다.
어떤 테스트가 실패했는지, 실패한 이유를 아는 것이 필요하다. 문제 해결을 쉽게 하기 위해, 테스트의 실행 이력과 누가 책임자인지를 아는 것이 중요하다. (테스트를 생성하거나 마지막으로 업데이트한 사람) 책임자는 실패 원인을 조사하고, 관련 이슈를 리포트하고, 문제를 추적하고 수정이 잘 되었는지 다시 확인한다.
리포트는 TAF의 컴포넌트의 실패를 진단하는데에도 사용된다 (7장 참조)
리포트는 실행 결과에 관심있는 모든 사람에게 배포되어야한다. 웹사이트에 업로드하거나, 메일로 보내거나, 테스트 관리 도구와 같은 다른 도구에 업로드할 수도 있다. 실용적인 측면에서, 구독 기능을 제공하고 이메일로 보고서를 받을 수 있는 경우, 실행 결과에 관심 있는 사람들이 보고서를 확인하고 분석할 가능성이 높다.
문제 있는 SUT 부분을 식별하는 또 다른 옵션으로는, 보고서의 이력을 유지하여 빈번한 회귀가 발생하는 테스트 케이스 또는 테스트 스위트에 대한 통계를 수집하는 것이다.
ref