정보처리기사/[수제비] 정보처리기사 실기

X. 애플리케이션 테스트 관리_01. 애플리케이션 테스트 케이스 설계

web_seul 2023. 4. 11. 12:42
반응형

1) 애플리케이션 테스트 케이스 작성

SW테스트 : 개발된 응용 애플리케이션이나 시스템이 사용자가 요구하는 기능과 성능, 사용성, 안정성 등을 만족하는지 확인하고 노출되지 않은(숨어있는 소프트웨어의 결함)을 찾아내는 활동

SW테스트 필요성

오류 발견 관점 프로그램에 잠재된 오류를 발견하고 이를 수정하여 올바른 프로그램을 개발하기 위해 필요
오류 예방 관점 프로그램 실행전 동료검토, 워크스루, 언스팩션 등을 통해 오류를 사전에 발견하는 예방차원의 필요
품질 향상 관점 사용자의 요구사항 및 기대 수준을 만족하도록 반복적인 테스트를 거쳐 제품의 신뢰도를 향상하는 품질보증을 위해 필요

 

SW테스트 원리

결함 존재 증명 결함이 존재함을 밝히는 행동
결함이 없다는 것을 증명할 수는 없음
결함을 줄이는 활동
완벽한 테스팅은 불가능 완벽하게 테스팅하려는 시도는 불필요한 시간과 자원낭비
무한경로(한 프로그램 내의 내부 조건은 무수히 많을 수 있음), 무한 입력값(입력이 가질 수 있는 모든 값의 조합이 무수히 많음)으로 인한 테스트 어려움
전략 중요
초기 집중 조기 세트스 설계시 장점 : 테스팅 결과를 단시간에 알 수 있고 테스팅 기간 단축, 재작업을 줄여 개발 기간 단축 및 결함 예방
SW개발 초기 체계적인 분석 및 설계가 수행되지 못하면 그 결과가 프로젝트 후반에 미치게 되어 비용이 커진다는 요르돈의 법칙(Snowball Effect) 적용
결함 집중 적은 수의 모듈에서 대다수의 결함이 발견됨
소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견
파레토 법칙(Pareto Principle)의 내용인 80대 20 법칙 적용
살충제 패러독스 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지못함
테스트 케이스의 정기적 리뷰와 개선 및 다른 시각에서의 접근 필요
정황 의존성 소프트웨어의 성격에 맞게 테스트 실시
정황과 비즈니스 도메인에 따라 테스트를 다르게 수행
오류부재의 궤변 요구사항을 충족시켜주지 못한다면 결함이 없다고해도 품질이 높다고 볼수 없음

 

SW테스트 프로세스

테스트 계획 테스트 분석 및 디자인 테스트 케이스 및
시나리오 작성
테스트 수행 테스트 결과 평가 및
리포팅

 

SW산출물

테스트 계획서
Test Plan
테스트 목적과 범위 정의, 대상 시스템 구조파악, 테스트 수행절차, 테스트 일정, 조직의 역할 및 책임 정의, 종료조건 정의 등 테스트 수행을 계획한 문서
테스트 베이시스
Test Basis
분석, 설계 단계의 논리적인 Case로 테스트 설계를 위한 기준이 되는 문서(요구사항 명세서, 관련 기준 또는 표준 등)
테스트 케이스
Test Case
테스트를 위한 설계 산출물로 응용소프트웨어가 사용자의 요구사항을 준수하는지 확인하기 위해 설계된 입력값, 실행조건, 기대결과로 구성된 테스트 항목의 명세서
테스트 슈트
Test Suite
테스트 케이스를 실행환경에 따라 구분해놓은 테스트 케이스의 집합
단, 시나리오가 포함되지 않은 단순한 테스트케이스들의 모음
테스트 시나리오
Test Scenario
애플리케이션의 테스트 되어야할 기능 및 특징, 테스트가 필요한 상황을 작성한 문서
하나의 단일테스트 시나리오가 하나 또는 여러개의 테스트 케이스들을 포함할 수 있음
테스트 시나리오가 테스트 케이스와 일대다의 관계를 가짐
특정 프로세스에서 만날 수 있는 다양한 상황을 조작 순서로 구성한 것
테스트 스크립트
Test Script
테스트 케이스의 실행순서(절차)를 작성한 문서
테스트 스탭(Test Step), 테스트 절차서(Test Procedure)라고도 함
테스트 프로시저, 효율적 테스트 가능
테스트 결과서
Test Result
테스트 결과를 정리한 문서로 테스트 프로세스를 리뷰하고 테스트 결과를 평가, 리포팅 하는 문서

 

