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.