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

Entwicklungsbasierte Entwicklung und Refactoring-gesteuertes Testen

Entwicklung ist die iterative Schaffung von etwas Neuem und Nützlichem.

Wenn wir an Entwicklung denken, kommt uns oft die Neuentwicklung von Produkten in den Sinn. Dies unterscheidet sich von der Fertigung, die einzelne Produkte herstellt; stattdessen geht es um die Erstellung der Entwurfsspezifikationen oder Formen für Produkte.

So werden die durch neue Produktentwicklung geschaffenen Baupläne oder Formen wiederholt in Fabriken verwendet, um zahlreiche identische Produkte herzustellen.

Es gibt auch Anwendungen wie die Entwicklung individueller Fähigkeiten oder die Entwicklung von Gesellschaften und Nationen. Diese implizieren nicht nur eine Zunahme dessen, was man besitzt, sondern die Fähigkeit, die entwickelten Fähigkeiten wiederholt zu nutzen und davon zu profitieren.

Während die Wirtschaftskraft von Einzelpersonen und Gesellschaften aufgrund wirtschaftlicher Bedingungen schwanken kann, sind entwickelte Fähigkeiten grundsätzlich dauerhaft.

Selbst wenn sie abnehmen, wird dies eher als Rückgang denn als Auf- und Ab-Schwankungen des wirtschaftlichen Wohlstands betrachtet.

Darüber hinaus gibt es auch die Entwicklung von Technologie und Wissen. Im Gegensatz zu den Fähigkeiten von Einzelpersonen oder spezifischen Gesellschaften haben diese die Eigenschaft, leicht teilbar zu sein.

Und unter den Produkten, Fähigkeiten, Kenntnissen und Technologien, die die Ergebnisse dieser Entwicklungen sind, können einige zu nachfolgenden Entwicklungen beitragen.

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

KI-gesteuerte Softwareentwicklung

Im Allgemeinen hat die Entwicklung erheblichen Zeit- und Arbeitsaufwand erfordert. Besonders da die Gesellschaft fortschreitet und verschiedene Dinge immer komplexer werden, wird die Schaffung neuer Dinge noch schwieriger.

Mit dem Aufkommen generativer KI ändert sich diese Situation jedoch. Derzeit durchläuft die Softwareentwicklung dank der hohen Programmierfähigkeiten generativer KI dramatische Veränderungen.

In diesem Szenario wird eine Zukunftsvision, in der autonome Agenten auf Basis generativer KI als Softwareentwickler eine zentrale Rolle in der Softwareentwicklung spielen, bereits Realität.

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

Dies wird als KI-gesteuerte Softwareentwicklung bezeichnet.

Entwicklungsbasierte Entwicklung

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

Wie bereits erwähnt, erweitern Entwicklung fördernde Ergebnisse den Entwicklungsspielraum und tragen zur Verbesserung von Effizienz und Qualität bei. Zudem können sie, wenn sie effektiv erstellt werden, in anderen Entwicklungsprojekten wiederverwendet werden.

Daher kann durch die Entwicklung von Software, die den Entwicklungsprozess unterstützt, die Gesamteffizienz gesteigert und diese Assets für zukünftige Entwicklungen genutzt werden.

Traditionell war die Entwicklung solcher Hilfssoftware gängige Praxis, erforderte jedoch eigene Entwicklungszeit und -aufwand, was eine sorgfältige Abwägung und gezielte Ausführung notwendig machte.

Durch den Einsatz generativer KI kann man schnell einfache Software erstellen, um kleinere Aufgaben, die einem in den Sinn kommen, zu automatisieren. Wenn die Aufgabe eine klare Verarbeitung beinhaltet, kann generative KI das Programm nahezu fehlerfrei und präzise generieren.

Folglich ist die Entwicklung von Software zur Unterstützung der Entwicklung während des Softwareentwicklungsprozesses einfacher geworden als zuvor.

Und wenn man dies vertieft, entsteht ein Entwicklungsstil, bei dem nützliche Werkzeuge für die Entwicklung kontinuierlich während des Prozesses erstellt werden, wodurch die Entwicklungsmethodik selbst transformiert wird.

Wir werden dies „entwicklungsbasierte Entwicklung“ nennen.

Um entwicklungsbasierte Entwicklung zu praktizieren, bedarf es der Gewohnheit, die eigene Softwareentwicklung objektiv zu beobachten, zu überlegen, welche Teile von Software und welche nur von Menschen erledigt werden können, sowie der Fähigkeit, solche Hilfssoftware zu entwickeln.

