Upload
doandung
View
213
Download
0
Embed Size (px)
Citation preview
Seite 220.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Software-Produktlinien
domänenbasierter Softwareentwicklungsansatz SW-Produktlinie: Menge von Systemen mit:
ähnlichen Anforderungen ähnlichen Implementierungen gemeinsamer Softwarearchitektur
effektivere Wiederverwendung
-anforderungenDomänenwissen, Domänenmodell
Applikationsengineering
Anforderungen
Produktlinien-architekturDomänen-
entwurfDomänen-analyse
Domänen-implementierung
neue Anforderungen neue AnforderungenindividuellerEntwurf
individuelleImplementierung
analyseAnforderungs-
bekannteAnforderungen
Konfiguration Integration,Test
Domänenengineering
Dom
än
en
ab
gre
nzu
ng
Seite 320.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Gliederung
VersionierungssystemeDomänenanalyseSpezifikationsspracheSoftwarearchitekturRepGenSoftwaremetrikenLeistungsuntersuchungen
Seite 420.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Versionierungssysteme
versionierte Datenverwaltung: Speicherung von
Zwischenständen Speicherung von
Alternativen Navigation im
Versionsgraph
Alternativen (Branch)
Nachfolger (Successor)
Version 1
Version 2
Version 6
Version 8
Version 9
Version 7Version 4
Version 5
Version 3
Konsolidierung (merge)
Vorgänger (Ancestor)
Wurzel (Root)
Anwendungsbeispiele: Engineering-Repositories Content-Management-Systeme
Seite 520.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Objekt-orientierte Versionierungssysteme
Informationsmodell Objekttypen, versioniert und unversioniert Arbeitskontexttypen (Konfigurationsverwaltung) Beziehungstypen
Seite 620.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Verwaltung von Objektbeziehungen
viele Variationen komplexe Semantik:
gleitende Beziehungsenden Verwaltung der Kandidatenmengen Vorauswahl von Objektversionen (Pinning) regelbasierte Auswahl
Propagierung von Operationen
Objekt 1Version 1
Objekt 2Version 1
Objekt 2Version 2
Objekt 2Version 3
vorausgewählte Version
Kandidatenmenge
Seite 720.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Gliederung
VersionierungssystemeDomänenanalyseSpezifikationsspracheSoftwarearchitekturRepGenSoftwaremetrikenLeistungsuntersuchungen
Seite 820.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Merkmalanalyse
Teil der Domänenanalyse (FODA) Analyse der Domänenkonzepte
Aufgliederung in Merkmale Unterscheidung von vorgeschriebenen und optionalen Merkmalen Darstellung der Abhängigkeiten in Merkmaldiagrammen Kompositionsregeln, Merkmaldefinitionen, Auswahlrichtlinien keine Berücksichtigung von strukturellen Eigenschaften
Seite 920.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Merkmalanalyse der Beziehungsenden
resultierendes Merkmaldiagramm für das Konzept „Beziehungsendtyp“
Seite 1020.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Gliederung
VersionierungssystemeDomänenanalyseSpezifikationsspracheSoftwarearchitekturRepGenSoftwaremetrikenLeistungsuntersuchungen
Seite 1120.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Spezifikationssprache
Festlegung der Konfiguration eines Versionierungssystems
plattformunabhängige, domänenspezifische Darstellung erhöht Abstraktionsgrad: keine Implementierungsaspekte Konzentration auf variable Systemanteile kompakte Darstellung
UML als Basis Erweiterung der UML-Semantik mit einem UML-Profil:
Stereotypes Tagged Values
Seite 1220.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
UML-Profil für Versionierungssysteme
<<stereotype>>WorkspaceType
<<stereotype>>RelationshipType AttachmentType
<<stereotype>>
Package<<metaclass>> <<metaclass>>
Class
<<stereotype>> <<stereotype>>
<<stereotype>>InformationModel
Tags
preventAncestorDeletion: Boolean [0.1]deleteVersionOperation: Boolean [0.1]mergeOperation: Boolean [0..1]maxSuccessors: Integer [0..1]
<<stereotype>>VersionedObjectType
Tags
versionName: Boolean [0..1]versionDescription: Boolean [0..1]versionCreationDate: Boolean [0..1]versionChangeDate: Boolean[0..1]
<<stereotype>><<stereotype>>
Association<<metaclass>>
<<metaclass>>AssociationEnd
<<stereotype>>
<<stereotype>>RelationshipEndType
propDelete: Boolean [0..1]propAttachDetach: Boolean [0..1]propCopy: Boolean [0..1]propFreeze: Boolean [0..1]
propCreate: Boolean [0..1]
propCreateSuccessor: Boolean [0..1]propCheckoutCheckin: Boolean [0..1]
Tagsfloating: Boolean [0..1]
Seite 1320.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Gliederung
VersionierungssystemeDomänenanalyseSpezifikationsspracheSoftwarearchitekturRepGenSoftwaremetrikenLeistungsuntersuchungen
Seite 1420.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Softwarearchitektur
Middleware-basierte Implementierung Persistenzschicht:
Entity-Komponenten Objektorientierte Zugriffsschicht effiziente Daten-Zwischenspeicherung durch den Anwendungserver
Sitzungsschicht: Sitzungskomponenten Abbildung auf prozedurale Schnittstelle Verwaltung des Sitzungszustands, insb. Transaktionen
Objekttyp C
Objekttyp A
Beziehung ACBeziehung AB
Objekttyp B
Persistenzschicht
Objekttyp C
Objekttyp B
Objekttyp A
dynamische Webseiten
Webservice-SchnittstelleWebservice-Client
SitzungsschichtSchnittstellen
Webbrowser
relationaleDatenbank
Seite 1520.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Gliederung
VersionierungssystemeDomänenanalyseSpezifikationsspracheSoftwarearchitekturRepGenSoftwaremetrikenLeistungsuntersuchungen
Seite 1620.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Vorlagenbasierte Generierung
Vorlagen enhalten: statische Anteile (z.B. Java-, HTML-Code) dynamische Anteile (Metaprogramm)
Referenzen auf Modelldaten Kontrollstrukturen
Trennung von Steuerung, Datenaufbereitung und Darstellung
generierteDatei
Vorlage
aufbereitete Modelldaten
Kontext
Vorlagen-Prozessor
A B
C
Package C
Association B
Class A
merge
ModellUML-
UML-Repository
Generatorsteuerung
abstrakterSyntaxbaum
Generator-konfiguration
Seite 1720.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Gliederung
VersionierungssystemeDomänenanalyseSpezifikationsspracheSoftwarearchitekturRepGenSoftwaremetrikenLeistungsuntersuchungen
Seite 1820.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Bewertung durch Softwaremetriken
Softwaremetriken Ableitung von Messwerten aus dem Quellcode bzw. der
Spezifikation eines Systemes Aussagen über Aufwand, Wartbarkeit, Risiko, ...
verwendete Metriken: Anweisungsanzahl zyklomatische Komplexität Halstead-Aufwand
durchgeführte Untersuchungen: Beurteilung der Qualität der Generatorvorlagen Ermittlung der erreichten Wiederverwendungsfaktoren quantitative Analyse der generierten Softwaresysteme
Seite 1920.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Qualität der Generatorvorlagen
Orion-application-xml
RepObjAccessRemoteHome
RepObjAccessLocalHome
Application-xml
Undeploy-wsdd
Build-xml
RepObjRemoteHome
Deploy-wsdd
RepObjLocalHome
RepObjRemoteInterface
ShowIndex
ShowList
RepObjValueBean
RepObjLocalInterface
Web-xml
ShowTypeInfo
RepObjService
RepObjAccessRemoteInterface
RepObjAccessLocalInterface
Ejb-jar-xml
ShowInstance
RepObjBean
TestClient
ControllerServlet
RepObjAccessBean
0 25 50 75 100 125 150 175 200 225 250
zyklomatische Komplexität
Seite 2020.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Qualität der Generatorvorlagen
0 500 1000 1500 2000 25000
25
50
75
100
125
150
175
200
225
250
Build-xml
Textzeilen
zykl
omat
isch
e K
ompl
exitä
t
1 10 100 1000 100001,00
10,00
100,00
1.000,00
10.000,00
100.000,00
1.000.000,00
10.000.000,00
100.000.000,00
Build-xml
Textzeilen
Hal
stea
d-Au
fwan
d
Fazit: Umfang und Komplexität ungleich verteilt konstantes Verhältnis zwischen Umfang und Komplexität einige Vorlagen zu komplex Aufteilung der Vorlagen sinnvoll
Seite 2120.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Wiederverwendungsfaktoren
ShowIndex
Application-xml
Orion-application-xml
Build-xml
Undeploy-wsdd
Deploy-wsdd
TestClient
RepObjAccessBean
RepObjLocalInterface
ShowTypeInfo
RepObjAccessRemoteInterface
RepObjAccessLocalInterface
Web-xml
RepObjBean
ControllerServlet
ShowList
ShowInstance
RepObjService
RepObjRemoteInterface
RepObjLocalHome
RepObjValueBean
RepObjRemoteHome
Ejb-jar-xml
RepObjAccessRemoteHome
RepObjAccessLocalHome
0,00 0,25 0,50 0,75 1,00 1,25 1,50 1,75 2,00 2,25 2,50 2,75 3,00 3,25 3,50 3,75 4,00 4,25 4,50 4,75 5,00Wiederverwendungsfaktoren für alle Anwendungen der Vorlagen
Seite 2220.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Zusammensetzung der CMS-Implementierung
Systembestandteil TextzeilenGenerische Systemanteile 750 4,21%
Objekttypen 11139 62,47%Article 2559 14,35%EditorialDepartment 2372 13,30%Image 1583 8,88%Menu 2325 13,04%Teaser 2300 12,90%
Reguläre Beziehungen 3910 21,93%Hierachy 1149 6,44%MenuContents 1268 7,11%TeaserArticle 1178 6,61%Illustration 315 1,77%
Attachment-Beziehungen 2032 11,40%MenuAttachment 657 3,68%TeaserAttachment 674 3,78%
ProzentualerAnteil 4,21%
62,47%
21,93%
11,40%
Generische Sys-temanteile
Objekttypen Reguläre Be-ziehungen
Attachment-Be-ziehungen
Seite 2320.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Gliederung
VersionierungssystemeDomänenanalyseSpezifikationsspracheSoftwarearchitekturRepGenSoftwaremetrikenLeistungsuntersuchungen
Seite 2420.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Untersuchung der generierten Implementierung
unsetCurrentEditorialDepartmentsetCurrentEditorialDepartment
isFrozengetTitlegetRoot
getAlternativesgetAncestors
getImagegetTeaser
getSuccessorsgetValueObject
setTextsetTitlesetDate
addImagesetValueObject
checkinFromEditorialDepartmentcheckoutToEditorialDepartment
mergefreeze
attachToEditorialDepartmentfindAll
createSuccessorcreateObjectdeleteObject
0 10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 110000Median der Rechenzeit (µs)
Messwerte für den Objekttyp „Article“
Seite 2520.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Untersuchung der Webservice-Schnittstelle
Messwerte für den Objekttyp „Image“
Operation VerlangsamungfindAll 10764,0 22128,0 11364,0 105,6%setCopyright 2794,0 10602,5 7808,5 279,5%setWidth 2975,5 10765,5 7790,0 261,8%setHeight 2884,0 10606,5 7722,5 267,8%setDescription 2399,5 10117,5 7718,0 321,7%createObject 8130,5 15487,5 7357,0 90,5%getValueObject 938,5 7780,0 6841,5 729,0%setValueObject 3151,0 9393,5 6242,5 198,1%copyObject 7879,5 13672,0 5792,5 73,5%
Aufrufdauer für nativen Client (µs)
Aufrufdauer fürWebservice-Client (µs)
prozentualeVerlangsamung
copyObjectcreateObject
findAlldeleteObject
setValueObjectsetWidth
setHeightsetCopyright
setDescriptiongetValueObject
0% 50% 100% 150% 200% 250% 300% 350% 400% 450% 500% 550% 600% 650% 700% 750%prozentuale Verlangsamung
Seite 2620.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Eine generische Vergleichsimplementierung
mittels eines generischen Frameworks realisiert Systemschnittstellen und Funktionalität entsprechen der
generierten Implementierung die generische Implementierung ist mit den üblichen
kommerziellen Lösungen vergleichbar
generische Implementierung generierte Implementierung
nein ja
nein ja
Verwaltung vonVersions- und Beziehungsdaten
zentrale, generische Tabellen,keine Berücksichtigungen der Kardinalitäten
separate Speicherung, integiert in die Objekttabellen, Anpassung an die Kardinalitäten des Informationsmodells
unversionierteObjekttypennicht-gleitendeBeziehungsendenOperations-propagierung
dynamisch anhand vonKonfigurationsdaten
durch fest vorgegebene Logikin den Sitzungskomponenten
Implementierungder Sitzungs-komponenten
Sitzungskomponenten erben Anwendungslogik von generischen Superklassen des Framework
Duplizierung und Anpassung derAnwendungslogik durch den Generator
Seite 2720.02.2004 RepGen – Eine Generierungsplattform für Versionierungsdienste
Beschleunigung durch die Generierung
Beschleunigung insgesamt: 26,6%
getSuccessorsgetAncestors
getRootdeleteVersion
getAlternativessetCurrentWorkspace
isFrozengetAttribute
unsetCurrentWorkspacecreateSuccessor
createObjectattachToWorkspace
mergedeleteObject
addRelationshipObjectsetValueObject
pinRelationshipObjectsetAttribute
getValueObjectgetAttachedObject
freezecopyObject
checkinFromWorkspacecheckoutToWorkspacegetRelationshipObject
-150% -125% -100% -75% -50% -25% 0% 25% 50% 75% 100%prozentuale Beschleunigung