Produktlinienentwicklung (Software)
Produktlinienentwicklung stellt einen methodischen Ansatz zur Softwareentwicklung dar, dessen Ziel das Erzeugen von Software-Produktlinien ist (engl. Software Product Lines, teilw. auch Software Families).
Hierbei werden sowohl die Wiederverwendung als auch die Variabilität auf Basis einer gemeinsamen sog. Plattform organisiert.
Der Begriff Software Product Lines wurde eingeführt vom Software Engineering Institute (SEI) der Carnegie Mellon University.
Grundprinzipien
Die Produktlinienentwicklung beruht wesentlich auf zwei Grundprinzipien:
- Der Beschreibung der Variabilität der Produktlinie.
- Der Trennung von Domänenentwicklung und Applikationsentwicklung.
Modellierung der Variabilität
Wichtigste Grundmethodik der Produktlinienentwicklung ist die Modellierung der Variabilität. Diese wird orthogonal in allen Entwicklungsphasen eines Produktlinienprojekts bestimmt, vorgehalten und geändert. Grob umrissen sind die Entwicklungsphasen eines Produktlinienprojekts
- die Anforderungsphase;
- die Architekturphase und
- die Implementierungsphase.
Die in der Anforderungsphase (engl. Requirements Phase) identifizierten Varianten werden in den Produkten der Architekturphase berücksichtigt. Dies werden insbesondere Varianten im Funktionsumfang sein, die sich aufgrund von Kundenwünschen oder Geschäftszielen herausbilden. Zusätzlich können Varianten während der Architekturphase identifiziert werden. Beispielsweise könnte die Integration mit Software von anderen Herstellern Varianten ausbilden. Schließlich werden die Varianten aus der Anforderungs- und aus der Architekturphase in der Implementierungsphase berücksichtigt, in der weitere Varianten entstehen können, wie z. B. die individualisierte Berücksichtigung von bestimmten Datenbanksystemen. Die Entwicklung hin zu Produktlinien, die über Unternehmensgrenzen entwickelt werden, führt zu einem komplexen Software-Ökosystem in dem Kundenwünsche einen noch größeren Einfluss auf die Entwicklung haben als bei rein durch einzelne Unternehmen getriebene Produktlinien.<ref>Jan Bosch: <templatestyles src="Webarchiv/styles.css" />{{#if:20140505200916
| {{#ifeq: 20140505200916 | *
| {{#if: Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009). | {{#invoke:WLink|getEscapedTitle|Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009).}} | {{#invoke:Webarchiv|getdomain|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20140505200916}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009). | {{#invoke:WLink|getEscapedTitle|Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009).}} | {{#invoke:Webarchiv|getdomain|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-05-08 06:49:41 InternetArchiveBot | 2019-05-08 06:49:41 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20140505200916}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009). | {{#invoke:WLink|getEscapedTitle|Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009).}} | {{#invoke:Webarchiv|getdomain|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-05-08 06:49:41 InternetArchiveBot | 2019-05-08 06:49:41 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009). | {{#invoke:WLink|getEscapedTitle|Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009).}} | {{#invoke:Webarchiv|getdomain|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-05-08 06:49:41 InternetArchiveBot | 2019-05-08 06:49:41 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009). | {{#invoke:WLink|getEscapedTitle|Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009).}} | {{#invoke:Webarchiv|getdomain|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf}} }} ({{#if: {{#if: 2019-05-08 06:49:41 InternetArchiveBot | 2019-05-08 06:49:41 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009). | {{#invoke:WLink|getEscapedTitle|Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009).}} | {{#invoke:Webarchiv|getdomain|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf}} }}
}}}}}}}}{{#if:2019-05-08 06:49:41 InternetArchiveBot
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20140505200916|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf}}
|| {{#if: || }}
}}{{#if: Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009).
| {{#if: {{#invoke:WLink|isBracketedLink|Keynote presentation at the Brazilian Symposium on Software Quality (SBQS 2009).}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www.janbosch.com/Jan_Bosch/Presentations_files/SBQS2009-Keynote.pdf }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}} (PDF; 2,0 MB), June 2009, Ouro Preto, Brazil.</ref>
Vorteile der orthogonalen Variabilitätsmodellierung sind unter anderem, dass Varianten und ihre Abhängigkeiten übergreifend verfolgbar sind. Auch bleibt die Wiederverwendbarkeit bereits identifizierter Varianten erhalten. Schließlich kann der Implementierungsaufwand für eine konkrete Produktlinie teils drastisch reduziert sein: Da normalerweise nur eine Untermenge der möglichen Varianten implementiert wird, brauchen nur die für die Produktlinie identifizierten Varianten implementiert zu werden. Diese Implementierungen, wenigstens aber die Domänenartefakte der Plattformen, kann man normalerweise auch wiederverwenden.
Getrennte Domänen- und Applikationsentwicklung
Um Varianten von Produktlinien identifizieren zu können, muss zunächst ermittelt werden, welche Bestandteile einer Software tatsächlich nicht nur einmalig zu erstellen sind (z. B. um einem Kundenwunsch zu genügen), sondern mehrfach verwendet werden können. Dieser Prozess wird Scoping genannt.
Diese Wiederverwendungsanalyse ist Ausgangspunkt eines Produktlinien-Projekts. Normalerweise erfolgt das Scoping, nachdem Klarheit über die zu entwickelnden Produktlinien herrscht, also ein „Produkt-Portfolio“ oder eine „Produkt-Roadmap“ von der Geschäftsseite erstellt worden ist.
Basierend darauf werden die domänenspezifisch wiederverwendbaren Artefakte entwickelt (z. B. Anforderungs- und Architekturdokumente, Testfälle), die für die Implementierungsphase maßgeblich sind. Als methodischer Ansatz ist die Produktlinienentwicklung deshalb auch als architekturzentriert (siehe Softwarearchitektur) zu bezeichnen.
Literatur
- Böckle, Knauber, Pohl, Schmid (Hrsg.): Software-Produktlinien. dpunkt, 2004, ISBN 3-89864-257-7.
- Van der Linden, Schmid, Rommes: Software Product Lines in Action. Springer-Verlag, 2007, ISBN 978-3-540-71436-1.
Weblinks
- Software Product Lines Einstiegsseite des Carnegie Mellon Software Engineering Institute (englisch)
- Software Products Lines englischsprachige Seite rund um Produktlinienentwicklung
- Software Product Line Conference (SPLC) Konferenz zu Software-Produktlinien, die abwechselnd in Amerika, Europa oder Asien stattfindet.
- Introduction to the Emerging Practice of Software Product Line Development
Einzelnachweise
<references />