애플리케이션 테스트 관련 파트입니다.
소프트웨어 테스트 원리
원리 | 설명 |
---|---|
결함 존재 증명 | - 결함은 없을 수 없기에 존재함을 밝히고 줄이는 방향 |
완벽한 테스팅은 불가능 | - 무한 경로, 무한 입력값 |
초기 집중 | - 조기 테스트 설계 장점 : 테스팅 결과를 단시간에 알 수 있고, 재작업을 줄여 개발 기간 단축 및 결함 예방 - 요르돈의 법칙(Snowball Effect, 눈덩이 법칙) |
결함 집중 | - 적은 수의 모듈에서 대다수 결함 발견 - 파레토 법칙(Pareto Principle) : 오류 80%는 전체 모듈 20% 내에서 발견 |
살충제 패러독스 | - 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그 찾지 못함 - 테스트 케이스의 정기적 리뷰와 개선 필요 |
정황 의존성 | - 소프트웨어의 성격에 맞게 테스트 실시 - 정황과 비즈니스 도메인에 따라 테스트를 다르게 수행 |
오류-부재의 궤변 | - 요구사항을 충족시켜주지 못하면, 결함이 없어도 품질이 높지 않음 |
소프트웨어 테스트 프로세스
소프트웨어 테스트 산출물
산출물 | 설명 |
---|---|
테스트 계획서 (Test Plan) | 테스트 목적과 범위, 대상 시스템 구조, 테스트 수행 절차, 테스트 일정, 조직의 역할 및 책임, 종료 조건 등 테스트 수행 계획 문서 |
테스트 베이시스 (Test Basis) | 분석, 설계 단계의 논리적인 Case로 테스트 설계를 위한 기준이 되는 문서 (요구사항 명세서, 관련 기준 또는 표준 등) |
테스트 케이스 (Test Case) | 테스트를 위한 설계 산출물, SW가 요구사항을 준수하는지 확인하기 위해 설계된 입력값, 실행 조건, 기대 결과로 구성된 테스트 항목의 명세서 |
테스트 슈트 (Test Suites) | - 테스트 케이스를 실행환경에 따라 구분해 놓은 테스트 케이스 집합 - 시나리오가 포함되지 않은 단순 테스트 케이스 모음 |
테스트 시나리오 (Test Scenario) | - 테스트 되어야 할 기능 및 특징, 테스트 필요 상황 작성 문서 - 하나의 단일 테스트 시나리오가 하나/여러 케이스들 포함 가능 - 예 : Test Scenario 1. 로그인 > 상품검색 > 장바구니 담기 > 주문 >결제 |
테스트 스크립트 (Test Script) | - 테스트 케이스의 실행 순서(절차) 작성 문서 - Test Step, Test Procedure라고도 함 - 예 : Test Procedure 1. 로그인, Test Procedure 2. 상품검색, Test Procedure 3. 장바구니 담기, ... |
테스트 결과서 (Test Results) | 테스트 결과를 정리한 문서, 테스트 프로세스 리뷰, 테스트 결과 평가를 리포팅 |
화이트박스 테스트(White-Box Test)
유형 | 설명 |
---|---|
구문 커버리지 =문장 커버리지 (Statement Coverage) | - 프로그램 내 모든 명령문을 적어도 한 번 수행 - 조건문 결과와 관계없이 구문 실행 개수로 계산 |
결정 커버리지 =선택 커버리지 (Decision Coverage) =분기 커버리지 (Branch Coverage) | - (각 분기의) 결정 포인트 내의 전체 조건식이 적어도 한 번은 참과 거짓의 결과를 수행 - 구문 커버리지 포함 |
조건 커버리지 (Condition Coverage) | - (각 분기의) 결정 포인트 내의 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행 - 구문 커버리지 포함 |
조건/결정 커버리지 (Condition/Decision Coverage) | 전체 조건식 뿐만 아니라 개별 조건식도 적어도 한 번은 참과 거짓의 결과가 되도록 수행 |
변경 조건/결정 커버리지 (Modified Condition/ Decision Coverage) | 개별 조건식이 다른 개별 조건식에 영향을 받지 않고, 전체 조건식에 독립적으로 영향을 주어 조건/결정 커버리지를 향상 |
다중 조건 커버리지 (Multiple Condition Coverage) | 결정 조건 내 모든 개별 조건식이 모든 가능한 조합 100% 보장 |
기본 경로 커버리지 =경로 커버리지 (Base Path Coverage) | 수행 가능한 모든 경로 테스트 |
제어 흐름 커버리지 (Control Flow Coverage) | 프로그램 제어 구조를 그래프 형태로 나타내어 새부 로직 테스트 |
데이터 흐름 커버리지 (Data Flow Coverage) | 제어 흐름 그래프에서 데이터 사용현황 추가한 그래프를 통해 테스트 |
루프 커버리지 (Loop Coverage) | 프로그램의 반복(Loop) 구조 |
블랙박스 테스트(Black-Box Test)
유형 | 설명 |
---|---|
동등분할= 동치 분할, 균등 분할= 동치 클래스 분해 (Equivalence Partitioning) | 입력 데이터 영역을 유사한 도메인 별로 유효값/무효값 그룹핑, 대푯값 테스트 케이스 도출 |
경곗값 분석 (Boundary Value Analysis) | 경곗값 포함하여 테스트 케이스 설계 |
결정 테이블 (Decision Table) | 요구사항의 논리와 발생 조건을 테이블 형태로 나열, 조건과 행위를 모두 조합하여 테스트 |
상태 전이 (State Transition) | 테스트 대상, 시스템, 객체의 상태를 구분, 이벤트에 의해 상태가 전이되는 경우의 수 수행 |
유스케이스 (Use Case) | 유스케이스가 모델링 되어 있을 때 프로세스 흐름을 기반으로 테스트 케이스 명세화 수행 |
분류 트리 (Classification Tree) | SW의 일부 또는 전체를 트리 구조로 분석 및 표현 |
페어와이즈 (Pairwise) | 테스트 데이터 값들을 최소 한 번씩 조합, 테스트 범위를 줄임 |
원인-결과 그래프 (Cause-Effect) | 그래프로 입력 데이터 간의 관계 및 출력에 미치는 영향 분석, 효용성 높은 테스트 케이스 선정 |
비교 (Comparison) | 여러 버전 프로그램에 같은 입력값을 넣어 동일한 결과가 나오는지 비교 |
오류 추정 (Error Guessing) | 개발자 실수 추정, 다른 블랙박스 테스트 기법 보완 |
유형 | 설명 |
---|---|
검증(Verification) | - 소프트웨어 개발 과정 테스트 - 올바른 제품 생산 검증 - 이전 단계에서 설정된 개발 규격과 요루 충족 판단 - 개발자 혹은 시험자의 시각으로 명세화된 기능을 올바로 수행하는지 알아보는 과정 |
확인(Validation) | - 소프트웨어 결과 테스트 - 만들어진 제품이 제대로 동작하는지 확인 - 최종 사용자 요구 또는 소프트웨어 요구에 적합 판단 - 사용자 시각으로 올바른 소프트웨어가 개발되었는지 입증하는 과정 |
유형 | 설명 |
---|---|
회복(Recovery) | 시스템에 고의로 실패 유도, 시스템 정상 복귀 여부 테스트 |
안전(Security) | 불법적인 소프트웨어 접근 예방을 위해, 소스 코드 내의 보안적인 결함 미리 점검 |
성능(Performance) | 사용자 이벤트에 시스템 응답 시간, 특정 시간 내 처리하는 업무량 등을 측정 |
구조(Structure) | 시스템의 내부 논리 경로, 소스 코드의 복잡도 평가 |
회귀(Regression) | 오류를 제거하거나 수정한 시스템에서 새로이 유입된 오류가 없는지 확인하는 반복 테스트 |
병행(Parallel) | 변경된 시스템과 기존 시스템에 동일한 데이터 입력 결과 비교 |
테스트의 결과가 참인지 거짓인지 판단하기 위해 사전 정의된 참값을 입력하여 비교하는 기법
유형 | 설명 |
---|---|
참(True) 오라클 | 모든 입력값에 대해 기대 결과를 생성, 발생된 오류 모두 검출 |
샘플링(Sampling) 오라클 | 특정한 몇 개 입력값에 대해 기대하는 결과를 제공 |
휴리스틱(Heuristic) 오라클 | 샘플링 오라클 개선, 특정 입력값에 올바른 결과 제공, 나머지 값은 휴리스틱(추정)으로 처리 |
일관성 검사(Consistent) 오라클 | APP 변경 시, 수행 전과 후 결괏값이 동일한지 확인 |
종류 | 설명 | 기법 |
---|---|---|
단위 테스트 | 사용자 요구사항에 대한 단위 모듈, 서브루틴 테스트 | 정적, 동적 테스트 |
통합 테스트 | 인터페이스, 통합된 컴포넌트 간의 상호 작용 검증 | 빅뱅, 샌드위치, 상향식, 하향식 테스트 |
시스템 테스트 | 통합된 단위 시스템의 기능이 시스템에서 정상 수행되는지 | 기능, 비기능 요구사항 테스트 |
인수 테스트 | 요구사항 만족 확인 | 알파, 베타 테스트 |
테스트 방안 | 빅뱅 테스트 | 상향식 테스트 | 하향식 테스트 | 샌드위치 테스트 |
---|---|---|---|---|
테스트 수행 방법 | - 모든 모듈 통시 통합 | - 최하위 모듈 부터 | - 최상위 모듈부터 | - 상위는 하향식+ 하위는 상향식 |
드라이버 /스텁 | - 실제 모듈 | - 테스트 드라이버 | - 테스트 스텁 | - 스텁+드라이버 |
장점 | - 단시간 테스트 가능 - 작은 시스템에 유리 | - 장애 위치 파악 쉬움 - 모든 모듈 개발 시간 낭비 없음 | - 장애 위치 파악 쉬움 - 이른 프로토타입 가능 - 중요 모듈 선 테스트 | - 병렬 테스트 가능 - 시간 절약 - 큰 규모 통합 테스트 |
단점 | - 장애 위치 파악 어려움 - 모든 모듈 개발 필요 | - 중요 모듈 마지막 테스트 - 이른 프로토타입 어려움 | - 많은 스텁 필요 - 하위 모듈의 불충분 테스트 | - 큰 비용 |
APP 컴포넌트 및 모듈을 테스트하는 환경의 일부분, 테스트 지원 코드 및 데이터, 단위 또는 모듈 테스트에 사용하기 위해 코드 개발자가 작성
구성요소 | 설명 |
---|---|
테스트 드라이버 (Test Driver) | 테스트 대상 하위 모듈 호출, 파라미터 전달, 테스트 수행 후 결과 도출 등 상향식 테스트에 필요 |
테스트 스텁 (Test Stub) | 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로 하향식 테스트에 필요 |
테스트 슈트 (Test Suites) | 테스트 대상 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스 집합 |
테스트 케이스 (Test Case) | 입력값, 실행 조건, 기대 결과 등의 집합 |
테스트 시나리오 (Test Scenario) | 테스트 되어야 할 기능 및 특징, 테스트가 필요한 상황 작성 문서, 여러 개 테스트 케이스 포함 가능 |
테스트 스크립트 (Test Script) | 자동화된 테스트 실행 절차에 대한 명세 |
목 오브젝트 (Mock Object) | 사용자의 행위를 조건부로 사전에 입력해 두면, 그 상황에 예정된 행위를 수행하는 객체 |