Apakah Ada Metrik Untuk Kohesi Dan Kopling?


Jawaban:


29

Saya pikir metrik yang Anda cari adalah LCOM4, ​​meskipun berlaku lebih untuk kelas.

Sonar menjelaskannya dengan baik di sini :

... metrik: LCOM4 (Kurangnya Metode Kohesi) untuk mengukur seberapa kelas kohesif. Menafsirkan metrik ini cukup sederhana karena nilai 1 berarti bahwa kelas hanya memiliki satu tanggung jawab (baik) dan nilai X berarti bahwa sebuah kelas mungkin memiliki tanggung jawab X (buruk) dan harus di refactored / dibagi.

Tidak ada keajaiban di sini, hanya akal sehat. Mari kita ambil contoh sederhana dengan Driver kelas. Kelas ini memiliki dua bidang: Mobil dan Otak, dan lima metode: drive (), goTo (), stop (), getAngry () dan drinkCoffee (). Berikut ini adalah grafik ketergantungan antara komponen-komponen tersebut. Ada tiga blok komponen terkait, jadi LCOM4 = 3, sehingga kelas tampaknya memiliki tiga tanggung jawab yang berbeda dan melanggar Prinsip Tanggung Jawab Tunggal. http://i.stack.imgur.com/2527G.png

...

Ini alat yang hebat, jika Anda bisa menggunakannya. :)


@OnorioCatenacci Tidak masalah. :)
Oleksi

Sayang sekali mereka tidak masuk ke cara mereka menghitung metrik.
Onorio Catenacci

3
Ini mungkin membantu dengan itu: aivosto.com/project/help/pm-oo-cohesion.html
Oleksi

Karena penasaran, bagaimana Anda akan memperbaiki diagram itu untuk mematuhi Prinsip Tanggung Jawab Tunggal? brain.setAngry(driver)? car.applyBreaks(driver)?
Phil

Saya ragu bahwa metrik kohesi berbasis kode benar-benar dapat menjadi indikasi kohesi tingkat antarmuka, dan bahkan dapat mempromosikan pemrograman yang buruk: mortoray.com/2015/04/29/…
edA-qa mort-ora-y

16
  • Kopling aferen: Jumlah tanggung jawab
  • Efferent coupling: Jumlah dependensi
  • Ketidakstabilan: Rasio kopling eferen dengan kopling total (Afferent + Efferent).

Ketidakstabilan didukung dalam berbagai alat metrik kode.


Terima kasih @ Brian - persis hal yang saya harapkan.
Onorio Catenacci
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.