Apakah ada korelasi antara kompleksitas dan jangkauan?

18

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?

Saya pikir pasti akan ada beberapa korelasi, karena program yang kurang kompleks (dari sedikit yang telah kita lihat) tampaknya memiliki hasil yang 'lebih baik' dalam hal jangkauan.

Adakah yang tahu tentang upaya untuk melihat kedua metrik bersama-sama, dan jika tidak, apa yang akan menjadi tempat yang baik untuk menemukan data tentang kompleksitas dan jangkauan untuk sejumlah besar program (ish)?

Saladin Akara
sumber

Jawaban:

2

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 .

Alexander Galkin
sumber
1

Saya tidak terbiasa dengan jangkauan, tetapi jika itu adalah ukuran jalur kode yang tidak pernah dapat dieksekusi, kompleksitas cyclomatic harus semacam batas atas itu.

alex
sumber
0

Mungkin ada beberapa statistik tentang ini tetapi saya akan mengatakan tidak ada korelasi karena yang satu tidak tergantung pada yang lain dan ada juga pilihan dalam desain sistem perangkat lunak sehingga Anda dapat menghilangkan ini.

Dalam hal data dunia nyata, mungkin ada korelasi yang kuat tetapi itu bisa jadi karena sistem perangkat lunak yang dirancang dengan buruk yang tidak menghilangkan korelasi ini. Ini bisa menjadi korelasi yang tidak disengaja karena kurangnya pengetahuan tentang teori grafik.

Rudolf Olah
sumber
1
Satu tergantung pada yang lain adalah sebab-akibat, bukan korelasi.
JeffO