Zum Inhalt springen
Dieser Artikel wurde mittels KI aus dem Japanischen übersetzt
Auf Japanisch lesen
Dieser Artikel ist gemeinfrei (CC0). Fühlen Sie sich frei, ihn uneingeschränkt zu nutzen. CC0 1.0 Universal

Entwicklungsgetriebene Entwicklung und Refactoring-gesteuerter Test

Entwicklung bedeutet, wiederholt etwas Neues und Nützliches zu schaffen.

Wenn wir „Entwicklung“ hören, denken wir oft an die Entwicklung neuer Produkte. Dies unterscheidet sich von der Herstellung einzelner Produkte; es impliziert sozusagen die Erstellung der Baupläne oder Formen für das Produkt.

Daher werden die durch die Entwicklung neuer Produkte entstandenen Designs und Formen wiederholt in Fabriken verwendet, um identische Produkte in Massen zu produzieren.

Es gibt auch Verwendungen des Wortes „Entwicklung“ wie die Entwicklung individueller Fähigkeiten oder die Entwicklung einer Gesellschaft und einer Nation. Diese implizieren nicht nur eine Zunahme dessen, was besessen wird, sondern vielmehr die Fähigkeit, die entwickelten Fähigkeiten wiederholt zu nutzen und davon zu profitieren.

Während die Wirtschaftskraft von Individuen und Gesellschaften mit den Wirtschaftsbedingungen schwanken mag, sind entwickelte Fähigkeiten im Allgemeinen dauerhaft.

Selbst wenn sie abnehmen, wird dies als Rückgang und nicht als Schwankung wie wirtschaftlicher Wohlstand angesehen.

Darüber hinaus gibt es die Entwicklung von Technologie und Wissen. Im Gegensatz zu den Fähigkeiten von Individuen oder spezifischen Gesellschaften zeichnen sich diese dadurch aus, dass sie leicht geteilt werden können.

Und unter den Ergebnissen dieser Entwicklungen – Produkten, Fähigkeiten, Wissen und Technologien – können einige für die nachfolgende Entwicklung nützlich sein.

Durch die Entwicklung solcher nützlichen Ergebnisse erweitert sich der Umfang der Entwicklung, und Effizienz sowie Qualität verbessern sich ebenfalls.

KI-gesteuerte Softwareentwicklung

Im Allgemeinen erforderte Entwicklung beträchtliche Zeit und Mühe. Insbesondere mit dem Fortschritt der Gesellschaft und der zunehmenden Komplexität verschiedener Dinge wird das Schaffen neuer Dinge immer schwieriger.

Mit dem Aufkommen generativer KI ändert sich diese Situation jedoch. Derzeit durchläuft die Softwareentwicklung eine dramatische Transformation, die von den hohen Programmierfähigkeiten generativer KI profitiert.

Die Zukunftsvision, in der autonome Agenten, basierend auf generativer KI, als Softwareentwickler eine zentrale Rolle in der Softwareentwicklung einnehmen, wird bereits Realität.

Wir befinden uns derzeit in einer Übergangsphase. Während wir die Entwicklung nicht vollständig generativer KI anvertrauen können, kann der geschickte Einsatz generativer KI die Softwareentwicklung maßgeblich vorantreiben.

Dies wird als KI-gesteuerte Softwareentwicklung bezeichnet.

Entwicklungsgetriebene Entwicklung

Wenn generative KI die Softwareentwicklung rationalisiert, kann sie nicht nur die Entwicklung der eigentlichen Zielsoftware effizienter gestalten, sondern auch die Entwicklung von Software, die die Entwicklung selbst unterstützt.

Wie bereits erwähnt, erweitern entwicklungsfördernde Ergebnisse den Umfang der Entwicklung und tragen zu einer gesteigerten Effizienz und Qualität bei. Darüber hinaus können sie, wenn sie effektiv erstellt werden, in anderen Entwicklungsprojekten wiederverwendet werden.

Daher kann durch die Entwicklung nützlicher Software im Verlauf der Softwareentwicklung die Gesamteffizienz letztendlich gesteigert werden, und diese Assets können auch für zukünftige Entwicklungen genutzt werden.

Traditionell war die Entwicklung solcher entwicklungsfördernder Software in der Praxis üblich, erforderte jedoch eigene Entwicklungszeit und -aufwand, was eine sorgfältige Bewertung und gezielte Implementierung notwendig machte.

Durch den Einsatz generativer KI kann einfache Software zur Automatisierung kleiner, spontaner Aufgaben schnell erstellt werden. Für Aufgaben mit klaren Prozessen kann generative KI nahezu fehlerfreie und präzise Programme generieren.

Dies erleichtert die Entwicklung von Software, die die Entwicklung während der Softwareentwicklung unterstützt, mehr denn je.

Und bei tieferer Reflexion entsteht ein Entwicklungsstil, bei dem nützliche Tools kontinuierlich während des Entwicklungsprozesses entwickelt werden, wodurch die Entwicklungsmethode selbst transformiert wird.

Wir werden dies als entwicklungsgetriebene Entwicklung bezeichnen.

