애플리케이션 테스트는 개발된 소프트웨어가 고객의 요구사항을 만족시키는지 사용자의 입장에서 확인(validation) 하고 기능을 정확히 수행하는지 개발자 입장에서 검증(verification) 한다.
결함/완벽/파레토/살충제/정황/오류부재/초기
(파레토 법칙 : 오류의 80%는 전체 모듈의 20%에서 발견된다.)
(요르돈의 법칙; snowball effect)
| 종류 | 실행 여부 | - |
|---|---|---|
| 정적 테스트 | 실행하지 않고 명세서나 소스 코드를 분석한다. | - 워크스루 (검토 회의, 전문가) - 인스펙션 (워크스루 발전) - 코드 검사 |
| 동적 테스트 | 실행하여 오류를 찾는다. | - 블랙박스 - 화이트박스 |
| 종류 | 설명 | - |
|---|---|---|
| 명세 기반 테스트 | 요구사항 명세에 따라 테스트 케이스 작성 | 블랙박스 테스트 |
| 구조 기반 테스트 | 소프트웨어 내부 논리 흐름에 따라 테스트 케이스 작성 | 화이트박스 테스트 |
| 경험 기반 테스트 | 유사 소프트웨어나 기술에 대한 테스터의 경험에 따라 수행 |
*영문명도 외우자
| 종류 | 설명 |
|---|---|
| 회복 (Recovery) 테스트 | 고의로 결함을 준 후 시스템이 복구되는지 확인 |
| 안전 (Security) 테스트 | 불법 침입으로부터 시스템을 보호할 수 있는지 확인 |
| 강도 (Stress) 테스트 | 과부하 시에도 정상 실행되는지 확인 |
| 성능 (Performance)테스트 | 실시간 성능 확인 (응답 시간, 처리량 등) |
| 구조 (Structure) 테스트 | 소프트웨어 내부의 논리적인 경로, 소스 코드의 복잡도 등 평가 |
| 회귀 (Regression) 테스트 | 변경 사항이 발생하면 수행 / 변경된 코드에 새로운 결함이 없는지 확인 |
| 병행 (Parallel) 테스트 | 기존 소프트웨어와 변경된 소프트웨어에 동일한 데이터를 입력하여 결과 비교 |
성능 (Performance)테스트 종류
논리적인 모든 경로를 테스트한다.
이 테스트의 이해를 위해 논리 흐름도(Logic-Flow Diagram)를 이용할 수 있다.
화이트박스 테스트 종류
*영문명도 외우자
| 종류 | 설명 |
|---|---|
| 기초 경로 검사 (Base Path Testing) | 수행 가능한 모든 경로를 테스트 절차적 설계의 논리적 복잡성 측정 가능 |
| 제어 구조 검사 (Control Structure Testing) | 테스트 케이스 설계 기법 ► 조건 검사(Condition Testing) : 프로그램 모듈 내에 있는 논리적 조건을 테스트 ► 루프 검사(Loop Testing) : 프로그램의 반복(Loop) 구조에 초점을 맞춰 실시 ► 데이터 흐름 검사(Data Flow Testing) : 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시 |
화이트박스 테스트 검증 기준 (구조적 커버리지)
| 기준 | 설명 |
|---|---|
| 문장 검증 기준 (Statement Coverage) | 소스 코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스 설계 |
| 분기/결정 검증 기준 (Branch Coverage) | 소스 코드의 모든 조건문에 대해 결과가 T/F 각각 한 번 이상 수행되도록 테스트 케이스 설계 |
| 조건 검증 기준 (Condition Coverage) | 소스 코드의 조건문에 포함된 개별 조건식의 결과가 T/F 각각 한 번 이상 수행되도록 테스트 케이스 설계 |
| 분기/조건 기준 (Branch/Condition) | 분기 검증 기준과 조건 검증 기준을 모두 만족하는 설계 |
각 기능이 완전히 작동되는 것을 입증하는 테스트이다. (기능 테스트 - 입출력 검증)
블랙박스 테스트 종류
*영문명도 외우자
| 종류 | 설명 |
|---|---|
| 동치 분할 검사 (Equivalence Partitioning) | 입력 자료에 초점을 맞춰 테스트 케이스를 만들고 검사한다. 입력 데이터의 영역을 유효 값, 무효 값을 나누어서 대표값을 검사한다. |
| 경계값 분석 (Boundary Value Analysis) | 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경계값을 검사한다. (입력 자료에만 치중한 동치 분할 기법을 보완하기 위한 기법) |
| 원인-효과 그래프 검사 (Cause-Effect Graphing) | 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법이다. |
| 오류 예측 검사 (Error Guessing) | 과거의 경험이나 확인자의 감각으로 검사한다. 다른 블랙 박스 테스트 기법으로는 찾아낼 수 없는 오류를 찾아내는 일력의 보충적 검사 기법, 데이터 확인 검사라고도 한다. |
| 비교 검사 (Comparison) | 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법이다. |
| 상태 전이 테스팅 (State transition) | 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 수행하는 테스트 기법 |
단통시인
V-모델
소프트웨어 개발 단계 + 애플리케이션 테스트 단계
코딩 직후 소프트웨어 설계의 최소 단위인 개별 모듈이나 컴포넌트에 초점을 맞춰 테스트한다.
인터페이스, 자료 구조, 경로, 서브루틴 등 검사한다.
요구사항을 기반으로 한 기능성 테스트를 최우선으로 수행한다.
발견할 수 있는 오류 :
단위 테스트 종류 :
| 구조기반 테스트 | 화이트박스 (제어 흐름, 조건 결정) |
|---|---|
| 명세기반 테스트 | 블랙박스 (동등 분할, 경계값 분석) |
단위 테스트 통과 후 모듈 사이의 인터페이스, 통합된 컴포넌트 간 상호작용을 검증하는 테스트
(모듈 간 상호작용)
상향식 통합 테스트 (Bottom Up Integration)
하향식 통합 테스트 (Top Down Integration)
통합된 단위 시스템 기능이, 즉 개발된 소프트웨어가 정상적으로 수행되는지 검증
시스템 테스트 종류 :
사용자의 요구사항이 충족하는지에 중점을 두고 테스트
최종 사용자와 업무 이해관계자 등이 수행함으로써 개발된 제품 운영여부 결정
인수 테스트 종류 :
| 종류 | 설명 |
|---|---|
| 테스트 계획서 | 테스트 수행을 계획한 문서 (테스트 목적, 범위, 일정, 수행 절차 등) |
| 테스트 케이스 | 사용자의 요구사항에 준수하는 지 확인하기 위해 설계된 입력 값, 실행 조건, 예상된 결과 등으로 구성된 명세서 (명세 기반 테스트의 산출물) |
| 테스트 시나리오 | 테스트를 수행할 여러 개의 테스트 케이스들의 동작 순서에 따른 묶음으로, 구체적인 테스트 동작 순서를 기술한 문서 |
| 테스트 결과서 | 테스트 결과를 비교, 분석한 내용을 정리한 문서 |
| 테스트 슈트 (Suites) | 테스트 케이스를 실행환경에 따라 구분해 놓은 단순한 테스트 케이스의 묶음(집합) |
사용자의 요구사항에 준수하는 지 확인하기 위해 설계된 입력 값, 실행 조건, 예상된 결과 등으로 구성된 명세서 (명세 기반 테스트의 산출물)
테스트 케이스 구성요소 :
테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법으로,
테스트 케이스에 대한 예상 결과를 계산하거나 확인한다.
테스트 결과가 올바른지 판단하기 위한 기준 값을 계산하거나 확인하는 기법!
테스트 오라클 특징 :
테스트 오라클 종류 :
| 종류 | 설명 |
|---|---|
| 참 오라클 (True Oracle) | 모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공 발생된 오류 모두 검출 가능 |
| 샘플링 오라클 (Sampling Oracle) | 특정한 몇 개의 입력 값에 대해서만 기대하는 결과를 제공 |
| 추정 오라클 (Heuristic Oracle) | 샘플링 오라클을 개선한 오라클 특정한 입력 값에 대해 기대하는 결과를 제공하고, 나머지 입력 값들에 대해서는 추정으로 처리 |
| 일관성 검사 오라클 (Consistency Checking Oracle) | 애플리케이션의 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지 확인 |
| 지표 | 설명 |
|---|---|
| 처리량 (Throughput) | 애플리케이션이 주어진 시간에 처리할 수 있는 트랜잭션의 수, 웹 애플리케이션의 경우 시간당 페이지 수로 표현 |
| 응답 시간 (Response Time) | 사용자 입력이 끝난 후 애플리케이션의 응답 출력이 개시될 때까지의 시간 애플리케이션의 경우 메뉴 클릭 시 해당 메뉴가 나타나기까지 걸리는 시간 |
| 경과 시간 (Turnaround Time) | 애플리케이션에 사용자가 요구를 입력한 시점부터 트랜잭션을 처리 후 그 결과의 출력이 완료할 때까지 걸리는 시간 |
| 자원 사용률 | 애플리케이션이 트랜잭션을 처리하는 동안 사용하는 CPU 사용량, 메모리 사용량, 네트워크 사 용량 |