Esistono metriche per la coesione e l'accoppiamento?


Risposte:


29

Penso che la metrica che stai cercando sia LCOM4, ​​sebbene si applichi di più alle classi.

Sonar lo spiega bene qui :

... metrica: LCOM4 (Lack Of Cohesion Methods) per misurare quanto sono coerenti le classi. L'interpretazione di questa metrica è piuttosto semplice in quanto il valore 1 indica che una classe ha solo una responsabilità (buona) e il valore X significa che una classe ha probabilmente responsabilità X (cattiva) e deve essere riformattata / suddivisa.

Non c'è magia qui, solo buon senso. Facciamo un semplice esempio con il driver di classe. Questa classe ha due campi: Car and Brain e cinque metodi: drive (), goTo (), stop (), getAngry () e drinkCoffee (). Ecco il grafico delle dipendenze tra questi componenti. Esistono tre blocchi di componenti correlati, quindi LCOM4 = 3, quindi la classe sembra avere tre diverse responsabilità e infrange il principio di responsabilità singola. http://i.stack.imgur.com/2527G.png

...

È un ottimo strumento, se puoi usarlo. :)


@OnorioCatenacci Nessun problema. :)
Oleksi,

Peccato che non entrino nel modo in cui calcolano la metrica.
Onorio Catenacci,

3
Questo potrebbe aiutare in questo: aivosto.com/project/help/pm-oo-cohesion.html
Oleksi

Per curiosità, come rifatteresti quel diagramma per obbedire al principio della responsabilità singola? brain.setAngry(driver)? car.applyBreaks(driver)?
Phil

Dubito che le metriche di coesione basate sul codice possano davvero essere indicative della coesione a livello di interfaccia e potrebbero persino promuovere una cattiva programmazione: mortoray.com/2015/04/29/…
edA-qa mort-ora-y

16
  • Accoppiamento afferente: numero di responsabilità
  • Accoppiamento efficace: numero di dipendenze
  • Instabilità: rapporto tra accoppiamento efferente e accoppiamento totale (Afferent + Efferent).

L'instabilità è supportata in vari strumenti di metrica del codice.


Grazie @ Brian - esattamente il genere di cose che speravo di trovare.
Onorio Catenacci,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.