Qu'est-ce que le graphe Abstraction / instabilité?

J'ai récemment utilisé NDepend et il a produit un bon rapport sur mes assemblages .net et les PDB connexes.

la chose la plus intéressante que j'ai trouvée dans le rapport était le graphe Abstraction vs instabilité. Je voulais comprendre cela en détail, j'ai lu leurs docs et metrices en ligne, mais cela ne pouvait être utile que dans une certaine mesure.

Je veux D'abord comprendre comment évaluer correctement le graphe et les techniques pour contrôler l'Abstraction avec stabilité.

il y a un très bon article ici qui parle sur cela, mais ce qui en plus de cela, j'ai besoin est " comment puis-je contrôler ? [contrôle de l'abstraction avec la stabilité]'

alt text

19
demandé sur Wolf 2009-06-23 11:39:02

2 réponses

Abstraction est une mesure de la rigidité d'un système logiciel. Plus l'abstraction est élevée, moins la rigidité (ou plus la flexibilité) et vice versa. Si les composants du système dépendent de classes ou d'interfaces abstraites, un tel système est plus facile à étendre et à modifier que s'il dépendait directement de classes concrètes.

la stabilité est une mesure de la tolérance au changement, car le système logiciel permet d'y apporter des changements sans les briser. Ceci est déterminé par analyser les interdépendances des composantes du système.

Robert C. Martin's article sur les mesures OO décrit ces concepts en termes plus quantitatifs.

Extrait de l'article:

La responsabilité, l'indépendance et la stabilité d'une catégorie peut être mesurée en comptant le les dépendances qui interagissent avec cette catégorie. Trois paramètres ont été identifiés:

Ca : Couplages Afférents: Le nombre de classes hors de cette catégorie qui dépendent des classes dans cette catégorie.

Ce : couplages effectifs: le nombre de classes à l'intérieur de cette catégorie qui dépendent de classes en dehors de cette catégorie.

I : instabilité : (Ce ÷ (Ca+Ce)): cette métrique a l'intervalle [0,1]. I = 0 indique une catégorie de stabilité maximale. I = 1 indique une instabilité maximale catégorie.

A : Abstraction : (# de classes abstraites dans la catégorie ÷ nombre total de classes dans la catégorie). Cette fourchette métrique est de [0,1]. 0 signifie concret et 1 signifie complètement abstrait.

dans n'importe quel système de logiciel particulièrement grands, l'équilibre est critique. Dans ce cas, un système doit équilibrer abstraction et stabilité pour être "bon". La position sur le graphique A-I le montre. S'il vous plaît lire l'article pour le explication.

25
répondu trshiv 2009-08-19 11:26:14

l'abstraction et l'instabilité peuvent être utilisées seules pour évaluer votre code. Vous savez à l'avance comment abstrait ou stable un module devrait être. Par exemple, vous voulez que la couche de présentation soit modérément abstraite et hautement stable, parce que les modules inférieurs en dépendent. D'un autre côté, vous voulez que la couche infrastructure soit très concrète (faible abstraction) et très stable, parce qu'elle devrait mettre en œuvre ce que les couches supérieures exigent.

une Fois que c'est clair, vous pouvez combiner abstraction et instabilité en un seul graphe, et c'est le graphe instabilité-Abstraction. Vous voulez que votre code montre autant d'Abstraction que de stabilité, afin d'équilibrer les besoins pour supporter les changements futurs dans les exigences.

mais de toute façon, vous devriez avoir une bonne compréhension des mesures d'instabilité et d'Abstraction seules avant d'essayer de les comprendre en travaillant ensemble. Vous pouvez trouver quelques exemples sur ce que l'instabilité, signifie dans cet article: comment utiliser le Module Couplage et mesures D'instabilité pour guider le remaniement

il y a un article connexe dérivant une requête CQLinq qui mesure l'instabilité de tous les modules dans l'application:Comment mesurer le couplage et L'instabilité des modules en utilisant NDepend

1
répondu Zoran Horvat 2015-08-12 09:12:29