8장 정적 테스트 - 8.8 정적 분석
8.8 정적 분석
- 코딩 표준
- 복잡도 분석
8.8 정적 분석
관리 리뷰, 기술 리뷰, 인스펙션, 워크쓰루는 기본적으로 사람이 수행하는 수작업 방식
정적 분석: 도구의 지원을 받아 정적 테스트를 수행, 자동화된 도구를 사용하여 정적 테스트를 수행하는 방법
8.8.1 코딩 표준
코딩 표준 또는 코딩 지침은 개발자가 프로그램을 작성해야 할 때 지켜야 하는 규약
개발자는 자신 스타일대로 작성하는 것이 아닌 코딩 표준을 지켜 일관되게 작성
여러 명이 작성하더라도 동일한 개발자가 코딩한 것처럼 보이게 함
가독성이 좋고 이해하 쉬우므로 유지보수에 용이
이러한 코딩 표준은 수작업으로 검사하기 번거롭기 때문에 자동화된 도구를 사용해서 검사
8.8.2 복잡도 분석
복잡도가 높은 프로그램은 신뢰성, 테스트 비용, 유지보수성 측면에서 좋지 않은 결과를 초래하기 때문에 높지 않도록 통제
신뢰할 수 있는 척도를 사용하여 복잡도를 측정하는 것은 매우 중요한 일
순환 복잡도
1976년, McCabe가 발표
가장 널리 사용되고 있음
제어 흐름 그래프에서 서로 독립적인 기본 경로가 몇 개인지 세는 것을 말함
기본 경로 집합을 사용하면 프로그램에 존재하는 어떤 경로든 선형적으로 조합하여 표현할 수 있음
(즉, 프로그램을 완벽하게 테스트하기 위해서는 순환 복잡도만큼의 경로 개수가 필요하다는 의미)

순환 복잡도 = E - N + 2
E 간선 개수 - 한 노드에서 다른 노드로 이어지는 화살표의 개수
N 노드 개수 - 하나의 명령어 또는 결정을 나타내는 상자의 개수
ex)
E = 8
N = 7
순환 복잡도 = 8 - 7 + 2
순환 복잡도 = 3

순환 복잡도 = 닫힌 영역의 개수 + 1
제어 흐름 그래프의 닫힌 영역들의 개수와도 관계가 있음
제어 흐름 그래프가 간선과 노드들에 의해 둘러싸인 여러 개의 영역으로 분할
ex)
닫힌 영역의 개수 = Region1 + Region2
닫힌 영역의 개수 = 2
순환 복잡도 = 2 + 1
순환 복잡도 = 3

순환 복잡도 = 분기 노드의 개수 + 1
ex)
분기 노드의 개수 = 2
순환 복잡도 = 2 + 1
순환 복잡도 = 3
Walshsms 1979년에 순환 복잡도가 10 이상일 때 결함률이 크게 증가한다는 연구 결과 발표
JSF AV C++ 코딩 표준의 AV rule3에서는 20 이하로 유지할 것을 권고
MISRA Report5에서는 15를 넘어서는 안된다고 기술
