Eine Softwarefabrik ist eine strukturierte Sammlung zusammengehöriger Software-Assets, die die Herstellung von Computersoftwareanwendungen oder Softwarekomponenten gemäß spezifischen, extern definierten Endbenutzeranforderungen durch einen Montageprozess unterstützt. [ 1 ] Eine Softwarefabrik wendet Fertigungstechniken und -prinzipien auf die Softwareentwicklung an, um die Vorteile der traditionellen Fertigung nachzubilden. Softwarefabriken sind in der Regel an der ausgelagerten Softwareentwicklung beteiligt.

Beschreibung

In der Softwareentwicklung und der Architektur von Unternehmenssoftware ist eine Softwarefabrik eine Softwareproduktlinie , die umfangreiche Werkzeuge, Prozesse und Inhalte mithilfe einer auf einem Schema basierenden Vorlage konfiguriert, um die Entwicklung und Wartung von Varianten eines archetypischen Produkts durch Anpassung, Zusammenstellung und Konfiguration von Framework-basierten Komponenten zu automatisieren. [ 2 ]

Da die Programmierung einen Softwareentwickler (oder, analog zur traditionellen Fertigung, einen erfahrenen Handwerker) erfordert, wird sie auf der Anwendungsebene eliminiert. Die Software entsteht durch das Zusammensetzen vordefinierter Komponenten anstelle herkömmlicher Entwicklungsumgebungen (IDEs) . Traditionelle Programmierung dient lediglich der Erstellung neuer Komponenten oder Dienste. Wie in der traditionellen Fertigung beschränkt sich die Entwicklung auf die Erstellung der Komponenten und die Anforderungserhebung für das System. Das Endergebnis der Fertigung in einer Softwarefabrik ist eine zusammengesetzte Anwendung .

Zweck

Die softwarefabrikbasierte Anwendungsentwicklung begegnet dem Problem der traditionellen Anwendungsentwicklung, bei der Anwendungen entwickelt und ausgeliefert werden, ohne die bei der Entwicklung ähnlicher Anwendungen gewonnenen Erkenntnisse und Ressourcen zu nutzen. Viele Ansätze, wie Schulungen, Dokumentation und Frameworks, werden eingesetzt, um dieses Problem zu lösen. Die konsequente Anwendung dieser Ansätze zur Nutzung des wertvollen Wissens, das zuvor bei der Entwicklung mehrerer Anwendungen erworben wurde, kann jedoch ineffizient und fehleranfällig sein.

Softwarefabriken begegnen diesem Problem, indem sie bewährte Vorgehensweisen für die Entwicklung eines bestimmten Anwendungsstils in einem integrierten Leitfaden zusammenfassen, der für Projektteams leicht zu implementieren ist. Die Entwicklung von Anwendungen mithilfe einer geeigneten Softwarefabrik bietet zahlreiche Vorteile, wie z. B. höhere Produktivität, bessere Qualität und Weiterentwicklungsmöglichkeiten. [ 1 ]

Komponenten

Softwarefabriken sind einzigartig und enthalten daher eine spezifische Sammlung von Ressourcen, die für die Entwicklung eines bestimmten Anwendungstyps entwickelt wurden. Im Allgemeinen enthalten die meisten Softwarefabriken miteinander verbundene Ressourcen der folgenden Art:

  • Factory-Schema: Ein Dokument, das die zum Aufbau und zur Wartung eines Systems verwendeten Ressourcen (wie XML- Dokumente, Modelle usw.) übersichtlich kategorisiert und zusammenfasst sowie die Beziehungen zwischen ihnen definiert. [ 2 ]
  • Referenzimplementierung : Bietet ein Beispiel für ein realistisches, fertiges Produkt, das die Softwarefabrik Entwicklern beim Erstellen hilft.
  • Architekturleitfaden und -muster : Sie helfen dabei, die Designentscheidungen der Anwendung und die Motivation für diese Entscheidungen zu erläutern.
  • Anleitungsthemen: Bereitstellung von Verfahren und Anweisungen zur Erledigung von Aufgaben.
  • Rezepte: Automatisieren Sie Abläufe in Anleitungen, entweder vollständig oder in einzelnen Schritten. Sie helfen Entwicklern, Routineaufgaben mit minimalem Aufwand zu erledigen.
  • Vorlagen : Vorgefertigte Anwendungselemente mit Platzhaltern für Argumente. Sie können zur Erstellung erster Projektelemente verwendet werden.
  • Designer: Sie liefern Informationen, die Entwickler nutzen können, um Anwendungen auf einer höheren Abstraktionsebene zu modellieren.
  • Wiederverwendbarer Code : Komponenten, die gemeinsame Funktionalitäten oder Mechanismen implementieren. Die Integration von wiederverwendbarem Code in eine Softwarefabrik reduziert den Bedarf an manuell geschriebenem Code und fördert die Wiederverwendung in verschiedenen Anwendungen. [ 1 ]

