CFG/DFG로 바꿔서 이것을 얼마나 cover하는가
White-box testing
Glass-box testing
Code-based testing
Structural testing(모든 path를 다 스캔)은 Functional testing(spec에서 빠진거 찾는데 유리)을 보완한다.
But, no Guarnatee
-모든 path를 지나간다고 해서 에러를 100% 찾았다는 보장은 할 수 없다.
(I,Env가 정확하지 않을 수 있음)
그럼에도?
→ Increases confidence in thoroughness of testing
(테스팅의 thoroughness를 증가시켜준다.)
ex. FT는 100%통과했지만 ST해본 결과 coveragrk 70%다. > 30%는 에러가 있을 수 있다.
** 예상문제) Structural testing은 전체 System coverage를 확인할 수 없지만 , 가끔 도구 중에서 이를 보여주는 도구가 있다. 어떻게 가능한 것일까?
** system testing case에 대해서 coverage를 계산하는 사례를 Stati analysis도구(pmd, checkstyle,findbugs 등)에서 찾아 내서 이게 어떻게 계산 됐는지를 설명하기
: 소스코드가 얼마나 복잡한지를 측정하는 것
statement를 얼마나 지났는지
(number of executed statements) / (number of statements)
coverage는 test suite의 cardinality에 영향을 주지 않는다.
단점) 모든 block을 지나는 건 굉장히 좋지만, 블록 하나를 실수로 구현하지 않았을 때 그 블록을 테스트 할 수 없기 때문에 제대로 테스팅 불가
⇒ 모든 '흐름'자체를 테스팅할 수 있는 branch testing 등장
블록이 없어지더라도 브랜치 기반으로 흐름 자체를 테스트할 수 있다.
(number of executed branches) / (number of branches)
단점) 모든 branch들을 다 지나간다고 해도, 조건문 등에서 두 개 이상의 조건이 존재할 때 특정 조건만을 이용해서 테스트할 수 있음
⇒ 각 조건들에 대해 별도로 테스팅을 모두 실행하는 condition testing 등장
각 조건에 대한 모든 T/F를 모두 살펴봄
Basic Condition
Compounded (Branch & Condition , Compound condition adequacy)
MC/DC
: 중요한거 빼고 다 지우기.
: T → F 로 바꿨을 때 결과가 바뀌는 애들만 봄
pat에 존재하는 combination들에 집중한다. (path > branch)
(number of executed paths / number of paths)
But, path가 무한히 많기 때문에 제약 조건을 설정한다. (number of traversals of loops등)
→ static analysis에서 주로 사용한다. (pmd를 얼마나 세게할 것인지에 따라 traversal 넘버가 변함)
: integration testing 용으로 call graph를 그린다.