Softwarearchitektur

Softwarearchitektur bezieht sich auf die grundlegenden Strukturen von a Software System und die Disziplin der Erstellung solcher Strukturen und Systeme. Jede Struktur umfasst Softwareelemente, Beziehungen zwischen ihnen und Eigenschaften von Elementen und Beziehungen.[1] Das die Architektur eines Softwaresystems ist eine Metapher, analog zum die Architektur eines Gebäudes.[2] Es fungiert als Blaupause für das System und das sich entwickelnde Projekt und legt die Aufgaben aus, die erforderlich sind, um von den Designteams ausgeführt zu werden.[3]

Bei der Softwarearchitektur geht es darum, grundlegende strukturelle Entscheidungen zu treffen, die sich nach der Implementierung kostspielig ändern müssen. Die Auswahl der Softwarearchitektur umfasst spezifische strukturelle Optionen aus Möglichkeiten in das Design der Software. Zum Beispiel die Systeme, die die kontrollierten Space Shuttle Das Startfahrzeug hatte die Anforderung, sehr schnell und sehr zuverlässig zu sein. Daher eine angemessene Echtzeit-Computing Die Sprache müsste ausgewählt werden. Um die Zuverlässigkeitsbedürfnis zu erfüllen, könnte die Auswahl mehr überflüssig und unabhängig voneinander produzierte Kopien des Programms haben und diese Kopien auf unabhängiger Hardware ausführen, während sie die Ergebnisse überprüften.

Software dokumentieren Architektur erleichtert die Kommunikation zwischen Stakeholdererfasst frühe Entscheidungen über das hochrangige Design und ermöglicht die Wiederverwendung von Designkomponenten zwischen Projekten.[4]: 29–35

Software_Architecture_Activities

Zielfernrohr

Die Meinungen variieren in Bezug auf den Umfang der Softwarearchitekturen:[5]

  • Makroskopische Systemstruktur: Dies bezieht sich auf Architektur als höhere Ebene Abstraktion eines Softwaresystems, das aus einer Sammlung von Rechenaufwand besteht Komponenten zusammen mit Anschlüsse Das beschreibt die Wechselwirkung zwischen diesen Komponenten.[6]
  • Das wichtige Zeug - was auch immer das ist: Dies bezieht sich auf die Tatsache, dass Software -Architekten sich mit diesen Entscheidungen befassen sollten, die hohe Auswirkungen auf das System und seine Stakeholder haben.[7]
  • Das, was für das Verständnis eines Systems in seiner Umgebung von grundlegender Bedeutung ist[8]
  • Dinge, die Menschen als schwer zu ändern empfinden: Da das Entwerfen der Architektur zu Beginn des Lebenszyklus eines Softwaresystems stattfindet, sollte sich der Architekt auf Entscheidungen konzentrieren, die das erste Mal richtig sein müssen. Nach dieser Denkweise können architektonische Designprobleme nicht architektural werden, sobald ihre Irreversibilität überwunden werden kann.[7]
  • Eine Reihe von Architekturentwurfsentscheidungen: Softwarearchitektur sollte nicht nur als eine Reihe von Modellen oder Strukturen angesehen werden, sondern die Entscheidungen, die zu diesen bestimmten Strukturen führen, und die Begründung dahinter.[9] Diese Einsicht hat zu einer erheblichen Forschung in der Softwarearchitektur geführt Wissensmanagement.[10]

Es gibt keinen starken Unterschied zwischen Software -Architektur und Design- und Anforderungs -Engineering (siehe Verwandte Felder unter). Sie sind alle Teil einer "Kette der Intentionalität" von hohen Absichten bis hin zu Details auf niedrigem Niveau.[11]: 18

Eigenschaften

Softwarearchitektur zeigt Folgendes:

Vielzahl von Stakeholdern: Softwaresysteme müssen eine Vielzahl von Stakeholdern wie Geschäftsleiter, Eigentümer, Benutzern und Betreibern gerecht werden. Diese Stakeholder haben alle ihre eigenen Bedenken hinsichtlich des Systems. Das Ausgleich dieser Bedenken und dem Nachweis, dass sie angesprochen werden, ist Teil der Gestaltung des Systems.[4]: 29–31 Dies impliziert, dass Architektur mit einer Vielzahl von Bedenken und Stakeholdern umgegangen ist und eine multidisziplinäre Natur hat.

Trennung von Bedenken: Die etablierte Möglichkeit für Architekten, die Komplexität zu verringern, besteht darin, die Bedenken, die das Design vorantreiben, zu trennen. Die Architekturdokumentation zeigt, dass alle Beteiligtenprobleme durch Modellieren und Beschreibung der Architektur aus getrennten Sichtweisen im Zusammenhang mit den verschiedenen Interessengruppenbedenken berücksichtigt werden.[12] Diese separaten Beschreibungen werden als architektonische Ansichten bezeichnet (siehe zum Beispiel die 4+1 Architekturansichtsmodell).

Qualitätsgetrieben: klassisch Software-Design Ansätze (z. Jackson strukturierte Programmierung) wurden durch die erforderliche Funktionalität und den Datenfluss durch das System angetrieben, aber der aktuelle Einblick[4]: 26–28 ist, dass die Architektur eines Softwaresystems enger mit seiner zusammenhängt Qualitätsattribute wie zum Beispiel Fehlertoleranz, Rückwärtskompatibilität, Erweiterbarkeit, Verlässlichkeit, Wartbarkeit, Verfügbarkeit, Sicherheit, Benutzerfreundlichkeit und andere - -INITY. Stakeholder -Bedenken führen häufig in Bedarf auf diesen Qualitätsattributen, die unterschiedlich genannt werden Nicht-funktionale Anforderungen, extra funktionierende Anforderungen, Verhaltensanforderungen oder Qualitätsattributanforderungen.