Produktentwicklung

Die Entwicklung eines Produkts mithilfe einer Softwarefabrik umfasst folgende Aktivitäten:

  • Problemanalyse : Sie ermittelt, ob das Produkt in den Anwendungsbereich einer Softwarefabrik fällt. Die Passung bestimmt, ob das Produkt vollständig oder teilweise mit der Softwarefabrik erstellt wird.
  • Produktspezifikation : Definiert die Produktanforderungen, indem die Unterschiede zu den Produktlinienanforderungen mithilfe einer Reihe von Produktspezifikationsmechanismen aufgezeigt werden.
  • Produktdesign : Ordnet die Unterschiede in den Anforderungen den Unterschieden in der Produktlinienarchitektur und im Entwicklungsprozess zu, um einen kundenspezifischen Prozess zu erzeugen.
  • Produktimplementierung: Je nach Ausmaß der Unterschiede können verschiedene Mechanismen zur Entwicklung der Implementierung eingesetzt werden.
  • Produktbereitstellung : Beinhaltet das Erstellen oder Wiederverwenden von Standardbereitstellungsbeschränkungen und das Konfigurieren der erforderlichen Ressourcen, die für die Installation der bereitzustellenden ausführbaren Dateien notwendig sind.
  • Produkttests : Umfassen die Erstellung oder Wiederverwendung von Testressourcen (wie Testfälle , Datensätze und Skripte) sowie die Anwendung von Instrumentierungs- und Messwerkzeugen. [ 2 ]

Vorteile

Die Entwicklung von Anwendungen mithilfe einer Softwarefabrik bietet im Vergleich zu herkömmlichen Softwareentwicklungsansätzen viele Vorteile . Dazu gehören unter anderem folgende:

  • Konsistenz: Softwarefabriken ermöglichen die Erstellung mehrerer Instanzen einer Softwareproduktlinie (einer Reihe von Anwendungen mit ähnlichen Funktionen und Architekturen), wodurch die Konsistenz leichter erreicht werden kann. Dies vereinfacht die Verwaltung und senkt zudem die Schulungs- und Wartungskosten.
  • Qualität: Der Einsatz einer Softwarefabrik erleichtert Entwicklern das Erlernen und Anwenden bewährter Methoden. Durch die Integration wiederverwendbaren Codes können sich Entwickler verstärkt auf anwendungsspezifische Funktionen konzentrieren, wodurch die Wahrscheinlichkeit von Design- und Codefehlern sinkt. Anwendungen, die mithilfe einer Softwarefabrik entwickelt wurden, lassen sich zudem vor der Bereitstellung verifizieren, um sicherzustellen, dass die fabrikspezifischen Best Practices während der Entwicklung eingehalten wurden.
  • Produktivität: Viele Aktivitäten der Anwendungsentwicklung können optimiert und automatisiert werden, beispielsweise durch die Wiederverwendung von Software-Assets und die Generierung von Code aus Abstraktionen der Anwendungselemente und -mechanismen. [ 1 ]

Diese Vorteile können für verschiedene Teams auf folgende Weise von Nutzen sein:

Wert für das Unternehmen

Geschäftsprozesse lassen sich vereinfachen, was die Produktivität der Nutzer deutlich steigern kann. Dies wird durch einheitliche und konsistente Benutzeroberflächen erreicht, wodurch der Schulungsaufwand für Endnutzer reduziert wird. Die einfache Bereitstellung neuer und aktualisierter Funktionen sowie flexible Benutzeroberflächen ermöglichen es Endnutzern zudem, Aufgaben gemäß dem Geschäftsworkflow auszuführen . Verbesserungen der Datenqualität verringern den Bedarf an Datenaustausch zwischen Anwendungsteilen mittels ALT+TAB und Kopieren und Einfügen. [ 3 ]

Wert für Architekten

