테스트 설계 명세 가이드 : 기본 경로 테스팅(5) #8
표준 테스트 설계 명세 가이드에 대해서 알아보도록 하겠습니다.
많은 설계 기법을 다루어야 하기 때문에 8 파트로 나누어서 작성을 하도록 하겠습니다.
정책/전략/가이드의 문서 번호는 410번이며, 이 전 글을 참고하시기 바랍니다.
개정 이력
{고객사명} | SW 정책/전략/가이드 | 작성자 | ||
테스트 설계 명세 가이드 (기본 경로 테스팅) |
검토자 | |||
승인자 |
<관련 부서 합의>
부서 | 이름 | Comment | 일자 |
<문서 제/개정 이력>
번호 | 제/개정 일자 | 제/개정 내용 | 문서 버전 | 개정자 | 승인자 |
1. 개요
1) 목적
📌 본 문서는 테스트 설계 기법 적용방법의 가이드를 목적으로 한다.
📌 실제 프로젝트 산출물을 테스트 베이시스로 하여 테스트 케이스 설계 기법 적용 과정을 예시로 들어 설명한다.
📌 각 기법에 대한 기본적인 내용은 SW 테스팅 관련 서적 또는 교육교재 등을 참조하기 바란다.
2) 적용범위
📌 본 가이드는 ABC사(이하 ‘당사’ 라 함)의 SW 테스팅을 수행하기 위한 모든 설계 시 적용한다.
3) 참고 문서
📌 개발자도 알아야 할 소프트웨어 테스팅 3판
📌 ISTQB Syllabus Test Analysit
4) 문서 관리 담당자
📌 본 문서의 관리 담당자는 아래와 같음
역할 | 담당부서 | 담당자 | 내용 |
문서 책임자 | OOO | OOO | 본 문서 생성 및 수정 권한 부여 |
문서 검토자 | OOO | OOO, OOO | 작성 완료된 본 문서에 대하여 검토하고 의견 개진 |
문서 승인자 | OOO | OOO | 본 문서의 베이스라인을 승인하고 배포 허가 |
2. 테스트케이스 설계 기법 예시
👀 각 기법 별로 본 문서를 참고한다.
- 동등 분할 및 경곗값 분석 기법
- 페어 와이즈 테스팅
- 결정 테이블 테스팅
- 상태 전이 테스팅
- 기본 경로 테스팅 > 이번에 다룰 내용
- 제어 흐름 테스팅
- 최소 비교 테스팅
- 유스 케이스 테스팅
3. 테스트케이스 설계 명세서 작성 가이드(기존 동일)
1) 절차
선행 작업 | 리스크 분석 및 레벨별 테스트 설계 전략 수립 |
명세 절차 | 리스크 아이템 분석서 참조 리스크 아이템 별 테스트 컨디션 도출(기법을 적용, 테스트케이스 설계 기법 예시 참조) 각 테스트 레벨의 설계 전략에 맞는 템플릿 선정(기능 베이스, 시나리오 베이스) 테스트 스위트 작성(케이스 및 프로시저) |
후행 작업 | 테스트 실행 및 로그 생성 테스트 결과 분석 |
2) 역할과 책임
테스트 매니저(또는 리더) | "테스트 설계 가이드"의 유지 관리, 수정 및 배포에 대한 책임이 있다. |
테스트 엔지니어 | "테스트 설계 가이드"를 기반으로 테스트 케이스 도출 시 참조하여 개발한다. |
3) 표준 템플릿
👀 ABC사 테스트 설계 명세서 템플릿. xlsx
4. 기본 경로 테스팅
1) 기법 적용 절차
① 명세서를 분석하여 각 실행문과 분기문(if, for, switch 등)을 식별하고 식별번호를 부여한다.
② 처음 만나는 분기 노드면 Default Path(반복하지 않는 path)를 선택하여 아래 Node로 계속 내려가면서 Path를 기록한다.
③ 마지막 노드를 만나면 기록한 Path 경로로 선택한다.
④ 방문한 노드를 만나면 그 노드에서 방문하지 않은 Path를 선택하여 아래 노드로 계속 내려가면서 2번 항목부터 다시 반복한다.
2) 테스트 베이시스
👀 소스 코드의 각 분기문을 식별하여 결정 포인트(Dn) ID를 부여한다.
Public Ldata ModifyTpsClbIf(LData iTpsClbClnRgIfMapMAP) throws LException {
ITpsClbCusMgr tpsClbCusMgr = new TpsClbCusMgr();
int iNnIrNsLmaTmp = 0;
if(iBesTpsClbGcd.equals("01")){
iNnIrNsLmaTmp = 5000000;
} else if(iBesTpsClbGcd.equals("02")) {
iNnIrNsLmaTmp = 3000000;
} else if(iBesTpsClbGcd.equals("03")) {
iNnIrNsLmaTmp = 2000000;
} else if(iBesTpsClbGcd.equals("04")) {
iNnIrNsLmaTmp = 1000000;
} else {
iNnIrNsLmaTmp = 0;
}
int rPsRu = 0; // modifyTpsClbIf에서 return value
LData input = new LData();
input.setString("CLNN", iTpsClbClnRgIfMapMAP.getString("CLNN"));
input.setString("TPS_CLB_RG_YM",iTpsClbClnRgIfMapMAP.getString("TPS_CLB_RG_YM"));
for(int inx = 0; inputs.getDataCount();intx++) {
LData condition = new LData();
condition.setString("CLNN",iTpsClbClnRgIfMapMAP.getString("CLNN");
inputs.addLData(condition);
rPsRu += tpsClbCusMgr.modifyTpsClbIfGrid(inputs.getLData(inx));
}
LData result = new LData();
result.setNullToInitialize(true);
result.setInt("PS_RU",rPsRu);
return result;
}
👀 테스트 베이시스는 요구사항을 포함하는 모든 문서를 얘기한다. 자세한 용어의 뜻은 아래 링크를 확인 바랍니다.
3) 기법 적용
📌 흐름도 작성
👀 프로그램 소스의 구조를 분석하여 흐름도를 작성한다.
📌 기본 경로 도출
👀 Test Depth Level 2 강도를 기준으로 제어 흐름 경로 조합을 도출한다.
👀 Test Depth Level 강도는 테스트 전략이나 테스트 컨디션에서 결정된다.
기본 경로 | 설명 |
Basis Path 1 | 1 ➡ 2 ➡ 12 ➡ 15 ➡ 18 |
Basis Path 2 | 1 ➡ 2 ➡ 12 ➡ 15 ➡ 16 ➡ 17 ➡ 18 |
Basis Path 3 | 1 ➡ 3 ➡ 4 ➡ 13 ➡ 15 ➡ 18 |
Basis Path 4 | 1 ➡ 3 ➡ 5 ➡ 6 ➡ 14 ➡ 15 ➡ 18 |
Basis Path 5 | 1 ➡ 3 ➡ 5 ➡ 7 ➡ 8 ➡ 10 ➡ 15 ➡ 18 |
Basis Path 6 | 1 ➡ 3 ➡ 5 ➡ 7 ➡ 9 ➡ 11 ➡ 15 ➡ 18 |
📌 적용 유의 사항
① 기본 경로의 수(6)는 소스의 복잡도(Cyclomatic Complexity: 순환 복잡도)와 일치한다.
- 그리고 복잡도는 Branch coverage(분기 커버리지)를 달성하는 최대 테스트 케이스 수이다.
- 모든 경로를 테스트 하는 것은 불가능하므로 최소한 Branch Coverage(분기 커버리지)를 달성하는 테스트는 실행하도록 한다.
② Branch Coverage <= Cyclomatic Complexity <= All Path Coverage
③ 순환복잡도 구하는 공식
- = 영역의 개수
- = 분기 노드 수 + 1 = Edge(Control Flow) - Node(Statement, Decision) + 2
④ 위 예제의 순환 복잡도는
- = 영역수 6
- = 분기 노드 수 (5) + 1 = Edge 수 (18) - Node (14) + 2 = 6
Related References
요약 : 소프트웨어어 qa, 웹 qa, 앱 qa, 소프트웨어 테스트 자동화, 자동화 소프트웨어, pm 교육, 비즈니스 소프트웨어, 기업 교육, audit, auditer
'EDUCATION' 카테고리의 다른 글
[사업관리 감리 - Chap.1] PMBOK 기준 프로젝트 헌정 개발에 대해서 알아보자 (0) | 2021.01.11 |
---|---|
[TMMi] 레벨.2 기준 제어 흐름 테스팅에 대해서 알아보자 (0) | 2021.01.04 |
[TMMi] 레벨.2 기준 상태전이 테스팅에 대해서 알아보자 (0) | 2021.01.02 |
[TMMi] 레벨.2 기준 제품 리스크 분석 가이드에 대해서 알아보자 (0) | 2020.12.24 |
[TMMi] 레벨.2 기준 소프트웨어 테스트 전략서에 대해서 알아보자 (0) | 2020.12.18 |