Um die entwicklungsgetriebene Entwicklung zu praktizieren, bedarf es der Gewohnheit, die eigene Softwareentwicklung objektiv zu betrachten, um zu überlegen, welche Teile an Software delegiert werden können und welche Teile nur von Menschen erledigt werden können, zusammen mit der Fähigkeit, solche entwicklungsfördernden Software zu entwickeln.

Darüber hinaus kann generative KI in diese Software-Tools integriert werden. Durch die Einbettung in die Software kann, im Gegensatz zu einem eigenständigen generativen KI-Agenten, der Verarbeitungsbereich eingegrenzt und ein klarer Pfad bis zu einem gewissen Grad definiert werden.

Während KI-Agenten ähnliche Ergebnisse durch Prompting erzielen können, kann Software, die generative KI integriert, die Genauigkeit leichter erhöhen, indem sie sowohl Programme als auch Prompts kombiniert.

Wenn die entwicklungsgetriebene Entwicklung praktiziert wird, werden beim zweiten Projekt sowohl Qualität als auch Kosten im Vergleich zum ersten verbessert. Darüber hinaus werden sich mit jedem weiteren Projekt – dem dritten, vierten und so weiter – die Verbesserungen weiter ansammeln.

Dies unterscheidet sich völlig von der bloßen Softwareentwicklung mittels generativer KI. Zwischen Teams, die generative KI-Tools einfach beherrschen, und Teams, die entwicklungsgetriebene Entwicklung praktizieren, wird sich im Laufe der Zeit eine erhebliche Kluft auftun.

Refactoring-gesteuerter Test

Es gibt ein Konzept namens Test-Driven Development (TDD), das darin besteht, zuerst Tests auf Basis von Spezifikationen zu entwerfen und dann Software zu entwickeln, die diese Tests besteht.

Anfangs dachte ich auch, dass mit generativer KI die Entwicklung von Testprogrammen für die automatisierte Prüfung einfach wird und Test-Driven Development praktikabel sein könnte.

Doch als ich begann, entwicklungsgetriebene Entwicklung zu praktizieren, kam ich zu der Überzeugung, dass der Ansatz, Tests vor der Implementierung zu entwerfen, nicht immer geeignet ist.

Insbesondere bei Software wie Webanwendungen, die subjektive Aspekte wie Benutzerfreundlichkeit und visuelles Design umfassen, die man durch Interaktion erfahren kann, wurde mir klar, dass das tatsächliche Ausführen und Interagieren mit der Software Vorrang vor detaillierten Tests hat.

Denn wenn es bei der Interaktion erhebliche Unzufriedenheiten auf UI/UX-Ebene gibt, besteht die Möglichkeit, dass fundamentale Teile wie das Framework, die grundlegende Architektur, das Datenmodell oder die Anwendungsfälle geändert werden müssen.

In meinem aktuellen persönlichen Softwareentwicklungsprojekt bemerkte ich ebenfalls Probleme mit der funktionalen Flexibilität und Leistung, was mich dazu veranlasste, zwei Frameworks durch andere zu ersetzen.

Es gab auch einen Teil mit schlechter Speichernutzungseffizienz, der eine vollständige Überarbeitung der Verarbeitung erforderte.

Gerade an diesen Refactoring-Stellen wird das Testen erstmals bewusst.

Befindet sich die Entwicklung in einem frühen Stadium oder ändern sich Funktionen und Spezifikationen ohnehin erheblich, sind Tests möglicherweise nicht erforderlich.

Ist die Entwicklung jedoch bereits weit fortgeschritten und gibt es viele zu überprüfende Punkte, werden Tests beim Refactoring wahrscheinlich notwendig sein, um sicherzustellen, dass keine funktionalen Mängel oder Auslassungen vorliegen.

Daher ist die Idee, Testprogramme zu erstellen, sobald die Entwicklung einen bestimmten Grad erreicht hat und Refactoring notwendig wird, keine schlechte.

Dabei ist es entscheidend, nicht für den gesamten Code Tests zu erstellen, sondern sich auf Tests für ausgereifte Teile zu konzentrieren, die sich in Zukunft voraussichtlich wenig ändern werden, und die noch im Fluss befindlichen Teile ohne automatisierte Tests zu lassen.

Dies kann als Refactoring-gesteuerter Test bezeichnet werden.

Fazit

Generative KI verändert die Softwareentwicklung dramatisch.

In früheren Artikeln schrieb ich über die Bedeutung, ein Omnidirektionaler Ingenieur zu werden, der über die traditionelle Rolle des Full-Stack-Ingenieurs hinausgeht und omnidirektionale Systeme entwickeln kann, die verschiedene Domänen, Infrastrukturen und Ausführungsumgebungen kombinieren.

Ich schrieb auch einen Artikel, der darauf hindeutet, dass wir in eine Ära der Erfahrungs- und Verhaltens-getriebenen Entwicklung eintreten, die sich auf die Verbesserung der Benutzererfahrung durch das Verhalten der Software konzentriert, anstatt des traditionellen Softwareentwicklungsansatzes, Spezifikationen und Implementierung in Einklang zu bringen.

Die entwicklungsgetriebene Entwicklung und der Refactoring-gesteuerte Test sind genau die Ansätze, die uns zu diesen neuen Horizonten in der Softwareentwicklung führen werden.