2009-06-23 16 views
18

Niedawno użyłem NDepend i wygenerował dobry raport na temat moich zespołów .net i powiązanych pdbs.Czym jest wykres Abstractness vs. Instability?

Najbardziej interesującą rzeczą, którą znalazłem w raporcie, był wykres abstrakcyjności kontra niestabilności. Chciałem to dokładnie zrozumieć, czytałem ich dokumenty i wskaźniki online, ale tylko w pewnym stopniu.

Przede wszystkim chcę zrozumieć, jak prawidłowo ocenić wykres i techniki kontroli abstrakcyjności ze stabilnością.

Jest bardzo dobry artykuł here, który mówi o tym, ale co więcej oprócz tego, czego potrzebuję, to "jak to kontrolować? [Sterowania abstrakcyjność stabilność]”

alt text

Odpowiedz

25

Abstrakcyjność jest miarą sztywności układu oprogramowania. Im wyższa abstrakcja, tym mniejsza sztywność (lub większa elastyczność) i na odwrót. Jeśli komponenty systemu zależą od abstrakcyjnych klas lub interfejsów, to taki system jest łatwiejszy do rozszerzenia i zmiany, niż gdyby zależał bezpośrednio od konkretnych klas.

Stabilność to miara tolerancji dla zmian, ponieważ na ile system oprogramowania pozwala na wprowadzanie zmian bez jej łamania. Jest to określane na podstawie analizy współzależności komponentów systemu.

Dane Robert O Martin'a article na temat OO opisują te pojęcia w sposób bardziej ilościowy.

Fragment artykułu:

Odpowiedzialność, niezależność i stabilność kategorii może być mierzona poprzez liczenie zależnościami, które współdziałają z tej kategorii. Zidentyfikowano trzy wskaźniki:

Ca: Złącza aseptyczne: liczba klas poza tą kategorią, które zależą od klas w tej kategorii.

Ce: Efferentna Sprzęgło: liczba klas wewnątrz tej kategorii, które są zależne od klasy poza tą kategorie.

I: Niestabilność (Ce ÷ (Ca + SD)): te dane z przedziału [0,1]. I = 0 oznacza maksymalnie stabilną kategorię. I = 1 oznacza kategorię maksymalnie niestabilną.

A: Abstrakcyjność: (# klasy abstrakcyjne w kategorii ÷ Łączna liczba klas w kategorii). Ten zakres danych to [0,1]. 0 oznacza beton, a 1 oznacza całkowicie abstrakcyjny.

W każdym systemie oprogramowania, szczególnie dużym, równowaga ma kluczowe znaczenie. W takim przypadku system powinien balansować abstrakcyjność ze stabilnością, aby być "dobrym". Pokazuje to pozycja na wykresie A-I. Przeczytaj artykuł w celu wyjaśnienia.

0

Zarówno abstrakcyjność, jak i niestabilność mogą być używane samodzielnie do oceny kodu. Wiesz z góry, jak abstrakcyjny lub stabilny powinien być jakiś moduł.Na przykład chcesz, aby warstwa prezentacji była umiarkowanie abstrakcyjna i bardzo stabilna, ponieważ od niej zależą niższe moduły. Z drugiej strony, chcesz, aby warstwa infrastruktury była wysoce konkretna (niska abstrakcyjność) i wysoce niestabilna, ponieważ powinna implementować to, czego wymagają wyższe warstwy.

Kiedy to jest jasne, można połączyć abstrakcyjność i niestabilność w jeden wykres, a to jest wykres niestabilności i abstrakcji. Chcesz, aby twój kod wykazywał tak dużą abstrakcyjność, jak jest stabilny, aby zrównoważyć potrzeby w celu wsparcia przyszłych zmian wymagań.

W każdym razie powinieneś sam dobrze rozumieć wskaźniki niestabilności i abstrakcji, zanim spróbujesz zrozumieć, że pracują razem. Można znaleźć kilka przykładów, co oznacza niestabilność w tym artykule: How to Use Module Coupling and Instability Metrics to Guide Refactoring

Jest powiązany artykuł pochodzący zapytanie CQLinq który mierzy niestabilność wszystkich modułów w aplikacji: How to Measure Module Coupling and Instability Using NDepend