제 7장 테스트 자동화 (시험 범위 X)
제 8장 정적 테스트
1. 정적 테스트 (리정)
테스트 대상을 실행하지 않는 방식으로 테스트 (리뷰와 정적 분석)
Q. 다음 지문에서 설명하는 정적 테스트 기법은?
IEEE 1028-2008 에서는 정적 테스트를 리뷰라고 한다.
검토하여 결함을 검출, 프로젝트의 진행 상황을 점검하는 것
모든 산출물이 리뷰 대상이다.
1-1. 리뷰
- 관리 리뷰
- 관리자가 주재, 회의는 관리스태프들이 참여
- 프로젝트 진행상황을 모니터하고, 계획과 현재 일정 상태를 평가 +자원,일정,프로젝트범위 등 변경
- 기술 리뷰
- 대표 엔지니어가 주재하며, (관리자도 참가 가능)
- 계획 및 명세 검토(평가)
- 인스펙션(감사) = 동료검토(peer review(비슷한 수준이나 역할의 사람들이 소프트웨어 산출물을 검토)
- 가능한 한 개발 초기에 검사해야만 개발 초기 작업물에서 문제를 찾아낼 수 있다. → 결함은 가능한 빨리 제거해야 한다.
- 작성자 = 주재자가 될 수 없다.
- 관리자 직책 참여 금지
- 워크쓰루(워크스루)[지식 공유도] 작성자가 작업물을 따라 돌아다니며 작업물에 대한 설명을 진행하고 검출된 결함에 대한 권고 및 조치사항들을 기록한다.
- 결함 검출 뿐 아니라, 참가자들의 교육이나 지식공유를 위해 수행되기도 한다.
- 보통 작성자 본인이 회의를 주재, 기록자 역할도 가능
- 관리자 직책 참여 금지
- 감사Audit(회계감사) 객관적인 표준과 규제를 준수하고 있는지 평가
- 목적: 소프트웨어 제품 및 프로세스가 규제, 표준, 가이드라인, 계획, 절차를 준수하고 있는지를 독립적으로 평가 (제품 만 해당하는 것이 아니다 Exercise 162p)
1-2. 정적 분석
코딩 표준
- K&R 방식 확인
- undefined behavior (초기화되지 않은 변수의 사용, 배열의 범위를 넘어서는 인덱스 사용하여 배열 참조, 0으로 나눗셈 연산 시)
- 복잡도 분석
순환 복잡도 구하기 E - N + 2 / 닫힌 영역의 갯수 +1 / 분기 노드들의 개수 +1
동적 테스트 (명구경)
: 테스트 대상을 실행하는 방식으로 테스트
1. 명세 기반 테스트 (블랙박스 테스트)
: 소스 코드 없이 요구 사항 명세나 설계 정보 등을 이용하여 테스트 케이스를 설계
- *명세정보를 얻을 수 있는 한, 전 과정에서 사용 가능(*컴통시인 등 전 과정)
2. 구조 기반 테스트 (화이트박스 테스트)
: 소스 코드를 참고해서 테스트 케이스를 설계 (ex. 특정 경로를 실행하는 입력 값으로 테스트)
3. 경험 기반 테스트
오류 추정: 실수를 추정하고 이에 따른 결함이 검출되도록 테스트 케이스를 설계 (ex 동등 분할의 유효하지 않은 분할, 경계 값 분석 등)
- 탐색적 테스트 : 문서화 없이 즉석에서 테스트케이스를 결정하여 바로 수행한다. 하면서 테스트 대상이 어떻게 동작하는지, 어떤 기능이 동작하는지 파악해나간다.
- 애자일 방법을 사용하는 웹 응용 시스템에 적합 (개발 주기가 매우 짧기 때문에 세부 명세서에 쓸 시간 부족)
- 테스트 케이스 먼저 디자인하지 않고, 다른 테스트 기법의 사용을 포함
제 9장 구조 기반 테스트
구조기반테스트
- 내부 구조 정보 기반으로 설계
= 글래스 박스 테스트(Glassbox), 구조적 테스트(Structural:구조상), Whitebox 테스트
* 그냥 코드를 훤히 보이게 보고서 하는거니 글래스 박스(화이트박스) = 동적 테스트(명구경)로 봐야겠다고 생각했다.
void findVinArray(int a[], int n, int v){//3개의 매개변수
//a[]:정수형 배열 / n:배열의 크기(요소의 개수) / v: 찾고자 하는 값
1: int i = 0;
//1: i는 배열의 인덱스를 나타내는 변수로 초기값을 0으로 설정합니다.
2: int count = 0;
//2: count는 배열에서 찾고자 하는 값 v의 개수를 세기 위한 변수로 초기값을 0으로 설정합니다.
3: while (i < n) {
//3: while 루프가 시작됩니다. 이 루프는 i가 n보다 작을 때 계속 실행
4: if (a[i] == v) {
//4: 현재 인덱스 i의 배열 요소 a[i]가 찾고자 하는 값 v와 같은지를
//검사하는 조건문입니다. 만약 같다면, 다음 줄로 넘어갑니다.
5: count++;// 조건이 참일 경우, count 변수를 1 증가시킵니다.
//5: 이는 배열에서 v를 발견할 때마다 카운트를 증가시키는 역할을 합니다.
6: i++;//인덱스 i를 1 증가시킵니다.
//6: 이렇게 하면 다음 루프에서 배열의 다음 요소를 검사하게 됩니다.
}
//while 루프의 끝입니다. 루프가 다시 시작되면서 i < n 조건이 평가됩니다.
7: printf("number %d", count);// 루프가 종료된 후,
// printf 함수를 사용하여 count의 값을 출력합니다. 이 값은 배열에서 발견한 v의 개수
}
구조 기반 테스트를 하는 이유
: 모든 가능한 경로를 테스트 하는 것은 현실적으로 불가 = 일부 경로를 선정하는 기준 제공
- 문장테스트
- 결정테스트
- 조건테스트
- 결정조건테스트
- 다중조건테스트
- MCDC 및 자료 흐름 테스트 등
테스트 커버리지란?
: 테스팅 양적 평가
테스트 커버리지 ** 꼭 exercise 다 풀어보기
1. 문장(statement) 테스트
*statement : 진술
: 프로그램의 모든(실행가능한) 문장을 최소한 한번은 실행
- 문장커버리지 = TC집합에의해 실행된 문장의 수/ 전체 실행가능한 프로그램 문장의 수
- 전체 6개의 문장 중에서 5개의 문장이 실행됐다면, 문장커버리지는 5/6. 즉 83.3%
2. 결정테스트 (Decision)
: 프로그램의 모든 결정문이 가질 수 있는 결과(각각 참,거짓)을 발생시키는 테스트 케이스 집합
모든 분기가 최소한 한번은 실행해야 한다.
*결정 커버리지 = 분기 커버리지
- 결정커버리지 = TC집합에의해 실행된 결정문의 결과 수/ 전체 프로그램의 결정문의 결과 수
- if (x>0 && y<=-3) 은 1개의 결정문이다.
- 전체 프로그램에서 결정문이 3개이면, 결정문의 결과 수는 총 6개(if문의 수 ×2)이다.
조건 테스트와 결정 테스트는 서로 포용하지 않는다.
3. 조건테스트
: 프로그램의 모든 조건이 참이되는 경우와 거짓이 되는 경우 모두 발생하게 하는 테스트케이스 집합
- 조건커버리지 = TC집합에의해 실행된 개별 조건의 결과 수/ 전체 프로그램의 개별 조건의 결과 수
- 프로그램에 조건이 x>0, y>0, z>0 이 있다. 조건의 결과가 각각 TC1={true, false, false}, TC2={false, true, true}인 테스트케이스 2개는 조건테스트를 만족하는 테스트케이스 집합이다. (조건커버리지=100%)
- TC1은 총 6개의 결괏값 중에 3개가 산출, 조건커버리지는 3/6. 즉 50%.
- 조건이란? 관계 연산자(≤, < > =) 만을 사용하거나 Boolean 변수로만 이뤄진 식을 조건이라고 한다.
4. 결정 조건 테스트
: 결정테스트와 조건테스트를 모두 만족하는 테스트케이스 집합
- 결정/조건커버리지 = TC집합에의해 실행된 결정문과 개별 조건의 결과 수/ 전체 프로그램 결정문과 개별 조건의 결과 수
- 전체 프로그램에서 결정 및 조건문이 총 4개이면, 결정 및 조건문의 결과 수는 총 8개(4 × 2)이다.
196 P. 문제
각 기본 조건식 및 전체 조건식의 결괏값이 참과 거짓을 적어도 한 번 이상 실행시키는 것을 기준으로 하는 테스트
테스트 케이스 수트에 의해 실행된 전체 조건식과 기본 조건식이 몇%인지 측정
= 결정/조건 커버리지, 조건/분기 커버리지
다른 것과 차별점 확인하기 정리하기
5. 다중 조건 테스트
구조기반 테스트 커버리지 중, 테스트 강도가 가장 높다. 프로그램의 결정들에 사용된 모든 조건의 조합을 발생하게 하는 테스트케이스 집합
- 다중 조건 커버리지 = TC집합에의해 실행된 조건들의 조합 수/ 전체 프로그램 개별 조건들의 조합 수
- 조건이 2개이면 모든 가능한 조합은 4개이다. → 조건의 수가 a개이면, 가능한 조합은 2ª개
- 전체 프로그램에서 2개의 결정문이 있고, 첫번째 결정은 2개의 조건, 두번째 결정은 1개의 조건으로 구성됐다. → 조건 조합의 수는 총 6개이다. (첫번째 결정에서 4개의 조건 조합+ 두번째 결정에서 2개의 조건 조합)
- 결정 테스트는 문장 테스트를 포함 (결정 테스트를 만족하는 TC집합은 문장 테스트를 만족한다.)
- 결정 테스트와 조건 테스트는 서로 포함 X
- 다중 조건 테스트는 문장/ 결정/ 조건/ 결정조건 테스트를 모두 포함