Wiederkehrende Stile: Wie bei der Erstellung von Architektur hat die Disziplin der Softwarearchitektur Standardmethoden entwickelt, um wiederkehrende Bedenken auszuräumen. Diese "Standardmethoden" werden auf verschiedenen Abstraktionsebenen mit verschiedenen Namen bezeichnet. Häufige Begriffe für wiederkehrende Lösungen sind architektonischer Stil,[11]: 273–277 Taktik,[4]: 70–72 Referenzarchitektur[13][14] und Architekturmuster.[4]: 203–205

Konzeptionale Integrität: ein Begriff, der durch eingeführt wird von Fred Brooks In seinem Buch von 1975 Der mythische Mannmonatsmonat Bezeichnung der Idee, dass die Architektur eines Softwaresystems eine Gesamtvision dessen darstellt, was es tun sollte und wie es es tun sollte. Diese Vision sollte von ihrer Umsetzung getrennt werden. Der Architekt übernimmt die Rolle des "Keeper of the Vision" und stellt sicher konzeptionelle Integrität.[15]: 41–50

Kognitive Einschränkungen: eine Beobachtung Zuerst in einem Papier von 1967 von Computerprogrammierer gemacht Melvin Conway dass Organisationen, die Konstruktionssysteme auf Designs erstellen, Kopien der Kommunikationsstrukturen dieser Organisationen sind. Wie bei der konzeptionellen Integrität war es Fred Brooks, der es einem breiteren Publikum vorstellte, als er das Papier zitierte und die Idee in seinem eleganten Klassiker Der mythische Mannmonatsmonatnennen es "Conways Gesetz".

Motivation

Softwarearchitektur ist eine "intellektuell erfasstbare" Abstraktion eines komplexen Systems.[4]: 5–6 Diese Abstraktion bietet eine Reihe von Vorteilen:

  • Es bietet eine Grundlage für die Analyse des Verhaltens von Softwaresystemen, bevor das System erstellt wurde.[2] Die Fähigkeit, zu überprüfen, ob ein zukünftiges Softwaresystem die Bedürfnisse seiner Stakeholder erfüllt, ohne dass es tatsächlich aufbauen muss, stellt erhebliche Kostenspar- und Risikominderung dar.[16] Eine Reihe von Techniken wurde entwickelt, um solche Analysen durchzuführen, wie z. Atam oder durch Erstellen einer visuellen Darstellung des Softwaresystems.
  • Es bietet eine Grundlage für die Wiederverwendung von Elementen und Entscheidungen.[2][4]: 35 Eine vollständige Softwarearchitektur oder Teile davon wie individuelle Architekturstrategien und -entscheidungen können über mehrere Systeme hinweg wiederverwendet werden, deren Stakeholder ähnliche Qualitätsattribute oder Funktionen erfordern, Designkosten einsparen und das Risiko von Designfehlern mildern.
  • Es unterstützt frühe Entwurfsentscheidungen, die sich auf die Entwicklung, Bereitstellung und Wartung des Systems auswirken.[4]: 31 Die frühen, hochwirksamen Entscheidungen richtig zu machen, ist wichtig, um den Zeitplan zu verhindern und Budgetüberschreitungen.
  • Es erleichtert die Kommunikation mit Stakeholdern und trägt zu einem System bei, das ihre Bedürfnisse besser erfüllt.[4]: 29–31 Die Kommunikation über komplexe Systeme aus Sicht der Stakeholder hilft ihnen, die Folgen ihrer angegebenen Anforderungen und die auf ihnen basierenden Entwurfsentscheidungen zu verstehen. Die Architektur bietet die Möglichkeit, über Designentscheidungen zu kommunizieren, bevor das System implementiert wird, wenn sie noch relativ einfach anpassen können.
  • Es hilft beim Risikomanagement. Softwarearchitektur hilft, die Risiken und die Wahrscheinlichkeit eines Fehlers zu verringern.[11]: 18
  • Es ermöglicht Kostenreduzierung. Softwarearchitektur ist ein Mittel, um Risiken und Kosten in komplexen IT -Projekten zu verwalten.[17]

Geschichte

Der Vergleich zwischen Softwaredesign und (ziviler) Architektur wurde erstmals Ende der 1960er Jahre gezogen.[18] Der Begriff "Softwarearchitektur" sah jedoch erst in den neunziger Jahren weit verbreitete Verwendung.[19] Das Feld von Informatik hatte seit ihrer Bildung Probleme im Zusammenhang mit Komplexität aufgetreten.[20] Frühere Komplexitätsprobleme wurden von Entwicklern durch Auswahl des Rechts gelöst Datenstrukturen, Entwicklung Algorithmenund durch Anwendung des Konzepts von Trennung von Bedenken. Obwohl der Begriff "Softwarearchitektur" in der Branche relativ neu ist, wurden die grundlegenden Prinzipien des Feldes sporadisch angewendet Softwareentwicklung Pioniere seit Mitte der 1980er Jahre. Frühe Versuche, die Softwarearchitektur eines Systems zu erfassen und zu erklären Diagramme.[21]

