COVERAGELAB
MC/DC Generator
MC/DC 테스트 스위트 생성기
Windows · coveragelab.kr
CoverageLab

MC/DC 테스트 스위트 생성기

사용 설명서 · Windows

1. 프로그램 소개

MC/DC(Modified Condition / Decision Coverage)⁠는 조건문의 모든 조건에 대해, 그 조건 하나만 바뀌어도 조건문의 결과가 바뀐다는 것을 보여 주는 테스트 케이스 쌍을 요구합니다. 이 프로그램은 직접 입력한 조건식이나 소스 파일에서 찾은 조건문으로부터 Robin's Rule 알고리즘으로 테스트 스위트를 만듭니다.

2. 빠른 시작

  1. 조건식 입력 칸에 조건식을 입력합니다. 예 : !(a && b) || c.
    (if⁠와 문장은 빼고 식만 입력합니다.)
  2. Enter⁠를 누르거나 Start⁠를 클릭합니다.
  3. 분석 완료 화면에 개수와 MC/DC Check⁠가, 오른쪽 표에 테스트 케이스가 나타납니다.
  4. 소스 파일이면 코드 열기⁠로 열거나 창에 끌어다 놓은 뒤 Start⁠를 누릅니다. 조건문이 하나면 바로 분석하고, 여러 개면 조건문 목록에서 원하는 Line⁠을 더블클릭하거나 개별분석 / 통합분석⁠을 누릅니다 (3절).
조건식을 입력하세요

연산자 버튼(&& || ! ( ) = < >)⁠은 조건식에 대입하고, ⌫ 는 한 글자를 지우며 휴지통은 조건식 전체를 비웁니다 (Ctrl+L⁠은 입력과 결과를 모두 지웁니다).

지원 : &&, ||, !, 괄호, 비교식 < <= > >= == !=. 미지원 : XOR 등 그 밖의 연산자. 논리 연산자가 아닌 모든 것 - 불리언 변수, 함수 호출, 멤버 접근, 배열 원소, 산술식, 비트 연산식 -⁠ 은 하나의 조건⁠으로 봅니다. 글자가 같은 두 조건은 같은 조건으로 취급합니다(중복 조건).

조건 3개 → 테스트 케이스 4개, 검증 PASS

MC/DC 기준 - Unique‑Cause / Masking

Start 버튼 위의 MC/DC 기준 토글로 생성 기준을 고릅니다 (선택은 설정에 기억됩니다). 소스 파일도 Start⁠를 누르기 전에 여기서 고르면 됩니다. 결과와 저장 파일에는 어느 기준으로 만들었는지 항상 표시됩니다 - 분석 로그와 txt 머리의 ※ 생성 기준 : … 줄, csv 첫 줄의 # Criterion : … 주석.

Masking⁠으로 만든 결과는 검증 줄이 MC/DC Check : PASS (masking n/n · unique‑cause k)⁠로, 결합 조건은 "참고 : 결합 조건"⁠으로 표시되고, 분석 로그와 저장 파일 머리에 ※ 생성 기준 : Masking MC/DC 줄이 붙습니다. 자세한 설명은 4절의 "MC/DC 기준" 항목에 있습니다.

3. 소스 파일

파일 ▸ 코드 열기…(Ctrl+O)⁠나 코드 열기 버튼을 누르거나, 파일을 창 위에 끌어다 놓으세요. C · C++ · Java · JavaScript · Python 파일을 확장자로 알아보며, 주석 · 문자열 · 전처리기 줄은 무시합니다. 조건식 안에 #if … #else⁠가 있으면 첫 가지만 읽고, 세미콜론을 생략한 JavaScript⁠는 줄 끝을 문장의 끝으로 봅니다. #if 0⁠으로 막아 둔 코드는 읽지 않습니다. 파일은 창 어디에나 - 조건식 입력란이나 분석 로그 위라도 - 끌어다 놓을 수 있습니다.

C · C++ · Java · JavaScript · Python 소스도 그대로 열기
동작결과
조건문을 더블클릭 (또는 선택 후 Enter)그 조건문만 분석합니다. 한 번 클릭은 선택만 합니다.
개별분석모든 조건문을 각각 분석합니다 - 조건문마다 Test Suite⁠와 Input Data 표를 생성합니다.
통합분석모든 조건문을 분석한 뒤 한 표로 합칩니다 (5절).
파일 안의 조건문을 모두 찾아 줍니다

분석하는 동안에는 Start 버튼 옆에 취소 버튼이 나타납니다. 누르면 분석을 그만두고, 화면의 전 결과는 그대로 둡니다.

코드를 불러온 뒤 목록에서 원하는 Line⁠을 더블클릭하면 그 조건문이 바로 분석됩니다. 한 번 클릭은 선택만 하며, 선택한 뒤 Enter⁠를 눌러도 같습니다.

긴 조건식은 목록에서 줄여서 보여 줍니다. 마우스를 올리면 전체 글자가 보입니다.

대입 · 상수 · 위쪽 코드의 고정 값

