Post

[소프트웨어 공학] 구조 기반 테스트

구조 기반 테스트

  • 명세 → Black Box
  • 구조 → 프로그램 코드 : White Box
  • Statement Testing, Branch Testing, Decision Testing

Statment Testing

  • 문장 : Test Coverage Item
  • 100%의 문장 커버리지 : 프로그램 내의 모든 문장들을 적어도 한 번씩 접근하여 테스트
  • 문장 커버리지 = 실행된 문장 / 전체 문장

절차

  • 대상 프로그램에 해당하는 제어 흐름 그래프 작성
  • 모든 실행 가능 기본 블록들을 지나가는 프로그램 경로 집합 식별
  • 입력 데이터 식별, 기대 출력 식별

문제점

  • 실행 불가능 한 블록이 존재하는 경우 100% 블록 커버리지 달성 불가능할 수 있음
  • 문장 테스팅은 일부의 상황만 판별하기 때문에 완벽하지 않음
1
2
3
4
5
6
7
8
int file_write(char * fpath){
    File *fp;
    if(fpath != null)
        fp = fopen(fpath, "w");
    puts("Hello World!", fp);
    fclose(fp);
    return 0;
}
  • fpath null인 경우 테스트 안하면 오류 생김
  • → 이를 보완하기 위한 것이 분기 테스트

Branch Testing

  • 분기가 테스트 커버리지 아이템
  • Test Coverage Item : Branch or Edge
  • 100% 분기 커버리지 : 모든 간선 실행 시

분기 커버리지를 만족하면 문장 커버리지 만족

Decision Testing

  • 테스트 커버리지 아이템 : 결정 (True, False)
  • 결정 : Decision, 조건 : Condition
  • 조건 : 논리 연산자가 없는 경우
  • 결정 : 논리 연산자 있는 경우 /
1
2
3
4
if(x < 0 && y > 0)
    x += y;
else if(x == 0)
    y = 0;
  • Condition : 3개 , Decision 2개
  • Test Coverage Item : 4개 (True, False 조합)

Decision Testing vs BranchTesting

※ ISTQB 에서는 Branch Testing과 구별하지 않음, 다만 29119에서는 구분함

  • 결정문을 가지지 않는 경우 분기 테스트의 테스트 케이스 집합과 결정 테스팅의 테스트 케이스 집합이 동일하지 않을 수 있음
image분기 테스팅 : 만족 / 결정 테스팅 : 불만족
image분기 테스팅 : 만족 / 결정 테스팅 : 만족 (TC1, TC3)
This post is licensed under CC BY 4.0 by the author.