Độ đo độ phức tạp của phần mềm do Thomas McCabe đưa ra dựa trên việc biểu diễn luồng điều khiển của chương trình. Một đồ thị chương trình G được dùng để mô tả luồng điều khiển. Mỗi khuyên tròn đều biểu thị cho một nhiệm vụ xử lý, luồng điều khiển được biểu diễn bằng mũi tên nối. Trong hình vẽ, nhiệm vụ xử lý a có thể tiếp sau là các nhiệm vụ b, c hay d tuỳ theo điều kiện kiểm thử như một phần của a. Nhiệm vụ xử lý b bao giờ cũng theo sau là e, và cả hai đều được thực hiện như một phần của chu trình lồng kép (mũi tên cong đi ngược tới b và a tương ứng)
McCabe định nghĩa cách đo độ phức tạp phần mềm dựa trên độ phức tạp xoay vòng của đồ thị chương trình cho một modul. Một kỹ thuật có thể được dùng để tính độ phức tạp xoay vòng, V(G) là xác định số các miền trong đồ thị phẳng. Một miền có thể được mô tả một cách không hình thức như một vùng được bao trên mặt phẳng của đồ thị. Số các miền được tính bằng cách đếm tất cả các miền bị giới hạn và miền không bị giới hạn bên ngoài đồ thị.
Đồ thị trong hình vẽ có 5 miền (từ R1 đếnR5) do đó độ phức tạp xoay vòng của V(G) = 5
Hình 5. Độ phức tạp đồ thị luồng điều khiển
Ý nghĩa: Vì số các miền tăng lên theo số các đường quyết định và chu trình nên độ đo McCabe đưa ra một cách đo định lượng về độ khó khăn kiểm thử, và là một chỉ báo về độ tin cậy cuối cùng. McCabe cũng cho rằng V(G) có thể được dùng để đưa ra một chỉ dẫn định lượng về kích cỡ modul tối đa. Với việc thu thập dữ liệu từ một số các dự án lập trình thực tại ông đã thấy rằng V(G) = 10 dường như là giới hạn trên thực tế cho kích cỡ modul. Khi độ phức tạp xoay vòng của modul vượt quá số này thì vấn đề trở nên cực kỳ khó khăn cho việc kiểm thử tích hợp modul [4].