Czy istnieją wskaźniki spójności i łączenia?

Odpowiedzi:

29

Myślę, że metryka, której szukasz, to LCOM4, ​​chociaż dotyczy ona w większym stopniu klas.

Sonar ładnie wyjaśnia to tutaj :

... metryka: LCOM4 (brak metod kohezji) do pomiaru stopnia spójności klas. Interpretacja tej miary jest dość prosta, ponieważ wartość 1 oznacza, że ​​klasa ma tylko jedną odpowiedzialność (dobrą), a wartość X oznacza, że ​​klasa ma prawdopodobnie X obowiązków (złej) i powinna zostać zrefaktoryzowana / podzielona.

Nie ma tu żadnej magii, tylko zdrowy rozsądek. Weźmy prosty przykład ze sterownikiem klasy. Ta klasa ma dwa pola: Car i Brain oraz pięć metod: drive (), goTo (), stop (), getAngry () i drinkCoffee (). Oto wykres zależności między tymi komponentami. Istnieją trzy bloki powiązanych ze sobą komponentów, więc LCOM4 = 3, więc klasa wydaje się mieć trzy różne obowiązki i łamie zasadę pojedynczej odpowiedzialności. http://i.stack.imgur.com/2527G.png

...

To świetne narzędzie, jeśli możesz go użyć. :)

Oleksi
źródło
@OnorioCatenacci Nie ma problemu. :)
Oleksi
Szkoda, że ​​nie biorą pod uwagę sposobu obliczania metryki.
Onorio Catenacci
Z ciekawości, jak zmienilibyście schemat, aby przestrzegać zasady pojedynczej odpowiedzialności? brain.setAngry(driver)? car.applyBreaks(driver)?
Phil
Wątpię, czy mierniki spójności oparte na kodzie mogą naprawdę wskazywać na spójność na poziomie interfejsu, a nawet mogą promować złe programowanie: mortoray.com/2015/04/29/…
edA-qa mort-ora-y
16
  • Sprzężenie aferentne: liczba obowiązków
  • Łączenie efektywne: liczba zależności
  • Niestabilność: stosunek sprzężonego efektora do całkowitego sprzężenia (Afferent + Efferent).

Niestabilność jest obsługiwana w różnych narzędziach do pomiaru kodu.

Brian
źródło
Dzięki @ Brian - dokładnie to, co chciałem znaleźć.
Onorio Catenacci