소스 파일은 코드에 적힌 그대로 분석합니다. 비교가 아닌 조건은 실제로 참/거짓을 정하는 값으로 입력값을 만들고, 분석 완료 화면의 확인 필요 상자와 조건문 행, 분석 로그에 알립니다.

조건다루는 방식
상수 조건
while (1)
do { … } while (0)
if (true)
결과가 늘 같으므로 반대 결과의 케이스를 실현 불가로 표시하고 경고합니다.
상수 대입
if (a = 3)
if (a = 0)
비교가 아니라 대입이라 결과가 늘 T(3) / F(0) 입니다. 반대 케이스는 실현 불가로 표시하고 경고합니다. 안쪽 조건문은 a = 3 인 것으로 경로 값을 만들고, 나올 수 없는 쪽(else) 안의 조건문은 도달 불가가 됩니다.
값 대입
if (a = b)
실제 조건은 b(0⁠이 아니면 참)이므로 입력값을 b⁠에 주고, 안쪽 조건문은 a⁠에 b⁠의 값이 들어간 것으로 만듭니다 (if (a = b) { if (a > 5) … }⁠의 안쪽 케이스는 a = b = 6). ==⁠를 잘못 쓴 것일 수 있어 경고합니다. 일부러 쓴 대입임을 괄호로 보인 식(while ((p = p->next)), if (!(fp = fopen(…))))⁠과 Python⁠의 :=⁠는 참고로만 알립니다.
대입한 값을 비교
(c = getchar()) != EOF
정상 관용구입니다. 입력값은 getchar()⁠의 값으로 주고, 안쪽 조건문의 c⁠도 그 값으로 만듭니다 (참고).
증감
n-- > 0
i++ < 10
바꾸기 전 값으로 입력값을 만듭니다 (참고).
비교를 이어 쓴 식
a < b < c
앞 비교의 결과(0 / 1)⁠를 다음 값과 비교하는 식이라 입력값을 ?⁠로 두고 경고합니다. Python⁠의 a < b < c⁠는 두 조건으로 바꿉니다.

위쪽 코드의 고정 값 : 같은 함수에서 조건문보다 앞에 상수가 들어간 변수가 있으면(b = 0; 뒤의 if (a = b)), 그 조건문이 늘 같은 결과로 보이거나 안쪽 조건문에 도달할 수 없어 보인다고 경고하고, 조건문 행과 분석 로그에 그 경로를 적습니다.

※ 고정 값 경로 : Line 3 b = 0 → a=b = F → 조건문 결과 항상 F
※ 고정 값 경로 : Line 3 b = 0 → Line 4 if = F → 이 조건문 도달 불가

케이스(표 · 입력값)⁠는 그대로 만들며, 결과는 직접 확인하세요. C · C++ · Java · JavaScript · Python 파일에서 보며, 확실하지 않으면 경고하지 않습니다 : 앞쪽의 if · 반복 · 블록 안에서 바뀌는 변수, 주소를 넘긴 변수(&x), 참조, volatile, 안쪽 함수 · 람다가 바꾸는 변수, 함수 호출 뒤의 함수 밖 변수, #if 구간 안의 문장, switch · goto⁠가 있는 코드, Python⁠의 try · match 안의 조건문과 exec · eval⁠을 쓰는 함수.

보호 조건 · 같은 파일의 상수 · 선언된 타입

4. 결과 읽기

분석 완료 화면

개별분석: 조건문 2개 → 케이스 8개, 예상 MC/DC 커버리지와 조건문 목록

결과 표

케이스마다 바로 쓸 수 있는 입력값

조건문 행과 분석 로그

표 아래에는 조건문마다 소스 줄 번호, 정리된 식, 검증 결과(unique‑cause k/N, masking …)⁠가 한 행씩 나옵니다. 분석 로그⁠를 펼치면 전체 텍스트 리포트가 보이며, Save txt⁠로 저장되는 내용과 같습니다. 편집 ▸ 분석 로그 복사(Ctrl+Shift+C)⁠로 클립보드에 복사할 수 있습니다.

분석 로그: 예상 MC/DC 커버리지, 까닭을 알려 주는 경고, FAIL 이유

편집 ▸ 분석 로그에서 찾기(Ctrl+F)⁠나 결과 카드 제목 줄의 돋보기를 누르면 찾기 막대가 열립니다. Enter⁠는 다음, Shift+Enter⁠는 이전, Esc⁠는 닫기입니다. 분석 로그의 긴 경고 · 참고 줄은 창의 폭에 맞춰 접어 보여 줍니다. 같은 조건이 두 번 나와 Unique‑Cause⁠로 확인되지 않는 식이면 확인 필요 상자에 Masking 기준으로 다시 분석 버튼이 나타납니다.

FAIL⁠인 조건문은 상세의 맨 위에 FAIL 이유 상자가 나와, 독립 영향이 확인되지 않은 조건마다 그 까닭을 알려 줍니다 : 상수 조건(while (1)), 같은 조건이 두 번 이상 나오는 식(Unique‑Cause), 독립 영향을 보일 케이스 쌍 가운데 실행할 수 없는 케이스 - 같은 변수의 조건이 충돌하거나(x > 10 && x < 5), 선언된 타입으로는 될 수 없거나(unsigned 변수의 u < 0), 보호 조건의 순서가 뒤바뀌었거나, 바깥 조건문의 도달 조건과 함께 만족시킬 수 없는 경우 -, 그리고 이 식의 결과를 바꿀 수 없는 조건(a || (a && b)⁠의 b). 같은 내용이 분석 로그와 txt⁠에도 FAIL 이유 : … 줄로 들어갑니다.

