[정보처리기사] 애플리케이션 테스트 관리 : 애플리케이션 테스트 케이스 설계(2)
1️⃣ 애플리케이션 테스트 케이스 작성
☆☆☆
(2) 소프트웨어 테스트 유형
2. 테스트 기법에 따른 분류
⓶ 블랙박스 테스트(Black-Box Test)
- 프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트(기능 테스트)
< 블랙박스 테스트 유형 >
유형 | 내용 |
동등 분할 = 동치 분할, 균등 분할, 동치 클래스 분해(Equivalence Partitioning) 테스트 |
입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대표값 테스트 케이스를 도출하여 테스트하는 기법 |
경계값 분석 = 한계값(Boundary Value Analysis) 테스트 |
• 등가 분할 후 경계값 부분에서 오류 발생 확률이 높기 때문에 경계값을 포함하여 테스트 케이스를 설계하여 테스트하는 기법 • 최소값 바로 위, 최대치 바로 아래 등 입력값의 극한 한계를 테스트하는 기법 |
결정 테이블(Decision Table) 테스트 |
요구사항의 논리와 발생 조건을 테이블 형태로 나열하여 조건과 행위를 모두 조합하여 테스트하는 기법 |
상태 전이(State Transitio) 테스트 |
테스트 대상•시스템이나 객체 상태를 구분하고, 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 테스트하는 기법 |
유스케이스(Usecase) 테스트 | 시스템이 실제 사용되는 유스케이스로 모델링되어 있을 때 프로세스 흐름을 기반으로 테스트 케이스를 명세화하여 테스트 하는 기법 |
분류 트리(Classification Method Tree) 테스트 |
SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계하여 테스트하는 기법 |
페어와이즈(Pairwise) 테스트 | 테스트 데이터 값들 간에 최소화 한 번씩을 조합하는 방식이며, 이는 커버해야할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트 세트로 구성하기 위한 테스트 기법 |
원인-결과 그래프(Cause-Effect Graph) 테스트 |
그래프를 활용하여 입력 데이터 간의 관계 및 출력에 미치는 영향을 분석하여 효용성이 높은 테스트 케이스를 선정하여 테스트하는 기법 |
비교(Comparison) 테스트 | 여러 버전의 프로그램에 같은 입력값을 넣어서 동일한 결과 데이터가 나오는지 비교해 보는 테스트 기법 |
오류 추정(Error Guessing) 테스트 | • 개발자가 범할 수 있는 실수를 추정하고 이에 따른 결함이 검출되도록 테스트 케이스를 설계하여 테스트하는 기법 • 특정 테스트 대상이 주어짐녀 테스터의 경험과 직관을 바탐으로 개발자가 범할 수 있는 실수들을 나열하고, 해당 실수에 따른 결함을 노출하는 테스트로 다른 블랙박스 테스트 기법을 보완할 때 사용하는 기법 |
- 소프트웨어의 특징, 요구사항, 설계 명세서 등에 초점을 맞춰 테스트가 이루어짐
- 기능 및 동작 위주의 테스트를 진행하기 때문에 내부 구조나 작동 원리를 알지 못해도 가능함
- 명세 테스트라고도 불림
3. 테스트 시각에 따른 분류
분류 | 설명 |
검증(Verification) | • 소프트웨어 개발 과정을 테스트 • 올바른 제품을 생산하고 있는지 검증 • 이전 단계에서 설정된 개발 규격과 요구를 충족시키는지 판단 • 개발자 혹은 시험자의 시각으로 소프트웨어가 명세화된 기능을 올바르게 수행하는 알아보는 과정 |
확인(Validation) | • 소프트웨어 결과를 테스트 • 만들어진 제품이 제대로 동작하는지 확인 • 최종 사용자 요구 또는 소프트웨어 요구에 적합한지 판단 • 사용자 시각으로 올바른 소프트웨어가 개발되었는지 입증하는 과정 |
4. 테스트 목적에 따른 분류
분류 | 설명 |
회복(Recovery) 테스트 | 시스템에 고의로 실패를 유도하고, 시스템의 정상적 복귀 여부를 테스트하는 기법 |
안전(Security) 테스트 | 불법적인 소프트웨어가 접근하여 시스템을 파괴하지 못하도록 소스 코드 내의 보안적인 결함을 미리 점검하는 테스트 기법 |
성능(Performance) 테스트 | 사용자의 이벤트에 시스템이 응답하는 시간, 특정 시간 내에 처리하는 업무량, 사용자 요구에 시스템이 반응하는 속도 등을 측정하는 테스트 기법 |
구조(Structure) 테스트 | 시스템의 내부 논리 경로, 소스 코드의 복잡도를 평가하는 테스트 기법 |
회귀(Regression) 테스트 | 오류를 제거하거나 수정한 시스템에서 오류 제거와 수정에 의해 새로이 유입된 오류가 없는지 확인하는 일종의 반복 테스트 기법(유지보수에서 자주 사용되는 테스트) |
병행(Parallel) 테스트 | 변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 결과를 비교하는 테스트 기법 |
< 성능 테스트의 상세 유형 >
유형 | 설명 |
부하(Load) 테스트 | • 시스템에 부하를 계속 증가시키면서 시스템의 임계점을 찾는 테스트 • 부하 테스트를 통해 병목 지점을 찾아서 병목 현상을 제거하는 과정을 반복 |
강도(Stress) 테스트 | 시스템 처리 능력 이상의 부하, 즉 임계점 이상의 부하를 가하여 비정상적인 상황에서 시스템의 동작 상태를 확인하는 테스트 |
스파이크(Spike) 테스트 | 짧은 시간에 사용자가 몰릴 때 시스템의 반응을 측정하는 테스트 |
내구성(Endurance) 테스트 | 오랜 시간 동안 시스템에 높은 부하를 가하여 시스템의 반응을 테스트 |
※ 임계점(Threshold) : 처리량이 더는 증가하지 않거나 CPU 이용률이나 메모리 사용량이 비정상적으로 증가하는 지점
(3) 정적 테스트
1. 리뷰(Review)
- 소프트웨어의 다양한 산출물에 존재하는 결함을 검출하거나 프로젝트의 진행 상황을 점검하기 위한 활동으로, 전문가가 수행함
- 리뷰의 유형 : 동료 검토(Peer Review), 인스펙션(Inspection), 워크 스루(Walk Through)
⓵ 동료 검토(Peer Review)
- 2~3명이 진행하는 리뷰의 형태로 요구사항 명세서 작성자가 요구사항 명세서를 설명하고, 이해관계자들이 설명을 들으면서 결함을 발견하는 형태로 진행하는 검토 기법
⓶ 인스펙션(Inspection)
- 소프트웨어 요구, 설계, 원시코드 등의 저작자 외의 다른 전문가 또는 팀이 검사하여 문제를 식별하고 문제에 대한 올바른 해결을 찾아내는 형식적인 검토 기법
- 개발 초기에 검사해야만 개발 초기 작업물에서 문제를 발견할 수 있음
⓷ 워크 스루(Walk Throughts)
- 검토 자료를 회의 전에 배포해서 사전 검토한 후 짧은 시간 동안 회의를 진행하는 형태로 리뷰를 통해 문제 식별, 대안 조사, 개선 활동, 학습 기회를 제공하는 가장 비형식적인 검토 기법
- 결함을 검출할 뿐만 아니라 참가자들의 교육이나 지식 공유를 위해 수행하기도 함
- 작성자 본인이 보통 회의를 주재하며 기록자 역할도 담당할 수 있고, 인스펙션과 마찬가지로 관리자 직책을 담당하는 사람은 멤버로 참여하는 것을 금지함
2. 정적 분석(Static Analysis)
- 자동화된 도구를 이용하여 산출물의 결함을 검출하거나 복잡도를 측정함
- 정적 분석의 종류 : 코딩 표준 부합, 코드 복잡도 계산, 자료 흐름 분석 등
※ 리뷰는 사람이 직접 수행하는 수작업 중심의 방법
※ 정적 분석은 도구의 자원을 받아 정적 테스트를 수행하는 방법
(4) 동적 테스트
1. 화이트박스 테스트(구조 기반 테스트)
- 각 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트
- 구조 기반 테스트, 코드 기반 테스트, 로직 기반 테스트, 글라스(Glass) 박스 테스트라고 부름
⓵ 기본 구문
- 결정 포인트가 2개 있는 프로그램과 제어 흐름도는 아래와 같다.
- IF 문이 2개, 분기가 2개이고, 문장(구문) 2개로 이루어져 있음
< 화이트박스 테스트 예제 >
제어 흐름 그래프(Control Flow Graph) | 프로그램(소스 코드) |
![]() |
![]() |
- 제어 흐름 그래프는 프로그램 구조를 효과적으로 나타낼 수 있는 도구임
- 화이트 박스 테스트 시에 우선 프로그램을 기본 블록과 제어 흐름을 구성된 제어 흐름 그래프를 그린 후에 테스트 케이스를 추출함
- 가장 좋은 화이트박스 테스트는 프로그램의 모든 경로를 최소한 한 번은 테스트하는 방법이지만, 프로그램 경로가 많기 때문에 불가능에 가까움 → 100%를 커버하는 테스트는 시간과 비용이 많이 소요되므로 불가능에 가까움
- 대안으로 일부 경로만 테스트하는 방법을 화이트박스 테스트에서는 주로 사용하고 있음
⓶ 테스트 커버리지 개념
- 프로그램의 테스트 수행 정도를 나타내는 값으로 테스트 수행의 완벽성을 측정하는 도구
- 주어진 테스트 케이스에 의해 수행되는 소프트웨어의 테스트 범위를 측정하는 테스트 품질 측정 기준
- 테스트의 정확성과 신뢰성을 향상시키는 역할을 함
< 테스트 커버리지의 유형 >
유형 | 설명 |
기능 기반 커버리지 | • 테스트 대상 애플리케이션의 전체 기능을 모수로 설정하고, 실제 테스트가 수행된 기능의 수를 측정하는 방법 • 100% 달성을 목표로 하며, 일반적으로 UI가 많은 시스템의 경우 화면 수를 모수로 사용 |
라인 커버리지 | • 애플리케이션 전체 소스 코드의 라인 수를 모수로 테스트 시나리오가 수행한 소스 코드의 라인 수를 측정하는 방법 • 단위 테스트에서는 이 라인 커버리지를 척도로 삼음 |
코드 커버리지 | • 소프트웨어 테스트 충분성 지표 중 하나 • 소스 코드의 구문, 조건, 결정 등의 구조 코드 자체가 얼마나 테스트 되었는지를 측정하는 방법 • 일반적으로 테스트 커버리지라고 하면 코드 커버리지를 일컬음 |
⓷ 테스트 커버리지의 구성
- 구문(문장, Statement), 결정(Decision), 조건(Condition), 결정 포인트(Decision Point)로 구성되어 있음
- 소스 코드는 구문(문장)으로 구성되어 있고, 조건문에 대한 결정이 있고, 결정에 대한 각 조건식이 있음
- 참과 거짓에 대한 결정 포인트(분기 노드)가 있는데, 소스 코드상의 if, while, for, switch 문이 결정 포인트라고 할 수 있음
- 전체 조건식은 소스 코드에서 결정 포인트(분기 노드) 내에 있는 모든 조건문이고, 개별 조건식은 전체 조건식에 연산자(AND, OR 등)로 구분한 각각의 조건식임
⓸ 구문(문장) 커버리지(Statement Coverage)
- 프로그램 내의 모든 명령문을 적어도 한 번 수행하는 테스트 커버리지
- 조건문 결과와 관계없이 구문 실행 개수로 계산함
문장 커버리지(%) = 테스트 케이스 집합에 의해 실행된 문장의 수 / (전체 실행 가능한 프로그램 문장의 수) X 100 |
⓹ 결정 커버리지(Decision Coverage)
- 각 분기의 결정 포인트 내의 전체 조건식이 적어도 한 번은 참(T)과 거짓(F)의 결과를 수행하는 테스트 커버리지
- 선택 커버리지(Decision Coverage), 분기 커버리지(Branch Coverage)라고도 함
- 구문 커버리지를 포함함
⓺ 조건 커버리지(Condition Coverage)
- 각 분기의 결정 포인트 내의 개별 조건식이 적어도 한 번은 참(T)과 거짓(F)의 결과가 되도록 수행하는 테스트 커버리지(전체 조건식의 영향은 고려하지 않음)
조건 커버리지(%) = (테스트 케이스 집합에 의해 실행된 조건의 결과 수 / 전체 프로그램 조건의 결과 수) X 100% |
2. 블랙박스 테스트(명세 기반 테스트)
- 프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트(기능 테스트)
- 명세 테스트라 불림
- 모든 종류의 소프트웨어 시스템에 대해 테스트가 가능함
- 전체 소프트웨어 테스트 레벨(단위, 통합, 시스템, 인수)에서 적용할 수 있는 기법
⓵ 동등 분할 테스트(Equivalence Partitioning Testing) : 입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대표값 테스트 케이스를 도출하여 테스트하는 기법
- 동치 분할 테스트, 균등 분할 테스트, 동치 클래스 분해 테스트라고도 함
⓶ 경계값 분석 테스트(Boundary Value Analysis Testing)
㉮ 경계값 분석 테스트의 개념
- 등가 분할 후 경계값 부분에서 오류 발생 확률이 높기 때문에 경계값을 포함하여 테스트 케이스를 설계하는 테스트하는 기법
- 최소값 바로 위, 최대치 바로 아래 등 입력값의 극한 한계를 테스트하는 기법
- 한계값 테스트라고도 함
㉯ 경계값 분석 테스트의 특징
- 다수의 오류들이 입력 영역의 경계에서 발생함
- 대부분의 경우 동등 분할 테스트와 함께 사용함
< 경계값 선택 기준 >
입력 조건 | 선택 기준 |
값의 범위 | 범위의 끝에 속하는 유효 입력값, 범위 바로 바깥에 속하는 유효하지 않은 입력값 |
몇 개의 값 | • 입력값의 최소값과 최대값 • 최소값과 최대값의 바로 아래와 바로 위의 값 |
파일, 리스트, 테이블과 같은 정렬된 집합 형태 | 첫 번째 항목과 마지막 항목 |
그 외 | 개인의 독창성과 직관에 따라 경계에 해당하는 여러 값 선택 |
< 경계값 선택 방법 >
방법 | 설명 |
2-value | • 경계에 있는 값 • 바로 위, 아래 중 하나의 값(경계가 유효하면 유효하지 않은 값, 유효하지 않으면 유효한 값 선택) |
3-value | • 경계에 있는 값 • 경계 바로 위의 값 • 경계 바로 아래의 값 |
※ 경계값(Boundary Value) : 클래스 간의 경계값, 경계 바로 위아래 값
⓷ 결정 테이블 테스트(Decision Table Testing) : 요구사항의 논리와 발생 조건을 테이블 형태로 나열하여 조건과 행위를 모두 조합하여 테스트하는 기법
- 입력 조건의 모든 조합에 대한 시스템의 액션을 고려하여 테스트 케이스를 도출하는 기법
- 특징으로는 복잡한 논리적 관계를 표현하기 좋고, 누락된 요구사항 검사에 용이함
⓸ 상태 전이 테스트(State Transition Testing) : 테스트 대상/시스템이나 객체의 상태를 구분하고, 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 테스트하는 기법
- 시스템을 상태 전이도로 모델링한 후 상태 전이도에서 테스트 케이스를 도출하는 기법
- 상태 전이도는 시스템 외부에서 들어오는 일련의 이벤트들에 대해 시스템 상태가 어떻게 전이되고 어떤 식으로 반응하는가를 나타내는 도구
⓹ 유스케이스 테스트(Usecase Testing) : 시스템이 실제 사용되는 유스케이스로 모델링 되어 있을 때 프로세스 흐름을 기반으로 테스트 케이스를 명세화하여 테스트하는 기법
⓺ 분류 트리 테스트(Classification Tree Method Testing) : SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계하여 테스트하는 기법
- 시스템 또는 SW의 입력 및 동작을 다양한 기준으로 구분한 트리를 이용해서 테스트 케이스를 설계함
- 동등 분할 영역을 구분하는 것과 유사하며, 동등 분할 테스트 커버리지 측정 원리와 동일함
⓻ 페어와이즈 테스트(Pairwise Testing) : 테스트 데이터 값들 간에 최소한 한 번씩을 조합하는 방식이며, 이는 커버해야 할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트 세트를 구성하기 위한 테스트 기법
- 대부분의 결함이 두 입력 값의 상호 작용에 기인하므로, 가능한 모든 입력 값의 조합을 테스트한 것과 비숫한 효과를 얻음
- 상대적으로 적은 양의 테스트 세트 구성이 용이하고, 입력 변수 개수와 입력 가능 값이 많을수록 테스트 케이스 도출 복잡도가 높음
< 경험 기반 테스트의 유형 >
유형 | 설명 |
탐색적 테스트 (Exploratory Test) |
• 테스트 스크립트 또는 테스트 케이스를 문서로 작성하지 않고 경험에 바탕을 두고 탐색적으로 기능을 수행해보면서 테스트하는 기법 • 사전에 구체적으로 테스트 케이스를 설계하고 이를 바탕으로 테스트를 수행하는 방식이 아니라, 테스트 대상에 대한 이해, 테스트 케이스 설계, 테스트 실행을 병행하는 방식 • 무작위 테스팅이 아닌 중대한 테스트 위주, 테스트 엔지니어의 휴리스틱한 능력 필요, 제품을 익히면서 테스트를 설계하고 테스트 수행 • 구성요소 : 테스트 차터, 시간 제한(Time Boxing), 노트(Note), 회고 |
오류 추정 (Error Guessing) |
• 개발자가 범할 수 있는 실수를 추정하고 이에 따른 결함이 검출되도록 테스트 케이스를 설계하여 테스트하는 기법 • 특정 테스트 대상이 주어지면 테스터의 경험과 직관을 바탕으로 개발자가 범할 수 있는 실수들을 나열하고, 해당 실수에 따른 결함을 노출하는 테스트 수행 • 일반적으로 예상되지 않는 상황이 사용자 입력값으로 적절히 처리되고 있는지 확인할 때 유용 • 필수 입력, 입력 항목의 길이, 입력 항목의 형식, 입력 값의 명시적 제약사항, 입력 값의 무시적 제약사항 등을 확인할 때 유용 |
※ 휴리스틱(Heuristics) : 경험에 기반하여 문제를 해결하거나 학습하거나 발견해 내는 방법
※ 테스트 차터(Test Charter) : 수행될 각 테스트 세션에 대해 명확한 임무를 설정해 놓은 명령지
※ 회고(Debriefing) : 탐색적 테스팅 세션 종료 후 팀원끼리 요약 보고 시간을 갖고 테스트 수행 과정과 경험을 팀원과 공유하는 보고 회의