Features - DBSE - Universität Magdeburg

Werbung
So#wareproduktlinien
-Feature-Orien4erung
SvenApel(UniversitätPassau)
Chris4anKästner(CMU)
GunterSaake,ThomasThüm(UniversitätMagdeburg)
1
WieVariabilitätimplemen4eren?
Wiederverwendbare
Implemen4erungs-
artefakte
Applica/onEng.
DomainEng.
Feature-Modell
Feature-Auswahl
2
Generator
Fer4gesProgram
Ziele
} 
} 
Neuar4geImplemen4erungstechniken
LösenderProbleme:
} 
} 
} 
} 
} 
3
FeatureTraceability(inbs.beiLaufzeitvariabilität,Branches,
Build-Systemen,Präprozessoren)
QuerschneidendeBelange(inbs.beiFrameworks,
Komponenten)
PreplanningProblem(inbs.beiFrameworks,Komponenten)
UnflexibleVererbungshierarchien(inbs.BeiLaufzeitvariabilität,
Frameworks,Komponenten)
ModulareFeature-Implemen4erung
Agenda
} 
} 
} 
} 
4
Grundidee
Implemen4erungmitAHEAD
PrinzipderUniformität
Modellbildung
Grundidee
5
Ziel:Feature-Kohäsion(FeatureTraceabilityProblem)
} 
Eigenscha#einesProgrammsalleImplemen4erungsartefakteeinesFeaturesaneinerStelleimCodezu
lokalisieren
} 
} 
EineFragederProgrammiersprachebzw.der
Programmierumgebung!
} 
6
FeaturessindexplizitimProgrammcode
Virtuellevs.physischeTrennung
FeatureTraceabilitymitWerkzeugunterstützung
Feature-Modell
Ein Werkzeug verwaltet
die Abbildung
Implementierungsartefakte
7
FeatureTraceabilitymitSprachunterstützung
Feature-Modell
1:1 Abbildung
(oder zumindest 1:n)
Implementierungsartefakte
8
Feature-Orien4erteProgrammierung
Prehofer,ECOOP'97undBatory,ICSE'03
}  SprachbasierterAnsatzzurÜberwindungdes
FeatureTraceabilityProblems
}  JedesFeaturewirddurcheinFeature-Modul
implemen4ert
} 
} 
} 
} 
} 
9
GuteFeatureTraceability
TrennungundModularisierungvonFeatures
EinfacheFeature-Komposi4on
Feature-basierteProgrammgenerierung
Feature-Komposi4on
10
Feature-Komposi4on
11
Feature-Komposi4on
12
Feature-Komposi4on
13
ProduktlinienmitFeature-Modulen
1:1-Abbildung von Features
auf Feature-Module
Feature-Module
Feature-Modell
Feature-Auswahl
als Eingabe
Feature-Auswahl
14
Fertiges Program
Kompositionswerkzeug
Implemen4erungmitAHEAD
15
Implemen4erungvonFeature-Modulen
Au#eilunginKlassenistetabliertundalsGrundstruktur
nutzbar
}  Featureswerdeno#vonmehrerenKlassenimplemen4ert
}  Klassenimplemen4ereno#mehralseinFeature
} 
Idee:Klassenstrukturprinzipiellbeibehalten,aberKlassen
au#eilenanhandvonFeatures
}  AHEAD(AlgebraicHierarchicalEqua4onsforApplica4on
Design)oderFeatureHousealsmöglicheWerkzeuge
} 
16
AufspaltenvonKlassen
Klassen
Graph
Features
Search
Directed
Weighted
Colored
17
Edge
Node
Weight
Color
Kollabora4onen&Rollen
Kollabora1on:eineMengevonKlassen,diemiteinander
interagieren,umeinFeaturezuimplemen4eren
}  VerschiedeneKlassenspielenverschiedeneRollen
innerhalbeinerKollabora4on
}  EineKlassespieltverschiedeneRolleninverschiedenen
Kollabora4onen
}  EineRollekapseltdasVerhalten/dieFunk4onalitäteiner
Klasse,welche(s)füreineKollabora4onrelevantist
} 
18
Kollabora4onen&Rollen
Kollaborationen
Graph
Edge
Search
Directed
Weighted
Colored
Rollen
19
Klassen
Node
Weight
Color
Auszug:Kollabora4onenentwurf
20
class Graph {
Vector nv = new Vector();
Vector ev = new Vector();
Edge add(Node n, Node m) {
Edge e = new Edge(n, m);
nv.add(n); nv.add(m);
ev.add(e); return e;
}
void print() {
for(int i = 0; i < ev.size(); i++)
((Edge)ev.get(i)).print();
}
}
class Edge {
Node a, b;
Edge(Node _a, Node _b) {
a = _a; b = _b;
}
void print() {
a.print(); b.print();
}
}
class Node {
int id = 0;
void print() {
System.out.print(id);
}
}
refines class Graph {
Edge add(Node n, Node m) {
Edge e = Super.add(n, m);
e.weight = new Weight();
}
Edge add(Node n, Node m, Weight w)
Edge e = new Edge(n, m);
nv.add(n); nv.add(m); ev.add(e);
e.weight = w; return e;
}
}
refines class Edge {
Weight weight = new Weight();
void print() {
Super.print(); weight.print();
}
}
class Weight {
void print() { ... }
}
Auszug:Verzeichnishierarchie
21
Beispiel:Klassenverfeinerungen
Edge.jak
class Edge {
...
}
Schrittweise Erweiterung der
Basisimplementierung durch
Verfeinerungen
Edge.jak
refines class Edge {
private Node start;
...
}
Edge.jak
“Ungenaue” Definition der
Basisimplementierung
22
refines class Edge {
private int weight;
...
}
Methodenverfeinerungen(AHEAD)
Methodenkönnenin
jederVerfeinerung
eingeführtodererweitert
werden
}  Überschreibenvon
Methoden
}  AufrufderMethodeaus
vorherigerVerfeinerung
mitSuper*
}  ÄhnlichzuVererbung
} 
* Aus technischen Gründen müssen hinter Super die
erwarteten Typen der Methode angegeben werden,
z. B. Super(String,int).print('abc', 3)
23
class Edge {
void print() {
System.out.print(
" Edge between " + node1 +
" and " + node2);
}
}
refines class Edge {
private Node start;
void print() {
Super().print();
System.out.print(
" directed from " + start);
}
}
refines class Edge {
private int weight;
void print() {
Super().print();
System.out.print(
" weighted with " +
weigth);
}
}
Methodenverfeinerungen(FeatureHouse)
Keinrefinesnö4g
}  Methodenkönnenin
jederVerfeinerung
eingeführtodererweitert
werden
}  Überschreibenvon
Methoden
}  AufrufderMethodeaus
vorherigerVerfeinerung
mitoriginal
}  ÄhnlichzuVererbung
} 
24
class Edge {
void print() {
System.out.print(
" Edge between " + node1 +
" and " + node2);
}
}
class Edge {
private Node start;
void print() {
original();
System.out.print(
" directed from " + start);
}
}
class Edge {
private int weight;
void print() {
original();
System.out.print(
" weighted with " +
weigth);
}
}
ProduktlinienmitFeature-Modulen
1:1-Abbildung von Features
auf Feature-Module
Feature-Module
Feature-Modell
Feature-Auswahl
als Eingabe
Feature-Auswahl
25
Fertiges Program
Kompositionswerkzeug
Komposi4oninAHEAD
jampack
Konfiguration
Komponierte Jak-Dateien
Composer
mixin
jak2java
Feature-Module (Verzeichnisse)
mit Jak-Dateien
Java-Dateien
26
Komposi4oninFeatureHouse
Konfiguration
Java-Dateien
FeatureHouse
Feature-Module (Verzeichnisse)
mit Java-Dateien
27
Komposi4onvonVerzeichnissen
AlleRolleneinerKollabora4onwerdenineinemPackage/
Modulgespeichert,i.d.R.ineinemVerzeichnis
}  Komposi4onvonKollabora4onendurchKomposi4onvon
Klassenmitallenenthaltenengleichnamigen
Klassenverfeinerungen
} 
28
Beispielkomposi4on
Graph
Base
Edge
Node Weight Color
Graph
Edge
Node
Search
Directed
Weighted
Colored
Feature-Auswahl in Textdatei
(Feature-Namen in Zeilen)
29
Komposi4onmitJampack
Zusammenbauenzueiner
KlassedurchÜberlagerung
(superimposi4on)
}  Super/original-Aufrufe
werdendurchinlining
integriert
}  Ergebnis:eineKlasse
} 
30
class Edge {
private Node start;
private int weight;
void print() {
System.out.print(
" Edge between " + node1 +
" and " + node2);
System.out.print(
" directed from " + start);
System.out.print(
" weighted with " +
weigth);
}
}
Komposi4onmitMixin
GenerierungeinerKlasse
proRollemit
entsprechender
Hierarchie
}  Umbenennung,sodass
finaleKlasseden
Klassennamenerhält
}  ErsetzenvonSuperdurch
super
} 
31
class Edge$$Base {
void print() { ... }
}
class Edge$$Directed
extends Edge$$Base {
private Node start;
void print() {
super.print();
System.out.print(
" directed from " + start);
}
}
class Edge extends Edge$$Directed{
private int weight;
void print() {
super.print();
System.out.print(
" weighted with " +
weigth);
}
}
Mixinvs.Jampack
} 
Jampack
} 
} 
ZuordnungvongeneriertenCodezuRollenverschwindetnach
Generierung
Mixin
} 
} 
32
Code-Overhead
Langsamer,durchIndirek4onbeiMethodenaufrufen
Werkzeuge
} 
AHEADToolSuite+Dokumenta4on
} 
} 
} 
FeatureHouse
} 
} 
} 
KommandozeilenwerkzeugfürJava1.5,C#,C,Haskell,UML
hpp://www.fosd.de/s
FeatureC++
} 
} 
} 
KommandozeilenwerkzeugefürJak(Java1.4-Erweiterung)
hpp://www.cs.utexas.edu/users/schwartz/ATS.html
Alterna4vezuAHEADfürC++
hpp://www.fosd.de/fcpp
FeatureIDE
} 
} 
} 
33
Eclipse-PluginfürAHEAD,FeatureHouseundFeatureC++
Automa4schesBauen,SyntaxHighligh4ng,etc…
hpp://www.fosd.de/featureide
FeatureIDE–Demo
} 
Video-TutorialaufWebseite
http://www.cs.utexas.edu/users/dsb/cs392f/Videos/FeatureIDE/
34
ZusammenfassungzumAHEAD-Ansatz
} 
} 
EineBasisklasse+beliebigeVerfeinerungen(Rollen)
Klassenverfeinerungenkönnen…
} 
} 
} 
Feldereinführen
Methodeneinführen
Methodenverfeinern
Feature-Modul(Kollabora4on):Verzeichnismit
Basisklassenund/oderVerfeinerungen
}  BeimÜbersetzemwerdenBasisklasse+Verfeinerungen
derausgewähltenFeature-Modulezusammengebaut
} 
35
PrinzipderUniformität
36
PrinzipderUniformität
} 
So#warebestehtnichtnurausJava-Quellcode
} 
} 
} 
} 
} 
} 
AndereProgrammiersprachen(z.B.C++,Javascript)
Build-Skripte(Make,XML)
Dokumenta4on(XML,HTML,PDF,Text,Word)
Gramma4ken(BNF,ANTLR,JavaCC,Bali)
Modelle(UML,XMI,...)
…
AlleSo#ware-Artefaktemüssenverfeinertwerden
können
}  Integra4onvonverschiedenenArtefaktenin
Kollabora4onen
} 
37
PrinzipderUniformität
Features are implemented by a diverse
selection of software artifacts and any
kind of software artifact can be subject of
subsequent refinement.
̶ Don Batory
Don Batory
38
Beispiel:PrinzipderUniformität
Base
Graph
Edge
Node
Buildfile
Doc
Grap
h.jak
Edge.
jak
Node.
jak
build.
xml
index.
htm
Node
.jak
build.
xml
index.
htm
Search
Grap
h.jak
Directed
Grap
h.jak
Edge.
jak
build.
xml
index.
htm
Grap
h.jak
Edge.
jak
build.
xml
index.
htm
build.
xml
index.
htm
Weighted
Colored
Node.
jak
Node.
jak
Weitere Dateien: Grammatiken, Unit-Tests, Modelle, Spezifikationen, u.v.m.
39
Werkzeugunterstüzung
} 
AHEAD–Konzeptsprachübergreifend,separateToolsfür:
} 
} 
} 
} 
Jak(Java1.4)
Xak(XML)
Bali-Gramma4ken
FeatureHouse–sprachübergreifendesTool,leicht
erweiterbar,z.Z.implemen4ertfür:
} 
} 
} 
} 
} 
} 
} 
40
Java1.5
C#
C
Haskell
JavaCC-undBali-Gramma4ken
XML
JML(JavaModelingLanguage)
Modellbildung
41
WozueinabstraktesModell?
DiskussionbisherhauptsächlichaufEbeneverschiedener
Sprachkonstrukte
}  ModellzeigtdiegemeinsamenIdeenundignoriert
„ablenkende“Details
}  AbstrahiertvonDetailsinAHEAD,FeatureHouseoder
anderenSprachenundTools
}  ErmöglichtdieDiskussionvonKonzeptenunabhängig
einerkonkretenProgrammiersprache
(àPrinzipderUniformität)
} 
42
WozueinabstraktesModell?
ErlaubtspäterneueOpera4onenaufFeatures
(z.B.TypprüfungoderInterak4onsanalyse)formalund
sprachunabhängigzudisku4eren
}  VereinfachtdieImplemen4erungvonWerkzeugen
(z.B.Komposi4oninnererKlassen?)
}  AnalysealgebraischerEigenscha#envon
Feature-Komposi4onàpoten4elleOp4mierung
} 
43
Feature-Komposi4on
FeatureskönnenmitanderenFeatures„komponiert“
werdenundbildensokomplexereFeatures
}  Programmesindselberauch(zusammengesetzte)
Features
}  MengeFderFeatures;Komposi4onsoperator●
} 
(assoziativ, aber nicht kommutativ und nicht idempotent)
44
FeaturesmodelliertalsBäume
EinFeaturebestehtauseinemodermehrerenCodeArtefakten,jemiteinerinternenStruktur
}  FeatureswerdenalsBäumemodelliert(FeatureStructure
Tree–FST),welchedieStrukturderArtefaktereflek4eren
} 
package util;
class Calc {
int e0 = 0, e1 = 0, e2 = 0;
void enter(int val) {
e2 = e1; e1 = e0; e0 = val;
}
void clear() {
e0 = e1 = e2 = 0;
}
String top() {
return String.valueOf(e0);
}
}
45
util
Calc
e0
e1
e2
top
enter
clear
StrukturvonFSTs
} 
} 
NurdiewesentlicheStruktureinesArtefaktsimFST
BeispielJava:
} 
} 
} 
Packages,Klassen,Methoden,undFelderabgebildet
Statements,Parameter,Ini4alwertvonFeldernnichtimFST
abgebildet
AndereGranularitätmöglich
èjenachProgrammierspracheundAufgabewählen
46
Eigenscha#envonFSTs
} 
} 
KnotenimFSThabeneinenNamenundeinenTyp
OrdnungderKinderkannrelevantsein
package util;
class Calc {
int e0 = 0, e1 = 0, e2 = 0;
void enter(int val) {
e2 = e1; e1 = e0; e0 = val;
}
void clear() {
e0 = e1 = e2 = 0;
}
String top() {
return String.valueOf(e0);
}
}
47
util
package
Calc
class
e0
e1
e2
top
enter
clear
field
field
field
method
method
method
Komposi4ondurchÜberlagerungvonBäumen
package util;
class Calc {
void add() {
e0 = e1 + e0;
e1 = e2;
}
}
●
feature: Add
package util;
class Calc {
int e0 = 0, e1 = 0,
e2 = 0;
void enter(int val) {
e2 = e1; e1 = e0;
e0 = val;
}
void clear() {
e0 = e1 = e2 = 0;
}
String top() {
return String.
valueOf(e0);
}
}
feature: CalcAdd
feature: CalcBase
util
util
●
48
e0
util
=
Calc
Calc
add
=
package util;
class Calc {
int e0 = 0, e1 = 0,
e2 = 0;
void enter(int val) {
e2 = e1; e1 = e0;
e0 = val;
}
void clear() {
e0 = e1 = e2 = 0;
}
String top() {/*...*/}
void add() {
e0 = e1 + e0;
e1 = e2;
}
}
e1
e2
top
enter
clear
e0
Calc
e1
e2
top
enter
clear
add
ÜberlagerungvonBäumen
RekursiveÜberlagerung(superimposi4on)derKnoten,
beginnendbeiderWurzel
}  ZweiKnotenwerdenüberlagert,wenn...
} 
} 
} 
...ihreVaterknotenüberlagertwurden
...undbeidedengleichenNamenundTyphaben
NachderÜberlagerungvonzweiKnoten,werdenihre
Kinderrekursivüberlagert
}  WennzweiKnotennichtüberlagertwurden,werdensie
beidedemErgebnisbaumanentsprechenderStelle
hinzugefügt
} 
49
Terminal-undNichperminalknoten
} 
Nichperminalknoten
} 
} 
} 
} 
} 
TransparenteKnoten
KönnenKinderhaben
NameundTyp,aberkeinenweiterenInhalt
Könnenproblemlosüberlagertwerden
Terminalknoten
} 
} 
} 
50
HabenkeineKinder
NameundTyp
KönnenweiterenInhalthaben,Überlagerungdahernicht
trivial
Feature-Komposi4on
} 
RekursiveKomposi4onderFST-Elemente
} 
} 
} 
} 
51
package●packageàpackage(auchfürUnterpakete)
class●classàclass(auchfürinnereKlassen)
method●methodà?
field●fieldà?
ÜberlagerungvonTerminalknoten
Op4on1:ZweiTerminalknotenmitgleichemNamenund
Typkönnennieüberlagertwerden
}  Op4on2:ZweiTerminalknotenmitgleichemNamenund
Typkönnenunterbes4mmtenUmständenüberlagert
werden
} 
} 
} 
52
method●methodàmethod,fallseineMethodedieandere
erweitert,z.B.indemsieSuperoderoriginalaufru#
field●fieldàfield,fallsmin.einApributkeinenIni4alwert
hat
Komposi4onvonTerminalknoten
class Calc {
int count = 0;
void enter(int val) {
original(val);
count++;
}
}
●
class Calc {
int count;
void enter(int val){
e2 = e1;
e1 = e0;
e0 = val;
}
}
...
53
...
...
Calc
enter
=
class Calc {
int count = 0;
void enter(int val) {
e2 = e1;
e1 = e0;
e0 = val;
count++;
}
}
count
●
Calc
enter
count
=
Calc
enter
count
BedingungendurchbisherigesModell
DieStruktureinesFeaturesmusshierarchischsein
(Baumstruktur)
}  JedesStrukturelementmusseinenNamenundeinenTyp
haben
}  EinElementdarfnichtzweiKindermitdemgleichen
NamenunddemgleichenTyphaben
}  Elemente,diekeinehierarchischeUnterstrukturhaben
(Terminale)müsseneinespezielleKomposi4onsregel
angebenoderkönnennichtkomponiertwerden
} 
54
WelcheSprachenkönnenmipelsFSTsmodelliert
werden?
Objektorien4erteSprachenerfüllenmeistdie
Bedingungen
}  EinigeandereSprachen,u.a.Gramma4ken,erfüllendie
Bedingungenauch
}  Sprachen,welchedieBedingungennichterfüllengelten
alsnicht„feature-ready“,dasienichtausreichend
Strukturaufweisen
}  EinigeSprachenkönnenmitzusätzlicherStruktur
angereichertwerden,z.B.XML
} 
55
FeatureHouse
} 
FeatureHouseentstandausderFormalisierung
56
FeatureHouse
Java
FSTs
Java
=
Parser
Pretty
Printer
C#
C#
=
Parser
Pretty
Printer
C
C
=
Parser
⋮
Haskell
Parser
57
Pretty
Printer
Haskell
=
Pretty
Printer
Perspek4venderModellbildung
} 
DiskussionvonSprachmipelnunabhängigeiner
spezifischenSprache,z.B.
} 
} 
} 
} 
} 
58
WaswürdeesbedeutenwenneinFeatureineinerKomposi4on
mehrfachvorkommenkann(z.B.X●Y●X)?
WiekönnenwirKomposi4onvonStrukturenerreichen,beidem
dieReihenfolgederKinderwich4gist(z.B.XML)?
UnterwelchenVoraussetzungenistFeature-Komposi4on
kommuta4v?
WiekönnenwireineSprache„feature-ready“gestalten(insb.
Defini4onvonSprachmechanismenfürTerminalüberlagerung)?
WaspassiertwennwirdasLöschenvonMethodenerlauben
wollen?
Zusammenfassung
Feature-orien4erteProgrammierunglöstu.a.das
Feature-Traceability-ProblemdurchKollabora4onenund
Rollen(1:1-Abbildung)
}  Implemen4erungmipelsKlassenverfeinerungen
}  PrinzipderUniformität
}  ModellaufBasisvonFeatureStructureTrees
} 
59
Ausblick
Implemen4erungvonquerschneidendenBelangenkann
inbes4mmtenFällensehraufwendigsein
}  Featuressindnichtimmerunabhängig.Wie
implemen4ertmanabhängigeKollabora4onen?
}  Bewertung/Abgrenzung
} 
60
Literatur
} 
S.Apel,D.Batory,C.Kästner,andG.Saake.Feature-Oriented
So#wareProductLines-ConceptsandImplementa4on.Springer,
2013.
} 
} 
Sec4on6.1:Feature-OrientedProgramming
D.Batory,J.N.Sarvela,andA.Rauschmayer.ScalingStep-Wise
Refinement.IEEETransac4onsonSo#wareEngineering,30(6),
2004.
[VorstellungvonAHEAD]
} 
S.Apel,C.Kästner,andC.Lengauer.Language-Independentand
AutomatedSo#wareComposi4on:TheFeatureHouseExperience.
IEEETransac4onsonSo#wareEngineering,39(1),2013.
[ÜberblicküberFSTsundFeatureHouse]
} 
S.Apel,C.Lengauer,B.Möller,andC.Kästner.AnAlgebraic
Founda4onforAutoma4cFeature-BasedProgramSynthesis.
ScienceofComputerProgramming,75(11),2010.
[Formalisierung&Feature-Algebra]
61
Quiz
} 
WievieleRollenkanneinProgrammmitdreiKlassenundvierFeatures(a)
maximalund(b)minimalhaben?
} 
WielöstAHEADdasPreplanningProblem?
} 
KannFließtext(z.B.eineDoku)alsFSTdargestelltundkomponiertwerden?
} 
WasistderUnterschiedzwischenFSTsundASTs?
62
Herunterladen