Gewinne:
- Fähigkeit zu unterscheiden, wo KI im Softwareentwicklungslebenszyklus für echte Geschwindigkeit sorgt und wo die Entscheidung und Verantwortung beim Ingenieur verbleibt
- Fähigkeit zur Anwendung einer dreischichtigen Ingenieursdisziplin, die jeden erstellten Code und Entwurf durch Kompilierung, Tests und Überprüfung überprüft.
- Machen Sie es sich zur Gewohnheit, den Kontext zu klären, um KI zu nutzen, ohne vertraulichen Quellcode, Anmeldeinformationen und Kundendaten weiterzugeben
Wenn man sich den Tag eines Computeringenieurs anschaut, ist das Bild in den meisten Teams ähnlich: eine Geschäftsanfrage verstehen, entwerfen, Code schreiben, den Code einer anderen Person lesen, Debuggen (der Prozess, herauszufinden, warum ein Programm falsch funktioniert und es zu beheben), Tests schreiben, Dokumentation vorbereiten, Code überprüfen und an Besprechungen teilnehmen. Mit anderen Worten: Die Zeit, die für die eigentliche „technische Beurteilung“, also die Frage, ob eine Lösung richtig, sicher und nachhaltig ist, aufgewendet wird, wird durch repetitive Arbeit verschwendet. Hier kommt künstliche Intelligenz (kurz KI; Software, die mit Text und Code mit einem großen Sprachmodell arbeitet) ins Spiel. KI nimmt Ihnen die Entscheidung nicht ab; Es bereitet Sie auf die Entscheidung vor, erstellt ein Codegerüst, grenzt den Fehler ein und legt Ihnen einen ausgearbeiteten Entwurf vor. In diesem Modul positionieren wir KI nicht als „automatischen Programmierer“, sondern als disziplinierten Paarprogrammierungspartner, dessen Ergebnisse jedes Mal zusammengestellt, getestet und überprüft werden.
In dieser ersten Einheit klären wir drei Dinge: In welchen Phasen des Softwareentwicklungslebenszyklus (die Phasen, die eine Software von der Idee bis zur Produktion durchläuft: Analyse, Design, Codierung, Tests, Bereitstellung, Wartung) bietet KI einen echten Mehrwert; welche Entscheidungen grundsätzlich dem Ingenieur überlassen bleiben sollten; und welche Überprüfungs- und Vertraulichkeitsdisziplin müssen Sie dabei einhalten? Ohne die ordnungsgemäße Installation dieses Daches können Techniken an nachfolgenden Einheiten gefährlich werden; Denn ein Fehler in der Software erreicht Millionen von Nutzern gleichzeitig und kann zu einer Sicherheitslücke werden.
Konzepte: Halluzination: Die überzeugende Erfindung einer Methode, Bibliothek, API oder eines Verhaltens durch KI, die tatsächlich nicht existiert. Kontext: Die Eingabe, die Sie der KI geben (Code, Fehlermeldung, Anforderung, Einschränkungen). Verifizierung: Überprüfung der Ausgabe auf unabhängige Weise (Kompilierung, Test, Dokumentation). Diese drei Konzepte bilden das Rückgrat des gesamten Moduls.
In welchen Unternehmen ist AI Accelerator eingesetzt, in welchen Unternehmen ist es riskant?
Was die Ergebnisse betrifft, lassen sich Softwarejobs in ein zweigleisiges Spektrum einteilen. An einem Ende stehen reversible, risikoarme Vorbereitungsarbeiten; Auf der anderen Seite gibt es schwierig wiederzugebende Aufgaben, die in die Produktionsumgebung gelangen und zu Datenverlust, Sicherheitslücken oder Unterbrechungen führen können. Der Wert der KI variiert je nachdem, wo Sie in diesem Spektrum stehen.
Geschäftstyp
KI-Beitrag
Die Rolle des Ingenieurs
Codegerüst/Boilerplate
Schnelle Erzeugung sich wiederholender Strukturen
Logik- und Kantenstatussteuerung
Debuggen
Hypothese und mögliche Ursachenliste
Reproduktion und Ursachenbestätigung
Schreibtests
Testentwurf und Szenarioerstellung
Aussagekräftige Assert- und Scope-Prüfung
Umgestaltung
Refactoring-Vorschlag
Verhalten durch Tests aufrechterhalten
Dokumentation
Erster Entwurf und Struktur
Korrektheitsprüfung anhand des Codes
Architektur-/Sicherheitsentscheidung
Liste der Optionen und Vor- und Nachteile
Endgültige Entscheidung und Verantwortung
Die Regel ist einfach: Das Risiko einer KI-Ausgabe entspricht dem Schaden, der ihr entsteht, wenn diese Ausgabe einen Fehler macht. Die falsche Angabe eines Variablennamens ist harmlos; Eine unsachgemäße Authentifizierung (Überprüfung, ob der Benutzer wirklich der ist, für den er sich ausgibt) macht das gesamte System angreifbar. Die erste Frage vor der Verwendung der Ausgabe lautet also: „Was passiert, wenn das falsch ist und wer es wann bemerkt?“
Achtung: KI erzeugt flüssigen und sicheren Code. Sprachgewandtheit ist keine Garantie für Genauigkeit. Ein Sprachmodell kann glaubhaft einen Funktionsnamen erzeugen, der tatsächlich nicht existiert, eine falsche Parametersequenz oder sogar ein unsicheres Muster. Bei Software bleibt dies nicht auf dem Papier; Es wird in der Produktion kompiliert, ausgeführt und explodiert.
Entscheidungen, die dem Ingenieur überlassen werden sollten
Manche Entscheidungen sollten niemals vollständig automatisiert werden; birgt technische, rechtliche und ethische Risiken:
- Freigabe zur Produktion: Die Freigabe eines Codes zur Produktion und die Verantwortung dafür.
- Sicherheit und Architektur: Teure Entscheidungen wie Authentifizierung, Autorisierung, Verschlüsselung und Datenmodell.
- Lizenz und Urheberrecht: Verwendbarkeit des produzierten Codes im kommerziellen Produkt und Lizenzeinhaltung.
- Arbeiten mit vertraulichen Daten: Transaktionen mit Kundendaten, Quellcode-Geheimnissen und Identitätsinformationen.
Warnung: Auch wenn die KI sagt „Dieser Code ist sicher und bereit für die Produktion“, ist es inakzeptabel, dies ohne Sicherheitstests, Codeüberprüfung und Validierung unter realer Last zu akzeptieren. Bei sicherheitskritischen Arbeiten ist die KI-Ausgabe niemals ein Ersatz für die Genehmigung eines kompetenten Ingenieurs; Alle Ergebnisse, die zu einer Entscheidung führen, müssen vor der Umsetzung unabhängig überprüft und vom autorisierten Ingenieur genehmigt werden.
Verifizierungsdisziplin: Dreischichtige Kontrolle
Wenden Sie drei Steuerungsebenen an, um die KI-Ausgabe wie ein leitender Prüfer und nicht blind zu nutzen. Dies ist der Grundreflex, den wir im Laufe des Moduls wiederholen werden.
- Kompilierung und statische Prüfung: Wird der Code tatsächlich kompiliert/ausgeführt? Gibt es Typfehler, nicht verwendete Variablen, nicht vorhandene APIs? Was sagt das statische Analysetool (das Tool, das den Code untersucht, ohne ihn auszuführen)?
- Unabhängige Reproduktion (Testen): Führen Sie den Code mit kleinen, bekannten Eingaben aus und prüfen Sie, ob Sie die erwartete Ausgabe erhalten. Probieren Sie Randfälle aus (null, null, negativ, riesig).
- Quellenüberprüfung: Jede API, Bibliotheksversion und Sprachfunktion, die die KI verwendet, sollte anhand der offiziellen Dokumentation überprüft werden.
Überprüfungsaufforderung (erleichtert die Überprüfung der Ausgabe): „Listen Sie ALLE externen Bibliotheken, Methoden und Sprachfunktionen auf, die Sie in Ihrem Code verwenden. Geben Sie für jede einzelne an, in welcher Version sie verfügbar ist, und kennzeichnen Sie sie mit „Muss anhand der Dokumentation überprüft werden“. Erfinden Sie keine APIs, bei denen Sie sich nicht sicher sind. Wenn Sie sich nicht sicher sind, schreiben Sie deutlich „nicht sicher“. Listen Sie auch alle Grenzfälle auf, die Sie nicht als separate Liste behandelt haben.“
Kritisieren Sie Ihren eigenen Code: „Sehen Sie sich den Code, den Sie gerade geschrieben haben, kritisch an, wie ein leitender Ingenieur, der Sie eingestellt hat. Nennen Sie konkrete Elemente unter diesen drei Überschriften: (1) Logik-/Edge-Case-Fehler, (2) Sicherheitsrisiken, (3) Leistungs- oder Lesbarkeitsprobleme. Schreiben Sie für jedes Element „Warum liegt das Problem?“ und „Vorgeschlagene Lösung“. Wenn es kein Problem gibt, sagen Sie „Ich konnte kein Problem finden“; versuchen Sie nicht, es zu beschönigen.“
Schwache Eingabeaufforderung / Starke Eingabeaufforderung
SCHWACH: „Schreiben Sie mir eine Benutzerauthentifizierungsfunktion.“ (Ergebnis: unklar, welche Sprache, welche Regel, welches Fehlerverhalten; generischer Code, oft unsicher oder außerhalb des Kontexts.)STRONG: „Schreiben Sie eine E-Mail-Validierungsfunktion für Python 3.11. Eingabe: Zeichenfolge. Ausgabe: Wahr, wenn gültig, andernfalls Falsch. Regeln: leere Zeichenfolge Falsch; Keine RFC-Konformität erforderlich, Basisformat ist ausreichend. VERWENDEN SIE KEINE externe Bibliothek. Ein 5-Beispiel-Test unter dem Funktionsanhängeblock: gültig, leer, nein „@“, doppeltes „@“, enthält nur Leerzeichen.“
Der Unterschied liegt im Kontext. Leistungsstarke Eingabeaufforderung; Es umfasst die Sprache, die Version, den Input-Output-Vertrag, Einschränkungen und Testerwartungen. Diese einzelne Disziplin reduziert das Risiko von Halluzinationen und unsicherem Code erheblich.
Mini-Hüllen
Fall 1 – Künstliche Methode. Ein Entwickler erfährt von AI, dass es in einer Datumsbibliothek eine Methode namens date.addBusinessDays(5) gibt, und erklärt ihm dies auf sichere Weise. Als er sich die Dokumentation ansieht, sieht er, dass es keine solche Methode gibt, die richtige Methode ist eine manuelle Schleife. Die Halluzination wird erfasst, bevor sie mit einer 10-minütigen Überprüfung in Produktion geht.
Fall 2 – Verlust des Kantenzustands. KI erzeugt eine Funktion „Durchschnitt berechnen“; Es funktioniert, wenn es mit 1.000 Datenzeilen getestet wird. Wenn die Liste jedoch leer ist, wird ein Fehler bei der Division durch Null angezeigt. Da der Techniker den leeren Eingabetest hinzugefügt hat, sieht er den Fehler und behebt ihn, bevor er live geht. Ein einzelner Kantenzustandstest verhindert einen Produktionsalarm um 3 Uhr morgens.
Fall 3 – Datenschutzrisiko. Ein Experte ist dabei, eine Datei mit einer tatsächlichen Datenbankverbindungszeichenfolge und einem API-Schlüssel in ein öffentliches Tool einzufügen. Erinnert sich an die Richtlinien der Institution; Es ersetzt die Geheimnisse durch <REDACTED>, reduziert den Code auf ein repräsentatives Beispiel und fragt danach. So erhält er innerhalb von 5 Minuten Hilfe, seine Identitätsinformationen kommen jedoch nicht heraus.
Prinzip der Arbeit mit Geheimcode und Identitätsinformationen
Der sensibelste Teil der Software; Geheimnisse des Quellcodes, Identitätsinformationen (API-Schlüssel, Passwort, Token) und Kunden-/persönliche Daten. Grundprinzip: Vor dem Teilen aufräumen, nach Möglichkeit nur den Kern des Problems anhand eines repräsentativen Beispiels erfragen.
Anonymisiertes Eingabeaufforderungsmuster: „In der folgenden Funktion liegt ein Fehler vor. Ich habe die eigentliche Geschäftslogik und versteckte Konstanten durch repräsentative Werte (API-Schlüssel, Tabellennamen, generische Feldnamen) ersetzt. Problem: Ich erhalte Fehler Y in Eingabe X. Suchen Sie einfach den Logikfehler in diesem repräsentativen Code und erläutern Sie die korrigierte Version. [repräsentativer Code]“
Tipp: Machen Sie im Zweifelsfall diesen Test: „Bekäme meine Organisation Ärger, wenn ich das öffentlich in einem Forum schreibe?“ Auch wenn die Antwort unklar ist, klären Sie sie zuerst. Ein Zurücksetzen ist immer günstiger, als das Leck später zu verfolgen.
Häufige Fehler
- Verwenden der Ausgabe ohne Kompilieren/Testen. „KI hat geschrieben“ ist keine Rechtfertigung; Jeder Code wird durch die Ausführung überprüft.
- Anfragen ohne Kontext stellen. Wenn Sprache, Version, Eingabe-Ausgabe und Einschränkungen nicht angegeben werden, wird der Code generisch und oft unsicher.
- Vertrauliche Informationen ohne nachzudenken weitergeben. Der API-Schlüssel, das Passwort und die Kundendaten sollten nicht ungeklärt weitergegeben werden.
- Präzise Sprache mit Genauigkeit verwechseln. Je sicherer die KI spricht, desto vorsichtiger sollte man sein; Ein selbstsicherer Ton ist kein Beweis.
- Die Entscheidung an die KI delegieren. Die Entscheidung, ob es um Produktion, Sicherheit und Architektur geht, liegt beim Ingenieur; KI produziert nur Materialien.
Zusammenfassend
KI beschleunigt die sich wiederholenden und zeitaufwändigen Teile der Softwarearbeit: Skelettcode, Testentwurf, Fehlereingrenzung, Dokumentation. Die Entscheidung und Verantwortung liegt jedoch beim Ingenieur. Jede Ausgabe muss drei Steuerungsebenen durchlaufen (Kompilieren/Statisch, Testen, Quelle). Das Schreiben von Aufforderungen mit Kontext und das Löschen verborgener Informationen sind zwei wichtige Gewohnheiten, die wir in jeder Einheit dieses Moduls wiederholen werden. Wenn Sie KI diszipliniert einsetzen, gewinnen Sie an Geschwindigkeit; Wenn Sie es ohne Disziplin verwenden, tragen Sie Fehler und Schwachstellen in die Produktion ein.
Anwendungsaufgabe
Wählen Sie eine kleine Codierungsaufgabe aus Ihrer eigenen Arbeit oder aus einem imaginären Projekt (z. B. eine Validierungsfunktion). Schreiben Sie zuerst eine schwache Eingabeaufforderung und erhalten Sie die Ausgabe. Wenden Sie dann das leistungsstarke Eingabeaufforderungsmuster aus dieser Einheit an: Fügen Sie Sprache/Version, Eingabe-Ausgabe-Vertrag, Einschränkungen und Testerwartungen hinzu. Legen Sie die beiden Ausdrucke nebeneinander und notieren Sie die Differenz. Kompilieren Sie dann die robuste Ausgabe und testen Sie sie mit mindestens drei Randfällen (null, null/negativ, unerwartetes Format) und notieren Sie, was Sie in welchem Test finden.
Checkliste
- [ ] Ich habe der Eingabeaufforderung Sprache, Version und Eingabe-Ausgabe-Vertrag hinzugefügt.
- [ ] Ich habe geschrieben: „Erfinden Sie es nicht, sagen Sie es mir, wenn Sie sich nicht sicher sind“ und die Bereichsbeschränkung.
- [ ] Ich habe den Code kompiliert/ausgeführt und auf statische Warnungen überprüft.
- [ ] Ich habe mit mindestens drei Randfällen getestet.
- [ ] Ich habe die verwendeten APIs anhand der offiziellen Dokumentation überprüft.
- [ ] Ich habe alle Geheimcodes/Zugangsdaten gelöscht oder ein Unternehmenstool verwendet.
- [ ] Ich habe bestätigt, dass die Entscheidung über die Einführung von Produktion und Sicherheit beim Menschen liegt.