8장 대규모 테스트 자동화의 아름다움
성공적인 테스트 자동화 구축 방법
내용 정리
자동화된 테스팅?
테스팅 자동화란?
- 우리의 테스팅 자동화가 실패하는 이유
- 자동화된 테스팅 != 테스트 실행의 자동화
→ 테스트 작성 이후 ~ 결과 분석 및 조회까지 모든 프로세스가 자동화 해야 한다.
- 자동화 해야할 테스트 결정 방법
- 얼마나 테스트를 자동화 해야 할지 고민
→ "자동화해야 하는 테스트는 100% 자동화해야 한다."
대규모 자동화란?
규모에 따른 테스트 자동화 범위
- 규모에 따른 테스트 자동화
- 규모 ↓ → 소수의 테스터 작업 시, 자주 반복하는 일부 기능만 자동화해도 Ok
- 규모 ↑ → 수 백개의 장비에서 작업 시, 테스트 작성 ~ 테스트 조회까지 모든 단계가 완전히 자동화 Ⓜ︎
- 기초적인 테스트 자동화 워크플로우
- 단계
- 자동화 테스트 작성
- 테스트 & 테스트 플랫폼 선택
- 테스트 실행
- 테스트 결과 수집 및 보고
- 새로운 버그 보고/ 수정된 버그 확인
- 문제점
- 결과 수집 및 버그 확인 과정에서 수동 작업 개입이 많이 발생
- 테스트 실행 자동화로 테스트 시간 단축 기대,
but 테스트를 지켜보고 결과를 분석하는데 더 많은 시간 소비
테스트 자동화의 첫 번째 단계
자동화 테스트 코드 작성 시, 유의사항
- 테스트 자동화의 첫 단계 (훌륭한 테스트 코드)
- 테스트 코드의 품질 기준 > 제품 코드의 품질 기준
∵ 자동화 코드는 테스트 팀원들이 이용하고, 앞으로도 계속 이용하기 때문
⇒ 한 번 작성할 때 누구나 이해할 수 있도록 간결하게 작성할 것
- 테스트 코드 작성 시 유의사항
- 테스트 코드는 관리하기 쉬워야 한다
- 테스트 코드는 작성자 이외 여러 사람들이 읽고 수정할 코드다. 제품 코드보다 더 높은 관리성이 요구된다.
- 테스트 코드의 코드 리뷰와 정적 분석 또한 중요하다
- 여러 프로젝트에 재사용될 수 있기에 서버 경로나 ID & PWD 등 하드코딩을 최대한 피하자
- 테스트 코드는 중앙에서 소스 관리와 빌드가 가능해야 한다.
- 모든 테스트 팀원들이 사용할 코드이므로 통일된 버전으로 돌아가야 한다.
- 테스트 보조 자원→ 테스트 시 사용되는 데이터 파일, 문서 기타 데이터
- 테스트 보조 자원 유의사항
1. 자동화된 테스팅 시스템은 보조 자원에 접근 가능토록 것.
2. 보조 자원을 임시 저장소에 두지 말 것. (∵ 추후 자동화 테스트 검증 시 필요.)
자동화 테스트와 TC 관리
자동화 테스트 위한 TC 관리법
- TC(테스트케이스) 관리
- 대규모 프로젝트의 자동화 일수록 TC 관리 기능 또한 중요도 ↑
- TC(테스트케이스)의 관리 속성
- TC ID : 고유 ID 자동 할당 및 속성에 따른 ID 분류 체계
- 테스트 스크립트 : 여러 자동 테스트 표준화
- 설정 : 자동화 테스트를 어떠한 환경에서 실행할지는 계획 초기에 설정할 것
- 태그 : 테스트에 대한 추가적인 메타 데이터 기재 방법. 태그를 달면 테스트 업무에 따라 실행해야할 TC를 자동적으로 필터할 수 있다.
(예시 : "성능테스트", "인수테스트", "리그렉션", ...)
- 체계적인 TC 관리의 효과
자동화 프로세스의 뒷 단계에서의 시간을 절약해줌.
∵ 테스트 실패 시, 빠른 원인 파악 가능
자동화 테스트 환경
자동화 테스트 환경 구축 시, 유의사항
- 테스트 환경 구축
- 테스트는 반드시 실행할 장소가 필요하다.
- 풍족한 장비가 있더라도, 구성 계획은 반드시 필요하다.
- 테스트 실행에 있어서 순차적 진행보단 병렬적 진행 고려하자
- 테스트 환경 구성은 장비 활용도가 낮지 않으면서도, 자동화 테스트가 기한 내에 완료할 수 있을 정도의 적절한 수준으로 구축하자.
- 기타 고려사항
- 여러 실행 환경에서의 테스트 위한 가상 장비 마련 필요
- 원격 테스트 진행 가능토록 설계
테스트 분배
자동화 테스트 실행 시, 유의사항
- 자동화 테스트 & 테스트 환경 구축 완료 → 자동화 테스트 배치 및 실행
- 테스트 완료 시간 파악
- 현재 테스트 환경에서 돌릴 수 있는 지 없는 지 파악
- 자동화 테스트의 테스트가 언제 끝날지 완료 시간 파악 하는 것이 중요
→ 예상 완료 시간을 너무 길게 잡으면? 테스트 장비 효율성 ↓
→ 예상 완료 시간을 너무 짧게 잡으면? 테스트 도중 중단
실패 원인 분석 자동화
테스트 결과 분석 자동화가 필요한 이유 자동화 매커니즘
- 자동화 테스트 실패 원인 분류
- 테스트가 이상 행동을 보인다 ? → 제품 버그 or 테스트 오류
- 관련된 여러 테스트 실패 ? → 제품 버그 가능성 ↑
- 여러 장비에서 하나의 테스트 실패 ? → 제품 버그 가능성 ↑ or 테스트 오류
- 자동화 테스트 결과 분석이 어려운 이유
→ 자동화로 테스트 결과 분량이 폭발적 증가. 이에 따라 실패한 테스트 분석에 많은 시간 소요
→ 다른 테스트 진행 어려움 & 제품 품질 저하
⇒ 자동화된 테스트의 실패 원인 조사도 자동화 진행 필요
- 실패 분석 자동화 매커니즘
- 테스트가 실패했는가?
- 이전에 알려진 실패인가? Y: 기존 버그 리포트 작성, N: 새로운 버그 리포트 생성 및 분석 필요 알림
마무리
요약
- 테스팅 자동화의 과정
- 제품 품질과 비슷한 정도의 표준적인 테스트 작성
- 자동화 테스트 위한 환경 구축 & 테스트 장비 분배
- 자동화 테스트 결과 데이터 수집
- 결과 데이터에 따른 테스트 실패 원인 분류 및 버그 리포트 자동화 연구
- 이후, 테스터의 시간과 에너지를 많이 소비하는 일 탐색
정리
기억에 남는 문장
- 테스터가 테스트 작성을 마치는 순간부터 테스트 결과 분석, 조회 단계까지 모든 프로세스가 자동화돼야 한다.
- 테스팅 실행만 자동화 할 경우, 자동화 테스트를 지켜보고 결과를 분석하는데 시간을 너무 많이 소비해 결국 테스팅에 사용할 시간이 부족하게 된다.
- 자동화 테스트를 배치하고 실행하는 단계는 전체 시스템 중 가장 중요하다.
- 테스트 결과는 최근의 정보를 정확하고 쉽게 보여줄 수 있어야 한다.
배운 것
- 테스팅 자동화는 테스트 실행뿐만 아니라 테스팅 프로세스 전체를 자동화해야 한다.
- 자동화 테스트 코드는 제품 코드보다 더 많은 사람들이 볼 것이기 때문에 더욱 간결하게 작성해야한다.
- 자동화 시스템의 작업 시간을 파악하고 있어야, 효율적으로 자동화 시스템을 돌릴 수 있다.
- 테스트 실패 & 결과 분석에 대한 자동화도 이뤄져야만 한다.
참고도서
Adam Goucher, ⌜뷰티풀 테스팅⌟, 지앤선, 2011