기본 경로 테스트(basis path testing)는 모듈의 제어 흐름 그래프에서 기본 경로 집합을 골라 그 경로를 모두 테스트하는 화이트박스 기법이다. 모든 경로를 실행할 수 있으면, 고르는 경로의 수이자 필요한 최소 테스트 수는 순환 복잡도 다. 실행할 수 없는 경로가 있으면 기준이 실제 복잡도(actual complexity)로 바뀐다.[1]
기원
McCabe는 1976년 ICSE(International Conference on Software Engineering) 논문에서 자신이 내놓은 복잡도 척도와 함께 쓰는 테스트 전략을 정의했다. 프로그램이 일정한 최소 수준의 테스트를 받아들이거나, 그러지 못하면 구조를 줄여야 한다는 전략이다.[2] McCabe는 1982년 NBS(National Bureau of Standards) SP 500-99에서 순환 복잡도를 쓰는 구조적 테스트(structured testing) 방법론을 펴냈다.[3] Watson과 McCabe는 1996년 NIST SP 500-235에서 구조적 테스트를 넓히고 고쳐 다시 정리하며, 기본 경로 테스트를 그 다른 이름으로 불렀다.[1]
제어 흐름 그래프
제어 흐름 그래프(control flow graph)는 모듈의 제어 구조를 나타내는 유향 그래프다. 노드는 차례로 실행되는 문장의 블록이고, 간선은 블록 사이의 분기다. 진입 노드와 출구 노드를 하나씩 두고, 모든 노드는 진입 노드에서 닿을 수 있고 출구 노드에 닿을 수 있다고 가정한다.[3] 간선이 둘 이상 나가는 노드를 판정 노드라 한다.[1]
기본 경로 집합
경로를 간선마다 그 간선을 지나는 횟수를 원소로 하는 벡터로 나타내면, 경로끼리 원소별로 더하고 뺄 수 있다. 선형 독립이고 그래프의 모든 경로를 선형 결합으로 만들어 내는 경로 집합을 기본 경로 집합(basis set)이라 한다. 진입과 출구가 하나씩인 그래프에서 그 크기는 언제나 다. 기본 경로 집합은 하나로 정해지지 않고, 한 그래프에 여러 기본 경로 집합이 있다.[1]
기본 경로 고르기
baseline 방법은 먼저 모듈의 대표 기능을 나타내는 경로 하나를 기준 경로로 고르고, 기준 경로의 판정을 하나씩 뒤집어 새 경로를 만든다. 판정을 뒤집은 뒤에는 다른 판정의 결과를 될 수 있는 대로 기준 경로와 같게 두고, 기준 경로에 다시 합류하면 끝까지 따라간다. 기준 경로의 판정을 모두 뒤집은 뒤에는 새로 만든 경로에서 처음 나온 판정도 같은 방식으로 뒤집는다. 모듈의 모든 판정을 모든 갈래로 한 번씩 뒤집으면 개 경로로 된 기본 경로 집합이 나온다.[1]
고른 경로마다 그 경로를 지나게 하는 입력을 정하고, 그 입력에서 출력이 맞는지 확인한다. 어떤 입력으로도 지날 수 없는 경로가 있으면 baseline 방법에서 경로를 고르는 여지로 그 경로를 피한다. 그래도 기본 경로 집합을 다 테스트할 수 없으면 제어 의존을 없애도록 코드를 고치거나, 기준을 이룰 수 있는 최대 계수인 실제 복잡도로 낮춘다.[1]
다른 커버리지와의 관계
기본 경로 집합은 그래프의 모든 간선과 노드를 덮으므로, 기본 경로 테스트를 만족하면 분기 커버리지와 구문 커버리지도 만족한다. 거꾸로 분기 커버리지를 만족한 테스트가 기본 경로 집합을 덮는 것은 아니다.[1]
ISO/IEC/IEEE 24765 용어집은 프로그램의 모든 경로나 고른 경로를 실행하도록 설계한 테스트를 경로 테스트(path testing)라 부른다.[4]
반복문이 있는 프로그램은 대개 경로가 무한히 많을 수 있어, 원리적으로도 모든 경로를 테스트할 수 없다. 반복문이 없는 단순한 모듈은 모든 경로를 테스트할 수도 있다. 개를 넘어 더 테스트하는 경로는 기본 경로의 선형 결합이라 중복이다.[1]