Softwarefabriken ermöglichen es Architekten, Anwendungen und Systeme mit verbesserter Qualität und Konsistenz zu entwerfen. Dies wird durch die Möglichkeit erreicht, eine Teilimplementierung einer Lösung zu erstellen, die nur die wichtigsten Mechanismen und gemeinsamen Elemente enthält. Diese sogenannte Basisarchitektur kann Herausforderungen im Design und in der Entwicklung bewältigen, architektonische Entscheidungen offenlegen und Risiken frühzeitig im Entwicklungszyklus minimieren. Softwarefabriken ermöglichen zudem eine konsistente und vorhersehbare Entwicklung, Paketierung, Bereitstellung und Aktualisierung von Geschäftskomponenten, um Architekturstandards unabhängig von der Geschäftslogik durchzusetzen. [ 3 ]

Nutzen für Entwickler

Entwickler können Softwarefabriken nutzen, um ihre Produktivität zu steigern und die Einarbeitungszeit zu verkürzen. Dies wird durch die Schaffung einer hochwertigen Ausgangsbasis (Baseline) für Anwendungen erreicht, die Code und Muster umfasst. Dadurch können Projekte mit einem höheren Reifegrad als bei herkömmlich entwickelten Anwendungen starten. Wiederverwendbare Ressourcen, Anleitungen und Beispiele helfen bei der Bewältigung häufiger Szenarien und Herausforderungen, und die Automatisierung gängiger Aufgaben ermöglicht es Entwicklern, Anleitungen konsistent anzuwenden. Softwarefabriken bieten eine Abstraktionsebene, die die Komplexität der Anwendung verbirgt und Verantwortlichkeiten trennt. So können sich Entwickler auf verschiedene Bereiche wie Geschäftslogik, Benutzeroberfläche (UI) oder Anwendungsdienste konzentrieren, ohne tiefgreifende Kenntnisse der Infrastruktur oder der Baseline-Dienste zu benötigen. Die Abstraktion gängiger Entwickleraufgaben und die erhöhte Wiederverwendbarkeit des Infrastrukturcodes tragen zur Steigerung von Produktivität und Wartbarkeit bei. [ 3 ]

Wert für den Betrieb

Anwendungen, die mit Software-Factories erstellt werden, führen zu einer Konsolidierung des Betriebsaufwands. Dies ermöglicht die einfachere Bereitstellung gängiger Geschäftselemente und Module und somit ein einheitliches Konfigurationsmanagement über eine ganze Anwendungssuite hinweg. Anwendungen können zentral mit einer modularen Architektur verwaltet werden, die es den Betriebsteams ermöglicht, grundlegende Dienste zu steuern. [ 3 ]

Andere Ansätze

Es existieren verschiedene Ansätze, die unterschiedliche Sichtweisen auf Softwarefabrik-Konzepte repräsentieren und von werkzeugorientierten bis hin zu prozessorientierten Initiativen reichen. Die folgenden Ansätze umfassen japanische, europäische und nordamerikanische Initiativen. [ 4 ]

Industrialisierte Softwareorganisation (Japan)

Bei diesem Ansatz wird die in der Softwarefabrik entwickelte Software primär für Steuerungssysteme, Kernreaktoren, Turbinen usw. eingesetzt. Hauptziele dieses Ansatzes sind die Verbindung von Qualität und Produktivität, um sicherzustellen, dass die höheren Kosten die Wettbewerbsfähigkeit nicht beeinträchtigen. Ein weiteres Ziel ist die Schaffung einer Umgebung, in der Design, Programmierung, Test, Installation und Wartung einheitlich durchgeführt werden können.

Der Schlüssel zur Verbesserung von Qualität und Produktivität liegt in der Wiederverwendung von Software. Zu den prägenden Merkmalen der Organisationsstruktur gehört das konsequente Bestreben, Arbeitsabläufe routinemäßig, einfach und wiederholbar zu gestalten und Arbeitsprozesse zu standardisieren.

Ein Beispiel für diesen Ansatz wäre Toshibas Softwarefabrik-Konzept, das die Softwareabteilung und die Verfahren des Unternehmens in den Jahren 1981 bzw. 1987 bezeichnet.

Generische Softwarefabrik (Europa)

Dieser Ansatz wurde im Rahmen des Eureka-Programms gefördert und trägt den Namen Eureka Software Factory. Beteiligt sind große europäische Unternehmen, Computerhersteller, Softwarehäuser, Forschungsinstitute und Universitäten. Ziel des Ansatzes ist es, die Technologie, Standards, organisatorische Unterstützung und weitere notwendige Infrastrukturen bereitzustellen, damit Softwarefabriken aus Komponenten unabhängiger Anbieter aufgebaut und individuell angepasst werden können.