프로그램 실행여부에 따른 테스트 종류

정적 테스트 테스트 대상을 실행하지 않고 구조를 분석하여 논리성을 검증하는 테스트
리뷰(동료검토, 워크스루, 인스펙션), 정적분석
동적 테스트 소프트웨어를 실행하는 방식으로 테스트를 수행하여 결함을 검출하는 테스트
화이트박스 테스트(구조기반 테스트), 블랙박스 테스트(명세기반 테스트, 경험기반 테스트)

 

화이트박스

- 코드분석, 프로그램구조에 대한 지식을 바탕으로 문제가 발생할 가능성이 있는 모듈 내부를 직접 관찰, 테스트(개발자 중심)
- 산출물의 기능별로 적절한 프로그램의 제어구조에 따라 선택, 반복 등의 부분들을 수행하여 논리적 경로 점검
- 구조기반테스트, 코드기반테스트, 로직기반테스트, 글래스박스 테스트라고 부름

테스트 커버리지 : 프로그램의 테스트 수행 정도를 나타내는 값으로 테스트 수행의 완벽성을 측정하는 도구, 주어진 테스트 케이스에 의해 수행되는 소프트웨어의 테스트 범위를 측정하는 테스트 품질 측정 기준테스트의 충분성을 측정하기 위한 정량적 지표

구문 커버리지(문장)
Statement Coverage
프로그램 내의 모든 명령문을 적어도 한번 수행하는 커버리지
조건문 결과와 무관하게 구문 실행개수로 계산
결정 커버리지(선택/분기)
Decision Coverage
(각 분기의) 결정포인트 내의 전체 조건식적어도 한번은 참과 거짓의 결과를 수행하는 테스트 커버리지
구문 커버리지 포함
조건 커버리지
Condition Coverage
(각 분기의) 결정 포인트 내의 각 개별 조건식이 적어도 한번은 참과 거짓의 결과가 되도록 수행하는 테스트 커버리지
구문 커버리지 포함
조건/결정 커버리지
Condition/Decision
Coverage

전체 조건식뿐아니라 개별 조건식도 참 한번, 거짓 한번 결과가 되도록 수행하는 테스트 커버리지
변경조건/결정 커버리지
Modified Condition
Decision Coverage
개별 조건식이 다른 개별 조건식에 영향을 받지않고 전체 조건식에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시킨 커버리지
다중조건 커버리지
Multiple Condition
Coverage
결정 조건내 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 커버리지
기본경로 커버리지
Bass Path Coverage
수행 가능한 모든 경로를 테스트하는 기법
제어흐름 테스트
Control Flow Testing
프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트하는 기법
데이터흐름 테스트
Data Flow Testing
제어 흐름 그래프에 데이터 사용현황을 추가한 그래프를 통해 테스트하는 기법, 디버깅시 사용
루프 테스트 프로그램의 반복(Loop)구조에 초점을 맞춰 실시하는 테스트 기법

 

맥케이브(McCabe)의 순환 복잡도

- 제어 흐름의 복잡한 정보를 정량적으로 표시하는 기법
- 해당 제어 흐름 그래프에서 선형적으로 독립적인 경로의 수를 나타냄
- 맥케이브 순환복잡도 측정 방식은 제어 흐름에 의한 그래프를 통해 원시코드의 회전수를 구하여 복잡도 계산

 

맥케이브의 순환복잡도 측정방법

계산식 V(G) = E - N +2 복잡도 V(G)는 노드(N)수와 간선(E) 수로 계산
V(G) = P + 1 복잡도 V(G)는 조건 분기문(P)의 수로 계산
그래프 구성 프로세싱 태스크 표현
태스크 간의 제어 흐름 표현

 

블랙박스

- 프로그램 외부 사용자의 요구사항 명세를 보며 수행하는 테스트(기능 테스트)
- 기능 및 동작 위주의 테스트를 진행하므로 내부 구조나 작동 원리를 알지 못해도 가능 (사용자 중심)
- 명세테스트 라고도 부름

