Ada berbagai jenis kualitas yang dapat diukur dalam produk perangkat lunak, misalnya kesesuaian untuk tujuan (misalnya penggunaan akhir), rawatan, efisiensi. Beberapa di antaranya agak subyektif atau spesifik domain (misalnya prinsip-prinsip desain GUI yang baik mungkin berbeda lintas budaya atau tergantung pada konteks penggunaan, pikirkan penggunaan militer versus penggunaan konsumen).
Yang saya minati adalah bentuk kualitas yang lebih dalam terkait dengan jaringan (atau grafik) jenis dan keterkaitannya, yaitu jenis apa yang dirujuk oleh masing-masing jenis, apakah ada kelompok interkonektivitas yang teridentifikasi dengan jelas yang berkaitan dengan arsitektur berjenjang, atau sebaliknya apakah ada 'bola' besar referensi tipe (kode 'monolitik'). Juga ukuran masing-masing jenis dan / atau metode (misalnya diukur dalam jumlah kode byte Java atau .Net IL) harus memberikan beberapa indikasi di mana algoritma kompleks besar telah diterapkan sebagai blok kode monolitik alih-alih didekomposisi menjadi lebih mudah dikelola / dikelola. potongan.
Analisis yang didasarkan pada ide-ide semacam itu mungkin dapat menghitung metrik yang setidaknya merupakan proksi kualitas. Ambang batas / titik keputusan yang tepat antara kualitas tinggi dan rendah akan saya curigai bersifat subyektif, misalnya karena dengan pemeliharaan berarti pemeliharaan oleh programmer manusia dan karenanya dekomposisi fungsional harus kompatibel dengan cara kerja pikiran manusia. Karena itu saya bertanya-tanya apakah akan pernah ada definisi kualitas perangkat lunak yang secara matematis murni yang melampaui semua perangkat lunak yang mungkin dalam semua skenario yang mungkin.
Saya juga bertanya-tanya apakah ini ide yang berbahaya, bahwa jika proksi obyektif untuk kualitas menjadi populer maka tekanan bisnis akan menyebabkan pengembang mengejar metrik ini dengan mengorbankan kualitas keseluruhan (aspek kualitas yang tidak diukur oleh proksi).
Cara berpikir lain tentang kualitas adalah dari sudut pandang entropi. Entropi adalah kecenderungan sistem untuk kembali dari keadaan tertata menjadi tidak teratur. Siapa pun yang pernah bekerja di dunia nyata, proyek perangkat lunak skala menengah hingga besar akan menghargai sejauh mana kualitas basis kode cenderung menurun seiring waktu. Tekanan bisnis umumnya menghasilkan perubahan yang berfokus pada fungsionalitas baru (kecuali jika kualitas itu sendiri adalah titik penjualan utama, misalnya dalam perangkat lunak avionik), dan pengikisan kualitas melalui masalah regresi dan fungsi 'kemunculan sepatu' yang tidak cocok dengan perspektif kualitas dan pemeliharaan. Jadi, dapatkah kita mengukur entropi perangkat lunak? Dan jika demikian, bagaimana caranya?
sumber
Jawaban:
Ini ide yang berbahaya. Proxy "obyektif" untuk arahan berkualitas langsung ke penghargaan manajemen dan pengembang akan mengejar metrik ini dengan mengorbankan kualitas aktual.
Ini adalah hukum konsekuensi yang tidak diinginkan.
Kualitas - walaupun penting - hanya satu aspek kecil dari perangkat lunak. Fungsi dan nilai yang diciptakan oleh perangkat lunak jauh, jauh lebih penting daripada kualitas.
Semua metrik mengarah ke aktivitas untuk mengoptimalkan metrik. Itu, pada gilirannya, memiliki konsekuensi yang mungkin tidak Anda sukai.
Perangkat lunak sangat kompleks. Sulit untuk memahami betapa rumitnya itu.
Bahkan hal-hal "jelas" seperti cakupan kode uji unit dapat membuang waktu. Mendapatkan hingga 100% mungkin memerlukan membuat tes yang sebenarnya lebih kompleks daripada kode trivial yang sedang diuji. Mendapatkan cakupan 100% mungkin melibatkan biaya yang tidak dapat diterima. [Alternatif untuk kode yang sepele, kecil, dan jarang digunakan adalah pengujian demi pemeriksaan. Tapi itu tidak cocok dengan game metrik 100%.]
Contoh lain adalah Kompleksitas Siklomatik. Ini adalah salah satu ukuran kualitas kode terbaik. Tapi itu bisa dimainkan dengan membuat banyak fungsi kecil yang mungkin lebih sulit dibaca (dan lebih sulit untuk dipertahankan) daripada satu fungsi yang lebih besar. Anda berakhir dalam ulasan kode di mana Anda setuju bahwa itu mungkin tidak terlalu mudah dibaca tetapi memenuhi ambang kompleksitas.
sumber
Bingo, dan tidak ada "jika" tentang hal itu. Ini disebut "Disfungsi Pengukuran" dan telah diamati dan ditulis tentang Joel berkali-kali menulis artikel tentang itu pada tahun 2002 merujuk buku oleh Profesor Harvard.
Itu tidak berarti metrik seperti itu tidak berguna, hanya saja orang tidak boleh mendasarkan insentif atau kebijakan secara eksplisit pada pengukuran proxy tersebut. Jika Anda ingin meningkatkan kualitas, metrik proksi dengan nilai yang sangat buruk mungkin merupakan titik yang baik untuk memulai. Tetapi Anda tidak dapat menyimpulkan bahwa kualitas itu baik hanya karena semua metrik Anda memiliki nilai yang bagus.
sumber
Ini terdengar seperti fan-in dan fan-out. Fan-in menghitung jumlah modul yang memanggil modul yang diberikan dan fan-out menghitung jumlah modul yang dipanggil oleh modul yang diberikan. Tanda peringatan untuk digunakan adalah modul yang memiliki kipas besar dan kipas besar, karena ini mungkin menunjukkan desain yang buruk dan target utama untuk refactoring atau mendesain ulang.
Pengukuran sederhana adalah baris kode. Anda dapat memecahnya menjadi garis total kode di seluruh proyek dan garis kode per modul (mungkin menggunakan modul ukuran yang berbeda). Anda dapat menggunakan ini sebagai indikator peringatan yang menunjukkan bahwa Anda harus meninjau modul tertentu. Sebuah buku tentang pengukuran dan metrik kualitas perangkat lunak membahas beberapa pekerjaan yang menunjukkan bahwa hubungan antara tingkat cacat dan ukuran modul adalah kurva, di mana cacat rata-rata per KSLOC dilengkapi dengan modul dengan ukuran antara 175 dan 350 SLOC.
Sesuatu yang sedikit lebih kompleks adalah kompleksitas siklomatik, yang dirancang untuk menunjukkan kemampuan uji, kemampuan memahami, dan pemeliharaan sistem. Kompleksitas siklus menghitung jumlah jalur independen melalui aplikasi atau modul. Jumlah tes, dan oleh karena itu upaya yang diperlukan untuk menghasilkan dan melaksanakan tes, sangat terkait dengan kompleksitas siklomatik.
Saya tidak yakin itu masalahnya.
Sebagai contoh, ada penelitian yang menunjukkan bahwa memori kerja manusia hanya dapat menampung 7 plus / minus 2 objek . Ini mungkin menarik untuk mengukur fan-in dan fan-out - jika saya bekerja dalam sebuah modul, dan terhubung ke lebih dari ~ 7 modul lainnya, saya mungkin tidak akan dapat melacak dengan tepat apa yang modul lain ada di kepala saya.
Ada juga yang telah bekerja pada terkait cacat pada metrik seperti kompleksitas siklomatik. Karena Anda ingin meminimalkan cacat pada sistem Anda, Anda dapat mengidentifikasi titik-titik yang membutuhkan lebih banyak upaya pengujian atau refactoring, sebagaimana diidentifikasi oleh kompleksitas siklomatik yang tinggi.
Ini adalah kasus dengan pengukuran atau metrik apa pun. Mereka perlu digunakan untuk memahami sistem dan membuat keputusan yang tepat. Ungkapan "Anda tidak bisa mengatur apa yang tidak bisa Anda ukur" muncul di benak Anda. Jika Anda menginginkan perangkat lunak berkualitas tinggi, Anda perlu beberapa pengukuran dan metrik untuk menilai kualitas itu. Namun, ada sisi lain dari ini. Anda tidak dapat mengelola secara eksklusif dengan angka. Anda dapat menggunakan angka-angka untuk membuat keputusan berdasarkan informasi, tetapi Anda tidak dapat membuat keputusan hanya karena angka-angka mengatakan demikian.
sumber
Ada metrik atau proksi untuk banyak kualitas yang Anda minati:
Ada beberapa masalah dengan semua item ini:
Efek total dari masalah ini adalah bahwa metrik seperti ini cenderung hanya bernilai dalam budaya yang lebih luas - seperti TQM, jaminan kualitas (bukan kontrol), peningkatan berkelanjutan, kaizan, dll. Diperlukan untuk menentukan elemen dari kedua budaya tersebut , dan bagaimana itu perlu diubah. Jika Anda memiliki definisi ini, maka metrik seperti ini menjadi alat penting dalam membantu meningkatkan kualitas kode, praktik kerja, produktivitas, dll. Tanpa konteks yang lebih luas ini, metrik akan menghasilkan pekerjaan untuk mengoptimalkan metrik; akan menjadi alat beancounter untuk meningkatkan produktivitas, dan mengurangi biaya; dan akan menjadi kendala untuk dimainkan oleh staf pengembangan.
sumber
Anda bisa terobsesi dengan metrik, atau Anda bisa terobsesi dengan orang-orang terbaik, alat, praktik untuk teknik dan QA yang Anda mampu. Saya akan jauh lebih bahagia memiliki beberapa genius QA paranoid yang telah membaca 'Tertipu oleh Keacakan' dan yang suka mengotomatisasi daripada sekelompok laporan yang diformat dengan angka.
sumber
Ada masalah mendasar ini dengan metrik.
Hampir semua metrik yang diusulkan telah ditunjukkan, di dunia nyata pada kode nyata, berkorelasi kuat atau sangat kuat dengan SLOC mentah (baris kode sumber).
Inilah yang membunuh metrik Halstead, di tahun 1970-an. (Suatu hari, kebetulan, sekitar 1978, saya duduk di sebuah ceramah oleh PhD baru tentang metrik Halstead, di mana ia menunjukkan hal ini.)
Baru-baru ini, kompleksitas siklomatik McCabe telah terbukti sangat berkorelasi dengan SLOC mentah, sampai-sampai orang yang melakukan penelitian itu bertanya-tanya dengan lantang jika metrik McCabe memberi tahu kami apa pun yang berguna sama sekali.
Kami sudah tahu selama beberapa dekade bahwa program besar lebih cenderung memiliki masalah daripada yang kecil. Kami sudah tahu selama beberapa dekade bahwa subrutin besar lebih mungkin memiliki bug daripada yang kecil. Mengapa kita perlu metrik misterius untuk memberi tahu kita ini, ketika melihat empat halaman printer yang tersebar di atas meja harus cukup meyakinkan?
sumber
Mengingat semua jawaban lain di sini, saya merasa konyol dengan yang kecil ini. Lihatlah Crap4j , yang mencoba untuk memberi peringkat metode di java dengan berapa banyak mereka bau. (Proyek ini terlihat ditinggalkan.)
Ini menggunakan kombinasi kompleksitas cyclomatic dan cakupan tes. Seperti setiap metrik lainnya, ini bisa dimainkan.
sumber