Wenn der Fokus auf der agilen Entwicklungsmethodik liegt, wird meistens darauf geachtet, wie schnell Teams neuen Code veröffentlichen können. Eine schnellere Veröffentlichung ist jedoch nur dann von Bedeutung, wenn sie den Prozess vereinfacht, um zu erkennen, wie sich Änderungen auf Geschäftsziele, Anwendungsleistung und Benutzererfahrung auswirken. Oder, wenn der Fokus auf der testgetriebenen Entwicklung liegt, wird dies als eine perfekte Vorgehensweise für die Feature-Entwicklung angesehen, um die Codequalität und Testabdeckung zu verbessern. Sie müssen jedoch auch nichtfunktionale Anforderungen wie Skalierbarkeit, Zuverlässigkeit, Beobachtbarkeit und andere architektonische Belange berücksichtigen. Es findet eine ständige Weiterentwicklung der Architekturstandards statt, und Building Evolutionary Architecture (mitverfasst von Neal Ford, Rebecca Parsons und Patrick Kua) beschreibt, dass die Vorstellung von Architektur, die Veränderungen unterstützt, als evolutionäre Architektur bezeichnet wird.

Evolutionäre Architektur rationalisiert den Prozess, große Änderungen an Bereichen wie Datenbanken, Geschäftsprozessen, Service-Schnittstellen oder Benutzeroberflächen vorzunehmen, ohne andere Bereiche zu beeinträchtigen. Thoughtworks erklärt, dass inkrementelle, geführte Änderungen durch evolutionäre Architektur als erstes Prinzip über mehrere Dimensionen hinweg unterstützt werden. Die Idee der evolutionären Architektur stammt aus dem evolutionären Computing, bei dem Entwickler Algorithmen definieren, die wiederum ein Ergebnis erzielen. Die Feststellung, ob ein Algorithmus gut ist oder nicht besser als der zuletzt implementierte, kann mithilfe von Fitnessfunktionen erfolgen. Building Evolutionary Architecture besagt, dass "jedes System zu verschiedenen Zeitpunkten seines Lebens optimiert werden muss, um für seine Umgebung geeignet zu sein". Es wird weiter hinzugefügt, dass "evolutionäre Architekturen explizit machen, was Fit bedeutet, mit so viel Automatisierung wie möglich".
Problematische Szenarien
Die Identifizierung von Tests als Fitnessfunktionen kann die evolutionäre Metapher etwas in die Länge ziehen, und Sie nutzen Fitnessfunktionen nicht, um verschiedene Kandidatenlösungen in einer Simulation der natürlichen Selektion auszuwählen. Die Anwendung von Fitnessfunktionen hat nicht viel mit der inkrementellen Ablehnung von Lösungen zu tun, ist aber nützlich, um Metriken zu verwenden, um zukünftige Entwicklungsanstrengungen zu steuern. Es kann auch problematisch sein, objektive und wiederholbare Tests zu entwickeln, um die richtigen Dinge zu messen, und es werden zahlreiche Investitionen in die genetische Programmierung in Fitnessfunktionen getätigt, um die Korrelation mit den Designzielen sicherzustellen. Das Messen falscher Dinge kann zu einer unangemessenen Lösung führen.
Möglicherweise möchten Sie architektonische Fitnessfunktionen definieren, die die Struktur des Codes betonen, und Test-Frameworks können auch hilfreich sein, um klare, atomare Tests zu erstellen, die in den Build-Prozess integriert werden können. Statische Analysetools wie SonarQube können nützlich sein, um die Komplexität des Codes zu messen. ArchUnit kann helfen, Codestrukturregeln als JUnit-Testzusicherungen durchzusetzen, sodass sie in eine Continuous-Integration-Pipeline integriert werden können. Dieser Ansatz ist jedoch begrenzt, da er nur eine sehr enge Perspektive des Systems berücksichtigt, da ein Gesamtbild der architektonischen Gesundheit mehrere Dimensionen berücksichtigen muss, die über die technische Implementierung hinausgehen. Darüber hinaus kann die architektonische Fitness nicht allein durch die Beobachtung des Codes oder Designs gemessen werden.
Die Lösung
Unabhängig davon, wie die Anwendungsarchitektur aussieht (es kann sich um einen Monolithen, Microservices oder hybride Microservices handeln), kann die Fitnessfunktions-gesteuerte Entwicklung eine enorme Hilfe sein, wenn es darum geht, kontinuierliches Feedback für die architektonische Einhaltung einzuführen und den Entwicklungsprozess darüber zu informieren, sobald dies geschieht.
Die atomare Fitnessfunktion kann durch einen Unit-Test erfolgen, der ein einzelnes Merkmal eines bereitstellbaren Artefakts betrachtet, um zu überprüfen, wie es funktioniert. Und da Consumer-Driven Contracts in dieser Microservices-Ära für das Testen der Integration mit anderen Diensten üblich sind, wird es einfacher, Änderungen in einem Dienst vorzunehmen, die keine Probleme bei der Integration mit anderen verursachen. Um zu sehen, wie sich die Architektur als Ganzes entwickelt, kann eine ganzheitliche Fitnessfunktion nützlich sein.
Fazit
Die Verwendung von Fitnessfunktionen in der evolutionären Architektur kommuniziert architektonische Standards als Code und unterstützt die Befähigung von Entwicklungsteams zur Bereitstellung von Funktionen, die gut mit den architektonischen Zielen übereinstimmen.
Abonnieren
Verwandte Blogs
Erkunden von Drupal Single Directory Components: Ein Wendepunkt für Entwickler

Webentwicklung lebt von Effizienz und Organisation, und Drupal, unser Lieblings-CMS, ist mit seiner neuesten Funktion hier,…
7 schnelle Schritte zur Erstellung von API-Dokumentationen mit Postman

Wenn Sie mit APIs arbeiten, kennen Sie wahrscheinlich bereits Postman, den beliebten REST Client, dem unzählige Entwickler…
Was ist der Product Engineering Life Cycle?

Stellen Sie sich vor, Sie bauen ein Haus ohne Bauplan oder Konstruktionszeichnungen. Es wäre schwierig, die Kosten und den…