# Bewertung von Softwarearchitekturen

Die Bewertung von Softwarearchitekturen (engl. software architecture evaluation bzw. software architecture analysis) ist ein Teilgebiet des Software-Engineering und befasst sich mit der Bewertung von Softwarearchitekturen. Softwarearchitekturbewertungen werden üblicherweise von Softwarearchitekten durchgeführt.

## Ziel

Ziel der Softwarearchitekturbewertung ist es, eine Softwarearchitektur auf ein bestimmtes Qualitätsmerkmal (oder mehrere Qualitätsmerkmale gleichzeitig) hin zu untersuchen. Dies kann erfolgen durch:
* Vergleich von zwei alternativen Softwarearchitekturen bezüglich des Qualitätsmerkmals / der Qualitätsmerkmale
* Untersuchung, inwieweit eine Softwarearchitektur bestimmte Qualitätsmerkmale erfüllt,
* Untersuchung von Risiken, die eine Softwarearchitektur bezüglich bestimmter Qualitätsmerkmale mit sich bringt,
* Untersuchung inwieweit die vorgegebene Softwarearchitektur im Code auch eingehalten wurde.

## Verfahren

Zur Bewertung von Softwarearchitekturen existieren mehrere Ansätze:
* Fragebögen
* Checklisten
* szenariobasierte Softwarearchitekturbewertung
* Architekturmetriken
* Architektur-Einhaltung-Prüftools

## Werkzeuge

Es existieren sowohl Werkzeuge zur Bestimmung von Architekturmetriken, als auch solche, welche die Einhaltung der vorgegebenen Architektur im Code prüfen. In einigen Fällen können die Werkzeuge auch beides.
Architekturmetriken werden üblicherweise mittels statischer Code-Analyse gewonnen. Zu den Architekturmetriken werden üblicherweise Metriken zur Entwurfsqualität (Modularität, Kohäsion, Kopplung …), wie beispielsweise zyklische Abhängigkeiten zwischen Modulen gezählt.
Zur Prüfung der Einhaltung der vorgegebenen Architektur im Code muss diese zunächst dem Werkzeug mitgeteilt werden (beispielsweise durch graphische Erfassung der Schichten und Module und ihrer erlaubten und nicht erlaubten Abhängigkeiten) und mit dem Code verbunden werden (beispielsweise durch eine Zuordnung der Klassen und Pakete zu den definierten Modulen).
Folgende Werkzeuge zur Prüfung der Architekturmetriken und Einhaltung der Architekturvorgaben im Code gibt es:
* Sonargraph, Sotoarc und Sotograph (Java, C, C++, .Net, ABAP) - Kommerzielles Produkt, welches neben einer großen Anzahl an Metriken auch Architekturmetriken und die Einhaltung der Architekturvorgaben prüft. Die Architekturverletzungen können priorisiert in der Entwicklungsumgebung in Form von Aufgaben eingebracht werden und laufend auf ihre korrekte Abarbeitung hin überprüft werden. Der historische Verlauf der Metriken kann ebenso dargestellt werden wie die Auswirkungen potentieller Architekturrefactorings.
* Structure101 (C/C++, Java, .Net, ActionScript, InterSystems Cache Objects, Pascal, PHP, Python, SQL, UML) - Ebenfalls ein kommerzielles Produkt, das über einen eigens entwickelten Parser verfügt und mit mehreren Sprachen funktioniert. Der Fokus liegt stärker auf die Visualisierung der Codearchitektur, die Analyse von Abhängigkeiten und die Durchführung von Refaktorisierungen als auf CodeSmells.
* Macker und JDepend (Java) - Open-Source Werkzeuge zur Prüfung von Zyklen und Abhängigkeiten. Die Prüfungen erfolgen mittels Modultests.
* NDepend (.Net), CPPDepend (C++) - Kommerzieller Port von JDepend
* Dependometer - Java, C++, C#
* ArchUnit - UnitTest-Framework für Java zur Formulierung und automatisierten Überprüfung von Architekturregeln