Saya telah mempelajari kompleksitas siklomatik (McCabe) dan jangkauan perangkat lunak di universitas baru-baru ini. Hari ini dosen saya mengatakan bahwa tidak ada korelasi antara kedua metrik, tetapi apakah ini benar-benar terjadi?
Sebenarnya ya dan tidak.
Pertama-tama, hanya untuk mengingatkan Anda, metrik McCabe untuk kompleksitas cyclomatic dihitung pada grafik aliran kontrol di mana Anda abstrak kode sumber Anda ke grafik diarahkan dengan blok dasar atau pernyataan menjadi simpul dan transisi di antara mereka (baik dengan aliran kontrol normal ke bawah atau dalam kasus lompatan dan loop terkondisikan) menjadi tepi. Kompleksitas siklomatik di sini dapat kira-kira (jika Anda menganggap seluruh program Anda tidak memiliki kode terisolasi, yaitu grafik Anda terhubung) dilihat sebagai perbedaan antara jumlah tepi dan jumlah node.
CC = E - N
Masalah reachability adalah masalah umum dalam teori grafik yang dapat diekspresikan dengan cara: diberikan dua node A dan B, adalah node B yang dapat dijangkau dari node A, yaitu dapat satu mencapai B mulai dari A dan mengikuti tepi grafik di yang benar arah? Jadi, sekali lagi metrik yang berlaku untuk grafik aliran kontrol dan bukan pada kode.
Ada beberapa cara untuk menerapkan masalah ini ke grafik aliran kontrol . Salah satu caranya disebut "analisis jangkauan variabel", yang berarti bahwa untuk variabel yang diberikan analisis menentukan apakah nilainya masih tersedia pada titik program tertentu (teknik ini juga disebut slicing dalam analisis perangkat lunak). Saya juga menemukan hanya beberapa artikel yang menggunakan istilah ini (dan umumnya masalah keterjangkauan) untuk aplikasi multi-utas .
Pada dasarnya orang dapat melihat semacam korelasi antara CC dan jangkauan: dengan peningkatan CC rasio tepi atas node juga meningkat dan bahkan dalam kasus grafik diarahkan di mana arah tepi juga penting, orang dapat berspekulasi bahwa peningkatan jumlah tepi akhirnya mengarah ke peningkatan jalur yang tersedia dalam grafik dan dengan demikian meningkatkan jangkauan baik melalui koneksi langsung atau tidak langsung antara node. Jadi, jawabannya adalah Ya di sini.
Di sisi lain, gagasan jangkauan di lingkungan multi-threaded membutuhkan analisis yang disebut supergraph - dan ini tidak begitu sepele. Peningkatan CC (disebut di sini " kompleksitas sinkronisasi ") dapat mengarah pada kemungkinan kebuntuan yang lebih tinggi dalam perangkat lunak dan dengan demikian mengurangi jangkauan segmen node / kode tertentu. Karenanya "Tidak" adalah jawaban yang valid di sini juga .