Softwarearchitektur als Konzept hat ihren Ursprung in der Forschung von Edsger Dijkstra 1968 und David Parnas In den frühen 1970er Jahren. Diese Wissenschaftler betonten, dass die Struktur eines Softwaresystems von entscheidender Bedeutung ist und die Struktur von entscheidender Bedeutung ist. In den neunziger Jahren gab es konzertierte Anstrengungen, um grundlegende Aspekte der Disziplin zu definieren und zu kodifizieren, wobei sich die Forschungsarbeiten auf architektonische Stile konzentrierten (Muster), Architektur Beschreibung Sprachen, Architekturdokumentation, und Formale Methoden.[22]

Forschungsinstitutionen haben eine herausragende Rolle bei der Förderung der Softwarearchitektur als Disziplin gespielt. Mary Shaw und David Garlan von Carnegie Mellon schrieb ein Buch mit dem Titel " Softwarearchitektur: Perspektiven auf eine aufkommende Disziplin 1996, die Software -Architekturkonzepte wie z. Komponenten, Anschlüsse und Stile. Das Universität von Kalifornien, IrvineDas Bemühungen der Institut für Software -Forschung in der Software -Architekturforschung richtet sich hauptsächlich in Architekturstilen, Architekturbeschreibungssprachen und dynamischen Architekturen.

IEEE 1471-2000, "Empfohlene Praxis für die Architekturbeschreibung von softwarsintensiven Systemen", war der erste formelle Standard im Bereich der Softwarearchitektur. Es wurde 2007 von ISO als verabschiedet ISO/IEC 42010: 2007. Im November 2011 wurde IEEE 1471–2000 von ersetzt von ISO/IEC/IEEE 42010: 2011, "Systeme und Software -Engineering - Architekturbeschreibung" (gemeinsam veröffentlicht von IEEE und ISO).[12]

Während in IEEE 1471, Software-Architektur ging um die Architektur von "softwareintensiven Systemen", definiert als "jedes System, in dem Software wesentliche Einflüsse auf die Gestaltung, Konstruktion, Bereitstellung und Entwicklung des Systems als Ganzes beiträgt", geht die Ausgabe 2011 noch einen Schritt weiter durch Einbeziehung der ISO/IEC 15288 und ISO/IEC 12207 Definitionen eines Systems, das nicht nur Hardware und Software umfasst, sondern auch "Menschen, Prozesse, Verfahren, Einrichtungen, Materialien und natürlich vorkommende Entitäten". Dies spiegelt die Beziehung zwischen Softwarearchitektur wider, Unternehmensstruktur und Lösungsarchitektur.

Architekturaktivitäten

Es gibt viele Aktivitäten, die a Softwarearchitekt führt aus. Ein Softwarearchitekt arbeitet normalerweise mit Projektmanagern zusammen, erläutert architektonisch bedeutende Anforderungen Mit Stakeholdern, entwirft eine Softwarearchitektur, bewertet ein Design, kommuniziert mit Designern und Stakeholdern, dokumentiert das architektonische Design und vieles mehr.[23] Es gibt vier Kernaktivitäten im Design der Softwarearchitektur.[24] Diese Kernarchitekturaktivitäten werden iterativ und in verschiedenen Phasen der anfänglichen Softwareentwicklungs-Lebenszyklus sowie über die Entwicklung eines Systems durchgeführt.

Architekturanalyse Ist der Prozess des Verständnisses der Umgebung, in der ein vorgeschlagenes System betrieben und die Anforderungen für das System festgelegt wird. Die Eingaben oder Anforderungen an die Analyseaktivität können von einer beliebigen Anzahl von Stakeholdern stammen und Elemente wie:

  • Was das System bei betrieblicher (die funktionalen Anforderungen) tun wird
  • Wie gut das System nicht funktionsfunktionale Laufzeitanforderungen wie Zuverlässigkeit, Betriebsfähigkeit, Leistungseffizienz, Sicherheit und Kompatibilität definiert hat ISO/IEC 25010: 2011 Standard[25]
  • Entwicklungszeit der nicht funktionierenden Anforderungen wie Wartbarkeit und Übertragbarkeit in ISO 25010: 2011 Standard[25]
  • Geschäftsanforderungen und Umweltkontexte eines Systems, das sich im Laufe der Zeit ändern kann, wie z. B. rechtliche, soziale, finanzielle, wettbewerbsfähige und technologische Bedenken[26]

Die Ausgaben der Analyseaktivität sind jene Anforderungen, die sich messbare Auswirkungen auf die Architektur eines Softwaresystems haben, die als architektonisch bedeutende Anforderungen bezeichnet werden.[27]

Architektursynthese oder Design ist der Prozess der Erstellung einer Architektur. Angesichts der architektonisch signifikanten Anforderungen, die durch die Analyse, der aktuelle Zustand des Designs und die Ergebnisse aller Bewertungsaktivitäten ermittelt werden, wird das Design erstellt und verbessert.[24][4]: 311–326

Architekturbewertung Ist der Prozess der Bestimmung, wie gut das aktuelle Design oder ein Teil davon die während der Analyse abgeleiteten Anforderungen erfüllt. Eine Bewertung kann auftreten, wenn ein Architekt eine Entwurfsentscheidung in Betracht zieht. Nachdem ein Teil des Entwurfs abgeschlossen wurde, kann sie nach Abschluss des endgültigen Designs auftreten oder nach dem Bau des Systems auftreten. Einige der verfügbaren Techniken zur Bewertung der Softwarearchitektur umfassen Architektur Kompromissanalysemethode (ATAM) und Tara.[28] Frameworks zum Vergleich der Techniken werden in Frameworks wie z. Sara -Bericht[16] und Architekturprüfungen: Übung und Erfahrung.[29]

