Vortrag der Azubis - RWTH Aachen University

Werbung
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.
Herunterladen