동등분할 테스트
Equivalence Partitioning Testing
입력데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대푯값 테스트 케이스를 도출하여 테스트하는 기법
경계값 분석 테스트
Boundary Value Analysis Testing
등기 분할 후 경곗값 부분에서 오류발생 확률이 높으므로 경곗값을 포함하여 테스트케이스를 설계, 테스트하는 기법
최솟값 바로위, 최대치 바로 아래 등 입력값의 극한 한계를 테스트하는 기법
결정 테이블 테스트
Desision Table Testing
요구사항의 논리와 발생조건을 테이블 형태로 나열하여 조건과 행위를 모두 조합하여 테스트하는 기법
상태 전이 테스트
State Transition Testing
테스트 대상, 시스템이나 객체의 상태를 구분하고 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 수행하는 테스트 기법
State, Transition, Event, Guard
유스케이스 테스트
Use Case Testing
시스템이 실제 사용되는 유스케이스로 모델링되어 있을 때 프로세스 흐름을 기반으로 테스트케이스를 명세화하여 수행하는 테스트 기법
분류 트리 테스트
Classification Tree
Method Testing
SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계, 테스트하는 기법
페어와이즈 테스트
Pairwise Testing
테스트 데이터값들 간에 최소한 한번씩 조합하는 방식으로 커버해야할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트세트를 구성하기 위한 테스트 기법
원인-결과 테스트
Cause-Effect Graphing
Testing
그래프를 활용하여 입력데이터간의 관계 및 출력에 미치는 영향 분석, 효용성이 높은 테스트 케이스를 선정, 테스트 하는 기법
비교 테스트
Comparison Testing
여러 버전의 프로그램에 같은 입력값을 넣어 동일한 결과데이터가 나오는지 비교하는 테스트
경험기반 테스트 유사 SW나 유사 기술평가에서 테스터의 경험을 토대로 한 직관과 기술능력을 기반으로 수행한는 테스트 기법


탐색적 테스트 테스트 스크립트 또는 테스트 케이스를 문서로 작성하지 않고 경험을 바탕으로 탐색적으로 기능을 수행해보면서 테스트하는 기법
테스트 대상에 대한 이해, 케이스 설계, 실행을 병행하는 방식
무작위 테스팅이 아닌 중대한 테스트 위주, 테스트 엔지니어의 휴리스틱한 능력 필요, 제품을 익히면서 테스트를 설계, 수행
테스트 차터, 시간 제한, 노트로 구성
오류 추정 테스트 개발자가 범할수 있는 실수를 추정하여 이에 따른 결함이 검출되도록 테스트 케이스를 설계하는 기법
특정 테스트 대상이 주어지면 테스터의 경험과 직관을 바탕으로 개발자의 실수를 나열하고 해당 실수에 따른 결함을 노출하는 테스트로 다른 블랙백스 테스트 기법보완시 사용 

 

테스트 시각에 따른 분류

검증
Verification
소프트웨어 개발 과정 테스트, 이전 단계에서 설정된 개발 규격과 요규를 충족시키는지 판단
개발자 혹은 시험자의 시각으로 소프트웨어가 명세화된 기능을 올바로 수행하는지 알아보는 과정
확인
Validation
소프트웨어 결과테스트, 최종 사용자 요구 또는 소프트웨어 요구에 적합한지 판단
사용자 시각으로 올바른 소프트웨어가 개발되었는지 입증하는 과정

 

테스트 목적에 따른 분류

회복 테스트 시스템에 고의로 실패유도, 시스템의 정상적 복귀여부 테스트
안전 테스트 불법적인 SW가 접근하여 시스템을 파괴하지 못하도록 소스코드내의 보안적인 결함을 미리 점검
성능 테스트 사용자의 이벤트에 시스템이 응답하는 시간, 특정시간내 처리하는 업무량 사용자 요구에 시스템이 반응하는 속도 등을 측정하는 테스트 기법
구조 테스트 시스템의 내부 논리경로, 소스코드의 복잡도를 평가하는 테스트 기법
회귀 테스트 회귀 테스트는 오류를 제거하거나 수정한 시스템에서 오류제거와 수정에 의해 새로이 유입된 오류가 없는지 확인하는 일종의 반복 테스트 기법
병행 테스트 변경된 시스템과 기존 시스템에 동일한 데이터를 입력후 결과를 비교하는 테스트 기법
부하 테스트 시스템에 부하를 계속 증가시키며 시스템의 임계점을 찾는 테스트
부하테스트를 통해 병목지점을 찾아 병목 현상을 제거하는 과정 반복
강도 테스트 시스템 처리능력 이상의 부하, 임계점 이상의 부하를 가하여 비정상적인 상황에서 시스템의 처리능력 수행
스파이크 테스트 짧은 시간에 사용자가 몰릴때 시스템의 반응 측정
내구성 테스트 오랜시간동안 시스템에 높은 부하를 가하여 시스템 반응 테스트

 

리뷰 : SW의 다양한 산출물에 존재하는 결함을 검출하거나 프로젝트의 진행상황을 점검하기 위한 활동으로 전문가가 수헹