Darüber hinaus kann generative KI in diese Softwarewerkzeuge integriert werden. Durch die Einbettung in die Software kann, anders als bei generativen KI-Agenten, der Verarbeitungsbereich bis zu einem gewissen Grad eingegrenzt und Pfade definiert werden.

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

Wenn eine solche entwicklungsbasierte Entwicklung praktiziert werden kann, wird das zweite Projekt sowohl in Qualität als auch in Kosten Verbesserungen gegenüber dem ersten aufweisen. Darüber hinaus werden mit jedem weiteren Projekt – dem dritten, vierten und so weiter – weiterhin Verbesserungen erzielt.

Dies unterscheidet sich grundlegend davon, generative KI lediglich zur Softwareentwicklung zu nutzen. Zwischen Teams, die generative KI-Tools einfach beherrschen, und Teams, die entwicklungsbasierte Entwicklung praktizieren, wird sich mit der Zeit eine erhebliche Lücke auftun.

Refactoring-gesteuertes Testen

Es gibt ein Konzept namens Test-Driven Development (TDD), bei dem Tests zuerst auf der Grundlage von Spezifikationen entworfen und dann Software entwickelt wird, um diese Tests zu bestehen.

Anfangs dachte auch ich, dass durch den Einsatz generativer KI die Entwicklung von Testprogrammen für die automatisierte Prüfung einfach wäre, was TDD praktikabel machen würde.

Als ich jedoch begann, die entwicklungsbasierte Entwicklung zu praktizieren, kam ich zu der Überzeugung, dass das Nachdenken über Tests vor ihrer Implementierung nicht immer der geeignetste Ansatz ist.

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

Dies liegt daran, dass, wenn nach der Interaktion erhebliche Unzufriedenheit auf der UI/UX-Ebene besteht, die Möglichkeit besteht, grundlegende Teile wie das Framework, die Basisarchitektur, das Datenmodell oder die Anwendungsfälle ändern zu wollen.

In meinem aktuellen persönlichen Softwareentwicklungsprojekt bemerkte ich Probleme mit der Funktionsflexibilität und Leistung und tauschte schließlich zwei Frameworks gegen andere aus.

Ich musste auch die Verarbeitung in einigen Bereichen aufgrund ineffizienter Speichernutzung komplett überarbeiten.

Gerade in diesen Momenten des Refactorings wird das Testen erstmals bewusst in Betracht gezogen.

Befindet sich dies in einem frühen Entwicklungsstadium oder werden sich die Funktionen und Spezifikationen ohnehin erheblich ändern, könnten Tests unnötig sein.

Wenn die Entwicklung jedoch bereits weit fortgeschritten ist und viele Punkte überprüft werden müssen, sind Tests erforderlich, um zu bestätigen, dass das Refactoring keine funktionalen Mängel oder Auslassungen eingeführt hat.

Daher ist der Ansatz, Testprogramme zu erstellen, wenn die Entwicklung bis zu einem gewissen Grad fortgeschritten ist und Refactoring notwendig wird, keine schlechte Idee.

Dabei ist es entscheidend, nicht für den gesamten Code Tests zu erstellen, sondern sich auf das Testen ausgereifter Teile zu konzentrieren, die sich in Zukunft voraussichtlich wenig ändern werden, während flüssige Teile ohne automatisierte Tests belassen werden.

Dies kann als Refactoring-gesteuertes Testen bezeichnet werden.

Fazit

Generative KI transformiert die Softwareentwicklung dramatisch.

In einem früheren Artikel schrieb ich über die Bedeutung des Ziels, ein „Omnidirektionaler Ingenieur“ zu sein, der in der Lage ist, Systeme zu entwickeln, die verschiedene Domänen, Infrastrukturen und Ausführungsumgebungen kombinieren und über den traditionellen Full-Stack-Ingenieur hinausgehen.

Ich schrieb auch einen Artikel, der darauf hindeutet, dass wir in eine Ära der „erfahrungs- und verhaltenszentrierten Entwicklung“ eintreten, in der der Fokus nicht auf der Abstimmung von Spezifikationen mit der Implementierung liegt, sondern auf der Verbesserung der Benutzererfahrung durch Softwareverhalten.

Entwicklungsbasierte Entwicklung und refactoring-gesteuertes Testen sind genau das, was zu diesen neuen Horizonten in der Softwareentwicklung führt.