LOC Metrics mudah digunakan dan dihitung, tetapi bergantung pada bahasa & programmer — sehingga tidak adil untuk perbandingan lintas bahasa.
Halstead’s Complexity Measures (Software Science)
LOC merepresentasikan fungsi kompleksitas tetapi language/programmer dependent — perlu lebih dari LOC. Halstead memakai entropy measures dari empat besaran dasar:
η1 — jumlah distinct operators
η2 — jumlah distinct operands
N1 — total jumlah operators
N2 — total jumlah operands
Contoh kode:
if (k < 2){ if (k > 3) x = x*k;}
Distinct operators: if ( ) { } > < = * ; → η1=10
Distinct operands: k 2 3 x → η2=4
N1=13, N2=7
Ukuran turunan Halstead:
Ukuran
Rumus
Program vocabulary
η=η1+η2
Program length
N=N1+N2
Calculated estimated length
N^=η1log2η1+η2log2η2
Purity ratio
PR=N^/N
Volume
V=N×log2η
Difficulty
D=2η1×η2N2
Effort
E=D×V
Time required to program
T=18E detik
Number of delivered bugs
B=3000E2/3
Difficulty terkait sulitnya program ditulis atau dipahami (mis. saat code review).
McCabe’s Cyclomatic Complexity
Metrik McCabe berbasis representasi control flow program. Program graph menggambarkan control flow: node = processing task (satu/lebih statement), edge = aliran kontrol antar node.
Flow Graph Notation untuk struktur dasar: Sequence, If-then-else, While, Until.
Cyclomatic Complexity = jumlah independent path melalui graph (basis set):
V(G)=E−N+2atauV(G)=P+1
di mana E = jumlah edge, N = jumlah node, P = jumlah predicate node (node keputusan).
Contoh algoritma:
i = 0;
while (i<n-1) do
j = i + 1;
while (j<n) do
if A[i]<A[j] then
swap(A[i], A[j]);
end do;
i=i+1;
end do;
Meaning of V(G): V(G) adalah jumlah region tertutup pada planar graph; bertambah seiring banyaknya decision path dan loop. Ia adalah ukuran kuantitatif kesulitan testing dan indikasi reliabilitas akhir. Data eksperimen menunjukkan V(G) sebaiknya ≤ 10 — di atas itu testing menjadi sangat sulit.
McClure’s Complexity Metric
Complexity=C+V
C = jumlah comparisons dalam sebuah module.
V = jumlah control variables yang direferensikan dalam module.
Disebut decisional complexity; mirip McCabe tetapi menyoroti control variables.
High-level Design Metrics (Card & Glass)
Mengukur kompleksitas arsitektur di level desain:
Structural Complexity modul i: S(i)=fout2(i), di mana fan-out = jumlah modul yang langsung dipanggil (immediately subordinate).
Data Complexity: D(i)=fout(i)+1v(i), di mana v(i) = jumlah input & output yang dilewatkan ke/dari i.
System Complexity: C(i)=S(i)+D(i). Semakin besar tiap komponen, semakin besar kompleksitas arsitektur keseluruhan.
Summary
Size-oriented metrics (LOC/KLOC/SLOC) mudah dihitung tetapi language/programmer dependent. Halstead’s Software Science menurunkan vocabulary, length, volume, difficulty, effort, time, dan bugs dari η1,η2,N1,N2. McCabe Cyclomatic ComplexityV(G)=E−N+2=P+1 mengukur jumlah independent path / region — proksi kesulitan testing, dengan batas aman ≤ 10. McClure menambahkan dimensi comparisons + control variables. Card & Glass mengukur kompleksitas desain via structural + data complexity. Metrik ini melengkapi pengukuran berorientasi objek di Object-Oriented Metrics dan dapat dikomputasi otomatis oleh Software Measurement Tools.
Additional Information
Mengapa V(G) = jumlah basis path
Cyclomatic complexity berasal dari teori graf: untuk graf terhubung, jumlah independent cycle menentukan banyaknya jalur dasar yang, jika dikombinasikan, dapat menyusun semua jalur lain. Karena itu V(G) juga = jumlah minimal test case untuk menutupi setiap edge keputusan minimal sekali (basis path testing).
LOC Itu Berbahaya sebagai Target
Karena LOC bergantung bahasa & gaya, menjadikannya target (mis. “produktivitas = LOC/hari”) mendorong perilaku buruk: kode bertele-tele justru “lebih produktif”. Ini contoh metrik yang bisa reliable tapi tidak valid — bandingkan diskusi di Software Measurement Fundamentals.