2009-06-23 14 views
18

Ich habe kürzlich NDepend verwendet und es hat einen guten Bericht über meine .net-Assemblys und verwandte PDBs erstellt.Was ist Abstraktheit vs. Instabilitätsgraph?

Das interessanteste, was ich in dem Bericht gefunden habe, war die Abstraktheit gegenüber der Instabilität. Ich wollte das sehr genau verstehen, ich las ihre Dokumente und Online-Metriken, aber es konnte nur in gewissem Maße helfen.

In erster Linie möchte ich verstehen, wie man die Grafik richtig und Techniken zur Kontrolle der Abstraktheit mit Stabilität zu bewerten.

Es gibt einen sehr guten Artikel here, der darüber spricht, aber was dazu mehr brauche ich ist "Wie kontrolliere ich das? [Steuerung Abstraktheit mit Stabilität]

alt text

Antwort

25

Abstrakt ein Maß für die Steifigkeit eines Softwaresystems ist. Höhere Abstraktion, niedrigere Steifigkeit (oder größere Flexibilität) und umgekehrt. Wenn die Komponenten des Systems von abstrakten Klassen oder Schnittstellen abhängig sind, ist ein solches System einfacher zu erweitern und zu ändern, als wenn es direkt von konkreten Klassen abhängt.

Stabilität ist ein Maß für die Toleranz gegenüber Änderungen, da das Softwaresystem Änderungen daran zulässt, ohne es zu unterbrechen. Dies wird durch Analyse der Abhängigkeiten der Komponenten des Systems ermittelt.

Robert C. Martins article on OO Metriken beschreibt diese Konzepte in quantitativer Hinsicht.

Auszug aus dem Artikel:

Die Verantwortung, Unabhängigkeit und Stabilität einer Kategorie kann durch Zählen der Abhängigkeiten gemessen werden, die mit dieser Kategorie in Wechselwirkung treten. Drei Metriken wurden identifiziert:

Ca: Afferent Couplings: Die Anzahl der Klassen außerhalb dieser Kategorie, die von Klassen innerhalb dieser Kategorie abhängen.

Ce: Efferente Kupplungen: Die Anzahl der Klassen innerhalb dieser Kategorie, die außerhalb dieser Kategorien auf Klassen abhängen.

I: Instability: (Ce ÷ (Ca + Ce)): Diese Metrik die Bandbreite hat [0,1]. I = 0 bedeutet eine maximal stabile Kategorie. I = 1 zeigt eine maximal instabile Kategorie an.

A: Abstrakt: (# abstrakte Klassen in der Kategorie ÷ Gesamtanzahl der Klassen in der Kategorie). Dieser metrische Bereich ist [0,1]. 0 bedeutet konkret und 1 bedeutet vollständig abstrakt.

In jedem Software-System besonders große, Balance ist kritisch. In diesem Fall sollte ein System Abstraktheit mit Stabilität ausbalancieren, um "gut" zu sein. Die Position auf dem A-I-Diagramm zeigt dies. Bitte lesen Sie den Artikel für die Erklärung.

0

Sowohl die Abstraktheit als auch die Instabilität können allein zur Bewertung Ihres Codes verwendet werden. Sie wissen im Voraus, wie abstrakt oder stabil ein Modul sein soll.Zum Beispiel möchten Sie, dass die Präsentationsschicht moderat abstrakt und sehr stabil ist, da niedrigere Module davon abhängen. Auf der anderen Seite möchten Sie, dass der Infrastruktur-Layer hochgradig konkret (geringe Abstraktion) und hochgradig instabil ist, da er implementieren sollte, was die oberen Schichten fordern.

Sobald das klar ist, können Sie Abstraktheit und Instabilität in einem Diagramm kombinieren, und das ist das Diagramm der Instabilität-Abstraktheit. Sie möchten, dass Ihr Code sowohl abstrakt als auch stabil ist, um die Anforderungen für zukünftige Änderungen der Anforderungen auszugleichen.

Aber trotzdem sollten Sie ein starkes Verständnis von Instabilitäts- und Abstraktheitsmetriken haben, bevor Sie versuchen, sie gemeinsam zu verstehen. Sie können einige Beispiele finden, was Instabilität bedeutet in diesem Artikel: How to Use Module Coupling and Instability Metrics to Guide Refactoring

Es gibt einen ähnlichen Artikel eine CQLinq Abfrage abzuleiten, die Instabilität aller Module in der Anwendung misst: How to Measure Module Coupling and Instability Using NDepend

Verwandte Themen