Seminararbeit Modellbasierte Analyse von Open SourceProjekten Gereon Bürvenich Lehrstuhl Software Engineering RWTH Aachen http://www.se-rwth.de/ Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Gliederung Seite 2 1. Einleitung und Motivation 2. Systementwurf 3. Evaluierung und Ergebnisse 4. Zusammenfassung und Ausblick Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Einleitung und Motivation Seite 3 Steigende Nachfrage nach qualitativ hochwertiger Software Steigende Nachfrage nach Bestimmung der Qualität von Software Metriken als Maßzahlen Anwendung der Metriken meist auf Code-Ebene Auch auf Klassendiagramm-Ebene einsetzbar? Ist auch auf Modell-Ebene eine ausreichende Bewertung der Qualität von Software möglich? Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Was ist Qualität? Seite 4 Im ursprünglichen Wortlaut lediglich eine Eigenschaft Mittlerweile jedoch Qualität = „gute Qualität“ „Gesamtheit von Eigenschaften und Merkmalen eines Produktes oder einer Tätigkeit, die sich auf die Eignung zur Erfüllung gegebener Erfordernisse beziehen“ (DIN 55350) Nicht nur Korrektheit Weitere Eigenschaften wie Wartbarkeit und Effizienz Muss messbar gemacht werden Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Herangehensweise Seite 5 Nutzung von Open Source-Projekten als Grundlage Generierung von Klassendiagrammen Qualitätsanalyse auf Basis der Klassendiagramme • Implementierung von Metriken Statische Analyse des Quellcodes Vergleich zwischen modellbasierter und statischer Analyse Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Metriken Seite 6 Maßzahlen zur quantitativen Bestimmung von Softwarequalität Vergleichbar, kurz, präzise Einfache Metriken • Lines of Code (LOC) • Number of Children (NOC) Komplexe Metriken • Response for a Class (RFC) • Lack of Cohesion in Methods (LCOM) Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Auswahl der Projekte Seite 7 Kriterien für die Auswahl: • komplett in Java • Open Source • Maximalgröße von 50 Klassen • aktive Entwicklung und Nutzung Ausgewählte Projekte: • picasso • jUnit Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen MontiCore Seite 8 Modellierungsframework zur schnellen und effektiven Erstellung von domänenspezifischen Sprachen (DSL) Stellt Parser zur Verfügung Bietet Generatoren zur CodeGenerierung aus Modellen Parser erzeugt einen Abstrakten Syntaxbaum (AST) Repräsentation des geparsten Programms als Baum Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Parsen von Java als AST Seite 9 OD ast:ASTCompilationUnit importDeclaration:ASTImportDeclaration :ASTClassDeclaration extendedClass = null implementedInterfaces = null name = „Example“ packageDeclaration:ASTPackageDeclaration name = [„pkg“] :ASTMethodDeclaration :ASTMemberDeclarationList :ASTFieldDeclaration name = „getName“ parameters = null declaration:ASTVariableDeclaration package pkg; returnType:ASTSimpleReferenceType name = [„String“] :ASTVariableDeclarator name = „name“ public class Example { :ASTPrimitiveModifier private String name; modifier = 11 type:ASTSimpleReferenceType name = „String“ public String getName() { return this.name; } } :ASTPrimitiveModifier modifier = 8 Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Systementwurf Seite 10 Open SourceProjekt unterstützt durch MontiCore JavaJavaJavaCode Code Code CDAST Metriken Java-Parser JavaAST Generator CD-Parser Klassen diagramm Klassen JavaJavadiaCode Code gramm e ERGEBNIS FreeJavaJavamarkerCode Code Templates Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Generierungsprozess Seite 11 Java-Klassen in Paket-Struktur Klassendiagramm-Fragmente in gleicher Paket-Struktur junit junit extensions extensions ActiveTest Suite.java ActiveTest Suite.cd.part RepeatedTest .java RepeatedTest .cd.part RepeatedTest .java RepeatedTest .cd.part runner runner BaseTest Runner.java BaseTest Runner.cd.part TestRun Listener.java TestRun Listener. cd.part Version .java Version .cd.part junit extensions extensionsCD. cd runner junitCD.cd runnerCD.cd Vollständiges Klassendiagramm des Projektes Klassendiagramme für jedes Paket Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Klassendiagramm (Ausschnitt) Seite 12 package cd; classdiagram MyCD { class Action<T> { Picasso picasso; Request request; java.lang.ref.WeakReference<T> target; boolean skipCache; void error(); void cancel(); //... } class Picasso { static java.lang.String TAG; static android.os.Handler HANDLER; boolean indicatorsEnabled; boolean loggingEnabled; boolean shutdown; public void cancelRequest(android.widget.ImageView view); public void cancelRequest(Target target); //... } association Action->Picasso; association Action->Request; //... } Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Seite 13 Klassendiagramm (Ausschnitt) - Editor Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Modellbasierte Analyse Seite 14 Auswahl der geeigneten Metriken • Kein Quellcode vorhanden Depth of Inheritance Tree (DIT) Number of Children (NOC) Cohesion among Methods in a Class (CAMC) Coupling between Object Classes (CBO) Parsen der Klassendiagramme mit Parser aus MontiCore AST des Klassendiagramms Ausführung der Metriken auf AST Ausgabe der Werte in Datei Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Evaluierung Seite 15 Zunächst statische Analyse der Projekte • Softwaremetriken (mithilfe des Eclipse-Plugins Metrics) • Kommentare/Tests Anschließend Generierung der Klassendiagramme Modellbasierte Analyse der Klassendiagramme mit Softwaremetriken Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Statische Code-Analyse – Ergebnis (jUnit) Seite 16 Class name DIT NOC LCOM WMC ActiveTestSuite 2 0 0 10 RepeatedTest 3 5 0 2 TestDecorator 2 3 0 4 TestSetup 3 0 0 4 Assert 1 0 0 96 AssertionFailedError 4 1 0 4 ComparisonCompactor 1 0 0,514 4 ComparisionFailure 5 0 0,333 4 JUnit4TestAdapter 1 0 0,625 11 JUnit4TestAdapterCache 3 0 0 3 1,894 0,578 0,176 20,684 … Average Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Modellbasierte Analyse – Ergebnis (jUnit) Seite 17 Class name DIT NOC CAMC CBO ActiveTestSuite 2 0 0,195 3 RepeatedTest 3 5 0,438 3 TestDecorator 2 3 0,5 4 TestSetup 3 0 0,5 3 Assert 1 0 0,219 0 AssertionFailedError 2 1 0,833 3 ComparisonCompactor 1 0 0,5 3 ComparisionFailure 3 0 0,625 6 JUnit4TestAdapter 1 0 0,134 5 JUnit4TestAdapterCache 2 0 0,5 3 1,632 0,578 0,417 3,316 … Average Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Vergleich Metriken Seite 18 jUnit statisch picasso modellbasiert statisch modellbasiert DIT 1,894 1,632 1,715 1,629 NOC 0,578 0,578 0,444 0,444 WMC 20,684 - 13,5 - LCOM 0,176 - 0,178 - CAMC - 0,417 - 0,35 CBO - 3,316 - 3,481 Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Vergleich Seite 19 Kommentare und Tests auf Model-Ebene nicht untersucht Nicht alle Metriken auf Modell-Ebene anwendbar DIT-Metrik leichte Abweichung, NOC gleich LCOM und CAMC analoge Ergebnisse Insgesamt ähnliche Aussagen auf Modell- und CodeEbene Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Zusammenfassung/Ausblick Seite 20 Zusammenfassung Toolstack Reverse-Engineering von Modellen Statische Analyse auf Code-Ebene differenzierter Dennoch deckende Aussage auf Modell-Ebene Ausblick Genauerer Vergleich durch weitere Metriken Vergleich weiterer (größerer) Projekte Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Seite 21 Vielen Dank für Ihre Aufmerksamkeit! Gereon Bürvenich Lehrstuhl für Software Engineering RWTH Aachen Literaturverzeichnis Seite 22 [BBM96] Victor R. Basili, Lionel C. Briand, and Walcélio L. Melo. A validation of objectoriented design metrics as quality indicators. IEEE Trans. Softw. Eng., 22(10):751–761, October 1996. [CK94] S. R. Chidamber and C. F. Kemerer. A metrics suite for object oriented design. IEEE Trans. Softw. Eng., 20(6):476–493, June 1994. [CSC06] Steve Counsell, Stephen Swift, and Jason Crampton. The interpretation and utility of three cohesion metrics for object-oriented design. ACM Trans. Softw. Eng. Methodol., 15(2):123–149, April 2006. [JL07] Horst Lichter Jochen Ludewig. Software Engineering - Grundlagen, Menschen, Prozesse, Techniken, volume 1st Edition. dpunkt, 2007. [McC76] H. Krahn. MontiCore: Agile Entwicklung von domänenspezifischen Sprachen im Software-Engineering. Shaker, 2010. [Rum11] Bernhard Rumpe. Modellierung mit UML, volume 2nd Edition. Springer, 2011. Weitere Quellen können der Seminararbeit entnommen werden.