애플리케이션테스트케이스설계
- 개발자 통합 테스트 계획에 따라 통합 모듈 및 인터페이스가 요구 사항을 충족하는지에 대한 테스트를 수행
- 개발자 통합 테스트 수행 결과 발견된 결함에 대한 추이 분석을 통하여 잔존 결함을 추정
- 테스트의 충분석 여부를 검증하고 발견된 결함에 대한 개선 조치사항을 작성
통합 테스트의 개념
- 소프트웨어 각 모듈 간의 인터페이스 관련 오류 및 결함을 찾아내기 위한 체계적인 테스트 기법
통합 테스트 수행 방법의 분류
- 일반적으로 점증적인 방법과 비점증적인 방식으로 나뉨
- 비점증적 방법
- 모든 컴포넌트를 사전에 통합하여 전체 프로그램을 한꺼번에 테스트
- 점증적 방법
- 상향식 통합
- 하향식 통합
하향식 통합 Top Down
- 메인 제어 모듈로부터 아래 방향으로 제어의 경로를 따라 이동하면서 하향식으로 통합하면서 테스트를 진행
- 메인 제어 모듈은 작성된 프로그램을 사용하고, 아직 작성되지 않은 하위 제어 모듈 및 모든 하위 컴포넌트를 대신하여 더미 모듈인 스텁을 개발
- 깊이 우선 방식 또는 너비 우선 방식에 따라 하위 모듈인 스텁이 한 번에 하나씩 실제 모듈로 대체
상향식 통합 Bottom Up
- 애플리케이션 구조에서 최하위 레벨의 모듈 또는 컴포넌트로부터 위쪽 방향으로 제어의 경로를 따라 이동하면서 구축과 테스트 시작
- 최하위 레벨의 모듈 또는 컴포넌트들이 하위 모듈의 기능을 수행하는 클러스터로 결합
- 상위의 모듈에서 데이터의 입력과 출력을 확인하기 위한 더미 모듈 인 드라이버를 작성
- 각 통합된 클러스터 단위를 테스트
- 테스트가 완료되면 각 클러스터들은 프로그램의 위쪽으로 결합되며, 드라이버는 실제 모듈 또는 컴포넌트로 대체
회귀 테스팅 Regression Testing
- 통합 테스트 과정에서 오류를 제거하거나 수정한 프로그램이 새로운 형태의 오작동이나 오류를 일으킬 수 있음
- 회귀 테스트는 모듈이나 컴포넌트의 변화로 인해 의도하지 않은 오류가 생기지 않았음을 보증하기 위해 반복 테스트하는 것
- 회귀 테스트 케이스 선정 방법
- 모든 애플리케이션의 기능을 수행할 테스트 케이스의 대표적인 샘플을 도출
- 변경에 의한 영향도가 가장 높은 애플리케이션 기능에 집중한 추가적인 테스트 케이스를 도출
- 실제 수정이 발생한 모듈 또는 컴포넌트에서부터 시행하는 테스트 케이스를 도출
테스트 자동화의 개념
- 테스트 도구를 활용하여 반복적인 테스트 작업을 스크립트 형태로 구현
- 테스트 시간 단축과 인력 투입 비용을 최소하
- 운영중인 시스템의 모니터링 또는 UI가 없는 서비스의 경우에도 정밀한 테스트 수행
테스트 자동화의 장점과 단점
- 장점
- 반복되는 테스트 데이터 재입력 작업의 자동화
- 사용자 요구 기능의 일관성 검증에 유리
- 테스트 결과 값에 대한 객관적인 평가 기준 제공
- 테스트 결과의 통계 작업과 그래프 등 다양한 표시 형태 제공
- UI가 없는 서비스의 경우에도 정밀한 테스트 가능
- 단점
- 도구 도입 후 도구 사용 방법에 대한 교육 및 학습이 필요
- 도구를 프로세스 단계별로 적용하기 위한 시간, 비용, 노력이 필요
- 사용 도구의 경우 고가, 유지 관리 비용이 높아 추가 투자 필요
정적 분석 도구 Static Analysis Tools
- 프로그램을 실제로 실행해 보지 않고 분석하는 방법
- 대부분의 경우 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도 및 남은 결함을 발견하기 위해 사용
- 테스트를 수행하는 사람이 작성된 소스 코드에 대한 이해를 기반한 자동화된 도구 활용한 분석 수행
테스트 실행 도구 Test Execution Tools
- 테스트를 위해 작성된 스크립트를 실행
- 데이터 주도 접근
- 테스트 데이터를 스프레드 시트에 저장하고, 이 데이터를 읽고 실행할 수 있도록 함
- 다양한 테스트 데이터를 이용하여 동일한 테스트 케이스르 반복 실행
- 스크립트 언어에 익숙하지 않은 테스터도 미리 작성된 스크립트에 테스트 데이터만 추가하여 쉽게 테스트를 수행
- 키워드 주도 접근 방식
- 스프레드시트에 테스트를 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장
- 키워드를 이용하여 테스트 수행 동작을 정의
- 테스트 대상 애플리케이션의 특성에 맞추어 키워드에 대해 테일러링을 수행
성능 테스트 도구 Performance Test Tools
- 애플리케이션의 처리량, 응답 시간, 경과 시간, 자원 사용률에 대해 가상의 사용자를 생성하고 테스트를 수행함으로써 성능 목표를 달성하였는지를 확인하는 도구
테스트 통제 도구 Test Control Tools
- 테스트 계획 및 관리를 위한 테스트 관리 도구
- 테스트 수행에 필요한 데이터와 도구를 관리하는 형상 관리 도구
- 테스트에서 발생한 결함에 대해 관리하거나 협업을 지원하기 위한 결함 추적/관리 도구
- 조직의 요구사항에 최적화된 형태의 정보를 생성, 관리하기 위하여 <u트스프레드시트 등 다른 도구들과 연계하여 사용
테스트 장치 Test Harness
- 애플리케이션 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위한 코드와 데이터를 말하며, 단위 또는 모듈 테스트에 사용하기 위해 코드 개발자가 작성
- 구성요소
- 테스트 드라이버
- 상향식 테스트에 필요
- 테스트 스텁
- 하향식 테스트에 필요
- 테스트 슈트
- 대상 모듈, 테스트 케이스 집합
- 테스트 케이스
- 입력 값, 실행조건, 기대 결과
- 테스트 스크립트
- 자동화된 스크립트 실행 절차
- 목 Mock 오브젝트
- 행위를 조건부로 사전에 입력
- 테스트 드라이버
테스트 자동화 도구
소프트웨어 테스트 관리 지원 도구
- 실행된 테스트와 테스트 활동 관리를 지원하며 테스트 실행 도구나 결함 추적 도구, 요구사항 관리 도구와의 인터페이스 역할
- 결함이 발견, 분배, 수정, 확인, 종료되는 결함의 생명주기 관리
- 테스트 진행 상황에 대한 리포트 생성, 발견된 결함의 정량적인 분석을 지원
- 오픈 소스
- 결함관리
- Mantis, Bugzilla
- 테스트 케이스 관리 도구
- Testlink
- 형상 관리 도구
- CVS, SVN, Git, Bazar
- 커뮤니케이션 도구
- MediaWiki, Dokuwiki
- 통합프로젝트 지원 도구
- Trac, nForge, Gforge
- 결함관리
- 상용 소스
- 버그 추적
- JIRA, TPMS, Test Director
- 형상 관리
- Visual Sourcesafe, IBM, Clear Case
- 커뮤니케이션
- Confluence
- 버그 추적
소프트웨어 정적 분석 지원 도구
- 리뷰 프로세스에 관한 정보를 저장, 리뷰 코멘트를 저장
- 정적 분석 도구는 동적 테스트를 하기 전에 결함을 발견할 수 있도록 지원
- 코딩 표준을 지킬 것을 강제하고 구조와 의존 관계를 분석
- 소스 코드의 복잡도를 측정
- 오픈소스
- PMD
- Valgrind
- Find Bugs
- CPPCheck
- Corbetrua
- 상용 소스
- Coverity
- IBM Rtional Software
- PloySpace
소프트웨어 테스트 실행 및 로깅 지원 도구
- 스크립트 언어의 도움으로 저장된 입력 값과 예상 결과를 이용하여 테스트를 실행하고 결과와 비교
- 테스트 대상이 실행되는 환경을 시뮬레이션, 테스트 Harness 도구
- 오픈 소스
- 테스트 프레임워크
- xUnit, TestNG, FIT
- Jmock, Easymock, Googlemock
- 지속적인 통합
- CruiseControl, hudson, jenkinson
- 빌드자동화
- Ant, Maven, Make
- 실행자동화
- STAF/STAX, Selenium
- 테스트 프레임워크
- 상용 소스
- WinRunner
- Jtest
- CodeScroll
소프트웨어 성능 및 모니터링 도구
- 소프트웨어가 실행도중에만 발생하는 시간 의존성과 메모리 누수와 같은 결함 발견에 활용
- 소프트웨어 성능/부하/스트레스를 테슽
- 특정 시스템 리소스의 사용량을 지속적으로 분석하고 확인
- 오픈 소스
- Jmeter
- OpenSTA
- allomon
- 상용 소스
- E-load
- LoadRunner
- Webload
- Robot