시스템의 내부 구조를 보고 테스트 케이스를 설계하는 과정
블랙박스 테스트만을 하게되면 프로그래머가 악의적으로 만든 백도어나 살라미의 기법을 로직에 적용하게 되는 경우 사용자들이 피해를 입게 된다. 이러한 부분을 막기 위해서 화이트박스 테스트를 해주어야 한다.
1) 문장 커버리지 : 메소드에 나오는 문장을 모두 수행하는 조건 -> 테스트케이스가 하나인 경우도 생겨난다.
2) 분기 커버리지 : 모든 if문 즉 분기가 true false를 다 확인하는 경우
3) 경로 커버리지 : 모든 경로를 테스트 하는 경우
4) 조건 커버리지 : 복합적으로 구성된 분기의 각 요소들이 true인지 false인지를 확인 하는 경우 ex) (x || y) : x=T y=T , x=T y=F, x=F y=T, x=F y=F 네가지 경우가 모두 테스트 데이터가 된다.
경로테스트(경로 커버리지) : 각 분지점에서 조건이 참이되게 하는 입력과 거짓이 되게 하는 입력을 선택
흐름도에서 확인하는 경로 테스트의 독립 경로 갯수 : (간선 = 화살표, 노드 = 다각형)
사이클로매틱 복잡도 = CC = 간선의 수 - 노드의 수 +2
경로 테스트의 한계
1) 기존 경로만 테스트 한다. 경로에 없는 테스트는 테스트하지 못한다.
2) 객체지향 시스템의 경우 정적이지 않고 동적이기 때문에 모든 경로를 찾기는 어렵다.
- 사용 사례 명세로부터 테스트 케이스를 만들어라
- 확장된 사용 사례에서 테스트 케이스를 만들어라
1) 일반적인 사례
2) 예외적인 사례
객체지향 언어로 작성한 시스템은 다형성, 동적바인딩, 기능이 다수의 작은 메소드로 분산 등의 특징이 있다.
이러한 특징흔 새로운 형태의 오류를 발생시킨다. 인스펙션과 정적 분석방법의 효과를 떨어뜨린다.
상태 기반 테스트 절차
1) 시스템의 상태에 대해 테스트할 입력 데이터를 선택한다.
2) 컴포넌트나 시스템을 검사한다.
3) 실행 상태를 오러클(예상되는 상태)과 비교한다.
두개 이상의 컴포넌트에 초점을 두어 단위 테스트에서 발견하지 못한 결함을 찾아낸다.
스터브와 드라이버 작성이 필요하다.
cf) 스터브: 테스트될 컴포넌트가 호출하는 컴포넌트가 부분적으로 구현된 것
드라이버 : 테스트될 컴포넌트를 호출하는 컴포넌트의 부분적인 구현
통합 테스트에서 전제하는 계층적 시스템의 예
전체 시스템을 빌드한 후 요구 중심의 테스트
블랙박스 기법으로 테스트 케이스를 추출합니다.
기능 테스트 : 기능적 요구를 만족시키는 테스트 -> 시스템 테스트
- 사용사례를 만족하는가?
성능 테스트 : 비기능적 요구를 만족시키는 테스트 -> 시스템 테스트
- 부하를 걸어서 시스템이 고장나지 않는가?
- 의도적인 침입과 파괴를 할 때 시스템에 문제가 없는가?
- 일부러 고장을 내고 복구를 하는 것이 빠른가? : 회복테스트
파일럿 테스트(알파, 베타 테스트) -> 인수 테스트
- 필드 테스트라고 불림
- 절차 :
1) 시스템을 설치한 후 선발된 사용자들이 사용해 봄
2) 사용자들은 시스템이 영구적으로 설치된 것처럼 여기고 시스템을 검토
3) 사용자에게 어떤 가이드라인이나 테스트 시나리오가 주어지지 않음
인수 테스트(알파, 베타 테스트) -> 인수 테스트
설치 테스트 -> 인수 테스트
- 시스템이 인수된 후에 목표시스템을 설치함
- 개발시스템 -> 목표시스템으로 전환
- 설치테스트 : 목표 환경에서 기능테스트와 성능 테스트를 반복한다.