1 분 소요

1. Introduction

정적 테스트란, 소프트웨어를 실행하지 않고 소스코드를 분석하는 것을 의미한다. 정적 테스트의 목적은 크게 아래와 같이 4가지로 볼 수 있다.

  • 소스 코드의 품질 문제 발견
    • 높은 복잡도의 코드, 네트워크 자원의 누수 등
  • 결함의 조기 발견
    • 메모리 누수, 오버플로우 등
      open()은 있는데, close()가 없는 등를 통해 메모리 누수를 확인할 수 있다.
  • 코딩 컨벤션(명명규칙) 확인
  • 표준 위반 발견

정적 테스트는 프로그램을 실행하지 않고, 문제점을 발견할 수 있다는 점에서 장점이 있다. 또한, 문제 해결에 상대적으로 적게 시간이 소요되며, 도구를 통해 문제점을 자동으로 발견할 수 있다. 즉, 가성비가 뛰어나다.


대표적인 방법으로는 동료검토(Peer Review)도구를 이용한 분석 방법(Rule based)이 있다.

2. Peer Review

2.1 Inspection

Inspection이란 훈련된 진행자(Moderator)가 진행하며, 체크리스트를 가지고 결함발견을 목적으로 하는 프로세스를 의미한다. 전문가에 의한 검토이며, 공식적인 평가이다. Inspection의 정식적인 프로세스가 존재한다.

2.2 Walk-through

진행자 없이 개발자가 자체적으로 수행하며, 팀원에게 코드나 문서를 설명하고, 동료와 함께 검토하는 방법이다.

2.3 Desk Check

진행자 없이 개발자가 자체적으로 수행하며, 개발자 스스로 혼자 코드를 읽고 검토하는 방법이다.

3. 도구를 이용한 테스트

3.1 Rule based

사전에 정해진 rule에 맞게 소스코드가 작성되어 있는지 확인하는 것을 의미한다. 예를 들면, MISRA-C를 위반하였는지 확인하는 것이다. 오픈소스를 포함하여 다양한 도구들이 존재하며, ISO26262 인증을 받은 도구도 존재한다. Tool 선정 시 1종, 2종 오류 발생율을 고려하는 것이 좋다. 1종 오류는 결함인데 못잡는 것(미탐지)를 의미하고, 2종 오류는 결함이 아닌데 결함이라고 하는 것(오탐지)를 의미한다.
또한, Rule based 검토 방법을 통해 규모관련 지표, 복잡성지표, 의존성관련 지표를 쉽게 파악할 수 있다. 대표적인 tool은 아래와 같다.

  • CLOC: 전체 라인, 공백 라인, 주석 라인 등 규모 분석에 사용
  • CDP: 코드 내 지정한 Tocken 이상의 중복 코드가 있는지 분석
  • Lizard: 함수 매개변수 수, 순환 복잡도 등, 복잡성 분석에 사용
  • Doxygen: 소스코드의 의존성을 분석하는데 사용