정보처리기사 실기
26. 애플리케이션 테스트 케이스 설계
구석탱
2022. 2. 5. 23:08
소프트웨어 테스트
개발된 응용 애플리케이션이나 시스템이 사용자가 요구하는 기능과 성능, 사용성, 안정성 등을 만족하는지 확인하고, 노출되지 않은 숨어있는 소프트웨어의 결함을 찾아내는 활동
1. 소프트웨어 테스트 원리
원리 | 설명 |
테스팅은 결함이 존재함을 밝히는 것 | - 결함이 존재함을 밝히는 활동 - 결함이 없다는 것을 증명할 수는 없음 - 결함을 줄이는 활동 |
완벽한 테스팅은 불가능 | - 완벽하게 테스팅하려는 시도는 불필요한 시간과 자원낭비 - 무한경로(한 프로그램 내의 내부 조건은 무수히 많을 수 있음), 무한 입력값(입력이 가질 수 있는 모든 값의 조합이 무수히 많음)으로 인한 테스트 어려움 |
개발초기에 테스팅 시작 | - 조기 테스트 설계 시 장점 : 테스팅 결과를 단시간에 알 수 있고, 테스팅 기간 단축, 재작업을 줄여 개발 기간 단축 및 결함 예방 - SW 개발 초기 체계적인 분석 및 설계가 수행되지 못하면 그 결과가 프로젝트 후반에 영향을 미치게 되어 비용이 커진다는 요르돈의 법칙 적용(Snowball Effect : 눈덩이 법칙) |
결함 집중 | - 적은 수의 모듈에서 대다수의 결함이 발견됨 - 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견 - 파레토 법칙(Pareto Principle)의 내용인 80대 20 법칙 적용 |
살충제 패러독스 | - 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못함 - 테스트 케이스의 정기적 리뷰와 개선 및 다른 시각에서의 접근이 필요 |
테스팅은 정황에 의존적 | - 소프트웨어의 성격에 맞게 테스트 실시 - 정황과 비즈니스 도메인에 따라 테스트를 다르게 수행 |
오류-부재의 궤변 | - 요구사항을 충족시켜주지 못한다면, 결함이 없다고 해도 품질이 높다고 볼 수 없음 |
2. 소프트웨어 테스트 산출물
산출물 | 설명 |
테스트 계획서 (Test Plan) |
테스트 목적과 범위 정의, 대상 시스템 구조 파악, 테스트 수행 절차, 테스트 일정, 조직의 역할 및 책임 정의, 종료 조건 정의 등 테스트 수행을 계획한 문서 |
테스트 베이시스 (Test Basis) |
분석, 설계 단계의 논리적인 Case로 테스트 설계를 위한 기준이 되는 문서(요구사항 명세서, 관련 기준 또는 표준 등) |
테스트 케이스 (Test Case) |
테스트를 위한 설계 산출물로, 응용 소프트웨어가 사용자의 요구사항을 준수하는지 확인하기 위해 설계된 입력값, 실행 조건, 기대 결과로 구성된 테스트 항목의 명세서 |
테스트 슈트 (Test Suites) |
테스트 케이스를 실행환경에 따라 구분해놓은 테스트 케이스의 집합 단, 시나리오가 포함되지 않은 단순한 테스트 케이스들의 모음 |
테스트 시나리오 (Test Scenario) |
애플리케이션의 테스트 되어야 할 기능 및 특징, 테스트가 필요한 상황을 작성한 문서 하나의 단일 테스트 시나리오가 하나 또는 여러 개의 테스트 케이스들을 포함할 수 있음 테스트 시나리오가 테스트 케이스와 일 대 다의 관계를 가짐 |
테스트 스크립트 (Test Script) |
테스트 케이스의 실행 순서(절차)를 작성한 문서 테스트 스텝(Test Step), 테스트 절차서(Test Procedure)라고도 함 |
테스트 결과서 (Test Results) |
테스트 결과를 정리한 문서로 테스트 프로세스를 리뷰하고, 테스트 결과를 평가하고 리포팅하는 문서 |
소프트웨어 테스트 유형
1. 프로그램 실행 여부에 따른 분류
- 정적 테스트 : 테스트 대상을 실행하지 않고 구조를 분석하여 논리성을 검증하는 테스트
예 ) 리뷰, 정적 분석 - 동적 테스트 : 소프트웨어를 실행하는 방식으로 테스트를 수행하여 결함을 검출하는 테스트
예 ) 화이트박스 테스트, 블랙박스 테스트, 경험 기반 테스트
2. 테스트 기법에 따른 분류
- 화이트박스 테스트 (White-Box Test) : 각 응용프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트
* 구조기반 테스트, 코드 기반 테스트, 로직 기반 테스트, 글래스 박스 테스트라고도 부름
유형 내용 구문 커버리지
= 문장 커버리지 (Statement Coverage)- 프로그램 내의 모든 명령문을 적어도 한 번 수행하는 커버리지
- 조건문 결과와 관계없이 구문 실행 개수로 계산결정 커버리지
= 선택 커버리지 (Decision Coverage)
= 분기 커버리지 (Branch Coverage)- (각 분기의) 결정 포인트 내의 전체 조건식이 적어도 한 번은 참(T)과 거짓(F)의 결과를 수행하는 테스트 커버리지
- 구문 커버리지를 포함조건 커버리지 (Condition Coverage) - (각 분기의) 결정 포인트 내의 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행하는 테스트 커버리지
- 구문 커버리지를 포함조건/결정 커버리지
(Condition/Decision Coverage)- 전체 조건식뿐만 아니라 개별 조건식도 참 한 번, 거짓 한 번 결과가 되도록 수행하는 테스트 커버리지 변경 조건/결정 커버리지
(Modified Condition/Decision Coverage)- 개벌 조건식이 다른 개별 조건식에 영향을 받지 않고 전체 조건식에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시킨 커버리지 다중 조건 커버리지
(Multiple Condition Coverage)- 결정 조건 내 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 커버리지 기본 경로 커버리지
= 경로 커버리지 (Base Path Coverage)- 수행 가능한 모든 경로를 테스트하는 기법
* 맥케이브 순환 복잡도 : 제어 흐름의 복잡한 정보를 정량적으로 표시하는 기법으로 해당 제어 흐름 그래프에서 선형적으로 독립적인 경로의 수를 나타냄
* 맥케이브 순환 복잡도 측정 방식 : 복잡도 V(G) = 간선(E) - 노드(N) + 2제어 흐름 테스트
(Control Flow Testing)- 프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트하는 기법 데이터 흐름 테스트
(Data Flow Testing)- 제어 흐름 그래프에 데이터 사용현황을 추가한 그래프를 통해 테스트하는 기법 - 블랙박스 테스트 (Black-Bax Test) : 프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트(기능 테스트)
유형 내용 동등(동치, 균등) 분할 테스트
= 동치 클래스 분해 테스트
(Equivalence Partitioning Testing)- 입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대푯값 테스트 케이스를 도출하여 테스트하는 기법 경곗값 분석 테스트
= 한곗값 테스트
(Boundary Value Analysis Testing)- 등가 분할 후 경곗값 부분에서 오류 발생이 높기 때문에 경곗값을 포함하여 테스트 케이스를 설계하여 테스트하는 기법
- 최솟값 바로 위, 최대치 바로 아래 등 입력값의 극한 한계를 테스트하는 기법결정 테이블 테스트
(Decision Table Testing)- 요구사항의 논리와 발생조건을 테이블 형태로 나열하여, 조건과 행위를 모두 조합하여 테스트하는 기법 상태 전이 테스트
(State Transition Testing)- 테스트 대상, 시스템이나 객체의 상태를 구분하고, 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 수행하는 테스트 기법 유스케이스 테스트
(Use Case Testing)- 시스템이 실제 사용되는 유스케이스로 모델링 되어 있을 때 프로세스 흐름을 기반으로 테스트 케이스를 명세화하여 수행하는 테스트 기법 분류 트리 테스트
(Classification Tree Method Testing)- SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계하여 테스트하는 기법 페어와이즈 테스트
(Pairwise Testing)- 테스트 데이터 값들 간에 최소한 한 번씩을 조합하는 방식이며, 이는 커버해야 할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트 세트를 구성하기 위한 테스트 기법 원인-결과 그래프 테스트
(Cause-Effect Graphing Testing)- 그래프를 활용하여 입력 데이터 간의 관계 및 출력에 미치는 영향을 분석하여 효용성이 높은 테스트 케이스를 선정하여 테스트하는 기법 비교 테스트
(Comparison Testing)- 여러 버전의 프로그램에 같은 입력값을 넣어서 동일한 결과 데이터가 나오는지 비교해 보는 테스트 기법 - 경험 기반 테스트 : 유사 소프트웨어나 유사 기술 평가에서 테스터의 경험을 토대로 한, 직관과 기술 능력을 기반으로 수행하는 테스트 기법
유형 설명 탐색적 테스트
(Exploratory Test)- 테스트 스크립트 또는 테스트 케이스를 문서로 작성하지 않고 경험에 바탕을 두고 탐색적으로 기능을 수행해 보면서 테스트해보는 기법 오류 추정
(Error Guessing)- 개발자가 범할 수 있는 실수를 추정하고 이에 따른 결함이 검출되도록 테스트 케이스를 설계하여 테스트하는 기법 체크 리스트
(Checklist)- 테스트하고 평가해야 할 내용과 경험을 분류하여 나열한 이후 하나씩 확인하는 테스트 기법 특성 테스트
(Characteristics Test)- 국제 표준인 ISO/IEC 9126 등의 품질 모델에 있는 품질 특성을 염두해 두고 이를 근간으로 경험적으로 테스트 케이스를 설계하고 테스트하는 기법
3. 테스트 시각에 따른 분류
- 검증 (Verification)
- 소프트웨어 개발 과정을 테스트
- 올바른 제품을 생산하고 있는지 검증
- 이전 단계에서 설정된 개발 규격과 요구를 충족시키는지 판단
- 개발자 혹은 시험자의 시각으로 소프트웨어가 명세화된 기능을 올바로 수행하는지 알아보는 과정 - 확인 (Validation)
- 소프트웨어 결과를 테스트
- 만들어진 제품이 제대로 동작하는지 확인
- 최종 사용자 요구 또는 소프트웨어 요구에 적합한지 판단
- 사용자 시각으로 올바른 소프트웨어가 개발되었는지 입증하는 과정
4. 테스트 목적에 따른 분류
- 회복 테스트 (Recovery Testing) : 시스템에 고의로 실패를 유도하고, 시스템의 정상적 복귀 여부를 테스트하는 기법
- 안전 테스트 (Security Testing) : 불법적인 소프트웨어가 접근하여 시스템을 파괴하지 못하도록 소스 코드 내의 보안적인 결함을 미리 점검하는 테스트 기법
- 성능 테스트 (Performance Testing) : 사용자의 이벤트에 시스템이 응답하는 시간, 특정 시간 내에 처리하는 업무량, 사용자 요구에 시스템이 반응하는 속도 등을 측정하는 테스트 기법
- 부하 테스트 (Load Testing) : 시스템에 부하를 계속 증가시키면서 시스템의 임계점을 찾는 테스트로 부하 테스트를 통해 병목 지점을 찾아서 병목 현상을 제거하는 과정을 반복
- 스트레스 테스트 (Stress Testing) : 시스템의 처리 능력 이상의 부하, 즉 임계점 이상의 부하를 가하여 비정상적인 상황에서의 처리를 테스트
- 스파이크 테스트 (Spike Testing) : 짧은 시간에 사용자가 몰릴 때 시스템의 반응 측정 테스트
- 내구성 테스트 (Endurance Testing) : 오랜 시간 동안 시스템에 높은 부하를 가하여 시스템 반응 테스트 - 구조 테스트 (Structure Testing) : 시스템의 내부 논리 경로, 소스 코드의 복잡도를 평가하는 테스트 기법
- 회귀 테스트 (Regression Testing) : 회귀 테스트는 오류를 제거하거나 수정한 시스템에서 오류 제거와 수정에 의해 새로이 유입된 오류가 없는지 확인하는 일종의 반복 테스트 기법
- 병행 테스트 (Parallel Testing) : 변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 결과를 비교하는 테스트 기법
리뷰
- 관리 리뷰 (Management Review) : 프로젝트 진행 상황에 대한 전반적인 검토를 바탕으로 범위, 일정, 인력 등에 대한 통제 및 의사 결정을 지원하는 리뷰
- 기술 리뷰 (Technical Review) : 정의된 계획 및 명세를 준수하고 있는지에 대한 검토를 수행하는 리뷰로 변경 사항이 적절하게 구현되었는지를 평가하고, 여러 대안을 추천하거나 대안을 검토
- 인스펙션 (Inspection) : 소프트웨어 요구, 설계, 원시 코드 등의 저작자 외의 다른 전문가 또는 팀이 검사하여 문제를 식별하고 문제에 대한 올바른 해결을 찾아내는 형식적인 검토 기법
- 주재자 (Moderator) : 검사할 작업물을 기초로 참가자를 선정, 인스펙션 계획, 회의 주재, 후속 조치 필요를 결정하는 역할 수행
- 작성자 (Author) : 작업물에 대한 작성자로 인스펙션 회의에 필요한 자료 제출, 자료 내용에 관한 설명, 질문에 대한 응답 수행
- 낭독자 (Reader) : 작업물에 대한 자신의 이해 및 해석을 바탕으로 작업물에 대해 회의 참가자들에게 설명하며 인스펙션 회의 진행 수행
- 기록자 (Recorder) : 인스펙션 회의 기록, 질의응답 기록, 회의 완료 후 문서화 역할 수행
- 검토자 (Inspector) : 인스펙션 회의를 위해서 전달받은 자료에 대한 충분한 검토 및 인스펙션 회의 참여. 작업물에 대한 결함을 찾고, 완벽한 해결책의 제시보다는 간단한 의견 제시 수행 - 워크스루 (Walk Throughts) : 검토 자료를 회의 전에 배포해서 사전 검토한 후 짧은 시간 동안 회의를 진행하는 형태로 리뷰를 통해 문제 식별, 대안 조사, 개선 활동, 학습 기회를 제공하는 가장 비형식적인 검토 기법
- 감사 (Audit) : 소프트웨어 제품 및 프로세스가 규제, 표준, 가이드라인, 계획, 절차를 준수하고 있는지를 독립적으로 평가하는 기법
테스트 케이스 작성 절차
1. 테스트 계획 검토 및 자료 확보
2. 위험 평가 및 우선순위 결정
3. 테스트 요구사항 정의
4. 테스트 구조 설계 및 테스트 방법 결정
5. 테스트 케이스 정의
6. 테스트 케이스 타당성 확인 및 유지보수
테스트 케이스 구성 요소 (ISO/IEC/IEEE 29119-3 표준 기반)
- 식별자 (Identifier) : 테스트 케이스를 고유하게 식별하기 위한 항목 식별자
- 테스트 항목 (Test Item) : 테스트할 모듈 또는 기능에 대한 간략한 내용
- 입력 명세 (Input Specification) : 테스트 케이스 실행 시 입력할 데이터(입력값, 선택 버튼, 체크리스트 값 등) 및 조건
- 출력 명세 (Output Specification) : 테스트 케이스 실행 시 기대되는 결과 데이터(출력 값, 결과 화면, 기대 동작 등)
- 환경 설정 (Environmental Needs) : 테스트 케이스 수행 시 필요한 하드웨어나 소프트웨어 환경, 테스트 시 사용할 물리적, 논리적 테스트 환경
- 특수 절차 요구 (Special Procedure Requirement) : 테스트 케이스 수행 시 특별히 요구되는 절차
- 의존성 기술 (Inter-case Dependencies) : 테스트 케이스 간의 의존성 및 종속성
테스트 오라클
테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기법
- 참(True) 오라클 : 모든 입력값에 대하여 기대하는 결과를 생성함으로써 발생된 오류를 모두 검출할 수 있는 오라클
- 샘플링(Sampling) 오라클 : 특정한 몇 개의 입력값에 대해서만 기대하는 결과를 제공해주는 오라클
- 휴리스틱(Heuristic) 오라클 : 샘플링 오라클을 개선한 오라클로, 특정 입력값에 대해 올바른 결과를 제공하고, 나머지 값들에 대해서는 휴리스틱(추정)으로 처리하는 오라클
- 일관성 검사(Consistent) 오라클 : 애플리케이션 변경이 있을 때, 수행 전과 후의 결괏값이 동일한지 확인하는 오라클
테스트 레벨 종류
- 단위 테스트 : 사용자 요구사항에 대한 단위 모듈, 서브루틴 등을 테스트하는 단계
- 통합 테스트 : 단위 테스트를 통과한 모듈 사이의 인터페이스, 통합된 컴포넌트 간의 상호작용을 검증하는 테스트 단계
- 시스템 테스트 : 통합된 단위 시스템의 기능이 시스템에서 정상적으로 수행되는지를 검증하는 테스트 단계
- 인수 테스트 : 계약상의 요구사항이 만족되었는지 확인하기 위한 테스트 단계
- 사용자 인수 테스트 : 비즈니스 사용자가 시스템 사용의 적절성 여부 등을 확인하는 테스트
- 운영상의 인수 테스트 : 시스템 관리자가 시스템 인수 시 수행하는 테스트 활동으로 백업/복원 시스템, 재해 복구, 사용자 관리, 정기 점검 등을 확인하는 테스트
- 계약 인수 테스트 : 계약상의 인수/검수 조건을 준수하는지 여부 등을 확인하는 테스트
- 규정 인수 테스트 : 정부 지침, 법규, 규정 등이 규정에 맞게 개발되었는지 확인하는 테스트
- 알파 테스트 : 선택된 사용자(회사 내의 다른 사용자 또는 실제 사용자)가 개발자 환경에서 통제된 상태로 개발자와 함께 수행하는 인수 테스트
- 베타 테스트 : 실제 환경에서 일정 수의 사용자에게 대상 소프트웨어를 사용하게 하고 피드백을 받는 인수 테스트