Test Suite는 다음과 같은 상황에서 Adequacy Criterion을 만족한다.
모든 test를 성공적으로 통과하고,
모든 test obligation들이 test suite에 존재하는 적어도 하나의 test case를 만족해야 한다.
(obligation들이 무조건 한 번 씩은 만족해야 한다.)
ex) "The statement coverage adequacy criterion is satisfied by test suite S for program P, if each executable statement in P is executed by at least one test case in S, and the outcome of each test execution was pass"
Defensive programming style(예외처리를 엄청 많이 하는) 등의 코딩 스타일은 어떠한 test suite라도 해당 statement를 지나가지 못하게 하는 경우가 존재한다.
해결방법
unsatisfiable obligation을 criterion으로부터 제외하기
→ But 진짜 안지나는지 확신하기 힘들다.
test suite가 adequacy criterion을 얼마나 만족하는지를 퍼센트로 나타내기
-원래) Adequacy criterion = 만족하는지 안하는지 T/F만
-수정 후) Coverage measure = obligation을 만족하는 정도
: test suite의 thoroughness라고 할 수 있음 (coverage높다 = 충실해 했다)
But, coverage는 thoroughness 혹은 adequacy의 대략적인 값일 뿐이지 절대적인 값은 아니다.
Functional Coverage : 우리의 test case가 시스템의 functionality (Spec,SRS,SDS) 를 얼마나 cover하는지
→ functional coverage는 항상 100% 여야 한다.
⇒ 100%가 아니라면, 해당되는 functional requirement에 대해 test case가 존재하지 않는다(test를 안해봤다)는 것.
Structural Coverage : 코드에 있는 structure를 얼마나 cover하는지 (코드에 존재하는 element를 test case가 얼마나 지나는지 봄)
⇒ 판단 기준 : statement → decision/branch → condition → mc/dc
Adequacy criteria는 test suite를 철저하게 할 수 있는 개념을 제공한다.
→ But, 완전히 보장하지는 않는다.
Adequacy criteria는 coverage로 나타낼 수 있다. (spec, code, model 등)