Halstead의 소프트웨어 사이언스(Software Science) 계산 방법

[예제 문제]
다음 C 언어 코드 조각을 보고 할스테드의 소프트웨어 사이언스 지표 중 프로그램 어휘량(Vocabulary)과 부피(Volume)를 계산하시오. (단, $\log_2 16 = 4$로 계산한다.)

if (a > b)
    x = y + 1;
else
    x = y - 1;

1단계 연산자(Operator)와 피연산자(Operand) 분류

할스테드 측정의 핵심은 무엇이 연산자고 무엇이 피연산자인지 정확히 구분하는 것입니다.

  • 연산자 ($n_1, N_1$) : 제어문, 산술 연산자, 할당문, 괄호, 세미콜론 등
  • 피연산자 ($n_2, N_2$) : 변수명, 상수(숫자)
구분 종류 (Distinct) 개수 (Total)
연산자 ($n_1$) if, else, ( ), >, =, +, -, ; 8종류 ($n_1 = 8$)
연산자 총수 ($N_1$) (위에 열거한 것들이 코드에 나타난 총 횟수 중복은 제거) 10개 ($N_1 = 10$)
피연산자 ($n_2$) a, b, x, y, 1 5종류 ($n_2 = 5$)
피연산자 총수 ($N_2$) a, b, x, y, 1, x, y, 1 8개 ($N_2 = 8$)

<주의> 시험 문제에 따라 세미콜론(;)이나 중괄호({})를 포함하는 기준이 다를 수 있지만, 보통은 코드에 명시된 모든 기호를 연산자로 취급합니다.

지표 기호 계산 결과 항목
연산자 종류 $n_1$ 8 if, else, (), >, =, +, -, ;
피연산자 종류 $n_2$ 5 a, b, x, y, 1
연산자 총수 $N_1$ 10 if(1), else(1), () (1), > (1), =(2), +(1), -(1), ;(2)
피연산자 총수 $N_2$ 8 a(1), b(1), x(2), y(2), 1(2)

 

2단계 공식 대입 및 계산

① 프로그램 어휘량 (Vocabulary, $n$)

공식: $n = n_1 + n_2$

$n = 8 + 5 = 13$

② 프로그램 전체 길이 (Length, $N$)

공식: $N = N_1 + N_2$

$N = 10 + 8 = 18$


③ 프로그램 부피 (Volume, $V$)

공식: $V = N \times \log_2 n$

$V = 18 \times \log_2 13$

$\log_2 13$은 약 3.7 정도이므로, $18\times 3.7 \approx 66.6$
(실제 시험에서는 계산 편의를 위해 $n$이 8, 16, 32처럼 2의 거듭제곱이 되도록 숫자를 맞춰서 출제하는 경우가 많습니다.)

🎯 감리사 시험 대비 포인트

  • 중복 제거 여부 : $n_1, n_2$는 '종류'이므로 중복을 제거하고 세어야 합니다.
  • 로그 계산 : $\log_2$ 계산이 나오므로 $2^3=8, 2^4=16, 2^5=32$ 정도의 값은 숙지하세요.
  • McCabe와 비교 : "할스테드는 실행 경로를 고려한다"는 보기가 나오면 틀린 것입니다. 할스테드는 코드의 '양'만 따지는 정적 분석 도구입니다.