FAIL 칸을 누르면 그 조건문으로 이동하고, 조건마다 FAIL 이유를 보여 줍니다

5. 통합분석

각 조건문의 N+1 케이스를 변수 합집합 기준으로 한 표에 넣고, 공유하는 변수의 값이 충돌하지 않는 케이스끼리 하나로 합칩니다. 원본 열은 합쳐진 케이스가 어느 조건문에서 왔는지 보여 줍니다. Expected[n]⁠은 n 번 조건문의 결과이며, *⁠가 붙은 값은 그 조건문에서 나온 케이스는 아니지만 그 행의 값으로 결과가 정해져 계산한 기대 결과입니다(바깥 조건문은 경로 값만으로도 정해집니다). 합친 뒤의 케이스 수에 N+1⁠은 보장되지 않지만, 각 조건문의 케이스가 모두 들어 있으므로 조건문별 MC/DC⁠는 유지됩니다. 서로 배타적인 가지(if⁠와 그 else)⁠의 케이스는 합쳐지지 않으며, 그 행에서 실행되지 않는 조건문의 Expected⁠는 - 입니다. 표의 -⁠는 그 행이 다루지 않는 조건·변수(아무 값이나 가능)입니다. 저장 파일에서는 설정 ▸ 저장할 때 빈 칸(-)⁠으로 이 칸을 자동으로 채울 수 있습니다 (6절).

통합 분석: 조건문 2개 → 테스트 케이스 4개
통합분석의 분석 로그: 통합 표와 조건문별 검증

6. 저장

메뉴내용
파일 ▸ Save txt… (Ctrl+S)텍스트 리포트(분석 로그). 표의 열이 맞도록 Consolas · D2Coding · Courier New 같은 고정폭 글꼴로 여세요.
파일 ▸ Save csv… (Ctrl+Shift+S)입력 데이터 CSV : TC, 변수별 열, Expected, Note(infeasible). BOM⁠이 붙은 UTF‑8⁠이라 Excel⁠에서 바로 열립니다.
.txt · .csv로 저장해 테스트 도구에 바로

저장하는 동안 저장 중… 창에 진행률(%)⁠이 표시됩니다. 취소⁠를 누르면 저장을 그만둡니다 - 파일은 다 쓴 뒤에 바꾸므로, 취소해도 전에 있던 파일은 그대로입니다. 금방 끝나는 저장에서는 창이 나타나지 않습니다.

큰 결과를 저장하는 동안 "저장 중…" 창에 진행률이 나옵니다

설정 ▸ 저장할 때 빈 칸(-) - 통합분석 결과의 -(그 행이 다루지 않는 조건·변수)⁠와 경로 변수 열의 -⁠를 저장 파일에서 어떻게 할지 고릅니다 : 그대로 둠 (-)(기본값) · 자동으로 채움 (조건 T) · 자동으로 채움 (조건 F). 자동으로 채우면 빈 조건 칸은 고른 값(T 또는 F)⁠이 되고, Input Data 에는 그 조건이 그 값이 되도록 하는 입력값이 들어갑니다 - 1 / 0 만이 아니라 조건에 맞는 값입니다. 예를 들어 a > 50⁠이면 T 일 때 a = 51, F 일 때 a = 50, 불리언 변수 b 면 1 / 0. 이미 값이 있는 변수로 정해지는 조건은 그 값대로 계산합니다 (a = 51⁠이 있으면 a > 50⁠은 T). 조건이 모두 정해진 조건문의 Expected⁠도 *⁠를 붙여 계산해 채우며, 도달하지 않는 조건문의 Expected⁠와 해석할 수 없는 조건은 그대로 - 입니다. 화면의 표는 바뀌지 않고, txt 파일 머리에 채운 방식을 적은 줄이 붙습니다. 채운 값도 선언된 타입의 범위를 지킵니다(unsigned 변수에 -1⁠을 넣지 않습니다). 고른 값으로 둘 수 없는 조건(다른 조건과 충돌하거나 그 타입에서는 될 수 없는 값)⁠은 반대 값으로 채웁니다.

7. 설정과 단축키

라이트 · 다크 테마
단축키동작
Enter조건식 실행 (조건식 입력 칸에서)
Ctrl+O소스 파일 열기
Ctrl+S / Ctrl+Shift+SSave txt / Save csv
Ctrl+L입력과 결과 지우기
Ctrl+Shift+C분석 로그 복사
Ctrl+F분석 로그에서 찾기
Shift+휠넓은 표를 가로로 스크롤
F1매뉴얼
Esc대화상자 닫기

8. 참고와 제한

9. 문의

CoverageLab · astesia@me.com
홈페이지 : coveragelab.kr