동료검토
Peer Review
2-3명이 진행하는 리뷰의 형태로 요구사항 명세서 작성자가 명세서를 설명하고 이해관계자들이 설명을 들으며 결함을 발견하는 형태로 진행
워크스루
Walk Through
검토 자료를 회의전에 배포하여 사전 검토 후 짧은 시간동안 회의를 진행하는 형태로 리뷰를 통해 문제 식별, 대안조사, 개선활동, 학습기회를 제공하는 가장 비형식적인 검토기법
인스펙션
Inspection
소프트웨어 요구, 설계, 원시코드 등의 저작자 외의 다른 전문가 또는 팀이 검사하여 문제 식별, 문제에 대한 올바른 해결을 찾아내는 형식적인 검토
개발초기에 검사

 

인스펙션 프로세스 : 계획 -> 사전교육 -> 준비 -> 인스펙션 회의 -> 수정 -> 후속조치

정적분석(Static Analysis) : 리뷰는 사람이 직접 수행하는 수작업 중심의 방법이지만 정적 분석은 도구의 지원을 받아 정적 테스트를 수행하는 방법, 자동화된 도구를 이용하여 산출물의 결함을 검출하거나 복잡도 측정

 

테스트 케이스 : 특정 요구사항에 준수하는지를 확인하기위해 개발된 입력값, 실조건, 예상된 결과의 집합

테스트 계획 검토 및 자료확보 -> 위험 평가 및 우선순위 결정 -> 요구사항 정의 -> 구조 설계 및 방법 결정 -> 케이스 정의 및 작성 -> 케이스 타당성 확인 및 유지보수

공통작성 항목요소 단계명, 작성자, 승인자, 작성일자, 문서버전, 대상시스템, 변경여부, 테스트 범위, 테스트 조직
개별 테스트케이스 항목요소 테스트 ID, 목적, 기능, 데이터, 예상결과, 환경, 조건, 성공/실패 기준, 기타 요소

 

테스트 오라클 : 테스트의 결과가 참인지 거짓인지 판단하기 위해 사전에 정의된 참값을 입력하여 비교하는 기법

참 오라클 모든 입력값에 대해 기대하는 결과를 생성하여 발생된 오류를 모두 검출할 수 있는 오라클
샘플링 오라클 특정한 몇개의 입력값에 대해서만 기대하는 결과를 제공해주는 오라클
휴리스틱 오라클 샘플링 오라클을 개선한 오라클로 특정 입력값에 대해 올바른 결과 제공, 나머지 값들에 대해 휴리스틱으로 처리하는 오라클
일관성 검사 오라클 애플리케이션 변경이 있을때 수행 전과 후의 결괏값이 동일한지 확인하는 오라클

 

2) 애플리케이션 테스트 시나리오 작성

테스트 레벨 : 함께 편성, 관리되는 테스트 활동 그룹, 소프트웨어의 개발단계에 따라 분류가능하며 이를 테스트 레벨이라 함

단위 테스트 통합 테스트 시스템 테스트 인수 테스트
컴포넌트 테스트
단순
개발자가 테스트
컴포넌트 간 통합 시 결함 발견
복잡
개발자, 통합자 테스트
통합테스트 완료 후 테스트
매우 복잡
독립적 테스트 조직
인수시 테스트
운영 여부 결정
사용자가 테스트
개발환경 : 드라이버, 스텁 개발환경 : 드라이버, 스텁 실제환경과 최대 유사한 조건으로 수행 사용자 환경

 

V모델

인수테스트

알파테스트 선택된 사용자(회사 내의 다른 사용자 또는 실제 사용자)가 개발자 환경에서 통제된 상태로 개발자와 함께 수행하는 인수테스트
베타테스트 실제 환경에서 일정 수의 사용자에게 대상 소프트웨어를 사용하게 하고 피드백을 받는 인수테스트

 

테스트 시나리오 : 테스트 수행을 위한 여러 테스트 케이스의 집합, 테스트 케이스의 동작순서를 기술한 문서이며 테스트를 위한 절차를 명세한 문서, 테스트 수행 절차를 미리 정해서 설계 단계에서 중요시된던 요구사항이나 대안 흐름과 같은 테슽 항목을 빠짐없이 테스트

유의점
- 분리작성 : 테스트 항목을 하나의 시나리오에 모두 작성하지 않고 시스템별, 모듈별, 항목별 테스트 시나리오를 분리하여 작성
- 고객의 요구사항과 설계 문서 등을 토대로 테스트 시나리오 작성
- 각 테스트 항목은 식별자 번호, 순서번호, 테스트데이터, 테스트 케이스, 예상결과, 확인 등의 항목을 포함하여 작성

반응형