IT recording...

[SoftwareV&V] 12. Structural Testing 본문

V&V

[SoftwareV&V] 12. Structural Testing

I-one 2022. 2. 17. 16:21

[원문링크]

https://adorable-aspen-d23.notion.site/SoftwareV-V_12_Structural-Testing-dac9827e24464df4b0d0fe3ab09ec391

[2021 - 1학기 수강한 Software V&V 강의 정리본입니다.]

(Software Verification & Validation)

 

Structural Testing

1. Structural Testing

  • CFG/DFG로 바꿔서 이것을 얼마나 cover하는가
  • White-box testingCode-based testing
    • Structural testing(모든 path를 다 스캔)은 Functional testing(spec에서 빠진거 찾는데 유리)을 보완한다.
    • But, no Guarnatee(I,Env가 정확하지 않을 수 있음)
    • -모든 path를 지나간다고 해서 에러를 100% 찾았다는 보장은 할 수 없다.
    • 그럼에도?(테스팅의 thoroughness를 증가시켜준다.)
    • ex. FT는 100%통과했지만 ST해본 결과 coveragrk 70%다. > 30%는 에러가 있을 수 있다.
    • → Increases confidence in thoroughness of testing
    2) 과정
    1. Functional test suite을 만들어서 테스트한다.
    2. 그 테스트가 얼마나 많은 structural coverage를 이루는지 확인한다.
    ** 예상문제) Structural testing은 전체 System coverage를 확인할 수 없지만 , 가끔 도구 중에서 이를 보여주는 도구가 있다. 어떻게 가능한 것일까?3) Cyclomatic Adequacy
    • (e - n + 2) for a CFG
    • 보통 15 미만으로 설정하게 하는 것이 좋음 (40개 이상이면 unit test 불가)
    • 3학년 학생들 코드를 모듈별로 cyclomatic number계산 > 평균 > refactoring 요청하기
  • : 소스코드가 얼마나 복잡한지를 측정하는 것
  • ** system testing case에 대해서 coverage를 계산하는 사례를 Stati analysis도구(pmd, checkstyle,findbugs 등)에서 찾아 내서 이게 어떻게 계산 됐는지를 설명하기
  • 1) 특징
  • Glass-box testing

2. Structural Testing Techniques

1) Statement Testing

  • statement를 얼마나 지났는지
  • (number of executed statements) / (number of statements)
  • coverage는 test suite의 cardinality에 영향을 주지 않는다.Test suite cardinality
  • 단점) 모든 block을 지나는 건 굉장히 좋지만, 블록 하나를 실수로 구현하지 않았을 때 그 블록을 테스트 할 수 없기 때문에 제대로 테스팅 불가
  • ⇒ 모든 '흐름'자체를 테스팅할 수 있는 branch testing 등장

2) Branch Testing (=Decision Testing)

  • 블록이 없어지더라도 브랜치 기반으로 흐름 자체를 테스트할 수 있다.
  • (number of executed branches) / (number of branches)
  • 단점) 모든 branch들을 다 지나간다고 해도, 조건문 등에서 두 개 이상의 조건이 존재할 때 특정 조건만을 이용해서 테스트할 수 있음
  • ⇒ 각 조건들에 대해 별도로 테스팅을 모두 실행하는 condition testing 등장

3) Condition Testing

  • 각 조건에 대한 모든 T/F를 모두 살펴봄
  • Basic Condition
  • Compounded (Branch & Condition , Compound condition adequacy)
  • But, 경우의 수가 너무 많음 ⇒ MC/DC
  • MC/DC: T → F 로 바꿨을 때 결과가 바뀌는 애들만 봄
  • : 중요한거 빼고 다 지우기.

4) Path Testing

  • pat에 존재하는 combination들에 집중한다. (path > branch)
  • (number of executed paths / number of paths)
  • But, path가 무한히 많기 때문에 제약 조건을 설정한다. (number of traversals of loops등)
  • → static analysis에서 주로 사용한다. (pmd를 얼마나 세게할 것인지에 따라 traversal 넘버가 변함)

3. Procedure Call Testing

  • Procedure entry and exit testing
  • Call coverage

: integration testing 용으로 call graph를 그린다.

Comments