Saya ingin tahu apakah seseorang telah melakukan beberapa percobaan yang menghubungkan metrik kode (SLOC, Cyclomatic Complexity, dll) dengan kepadatan bug dalam aplikasi Berorientasi Objek.
Saya tidak mencari eksperimen yang hanya membuktikan atau menyangkal korelasi, tetapi pada keduanya. Saya tidak berusaha menemukan peluru perak karena saya percaya bahwa kepadatan bug suatu proyek mungkin berkorelasi dengan satu atau lebih metrik untuk proyek atau tim tertentu dan korelasinya dapat berubah selama masa proyek / tim.
Tujuan saya adalah untuk
- Ukur semua metrik menarik selama 2-3 bulan (kami sudah memiliki cukup banyak dari sonar).
- Temukan satu metrik yang berkorelasi dengan jumlah bug baru.
- Lakukan analisis akar-penyebab untuk memeriksa mengapa hal ini terjadi (mis. Apakah kita tidak memiliki keterampilan desain tertentu?).
- Tingkatkan keterampilan dan ukur perubahan untuk beberapa itereations.
- Bilas dan ulangi dari 2.
Jika Anda tidak memiliki pengalaman dalam hal ini, tetapi ingat melihat makalah / blog tentang hal ini, saya akan sangat menghargai jika Anda dapat membagikannya.
Sejauh ini saya telah menemukan tautan berikut dengan beberapa informasi tentang subjek ini
- Apakah Bug Berada dalam Kode Kompleks? - hanya slide dari presentasi.
- Perubahan dan Bug: Menambang dan Memprediksi Aktivitas Pembangunan - Hanya slide dari presentasi. Intinya semakin banyak ketergantungan, semakin tinggi kemungkinan bug (saya pikir ini adalah aturan umum).
- Kegagalan adalah kata empat huruf - Paradinya tentang korelasi antara bug dan metrik.
sumber
Jawaban:
Setiap kali saya mendengar upaya untuk mengaitkan beberapa jenis metrik berbasis kode dengan cacat perangkat lunak, hal pertama yang saya pikirkan adalah kompleksitas siklomatik McCabe . Berbagai penelitian telah menemukan bahwa ada korelasi antara kompleksitas siklomatik yang tinggi dan jumlah cacat. Namun, penelitian lain yang melihat modul dengan ukuran yang sama (dalam hal garis kode) menemukan bahwa mungkin tidak ada korelasi.
Bagi saya, baik jumlah baris dalam modul dan kompleksitas siklomatik dapat berfungsi sebagai indikator yang baik dari kemungkinan cacat, atau mungkin lebih besar kemungkinan cacat akan disuntikkan jika modifikasi dilakukan pada modul. Modul (terutama di tingkat kelas atau metode) dengan kompleksitas siklomatik yang tinggi lebih sulit untuk dipahami karena ada banyak jalur independen melalui kode. Modul (sekali lagi, terutama di tingkat kelas atau metode) dengan sejumlah besar garis juga sulit dipahami karena peningkatan garis berarti lebih banyak hal terjadi. Ada banyak alat analisis statis yang mendukung komputasi kedua baris kode sumber terhadap aturan yang ditentukan dan kompleksitas siklomatik, sepertinya menangkap mereka akan meraih buah yang menggantung rendah.
Langkah- langkah kompleksitas Halstead mungkin juga menarik. Sayangnya, validitas mereka tampaknya agak diperdebatkan, jadi saya tidak perlu bergantung pada mereka. Salah satu tindakan Halstead adalah perkiraan cacat berdasarkan pada usaha atau volume (hubungan antara panjang program dalam hal total operator dan operan dan kosakata program dalam hal operator dan operator yang berbeda).
Ada juga sekelompok metrik yang dikenal sebagai Metrik CK. Definisi pertama dari rangkaian metrik ini tampaknya ada dalam makalah berjudul Suite Metrik untuk Desain Berorientasi Objek oleh Chidamber dan Kemerer. Mereka mendefinisikan Metode Tertimbang Per Kelas, Kedalaman Pohon Warisan, Jumlah Anak, Kopling Antar Kelas Objek, Respon untuk Kelas, dan Kurangnya Kohesi dalam Metode. Makalah mereka menyediakan metode komputasi serta deskripsi tentang bagaimana menganalisis masing-masing.
Dalam hal literatur akademik yang menganalisis metrik ini, Anda mungkin tertarik dengan Analisis Empiris Metrik CK untuk Kompleksitas Desain Berorientasi Objek: Implikasi untuk Cacat Perangkat Lunak, yang ditulis oleh Ramanath Subramanyam dan MS Krishna. Mereka menganalisis tiga dari enam metrik CK (metode tertimbang per kelas, kopling antara objek kelas, dan kedalaman pohon warisan). Melirik kertas, tampak bahwa mereka menemukan ini berpotensi metrik valid, tetapi harus ditafsirkan dengan hati-hati karena "meningkatkan" seseorang dapat menyebabkan perubahan lain yang juga mengarah pada kemungkinan cacat yang lebih besar.
Analisis empiris Metrik Desain Berorientasi Objek untuk Memprediksi Kesalahan Tinggi dan Rendahnya Keparahan, yang ditulis oleh Yuming Zhou dan Hareton Leung, juga memeriksa metrik CK. Pendekatan mereka adalah untuk menentukan apakah mereka dapat memprediksi cacat berdasarkan metrik ini. Mereka menemukan bahwa banyak metrik CK, kecuali untuk kedalaman pohon warisan dan jumlah anak) memiliki beberapa tingkat signifikansi statistik dalam memprediksi area di mana cacat dapat ditemukan.
Jika Anda memiliki keanggotaan IEEE, saya akan merekomendasikan mencari di Transaksi IEEE pada Rekayasa Perangkat Lunak untuk publikasi akademis lebih banyak dan Perangkat Lunak IEEE untuk beberapa laporan yang lebih nyata dan diterapkan. ACM mungkin juga memiliki publikasi yang relevan di perpustakaan digital mereka .
sumber
Saya telah membahas kemungkinan korelasi di salah satu posting blog saya :
sumber
Dalam buku Code Complete, hal.457, Steve McConnell mengatakan bahwa "kompleksitas kendali-aliran itu penting karena telah dikorelasikan dengan keandalan yang rendah dan dan sering terjadi kesalahan". Dia kemudian menyebutkan beberapa referensi yang mendukung korelasi itu, termasuk McCabe sendiri (yang dipercaya telah mengembangkan metrik kompleksitas siklomatik). Sebagian besar dari ini menganjurkan penggunaan bahasa berorientasi objek secara luas, tetapi karena metrik ini berlaku untuk metode dalam bahasa tersebut, referensi mungkin adalah apa yang Anda cari.
Referensi tersebut adalah:
Dari pengalaman saya sendiri, metrik McCabe, karena dapat dihitung oleh program pada banyak bagian kode, berguna dalam menemukan metode dan fungsi yang terlalu rumit dan yang memiliki probabilitas tinggi mengandung kesalahan. Meskipun saya belum menghitung, distribusi kesalahan dalam fungsi kompleksitas siklomatik tinggi versus fungsi kompleksitas siklomatik rendah, menyelidiki fungsi-fungsi tersebut telah memungkinkan saya untuk menemukan kesalahan pemrograman yang diabaikan.
sumber