Softwareproduktlinien Ain t Nobody Got Time For That? Stephan Seifermann (FZI Karlsruhe) Karlsruher Entwicklertag 2016, 15.06.16
Agenda Kundenspezifische Anpassung von Produkten Konsolidierung von Produktkopien Konsolidierungsschritte Ansätze Live-Demo Zusammenfassung Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 2
Profil Stephan Seifermann Wissenschaftlicher Mitarbeiter Schwerpunkte Modellgetriebene Software-Entwicklung Software-Architekturen seifermann@fzi.de FZI Forschungszentrum Informatik Anwendungsforschung Informatik Forschungstransfer für KMUs Trainings/Schulungen Enge Partnerschaft mit KIT Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 3
E-Commerce Integration als Beispielprodukt Kunde Online-Shop Produktdatenbank Daten laden Suchen Enterprise Resource Planing (ERP) - Warenbestand - Preise - Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 4
Individualisierung durch Kopieren Kunde 2 PD2 & ERP2 Online-Shop Kunde 1 PD1 & ERP1 Produktdatenbank Daten laden Suchen Produktdatenbank Daten laden Online-Shop Suchen Zeitdruck Enterprise Resource Planing (ERP) - Warenbestand - Preise - Enterprise Resource Planing (ERP) - Warenbestand - Preise - Kunde 3 PD3 & ERP3 Online-Shop Produktdatenbank Daten laden Suchen Enterprise Resource Planing (ERP) - Warenbestand - Preise - Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 5
Kopieren von Produkten Unschön aber individuelle Kopien sind nicht immer vermeidbar Produktdatenbank Kunde 1 PD1 & ERP1 Daten laden Enterprise Resource Planing (ERP) - Warenbestand - Preise - Online-Shop Suchen Zeitdruck Produktdatenbank Kunde 2 PD2 & ERP2 Daten laden Enterprise Resource Planing (ERP) - Warenbestand - Preise - Kunde 3 PD3 & ERP3 Online-Shop Suchen Online-Shop Produktdatenbank Daten laden Suchen Enterprise Resource Planing (ERP) - Warenbestand - Preise - Typische Gründe Zeit- und Kosten Flexibilität Unbekannte Evolutionsszenarien Organisatorisches Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 6
Vor- und Nachteile durch Kopieren Vorteilhaft, wenn kundenspezifische Anpassungen schnell und kostengünstig vorgenommen werden müssen Nachteilig, wenn Wartungsaufwand mehrfach entsteht kundenspezifische Anpassungen zunehmen Anpassungen kombiniert werden sollen Synergieeffekte nicht ausgenutzt werden Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 7
Softwareproduktlinie Produktlinie Kern Feature Variabilitätsmanagement Erzeugung verschiedener Varianten Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 8
Wie komme ich zu einer Produktlinie? Reaktiv Produktlinie Feature Feature Proaktiv Extraktiv Kopie 1 Produktlinie Original Produktlinie Kopie 2 Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 9
Kopie 1 Original Produktlinie Kopie 2 PRODUKTLINIENKONSOLIDIERUNG Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 10
Schritte bei der Produktlinienkonsolidierung Kopie 1 Differenz - analyse 1 Variabilitäts - analyse 2 Original Kopie 2 Differenzen Beziehungen 5 Refactoring 4 0 Variabilitäts - design 3 Produktlinie Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 11
Kopie 1 Differenz - analyse 1 Original Kopie 2 Differenzen DIFFERENZANALYSE Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 12
Unterschiede Erkennen - Zielgerichtet : Method : VPM : Method : Statement : VariationPoint : Statement : Statement : VariationPoint : Statement : Statement : VariationPoint : Statement public String sqrt(string value1){ Double x = Double.valueOf(value1); Double sqrt = Math.sqrt(x); return sqrt.tostring(); } public String sqrt(string value1){ FloatingPoint x = FloatingPoint.valueOf(value1); FloatingPoint sqrt = x.sqrt(); return sqrt.tostring(); } Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 13
Variabilitätsanalyse 2 Beziehungen VARIABILITÄTSANALYSEN Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 14
Wozu Variabilitätsanalyse? = geänderter Quelltext Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 15
Wozu Variabilitätsanalyse? = in Beziehung stehende Änderungen = geänderter Quelltext Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 16
Analysen auf dem Variationspunktmodell restriktiv Abhängigkeit Programmabhängigkeit Datenabhängigkeit int n = 10; calcfibonacci(n); Ähnlichkeit Ähnliches Vokabular Ähnlicher Ort void parsefibonaccicommand() {} int calcfibonacci(int n) {} Gleichheit suggestiv Gleicher Zeitpunkt Gleiches Ticket [Klatt 2014] Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 17
Live-DEMO Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 18
Verfügbare Variabilitätsanalysen Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 19
Einstellungen für Ähnlichkeit nach Begriffen Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 20
Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 21
Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 22
Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 23
Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 24
Beziehungen 0 Variabilitäts - design 3 VARIABILITÄTSDESIGN Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 25
Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 26
Refactoring 4 0 Variabilitäts - design 3 REFACTORING Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 27
Vorgehen beim Refactoring Generell Varianten in ausgewähltes Basisprodukt integrieren Kopie 2 Kopie 3 Variabilitätsmechanismus nutzen, der Variabilitätsmechanismus im Unternehmen akzeptiert ist zu definierter Charakteristik passt auf Code-Element anwendbar ist Kopie 1 Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 28
Mechanismen aus der Literatur [Clements et al. 2001] Parameterisierung Delegation in Strategie- Muster Dependency Injection Bedingte Ausführung Konfiguration Modulzusammensetzung Austausch von Bibliotheken Konfiguration von Produkten in Eclipse Generierung Konfigurationen aus DSL-Artefakt generieren Glue-Code aus DSL- Artefakt generieren Navigationsgerät navigierezu(ziel) 1 <<interface>> RoutingAlgorithmus berechneroute(start, ziel) Dijkstra berechneroute(start, ziel) Bellmann-Ford berechneroute(start, ziel) HOST_LOCALEDEF_CONF_OPT += \ --prefix=/usr \ --with-glibc=./eglibc Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 29
Mechanismen aus der Literatur [Clements et al. 2001] Erweiterungen Eclipse Extension Points Java Service Provider Spezifikation Auswahl während Übersetzung Präprozessor- Anweisungen Bedingte Ausführung mit statischer Konfiguration Vererbung Überladen, Überschreiben, Attribute, Bestandteil anderer Mechanismen //#if defined(logging) import org.apache.log4j.logger; //#endif Konfiguration Basiert auf Feature-Modell Startparameter Lizenzmechanismen Nutzereinstellungen Konstantenklasse Build-Flags Konfigurationsdateien Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 30
Live-DEMO Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 31
Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 32
Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 33
Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 34
Zusammenfassung Produktkopien nicht immer vermeidbar Kunde 2 PD2 & ERP2 Online-Shop Kunde 1 PD1 & ERP1 Produktdatenbank Daten laden Suchen Produktdatenbank Daten laden Enterprise Resource Planing (ERP) - Warenbestand - Preise - Online-Shop Suchen Zeitdruck Enterprise Resource Planing (ERP) - Warenbestand - Preise - Kunde 3 PD3 & ERP3 Online-Shop Produktdatenbank Daten laden Suchen Enterprise Resource Planing (ERP) - Warenbestand - Preise - Konsolidierungstechnologie Refactorings Original Kopie 1 Kopie 2 2 Variabilitätsanalyse Differenzen Beziehungen Differenzanalyse 1 KoPL Werkzeugkette Unternehmensweiten Katalog für Variabilitätsmechanismen erstellen Aus allgemeinen Techniken spezifische Mechanismen ableiten Passend nach Charakteristik wählen 5 Refaktorisierung 4 0 Variabilitätsdesign 3 Produktlinie Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 35
KoPL Werkzeug zur Produktlinienkonsolidierung Projektinformationen Code / Doku www.kopl-project.org github.com/kopl/splevo/wiki Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 36
Referenzen Literatur [Clements et al. 2002] Paul Clements, Linda Northrop. Software Product Lines Practices and Patterns. Addison-Wesley, 2002. [Klatt 2014] Benjamin Klatt. Consolidation of Customized Product Copies into Software Product Lines. Dissertation, Karlsruher Insititut für Technology (KIT), Karlsruhe, Deutschland, Oktober 2014 Grafiken Die Grafiken sind aus Einzelgrafiken zusammengesetzt und bestehen aus Grafik-Sammlung des KoPL-Projekts Font Awesome (Dave Gandy, SIL OFL 1.1, http://scripts.sil.org/ofl) Stephan Seifermann: Softwareproduktlinien - Ain t Nobody Got Time For That? 37