목표
- 다양한 적정 테스팅 기법으로 확인할 수 있는 S/W 작업 산출물 유형을 인식할 수 있다
- 정적 테스팅의 가치를 설명할 수 있다
- 정적 기법과 동적 기법의 차이를 설명할 수 있다
정적 테스팅이란 시스템을 구동하지 않고 테스팅 하는 것을 말한다.
[1. 리뷰] 와 [2. 정적 분석 도구]로 분류할 수 있으며, '정적 분석 도구'는 수동으로 하기 어려운 경우 사용한다.
정적 테스팅의 목적은 테스팅의 일반적인 목적인 아래와 동일하다.
- 요구사항, 사용자 스토리, 설계, 소스코드와 같은 작업 산출물 평가
- 결함 발견과 예방
리뷰의 중요성은 여러 도메인에서 일반화 되고 있다.

기존 옛날 방식으로 작업을 진행하는 것보다 2배수의 능력있는 인력을 초기에 도입하여 리뷰를 진행함으로써 개발 비용과 시간을 줄일 수 있다는 걸 시사한다. -> 정적 테스팅 효과
적절한 정적 분석 도구가 존재하는 공식 구조를 사용하는 작업 산출물에 효율적으로 적용이 가능하다.
- 코드 또는 모델
- 요구사항과 같은 자연어로 작성된 작업 산출물을 평가하는 도구로 적용 가능
** 리뷰 같은 경우 기본적으로 모든 테스트 베이시스에 적용이 가능하고, 정적 분석 도구는 코드와 모델에만 적용 가능하다
위의 내용을 바탕으로, 정적 테스팅의 효과는
- 동적 테스팅보다 효율적이고,
- 개발 생산성 향상,
- 테스팅 비용 및 기간 단축
- 수명 주기 전반에 걸친 총 품질 비용 감소
- 팀원 간의 의사소통 개선 등이 있다.
※ 나올 확률이 높은, 정적 테스팅으로 발견하기 쉬운 결함
주로 결함이 아닌 것은? 이라는 문제로 출제된다.
1. 리뷰를 통한, 요구사항 결함
2. 리뷰 or 정적 분석 도구를 통한, 설계 결함(ex. 비효율적 알고리즘/ DB 구조/ 높은 결합도/ 낮은 응집도)
3. 정적 분석 도구를 통한,
- 코딩 결함 ( 리뷰로도 가능하지만, 거의 정적 분석 도구로 사용)
- 표준과의 차이 (코딩 룰,language 컨벤션,에 맞춰 짜야 한다)
- 잘못된 인터페이스 명세
- 보안 취약점
- 테스트 베이시스 추적성, 불충분한 커버리지 또는 부정확성
- 유지보수성 결함(잘못된 모듈화, 낮은 재사용성, 분석하거나 수정하기 어려운 코드)
정적 테스팅과 동적 테스팅의 차이
- 두가지 테스팅 모두 품질을 평가하고, 가능한 빨리 결함을 식별하는 것이다.
- 각자 테스팅을 통해 발견하는 결함의 유형이 서로 다르기 때문에 상호 보완적이다.
- 정적 테스팅 : 직접 결함을 식별하고, 일관성/ 내부 품질 향상에 집중한다.
- 동적 테스팅 : 소프트웨어를 구동하여 식별하고, 외부에 보이는 동작에 집중한다.