Ziel dieses Ansatzes ist die Entwicklung einer Architektur und eines Frameworks für integrierte Entwicklungsumgebungen . Die generische Softwarefabrik entwickelt Komponenten und Produktionsumgebungen, die Teil von Softwarefabriken sind, sowie Standards und Richtlinien für Softwarekomponenten.

Erfahrungsbasierte Komponentenfabrik (Nordamerika)

Die erfahrungsbasierte Komponentenfertigung wurde im Software Engineering Laboratory des NASA Goddard Space Flight Center entwickelt . Ziel dieses Ansatzes ist es, „den Softwareprozess in einer Produktionsumgebung zu verstehen, die Auswirkungen verfügbarer Technologien zu ermitteln und die identifizierten/verfeinerten Methoden in den Entwicklungsprozess zurückzugewinnen“. Der Ansatz besteht darin, neue Technologien in einer Produktionsumgebung zu erproben, Erfahrungen und Daten aus diesen Experimenten zu gewinnen und anzuwenden sowie die Auswirkungen hinsichtlich Kosten, Zuverlässigkeit und Qualität zu messen.

Dieser Ansatz legt großen Wert auf kontinuierliche Verbesserung durch das Verständnis des Zusammenhangs zwischen bestimmten Prozessmerkmalen und Produktqualitäten. Die Softwarefabrik dient dazu, Daten über Stärken und Schwächen zu sammeln, um Basiswerte für Verbesserungen festzulegen und Erfahrungen für neue Projekte zu sammeln.

Ausgereifte Softwareorganisation (Nordamerika)

Dieser Ansatz, definiert durch das Capability Maturity Model (CMM) , zielt darauf ab, ein Rahmenwerk für einen vorhersagbaren, zuverlässigen und sich selbst verbessernden Softwareentwicklungsprozess zu schaffen, der qualitativ hochwertige Software hervorbringt. Die Strategie besteht aus schrittweisen Verbesserungen der Softwareorganisation und der Definition der Schlüsselprozesse in der Entwicklung. Der Softwareprozess und die Qualität des Softwareprodukts sind vorhersagbar, da sie innerhalb messbarer Grenzen gehalten werden.

Geschichte

Cusumano [ 8 ] schlägt vor, dass es sechs Phasen für Softwarefabriken gibt:

  • Grundlegende Organisations- und Managementstruktur (Mitte der 1960er bis Anfang der 1970er Jahre)
  • Technologieanpassung und Standardisierung (Anfang der 1970er bis Anfang der 1980er Jahre)
  • Prozessmechanisierung und -unterstützung (Ende der 1970er Jahre)
  • Prozessverfeinerung und -erweiterung (Anfang der 1980er Jahre)
  • Integrierte und flexible Automatisierung (Mitte der 1980er Jahre)
  • Schrittweise Produkt-/Sortenverbesserung (Ende der 1980er Jahre)

Siehe auch

Referenzen

  1. ^ a b c d „Software Factories“ . MSDN. 20. Mai 2014.
  2. ^ a b c Greenfield, Jack; Short, Keith; Cook, Steve; Kent, Stuart (2004). Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools . Wiley. ISBN 0-471-20284-3Die
  3. ^ a b c d „Software Factories: Scenarios and Benefits“ . MSDN. 20. Mai 2014.
  4. ^ a b Aaen, Ivan; Bøttcher, Peter; Mathiassen, Lars (1997). „Die Softwarefabrik: Beiträge und Illusionen“ (PDF) . Tagungsband des 20. Seminars für Informationssystemforschung . Scandinavia, Oslo.
  5. ^ Bratman, H.; Court, T. (1975). „Die Softwarefabrik“. Computer . 8 (5): 28–37 . doi : 10.1109/cm.1975.218953 . S2CID 537648 . 
  6. ^ Cusumano, Michael A. (März 1989). „Die Softwarefabrik: Eine historische Interpretation“. IEEE Software . 6 (2): 23–30 . doi : 10.1109/ms.1989.1430446 . S2CID 18982313 . 
  7. ^ Griss, ML (1993). „Software reuse: From library to factory“. IBM Systems Journal . 32 (4): 548–566 . CiteSeerX 10.1.1.88.2855 . doi : 10.1147/sj.324.0548 . 
  8. ^ Cusumano, Michael A. (1991). „Factory Concepts and Practices in Software Development“. Annals of the History of Computing . 13 (1): 3–32 . doi : 10.1109/mahc.1991.10004 . S2CID 7733552 .