2022. 9. 11. 14:12ㆍ정처기(실기)/애플리케이션 테스트 관리
(1) 소프트웨어 테스트의 이해
1. 소프트웨어 테스트 개념
- 개발된 응용 어플리케이션이나 시스템이 사용자가 요구하는 기능과 성능 등을 만족하는지를 확인하고, 결함을 찾아내는 활동이다.
2. 소프트웨어 테스트 필요성
- 오류 발견 관점 : 프로그램에 잠재된 오류를 발견하고 수정
- 오류 예방 관점 : 프로그램 실행 전에 각종 검사를 통해 오류를 사전에 발견하고 예방
- 품질 향상 관점 : 사용자의 요구사항 및 기대 수준을 만족하도록 반복적인 테스트를 거쳐 제품의 신뢰도를 향상하는 품질 보증
3. 소프트웨어 테스트의 기본 원칙
- 결합 존재 증명 : 결함을 증명
- 완벽 테스팅은 불가능 : 완벽 테스팅은 불필요함
- 초기 집중 : 조기 테스트 설계할 시 단시간에 결과를 알 수 있고 기간이 단축됨
- 결함 집중 : 적은 수의 모듈에서 대다수의 결함이 발견(오류의 80%는 전체 모듈의 20%)
- 살충제 패러독스 : 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못함
- 정황 의존성 : 소프트웨어의 성격에 맞게 테스트 실시
- 오류-부재의 궤변 : 요구사항을 충족시켜주지 못하면 결함이 없다고 해도 품질이 높다고 할 수 없음
①소프트웨어 테스트 프로세스
테스트 계획 -> 테스트 분석 및 디자인 -> 테스트 케이스 및 시나리오 작성 -> 테스트 수행 -> 테스트 결과 평가 및 리포팅
② 소프트웨어 테스트 산출물
- 산출물에는 테스트 계획서, 테스트 베이시스, 테스트 케이스, 테스트 슈트, 테스트 시나리오, 테스트 스크립트, 테스트 결과서가 있다.
산출물 | 설명 |
테스트 계획서 | 테스트 목적과 범위 정의, 수행 저라, 구조 파악, 책임 정의, 종료 조건 정의 등 테스트 수행을 계획한 문서 |
테스트 베이시스 | 분석, 설계 단계의 논리적인 케이스로 테스트 설계를 위한 기준이 되는 문서 |
테스트 케이스 | 테스트를 위한 설계 산출물, 응용 소프트웨어가 사용자의 요구사항을 준수하는지 확인하기 위해 구성된 테스트 항목의 명세서 |
테스트 슈트 | 테스트 케이스를 실행환경에 따라 구분해 놓은 테스트 케이스의 집합 |
테스트 시나리오 | 애플리케이션의 테스트 되어야 할 기능 및 특징, 테스트가 필요한 상황을 작성한 문서 |
테스트 스크립트 | 테스트 케이스의 실행 순서를 작성한 문서 |
테스트 결과서 | 테스트 결과를 정리한 문서 |
(2) 소프트웨어 테스트 유형
- 프로그램 실행 여부, 테스트 상세 기법, 테스트에 대한 시각, 테스트에 대한 목적, 테스트의 종류에 따라 구분한다.
1. 프로그램 실행 여부에 따른 분류
- 정적 테스트와 동적 테스트로 나뉜다.
- 정적 테스트 : 테스트 대상을 실행하지 않고 구조를 분석하여 논리성을 검증하는 테스트(리뷰, 정적 분석)
- 동적 테스트 : 소프트웨어를 실행하는 방식으로 테스트를 수행하여 결함 검출(화이트박스 테스트, 블랙박스 테스트, 경험기반 테스트)
2. 테스트 기법에 따른 분류
① 화이트박스 테스트
- 각 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트이다.
- 화이트 박스 테스트는 코드 분석과 프로그램 구조에 대한 지식을 바탕으로 문제가 발생할 가능성이 있는 모듈 내부를 테스트하는 방법이다.
- 소스 코드의 모든 문장을 한 번 이상 수행함으로써 진행되고, 산출물의 기능별로 적절한 프로그램이 제어 구조에 따라 선택, 반복 등의 부분들을 수행함으로써 논리적 경로를 점검한다.
- 화이트박스 테스트는 내부 소스 코드의 동작을 개발자가 추적할 수 있기 때문에 동작의 유효성뿐만 아니라 실행되는 과정을 확인할 수 있다.
- 구조기반 테스트, 코드기반 테스트, 로직 기반 테스트, 글래스 박스 테스트라고 부른다.
▼ 화이트박스 테스트 유형
유형 | 내용 |
구문 커버리지 = 문장 커버리지 (Statement Coverage) |
- 구문 커버리지는 프로그램 내의 모든 명령문을 적어도 한 번 수행 |
결정 커버리지 = 선택 커버리지 (Decision Coverage) = 분기 커버리지(Branch Coverage) |
결정 커버리지는 결정 포인트 내의 전체 조건식이 적어도 한 번은 참과 거짓의 결과를 수행 |
조건 커버리지 (Condition Coverage) |
조건 커버리지는 결정 포인트 내의 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행 |
조건/결정 커버리지 (Condition/Decision Coverage) |
전체 조건식 뿐만 아니라 개별 조건식이 적어도 참 한번, 거짓 한번 결과가 되도록 수행 |
변경 조건/결정 커버리지 (Modified Condition/ Decision Coverage) |
변경 조건/결정 커버리지는 개별 조건식이 다른 개별 조건식에 영향을 받지 않고 전체 조건식에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시킨 커버리지 |
다중 조건 커버리지 (Multiple Condition Coverage) |
결정 조건 내 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 커버리지 |
기본 경로 커버리지 = 경로 커버리지 (Base Path Coverage) |
기본 경로 커버리지는 수행 가능한 모든 경로를 테스트하는 기법 |
제어 흐름 테스트 (Control Flow Testing) |
프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트 |
데이터 흐름 테스트 (Data Flow Testing) |
제어 흐름 그래프에 데이터 사용현황을 추가한 그래프를 통해 테스트 |
② 블랙박스 테스트
- 프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트이다.
▼ 블랙박스 테스트 유형
유형 | 내용 |
동등분할 테스트 = 동치 분할 테스트, 균등 분할 테스트, 동치 클래스 분해 테스트 (Equivalence Partitioning Testing) |
입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대푯값 테스트 케이스를 도출하여 테스트하는 기법 |
경곗값 분석 테스트 = 한곗값 테스트 (Boundary Value Analysis Testing) |
등가 분할 후 경곗값 부분에서 오류 발생 확률이 높기 대문에 경곗값을 포함하여 테스트 케이스를 설계하여 테스트하는 기법 |
결정 테이블 테스트 (Decision Table Testing) |
요구사항의 논리와 발생조건을 테이블 형태로 나열하여, 조건과 행위를 모두 조합하여 테스트하는 기법 |
상태 전이 테스트 (State Transition Testing) |
테스트 대상, 시스템이나 객체의 상태를 구분하고, 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 수행하는 테스트 |
유스케이스 테스트 | 시스템이 실제 사용되는 유스케이스로 모델링 되어 있을 때 프로세스 흐름을 기반으로 테스트 케이스를 명세화하여 수행하는 테스트 |
분류 트리 테스트 | SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계하여 테스트 |
페어와이즈 테스트 | 테스트 데이터값들 간에 최소한 한 번씩을 조합하는 방식, 이는 커버해야 할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트 세트를 구성하기 위한 테스트 기법 |
원인-결과 그래프 테스트 | 그래프를 활용하여 입력 데이터 간의 관계 및 출력에 미치는 영향을 분석하여 효용성이 높은 테스트 케이스를 선정하여 테스트 |
비교 테스트 | 여러 버전의 프로그램에 같은 입력값을 넣어서 동일한 결과 데이터가 나오는지 비교해 보는 테스트 기법 |
- 소프트웨어의 특징, 요구사항, 설계 명세서 등에 초점을 맞춰 테스트가 이뤄진다.
- 블랙박스 테스트는 기능 및 동작 위주의 테스트를 진행하기 때문에 내부 구조나 작동 원리를 알지 못해도 가능하다.
- 명세 테스트라고도 불린다.
3. 테스트 시각에 따른 분류
분류 | 설명 |
검증 | 소프트웨어 개발 과정을 테스트 올바른 제품을 생산하고 있는지 검증 개발자의 시각으로 수행하는지 알아봄 |
확인 | 소프트웨어 결과를 테스트 제품이 제대로 작동하고 있는지 확인 사용자 시각으로 올바른 소프트웨어가 개발되었는지를 입증 |
4. 테스트 목적에 따른 분류
분류 | 설명 |
회복 테스트 | 시스템에 고의로 실패를 유도하고 복귀 여부를 테스트 |
안전 테스트 | 불법적인 소프트웨어가 접근하여 시스템을 파괴하지 못하도록 소스 코드 내의 보안적인 결함을 미리 점검 |
성능 테스트 (Performance Testing) |
사용자의 이벤트에 시스템이 응답하는 시간, 특정 시간 내에 처리하는 업무량, 속도 등을 측정하는 테스트 기법 |
구조 테스트 (Structure Testing) |
시스템의 내부 논리 경로, 소스 코드의 복잡도를 평가 |
회귀 테스트 (Regression Testing) |
오류를 제거하거나 수정한 시스템에서 오류 제거와 수정에 의해 새로이 유입된 오류가 없는지 확인하는 일종의 반복 테스트 기법 |
병행 테스트 (Parallel Testing) |
변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 결과를 비교하는 테스트 |
▼ 성능 테스트의 상세 유형
- 부하 테스트(Load Testing) : 시스템에 부하를 계속 증가시키면서 시스템의 임계점을 찾는 테스트
- 강도 테스트 : 시스템 처리 능력 이상의 부하, 즉 임계점 이상의 부하를 가하여 비정상적인 상황에서의 처리를 테스트
- 스파이크 테스트 : 짧은 시간에 사용자가 몰릴 때 시스템의 반응 측정 테스트
- 내구성 테스트 : 오랜 시간 동안 시스템에 높은 부하를 가하여 시스템 반응 테스트
(3) 정적 테스트
1. 리뷰
- 리뷰는 소프트웨어의 다양한 산출물에 존재하는 결함을 검출하거나 프로젝트의 진행 상황을 점검하기 위한 활동으로, 전문가가 수행한다.
2. 리뷰의 종류
① 동료 검토
- 2~3명이 진행하는 리뷰의 형태
- 요구사항 명세서 작성자가 요구사항 명세서를 설명하고, 이해관계자들이 설명을 들으면서 결함을 발견하는 형태
② 인스펙션
- 인스펙션은 소프트웨어 요구, 설계, 원시 코드 등의 저작자 외의 다른 전문가가 검사하여 문제를 식별하고 문제에 대한 올바른 해결을 찾아내는 검토 기법
- 인스펙션 프로세스는 계획 수립 -> 절차 및 작업물의 개요 설명 -> 준비 -> 검토 회의 -> 재작업 -> 후속 작업으로 이루어진다.
③ 워크 스루
- 검토 자료를 회의 전에 배포해서 사전 검토한 후 짧은 시간 동안 회의를 진행하는 형태로 리뷰를 통해 문제 등을 제공하는 가장 비형식적인 검토 기법이다.
- 결함을 검출할 뿐만 아니라 참가자들의 교육이나 지식 공유를 위해 수행된다.
2. 정적 분석
- 리뷰는 사람이 직접 수행하는 수작업 중심의 방법이지만, 정적 분석은 도구의 지원을 받아 정적 테스트를 수행하는 방법이다.
- 코딩 표준을 통해 개발자가 프로그램 작성 시 지켜야 할 지침이 있다.
- 신뢰할 수 있는 척도를 사용하여 프로그램의 복잡도를 측정할 수 있다.
- 프로그램의 자료 흐름에 이상 존재 여부에 대한 분석 검사가 잇다.
(4) 동적 테스트
1. 화이트박스 테스트
- 각 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트이다.
① 기본 구문
- IF 문이 2개, 분기가 2개이고, 문장 2개로 이루어져 있다.
②테스트 커버리지 개념
- 프로그램의 테스트 수행 정도를 나타내는 값으로 테스트 수행의 완벽성을 측정하는 도구이다.
▼테스트 커버리지 유형
유형 | 설명 |
기능 기반 커버리지 | 테스트 대상 애플리케이션의 전체 기능을 모수로 설정하고, 실제 테스트가 수행된 기능의 수를 측정하는 방법 |
라인 커버리지 | 애플리케이션 전체 소스 코드의 라인 수를 모수로 테스트 시나리오가 수행한 소스 코드의 라인 수를 측정하는 방법 |
코드 커버리지 | 소스 코드의 구문, 조건, 결정 등의 구조 코드 자체가 얼마나 테스트되었는지를 측정하는 방법 |
③ 테스트 커버리지의 구성
- 구문, 결정, 조건, 결정 포인트로 구성되어 있다.
- 소스 코드는 구문으로 구성되어 있고, 조건문에 대한 결정이 있고, 결정에 대한 각 조건식이 있다.
- 참과 거짓에 대한 결정 포인트가 있는데, 소스 코드상의 if, while, for, switch 문이 결정 포인트라고 할 수 있다.
- 전체 조건식은 소스 코드에서 결정 포인트 내에 있는 모든 조건문이고, 개별 조건식은 전체 조건식에 연산자로 구분한 각각의 조건식이다.
④ 구문 커버리지
- 프로그램 내의 모든 명령문을 적어도 한 번 수행하는 테스트 커버리지이다.
문장 커버리지 = 테스트 케이스 집합에 의해 실행된 문장의 수/(전체 실행 가능한 프로그램 문장의 수)*100
⑤ 결정 커버리지
- 결정 포인트 내의 전체 조건식이 적어도 한번은 참과 거짓의 결과를 수행하는 테스트 커버리지이다.
- 선택 커버리지, 분기 커버리지라고도 한다.
결정 커버리지 = (테스트 케이스 집합에 의해 실행된 결정의 결과 수)/(전체 프로그램 결과 수) * 100%
⑥ 조건 커버리지
- 결정 포인트 내의 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행하는 테스트 커버리지이다.
⑦ 조건/결정 커버리지
- 조건 커버리지와 결정 커버리지를 최소한의 조합으로 달성하는 커버리지이다.
- 전체 조건식뿐만 아니라 개별 조건식도 참 한번, 거짓 한번 결과가 되도록 수행하는 커버리지이다.
⑧ 변경 조건/결정 커버리지
- 각 개별 조건식이 다른 개별 조건식에 영향을 받지 않고, 전체 조건식의 결과에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시키는 커버리지이다.
- 변경 조건/결정 커버리지가 조건/결정 커버리지와 다른 점은 결정을 구성하는 각 조건이 독립적으로 결정의 결과에 영향을 미쳐야 한다는 것이다.
- 즉, 각 조건이 결정을 구성하는 다른 조건들과는 무관하게 전체 결정의 평가에 영향을 미치는지를 알아보기 위한 테스트 케이스를 생성해야 한다.
⑨ 다중 조건 커버리지
- 결정 조건 내 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 테스트 커버리지이다.
- 다중 조건 커버리지는 각 조건문 내 기본 조건식의 가능한 논리적인 조합이 적어도 한 번은 테스트되도록 테스트 케이스를 도출하는 방법이다.
- 다중 조건 커버리지는 문장 커버리지, 결정 커버리지, 조건 커버리지 및 조건/결정 커버리지를 포용한다.
⑩ 기본 경로 커버리지
[1] : 맥케이브의 순환복잡도
맥케이브의 순한복잡도를 기반으로 커버리지를 계산한다.
V(G) = E-N+2
V(G) = P+1
[2] : 기본 경로 커버리지
- 수행 가능한 모든 경로를 테스트하는 기법이다.
- 맥케이브가 제안한 테스트 방법으로 순환 복잡도에 근거한 테스트 방법이다.
- 순환 복잡도는 소프트웨어 복잡도에 대한 정량적 지표이고, 프로그램의 기본 경로수는 해당 프로그램의 순환복잡도와 같다.
▼기본 경로 커버리지 방법
(테스트를 수행한 기본 경로의 비율)/(식별한 모든 기본 경로의 수)*100%
㉮ 제어 흐름 테스트
- 프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트하는 기법이다.
- 제어 흐름 테스트는 프로그램의 제어 구조를 충분히 커버하도록 경로를 선택함으로써 테스트 케이스가 개발되며, 선택된 경로들은 '테스팅 완전성'을 가늠하는 척도가 된다.
- 프로그램의 제어 구조를 그래픽으로 표현한 제어 흐름 그래프를 이용한다.
- 제어 흐름 그래프는 노드들의 집합과 에지들의 집합으로 구성된다.
- 제어 흐름 레벨에 따라 테스트 강도 조절이 가능하다.
2. 블랙박스 테스트
- 프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트이다.
- 블랙박스 테스트는 곧 명세 테스트이다.
- 모든 종류의 소프트웨어 시스템에 대해 테스트가 가능하다.
- 전체 소프트웨어 테스트 레벨에서 적용할 수 있는 기법이다.
① 동등분할 테스트
- 입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대푯값 테스트 케이스를 도출하여 테스트하는 기법이다.
- 동등분할 테스트는 동치 분할 테스트, 균등 분할 테스트, 동치 클래스 분해 테스트라고도 한다.
② 경계값 분석 테스트
- 등가 분할 후 경곗값 부분에서 오류 발생 확률이 높기 때문에 경곗값을 포함하여 테스트 케이스를 설계하여 테스트하는 기법
- 최솟값 바로 위, 최대치 바로 아래 등 입력값의 극한 한계를 테스트하는 기법
한곗값 테스트라고도 함
- 클래스 간의 경곗값, 경계 바로 위 값, 경계 바로 아래 값
특징 : 다수의 오류들이 입력 영역의 경계에서 발생
대부분의 경우 동등분할 테스트와 함께 사용
▼
2-value : 경계에 있는 값, 바로 위, 아래 중 하나의 값
3-value : 경계에 있는 값, 경계 바로 위의 값, 경계 바로 아래의 값
③ 결정 테이블 테스트
- 요구사항의 논리와 발생조건을 테이블 형태로 나열하여, 조건과 행위를 모두 조합하여 테스트하는 기법이다.
- 입력 조건의 모든 조합에 대한 시스템의 액션을 고려하여 테스트 케이스를 도출하는 기법이다.
- 특징으로는 복잡한 논리적 관계를 표현하기 좋고, 누락된 요구사항 검사에 용이하다.
④ 상태 전이 테스트
- 테스트 대상/시스템이나 객체의 상태를 구분하고, 이벤트에 의해 어느 한 상태에서 다른 한 상태로 전이되는 경우의 수를 수행하는 테스트 기법이다.
- 시스템을 상태 전이도로 모델링 한 후 상태 전이도에서 테스트 케이스를 도출하는 기법이다.
- 상태 전이도는 시스템 외부에서 들어오는 일련의 이벤트들에 대해 시스템 상태가 어떻게 전이되고 어떤 식으로 반응하는가를 나타내는 도구이다.
⑤ 유스케이스 테스트
- 시스템이 실제 사용되는 유스케이스로 모델링 되어 있을 때 프로세스 흐름을 기반으로 테스트 케이스를 명세화하여 수행하는 테스트 기법
⑥ 분류 트리 테스트
- SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계하여 테스트하는 기법이다.
- 시스템 또는 SW의 입력 및 동작을 다양한 기준으로 구분한 트리를 이용해서 테스트 케이스를 설계한다.
- 동등분할 영역을 구분하는 것과 유사하며, 동등분할 테스트 커버리지 측정원리와 동일하다.
⑦ 페어와이즈 테스트
- 테스트 데이터값들 간에 최소한 한 번씩을 조합하는 방식이며, 이는 커버해야 할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트 세트를 구성하기 위한 테스트 기법이다.
- 페어와이즈 테스트는 대부분의 결함이 두 입력값의 상호 작용에 기인하므로, 가능한 모든 입력값의 조합을 테스트한 것과 비슷한 효과를 얻는다.
- 페어와이즈 테스트는 상대적으로 적은 양의 테스트 세트 구성이 용이하고, 입력 변수 개수와 입력 가능 값이 많을수록 테스트 케이스 도출 복잡도가 높다.
3. 경험 기반 테스트
- 유사 소프트웨어나 유사 기술 평가에서 테스터의 경험을 토대로 한, 직관과 기술 능력을 기반으로 하는 테스트 기법이다.
- 탐색적 테스트 : 테스트 스크립트 또는 테스트 케이스를 문서로 작성하지 않고 경험에 바탕을 두고 탐색적으로 기능을 수행해 보면서 테스트하는 기법
- 오류 추정 : 개발자가 범할 수 있는 실수를 추정하고 이에 따른 결함이 검출되도록 테스트 케이스를 설계하여 테스트하는 기법
'정처기(실기) > 애플리케이션 테스트 관리' 카테고리의 다른 글
애플리케이션 성능 개선 (0) | 2022.09.12 |
---|