Architekturentwicklung Ist der Prozess der Aufrechterhaltung und Anpassung einer vorhandenen Softwarearchitektur, um Änderungen der Anforderungen und der Umgebung zu erfüllen. Da die Softwarearchitektur eine grundlegende Struktur eines Softwaresystems bietet, würde sich seine Entwicklung und Wartung notwendigerweise auf seine grundlegende Struktur auswirken. Die Architekturentwicklung geht daher mit der Hinzufügung neuer Funktionen sowie der Aufrechterhaltung bestehender Funktionen und des Systemverhaltens.

Architektur erfordert kritische Unterstützungsaktivitäten. Diese unterstützenden Aktivitäten finden im gesamten Kern -Software -Architekturprozess statt. Dazu gehören Wissensmanagement und Kommunikation, Design -Argumentation, Entscheidungsfindung sowie Dokumentation.

Architektur unterstützende Aktivitäten

Aktivitäten zur Unterstützung von Softwarearchitekturen werden während der Kern -Software -Architekturaktivitäten durchgeführt. Diese unterstützenden Aktivitäten unterstützen einen Software -Architekten bei der Durchführung von Analysen, Synthese, Bewertung und Evolution. Zum Beispiel muss ein Architekt während der Analysephase Wissen sammeln, Entscheidungen treffen und dokumentieren.

  • Wissensmanagement und Kommunikation Ist das Erforschen und Verwalten von Wissen, das für die Gestaltung einer Softwarearchitektur von wesentlicher Bedeutung ist. Ein Softwarearchitekt arbeitet nicht isoliert. Sie erhalten Inputs, funktionale und nicht funktionale Anforderungen sowie Kontexte von Konstruktionen von verschiedenen Stakeholdern. und bietet Ausgaben für Stakeholder. Software -Architekturwissen ist häufig stillschweigend und wird in den Stakeholdern aufbewahrt. Bei der Aktivität des Wissensmanagements von Software -Architektur geht es darum, Wissen zu finden, zu kommunizieren und beizubehalten. Da Probleme mit Software -Architektur -Designproblemen kompliziert und voneinander abhängig sind, kann eine Wissenslücke im Design -Argumentation zu einem falschen Software -Architektur -Design führen.[23][30] Beispiele für Wissensmanagement- und Kommunikationsaktivitäten umfassen die Suche nach Entwurfsmustern, Prototypen, das Befragen erfahrener Entwickler und Architekten, die Bewertung der Entwürfe ähnlicher Systeme, das Austausch von Wissen mit anderen Designern und Stakeholdern und das Dokumentieren von Erfahrungen auf einer Wiki -Seite.
  • Design -Argumentation und Entscheidungsfindung ist die Aktivität der Bewertung von Entwurfsentscheidungen. Diese Aktivität ist für alle drei Kern -Software -Architekturaktivitäten von grundlegender Bedeutung.[9][31] Sie beinhaltet das Sammeln und Zusammenhang mit Entscheidungskontexten, zur Formulierung von Entwurfsentscheidungsproblemen, das Finden von Lösungsoptionen und die Bewertung von Kompromisse, bevor Entscheidungen getroffen werden. Dieser Prozess erfolgt auf verschiedenen Ebenen der Entscheidungsgranularität, während erhebliche architektonische Anforderungen und Software -Architekturentscheidungen sowie die Analyse, Synthese und Bewertung der Softwarearchitektur bewertet werden. Beispiele für Argumentationsaktivitäten umfassen das Verständnis der Auswirkungen einer Anforderung oder eines Designs auf Qualitätsattribute, die Frage der Probleme, die ein Design verursachen könnte, mögliche Lösungsoptionen bewertet und die Kompromisse zwischen Lösungen bewertet.
  • Dokumentation ist der Akt der Aufzeichnung des Designs, das während des Software -Architekturprozesses erzeugt wird. System-Design wird unter Verwendung mehrerer Ansichten beschrieben, die häufig eine statische Ansicht enthalten, die die Codestruktur des Systems zeigt, eine dynamische Ansicht, die die Aktionen des Systems während der Ausführung zeigt, und eine Bereitstellungsansicht, die zeigt, wie ein System für die Ausführung auf Hardware platziert wird. Die 4+1 -Ansicht von Kruckten schlägt eine Beschreibung der häufig verwendeten Ansichten für die Dokumentation der Softwarearchitektur vor.[32] Dokumentieren von Softwarearchitekturen: Ansichten und darüber hinaus Hat Beschreibungen der Arten von Notationen, die in der Ansichtsbeschreibung verwendet werden könnten.[1] Beispiele für Dokumentationsaktivitäten schreiben eine Spezifikation, die Aufzeichnung eines Systemdesignmodells, die Dokumentation eines Designs, die Entwicklung eines Standpunkts und der Dokumentation von Ansichten.

Software -Architektur -Themen

Beschreibung der Softwarearchitektur

Die Beschreibung der Software -Architektur umfasst die Prinzipien und Praktiken der Modellierung und Darstellung von Architekturen unter Verwendung von Mechanismen wie Architekturbeschreibung Sprachen, Architekturansichten und Architekturrahmen.

Architektur Beschreibung Sprachen

