목표 

  • 다양한 적정 테스팅 기법으로 확인할 수 있는 S/W 작업 산출물 유형을 인식할 수 있다
  • 정적 테스팅의 가치를 설명할 수 있다
  • 정적 기법과 동적 기법의 차이를 설명할 수 있다

정적 테스팅이란 시스템을 구동하지 않고 테스팅 하는 것을 말한다.

[1. 리뷰] 와 [2. 정적 분석 도구]로 분류할 수 있으며, '정적 분석 도구'는 수동으로 하기 어려운 경우 사용한다.

 

정적 테스팅의 목적은 테스팅의 일반적인 목적인 아래와 동일하다.

  • 요구사항, 사용자 스토리, 설계, 소스코드와 같은 작업 산출물 평가
  • 결함 발견과 예방 

리뷰의 중요성은 여러 도메인에서 일반화 되고 있다.

위의 그래프는 이해를 돕기 위한 그래프이고, 시험 내용에서의 중요도는 낮다.

기존 옛날 방식으로 작업을 진행하는 것보다 2배수의 능력있는 인력을 초기에 도입하여 리뷰를 진행함으로써 개발 비용과 시간을 줄일 수 있다는 걸 시사한다. -> 정적 테스팅 효과

 

적절한 정적 분석 도구가 존재하는 공식 구조를 사용하는 작업 산출물에 효율적으로 적용이 가능하다.

- 코드 또는 모델

- 요구사항과 같은 자연어로 작성된 작업 산출물을 평가하는 도구로 적용 가능

** 리뷰 같은 경우 기본적으로 모든 테스트 베이시스에 적용이 가능하고, 정적 분석 도구는 코드와 모델에만 적용 가능하다

 

위의 내용을 바탕으로, 정적 테스팅의 효과는

  1. 동적 테스팅보다 효율적이고,
  2. 개발 생산성 향상,
  3. 테스팅 비용 및 기간 단축
  4. 수명 주기 전반에 걸친 총 품질 비용 감소
  5. 팀원 간의 의사소통 개선 등이 있다.

※ 나올 확률이 높은, 정적 테스팅으로 발견하기 쉬운 결함

주로 결함이 아닌 것은? 이라는 문제로 출제된다.

1. 리뷰를 통한, 요구사항 결함

2. 리뷰 or 정적 분석 도구를 통한, 설계 결함(ex. 비효율적 알고리즘/ DB 구조/ 높은 결합도/ 낮은 응집도)

3. 정적 분석 도구를 통한, 

  • 코딩 결함 ( 리뷰로도 가능하지만, 거의 정적 분석 도구로 사용)
  • 표준과의 차이 (코딩 룰,language 컨벤션,에 맞춰 짜야 한다)
  • 잘못된 인터페이스 명세
  • 보안 취약점
  • 테스트 베이시스 추적성, 불충분한 커버리지 또는 부정확성
  • 유지보수성 결함(잘못된 모듈화, 낮은 재사용성, 분석하거나 수정하기 어려운 코드)

정적 테스팅과 동적 테스팅의 차이

- 두가지 테스팅 모두 품질을 평가하고, 가능한 빨리 결함을 식별하는 것이다.

- 각자 테스팅을 통해 발견하는 결함의 유형이 서로 다르기 때문에 상호 보완적이다.

  • 정적 테스팅 : 직접 결함을 식별하고, 일관성/ 내부 품질 향상에 집중한다.
  • 동적 테스팅 : 소프트웨어를 구동하여 식별하고, 외부에 보이는 동작에 집중한다.