Eine Architekturbeschreibung Sprache (ADL) ist ein Ausdrucksmittel, mit dem eine Softwarearchitektur beschrieben wird (ISO/IEC/IEEE 42010). Seit den neunziger Jahren werden viele Sonderpur-ADLs entwickelt, einschließlich der 1990er Jahre Aadl (SAE -Standard), Wright (entwickelt von Carnegie Mellon), ACME (entwickelt von Carnegie Mellon), XADL (entwickelt von UCI), Darwin (entwickelt von Imperial College London), Daop-adl (entwickelt von der Universität Málaga), SBC-ADL (entwickelt von National Sun Yat-Sen Universität) und Byadl (Universität von L'Aquila, Italien).

Architekturansichten

Beschreibungen der Softwarearchitektur sind üblicherweise in organisiert in Ansichten, die analog zu den verschiedenen Arten von sind Blaupausen im Gebäude gemacht die Architektur. Jede Ansicht befasst Standpunkt, wo ein Standpunkt eine Spezifikation ist, die die Notationen, Modellierungs- und Analysetechniken beschreibt, die in einer Ansicht verwendet werden, die die fragliche Architektur aus der Perspektive einer bestimmten Reihe von Stakeholdern und ihrer Bedenken ausdrückt (BedenkenISO/IEC/IEEE 42010). Der Standpunkt legt nicht nur die befragten Bedenken fest (d. H. Zu behandelnde), sondern auch die Präsentation, die verwendeten Modellsorten, die verwendeten Konventionen und jede Konsistenz- (Korrespondenz-) Regeln, um eine Ansicht mit anderen Ansichten übereinzuhalten.

Architekturrahmen

Ein Architekturrahmen erfasst die "Konventionen, Prinzipien und Praktiken für die Beschreibung der Architekturen, die in einem bestimmten Bereich der Anwendung und/oder der Gemeinschaft von Stakeholdern festgelegt wurden" (ISO/IEC/IEEE 42010). Ein Framework wird normalerweise in Bezug auf einen oder mehrere Standpunkte oder ADLs implementiert.

Architekturstile und Muster

Ein Architekturmuster ist eine allgemeine, wiederverwendbare Lösung für ein häufig vorkommendes Problem in der Softwarearchitektur innerhalb eines bestimmten Kontexts. Architekturmuster werden häufig als Software dokumentiert Designmuster.

Nach der traditionellen Bauarchitektur ist ein „Software -Architekturstil“ eine spezifische Bauweise, die durch die Merkmale gekennzeichnet ist, die ihn bemerkenswert machen "(architektonischer Stil).

Ein architektonischer Stil definiert: eine Systemfamilie in Bezug auf ein Muster der strukturellen Organisation; Ein Wortschatz von Komponenten und Anschlüssen mit Einschränkungen, wie sie kombiniert werden können.[33]

Architekturstile sind wiederverwendbare "Pakete" von Designentscheidungen und -beschränkungen, die auf eine Architektur angewendet werden, um ausgewählte wünschenswerte Eigenschaften zu induzieren.[34]

Es gibt viele anerkannte architektonische Muster und Stile unter ihnen:

Einige behandeln architektonische Muster und Architekturstile als gleich,[35] Einige behandeln Stile als Spezialisierungen von Mustern. Was sie gemeinsam haben, sind sowohl Muster als auch Stile, die Architekten für Architekten verwenden. Sie bieten "eine gemeinsame Sprache".[35] oder "Wortschatz"[33] mit denen, um Systemklassen zu beschreiben.

Softwarearchitektur und agile Entwicklung

Es gibt auch Bedenken, dass Softwarearchitektur zu zu viel führt Big Design vornebesonders unter Befürwortern von Agile Software Entwicklung. Es wurde eine Reihe von Methoden entwickelt, um die Kompromisse bei der Vorabstimmung und der Beweglichkeit auszugleichen.[36] einschließlich der agilen Methode DSDM in der eine "Fundamente" -Phase vorschreibt, in der "gerade genug" architektonische Fundamente gelegt werden. IEEE -Software widmete eine Sonderausgabe der Interaktion zwischen Beweglichkeit und Architektur.

Software -Architektur -Erosion

Die Software -Architektur -Erosion (oder "Zerfall") bezieht sich auf die Lücke zwischen der geplanten und der tatsächlichen Architektur eines Softwaresystems, wie in seiner Implementierung realisiert.[37] Die Software-Architektur-Erosion tritt auf, wenn Implementierungsentscheidungen entweder die Architektur als geplante oder anderweitig gegen Einschränkungen oder Prinzipien dieser Architektur erreichen.[2]

Als Beispiel einen streng nachdenken geschichtet System, wobei jede Ebene nur Dienste verwenden kann, die von der Ebene unmittelbar darunter bereitgestellt werden. Jede Quellcodekomponente, die diese Einschränkung nicht beobachtet, stellt einen Architekturverstoß dar. Wenn nicht korrigiert, können solche Verstöße die Architektur in einen monolithischen Block verwandeln, wobei nachteilige Auswirkungen auf Verständlichkeit, Wartbarkeit und Auswachbarkeit beeinflusst werden.

Es wurden verschiedene Ansätze vorgeschlagen, um die Erosion anzugehen. "Diese Ansätze, die Werkzeuge, Techniken und Prozesse umfassen, werden hauptsächlich in drei allgemeine Kategorien eingeteilt, die versuchen, die Erosion der Architektur zu minimieren, zu verhindern und zu reparieren Tackle Erosion. Dies sind prozessorientierte Architekturkonformance, Architekturentwicklungsmanagement, Durchsetzung der Architekturdesign, Architektur zur Implementierungsverknüpfung, Selbstanpassung und Architekturwiederherstellungstechniken, die aus Genesung, Entdeckung und Versöhnung bestehen. "[38]

Es gibt zwei Haupttechniken, um architektonische Verstöße zu erkennen: Reflexionsmodelle und domänenspezifische Sprachen. RM-Techniken (Reflexion Model) vergleichen ein hochrangiges Modell, das von den Architekten des Systems mit der Quellcode-Implementierung bereitgestellt wird. Es gibt auch Domänenspezifische Sprachen mit dem Fokus auf die Angabe und Überprüfung von architektonischen Einschränkungen.

Software -Architekturwiederherstellung

Wiederherstellung der Softwarearchitektur (oder Rekonstruktion, oder Reverse Engineering) Enthält die Methoden, Techniken und Prozesse, um die Architektur eines Softwaresystems aus verfügbaren Informationen aufzudecken, einschließlich der Implementierung und Dokumentation. Architekturwiederherstellung ist häufig erforderlich, um fundierte Entscheidungen angesichts der veralteten oder veralteten Dokumentation zu treffen undArchitekturerosion: Implementierungs- und Wartungsentscheidungen, die von der geplanten Architektur abweichen.[39] Es gibt Praktiken, um die Softwarearchitektur als wiederherzustellen Statische Programmanalyse. Dies ist ein Teil von Themen, die von der bedeckt sind Software -Intelligenz trainieren.

Verwandte Felder

Entwurf

Architektur ist Entwurf Aber nicht das gesamte Design ist architektonisch.[1] In der Praxis ist der Architekt derjenige, der die Grenze zwischen Softwarearchitektur (architektonisches Design) und detailliertes Design (Nichtarchitekturdesign) zieht. Es gibt keine Regeln oder Richtlinien, die allen Fällen passen, obwohl es Versuche gab, die Unterscheidung zu formalisieren. Laut dem Hypothese der Intension/Lokalität,[40] Die Unterscheidung zwischen architektonischem und detailliertem Design wird durch die definiert Lokalitätskriterium,[40] Nach einer Aussage über das Softwaredesign ist nicht lokal (architektonisch), wenn ein Programm, das es erfüllt, in ein Programm erweitert werden kann, das dies nicht tut. Zum Beispiel die Kundenserver Stil ist architektonisch (strategisch), da ein Programm, das auf diesem Prinzip basiert Peer-To-Peer Knoten.

Anforderungen Engineering

Anforderungen Engineering und Softwarearchitektur kann als komplementäre Ansätze angesehen werden: während die Softwarearchitektur auf die 'abzielt'Lösungsraum'oder das' Wie ', Required Engineering befasst sich mit der' 'Problemraum'oder das' was '.[41] Anforderungen Engineering beinhaltet die Auslöser, Verhandlung, Spezifikation, Validierung, Dokumentation und Management von Bedarf. Sowohl die Anforderungen Engineering als auch die Softwarearchitektur drehen sich um Interessengruppen Bedenken, Bedürfnisse und Wünsche.

Es gibt erhebliche Überschneidungen zwischen Anforderungs -Engineering und Software -Architektur, wie beispielsweise eine Studie in fünf Methoden der industriellen Software -Architektur zeigt, die zu dem Schluss kommen, dass dies zu dem Schluss kommt "Die Inputs (Ziele, Einschränkungen usw.) sind normalerweise schlecht definiert und werden nur dann entdeckt oder besser verstanden, wenn sich die Architektur herausstellt." Und das während "Die meisten architektonischen Bedenken werden als Anforderungen an das System ausgedrückt. Sie können auch vorgeschriebene Entwurfsentscheidungen enthalten.".[24] Kurz gesagt, das erforderliche Verhalten wirkt sich auf die Lösungsarchitektur aus, die wiederum neue Anforderungen ergeben können.[42] Ansätze wie das Twin Peaks -Modell[43] zielen, die auszunutzen synergistisch Beziehung zwischen Anforderungen und Architektur.

Andere Arten von "Architektur"

Rechnerarchitektur
Rechnerarchitektur zielt auf die interne Struktur eines Computersystems ab, um Hardwarekomponenten wie die zusammenzuarbeiten Zentralprozessor - oder Prozessor - die Bus und die Erinnerung.
Systemarchitektur
Der Begriff Systemarchitektur wurde ursprünglich auf die Architektur von angewendet Systeme Das besteht sowohl aus Hardware als auch aus Software. Das Hauptanliegen der Systemarchitektur ist dann die Integration von Software und Hardware in ein vollständiges, korrektes Arbeitsgerät. In einem anderen gemeinsamen - viel breiteren - dh der Begriff gilt für die Architektur eines komplexen Systems, das von technisch sein kann. Soziotechnisch oder soziale Natur.
Unternehmensstruktur
Das Ziel von Unternehmensstruktur ist "Geschäftsision und Strategie in ein effektives Unternehmen umzusetzen". Unternehmensstruktur Frameworks, wie zum Beispiel Togaf und die Zachman -FrameworkUnterscheiden Sie normalerweise zwischen verschiedenen Unternehmensarchitekturschichten. Obwohl sich die Terminologie vom Rahmen zum Rahmen unterscheidet, enthalten viele zumindest eine Unterscheidung zwischen a Geschäft Schicht, ein Anwendung (oder Information) Schicht, und ein Technologie Schicht. Die Unternehmensarchitektur befasst sich unter anderem mit der Ausrichtung zwischen diesen Schichten, normalerweise in einem Top-Down-Ansatz.

Siehe auch

Verweise

  1. ^ a b c Clements, Paul; Felix Bachmann; Len Bass; David Garlan; James Ivers; Reed wenig; Paulo Merson; Robert Nord; Judith Stafford (2010). Dokumentieren von Softwarearchitekturen: Ansichten und darüber hinaus, zweite Ausgabe. Boston: Addison-Wesley. ISBN 978-0-321-55268-6.
  2. ^ a b c d Perry, D. E.; Wolf, A. L. (1992). "Grundlagen für das Studium der Softwarearchitektur" (PDF). ACM Sigsoft Software Engineering Notizen. 17 (4): 40. Citeseerx 10.1.1.40.5174. doi:10.1145/141874.141884. S2CID 628695.
  3. ^ "Softwarearchitektur". www.sei.cmu.edu. Abgerufen 2018-07-23.
  4. ^ a b c d e f g h i j Bass, Len; Paul Clements; Rick Kazman (2012). Softwarearchitektur in der Praxis, dritte Ausgabe. Boston: Addison-Wesley. ISBN 978-0-321-81573-6.
  5. ^ SEI (2006). "Wie definieren Sie Softwarearchitektur?". Abgerufen 2012-09-12.
  6. ^ Garlan & Shaw (1994). "Eine Einführung in die Softwarearchitektur" (PDF). Abgerufen 2012-09-13.
  7. ^ a b Fowler, Martin (2003). "Design - Wer braucht einen Architekt?" IEEE -Software. 20 (5): 11–44. doi:10.1109/ms.2003.1231144. S2CID 356506.
  8. ^ ISO/IEC/IEEE 42010: Definieren von "Architektur". ISO-Architecture.org. Abgerufen am 2013-07-21.
  9. ^ a b Jansen, A.; Bosch, J. (2005). "Softwarearchitektur als Reihe von Architekturentscheidungsentscheidungen". 5. Arbeits-/IFIP -Konferenz über Softwarearchitektur (WICSA'05). p. 109. Citeseerx 10.1.1.60.8680. doi:10.1109/WICSA.2005.61. ISBN 978-0-7695-2548-8. S2CID 13492610.
  10. ^ Ali Babar, Muhammad; Dingsyr, Torger; Lago, Patricia; Van Vliet, Hans (2009). Software -Architekturwissenmanagement. Dordrecht Heidelberg London New York: Springer. ISBN 978-3-642-02373-6.
  11. ^ a b c George Fairbanks (2010). Gerade genug Softwarearchitektur. Marshall & Brainerd.
  12. ^ a b ISO/IEC/IEEE (2011). "ISO/IEC/IEEE 42010: 2011 Systeme und Software -Engineering - Architektur Beschreibung". Abgerufen 2012-09-12.
  13. ^ Müller, Gerrit (20. August 2007). "Eine Referenzarchitektur -Primer" (PDF). Gaudi Site. Abgerufen 13. November, 2015.
  14. ^ Angelov, Samuil; Grefen, Paul; Greefhorst, Danny (2009). "Eine Klassifizierung von Software -Referenzarchitekturen: Analyse ihres Erfolgs und Effektivität". Proc. Von WICSA/ECSA 2009: 141–150. Citeseerx 10.1.1.525.7208. doi:10.1109/WICSA.2009.5290800. ISBN 978-1-4244-4984-2. S2CID 10417628.
  15. ^ Brooks Jr., Frederick P. (1975). Die mythischen Mannmonatsaufsätze über Software-Engineering. Addison-Wesley. ISBN 978-0-201-00650-6.
  16. ^ a b Obbink, H.; Kruchtten, P.; Kozaczynski, W.; Postema, H.; Ran, a.; Dominick, L.; Kazman, R.; Hilliard, R.; Tracz, W.; Kahane, E. (6. Februar 2002). "SARA -Bericht (Software Architecture Review and Assessment (SARA)" (PDF). Abgerufen 1. November, 2015.
  17. ^ Poort, Eltjo; Van Vliet, Hans (September 2012). "RCDA: Architektierung als Disziplin der Risiko- und Kostenmanagement". Zeitschrift für Systeme und Software. 85 (9): 1995–2013. doi:10.1016/j.js.2012.03.071.
  18. ^ P. Naur; B. Randell, Hrsg. (1969). "Software -Engineering: Bericht einer Konferenz, die vom NATO Science Committee, Garmisch, Deutschland, 7. -11. Oktober 1968, gesponsert wurde" (PDF). Brüssel: NATO, Abteilung für wissenschaftliche Angelegenheiten. Abgerufen 2012-11-16.
  19. ^ P. Kruchtten; H. Obbink; J. Stafford (2006). "Die Vergangenheit, Gegenwart und Zukunft der Softwarearchitektur". IEEE -Software. 23 (2): 22. doi:10.1109/ms.2006.59. S2CID 2082927.
  20. ^ Universität Waterloo (2006). "Eine sehr kurze Geschichte der Informatik". Abgerufen 2006-09-23.
  21. ^ IEEE Transactions on Software Engineering (2006). "Einführung in die Sonderausgabe zur Softwarearchitektur". doi:10.1109/tse.1995.10003. {{}}: Journal zitieren erfordert |journal= (Hilfe)
  22. ^ Garlan & Shaw (1994). "Eine Einführung in die Softwarearchitektur" (PDF). Abgerufen 2006-09-25.
  23. ^ a b Kruchtten, P. (2008). "Was machen Softwarearchitekten wirklich?" Zeitschrift für Systeme und Software. 81 (12): 2413–2416. doi:10.1016/j.jss.2008.08.025.
  24. ^ a b c Christine Hofmeister; Philippe Kruchten; Robert L. Nord; Henk Obbink; Alexander rannte; Pierre America (2007). "Ein allgemeines Modell des Software -Architekturdesigns, das aus fünf industriellen Ansätzen stammt". Zeitschrift für Systeme und Software. 80 (1): 106–126. doi:10.1016/j.jss.2006.05.024.
  25. ^ a b ISO/IEC (2011). "ISO/IEC 25010: 2011 System- und Software -Engineering - Systeme und Softwarequalitätsanforderungen und -bewertungen (Square) - System- und Softwarequalitätsmodelle". Abgerufen 2012-10-08.
  26. ^ Osterwalder und Pigneur (2004). "Eine Ontologie für E-Business-Modelle" (PDF). Wertschöpfung aus E-Business-Modellen. S. 65–97. Citeseerx 10.1.1.9.6922. doi:10.1016/b978-075066140-9/50006-0. ISBN 9780750661409. S2CID 14177438. Archiviert von das Original (PDF) Am 2018-11-17.
  27. ^ Chen, Lianping; Ali Babar, Muhammad; NuSeibeh, Bashar (2013). "Charakterisierende architektonisch bedeutende Anforderungen". IEEE -Software. 30 (2): 38–45. doi:10.1109/ms.2012.174. HDL:10344/3061. S2CID 17399565.
  28. ^ Woods, E. (2012). "Industrielle architektonische Bewertung mit Tara". Zeitschrift für Systeme und Software. 85 (9): 2034–2047. doi:10.1016/j.js.2012.04.055. S2CID 179244.
  29. ^ Maranzano, J. F.; Rozsypal, S. A.; Zimmerman, G. H.; Warnken, G. W.; Wirth, P. E.; Weiss, D. M. (2005). "Architekturprüfungen: Übung und Erfahrung". IEEE -Software. 22 (2): 34. doi:10.1109/ms.2005.28. S2CID 11697335.
  30. ^ Babar, M. A.; Dingsøyr, T.; Lago, P.; Vliet, H. van (2009). Software -Architektur -Wissensmanagement: Theorie und Praxis (Hrsg.), Erstausgabe. Springer. ISBN 978-3-642-02373-6.
  31. ^ Tang, A.; Han, J.; Vasa, R. (2009). "Software -Architektur -Design -Argumentation: Ein Fall für eine verbesserte Unterstützung mit Methodik". IEEE -Software. 26 (2): 43. doi:10.1109/ms.2009.46. HDL:1959.3/51601. S2CID 12230032.
  32. ^ Kruchtten, Philippe (1995). "Architektonische Blaupausen - Das '4+1' -Modell der Softwarearchitektur anzeigen" (PDF). IEEE -Software. 12 (6): 42–50. Arxiv:2006.04975. doi:10.1109/52.469759. S2CID 219558624.
  33. ^ a b Shaw, Mary; Garlan, David (1996). Softwarearchitektur: Perspektiven auf eine aufkommende Disziplin. Prentice Hall. ISBN 978-0-13-182957-2.
  34. ^ UCI -Software -Architekturforschung - UCI -Software -Architekturforschung: Architekturstile. Isr.uci.edu. Abgerufen am 2013-07-21.
  35. ^ a b Kapitel 3: Architektonische Muster und Stile. Msdn.microsoft.com. Abgerufen am 2013-07-21.
  36. ^ Boehm, Barry; Turner, Richard (2004). Beweglichkeit und Disziplin ausbalancieren. Addison-Wesley. ISBN 978-0-321-18612-6.
  37. ^ Terra, R., M.T. Valente, K. Czarnecki und R.S. Bigonha, "Refactorings zur Umkehrung der Software -Architektur -Erosion", 16. Europäische Konferenz über Software -Wartung und -Reengineering, 2012.http://gsd.uwaterloo.ca/sites/default/files/full%20Text.pdf
  38. ^ de Silva, L.; Balasubramaniam, D. (2012). "Erosion der Softwarearchitektur kontrollieren: Eine Umfrage". Zeitschrift für Systeme und Software. 85 (1): 132–151. doi:10.1016/j.js.2011.07.036.
  39. ^ Lungu, M. "Software Architecture Recovery", University of Lugano, 2008.http://www.slideshare.net/mircea.lungu/software-architecture-recovery-in-five-questions-presentation
  40. ^ a b Amnon H. Eden; Rick Kazman (2003). "Implementierung von Architekturgestaltung" (PDF). Archiviert von das Original (PDF) am 2007-09-28.
  41. ^ C. Shekaran; D. Garlan; M. Jackson; N.R. Met; C. Potts; H.B. Reubenstein (1994). "Die Rolle der Softwarearchitektur im Anforderungs -Engineering". Proceedings der IEEE International Conference on Requirlent Engineering: 239–245. doi:10.1109/ICRE.1994.292379. ISBN 978-0-8186-5480-0. S2CID 3129363.
  42. ^ Remco C. de Boer, Hans van Vliet (2009). "Über die Ähnlichkeit zwischen Anforderungen und Architektur". Zeitschrift für Systeme und Software. 82 (3): 544–550. Citeseerx 10.1.1.415.6023. doi:10.1016/j.jss.2008.11.185.
  43. ^ Bashar NuSeibeh (2001). "Anforderungen und Architekturen zusammenweben" (PDF). Computer. 34 (3): 115–119. doi:10.1109/2.910904.

Weitere Lektüre

Externe Links