Automatische Codegeneratoren [geschlossen]

13

Einer meiner Kollegen verwendet gerne automatische Codegeneratoren, die große Mengen an Code erstellen, der schlecht dokumentiert und sehr schwer zu warten ist.

Sind die Kosten für die Verwendung eines Codegenerators für die kürzere Erstellungszeit den Wartungsaufwand wert?

Murmelt
quelle

Antworten:

10

Lassen Sie uns das umformulieren:

Lohnen sich die Kosten eines guten automatischen Codegenerators?

Ja.

Sind die Kosten für einen schlechten automatischen Codegenerator, der mehr Arbeit für alle anderen schafft, sich aber für den Autor lohnt?

Absolut nicht. Es gibt keine Entschuldigung für schlechten Code. Wenn jemand clever sein und die automatische Codegenerierung verwenden möchte, sollte er sich die Zeit nehmen, um sicherzustellen, dass der generierte Code ein guter Code ist. Ansonsten, worum geht es? Es geht nur darum, das Geld in die Knie zu zwingen, und wenn es um die Code-Produktion geht, sollte das Geld beim Entwickler anhalten, der es geschrieben hat.

Wheaties
quelle
16
Ich bin mit Ihrem zweiten Punkt nicht einverstanden. Der generierte Code muss nur gut genug sein, damit er funktioniert und keine Leistung / Sicherheit oder andere Probleme verursacht. Da Sie generierten Code niemals von Hand pflegen sollten, spielt es keine Rolle, ob dies nicht Ihren üblichen Codierungsstandards entspricht.
Hila
4
Das ist in Ordnung für Sie nicht einverstanden zu sein. Wenn Sie sich jedoch die Zeit nehmen, einen Codegenerator zu erstellen, nehmen Sie sich die Zeit, um den generierten Code hübsch zu gestalten. Einmal erzeugt, weiß ich nicht, wer es gemacht hat, wie es gemacht wurde, noch die Absicht, es sei denn, es ist genauso lesbar / wartbar wie alle anderen Teile. Manchmal sind Generatoren nur dazu da, einen Ausgangspunkt zu schaffen, anstatt das vollwertige Endprodukt.
Wheaties
1
Wenn die Codegenerierung Teil Ihres Builds ist (dh bei jedem Build neu generiert wird), ist es weniger sinnvoll, "schönen" Code zu erstellen. Aber wenn Sie den Code einmal generieren und das ist es, dann ist es eine andere Geschichte.
Dean Harding
5
Hila, Sie sollten generierten Code niemals von Hand pflegen, aber wenn der Tag kommt, an dem Sie diesen Code aufgrund neuer / sich ändernder Anforderungen ändern müssen, müssen Sie den Code klar und verständlich haben, damit Sie die notwendigen Änderungen am Generator leicht vornehmen können und dann neu generieren.
Carson63000
6
Der generierte Code muss für die Wartung nicht hübsch genug sein, aber für das Debuggen und für die Validierung verständlich genug.
Huperniketes
23

Von einem Generator generierter Code sollte niemals von Hand gepflegt werden. Wenn es geändert werden muss, müssen der Generator und / oder seine Einstellungen angepasst und erneut ausgeführt werden. In Anbetracht dessen spielt es keine Rolle, ob der resultierende Code unverständlich und undokumentiert ist, solange der Generierungsmechanismus selbst kristallklar ist. (Stellen Sie sicher, dass Sie dokumentieren, dass der Code generiert wurde, wo sich der Generator befindet und wie er funktioniert.)

Analogie: Während der Prozessor meines Computers immer Maschinencode ausführt, muss ich nichts darüber wissen, solange ich weiß, wie ich diesen Maschinencode mit Hochsprache und Compiler erstellen kann. Ich habe gehört, dass GCC manchmal unterdurchschnittlichen Maschinencode erzeugt, aber wen interessiert das, solange es perfekt funktioniert. Datenbankabstraktionsschichten erzeugen SQL für die Arbeit mit der DB-Engine. Aber wen interessiert es, wie SQL aussieht, solange die Abstraktionsschicht klar ist und funktioniert?

Bei richtiger Verwendung können Codegeneratoren definitiv nicht nur Erstellungs-, sondern auch Wartungskosten einsparen.

Joonas Pulakka
quelle
4
Das Problem wird dann, dass nur eine Person das Tool hat, niemand anderes und daher den Code manuell pflegen muss.
Murmelt
Dies ist das A und O. Als Softwareentwickler ist unser Geschäft Code - egal wie wir ihn produzieren.
Steven Evers
12
@ David, wenn nur eine Person das Tool hat, sollten Sie es nicht für ein Projekt verwenden, an dem mehr als eine Person beteiligt ist.
Matt Olenik
2
@Matt, genau. Generatoren sind Teil des Projekts (vergleichbar mit Build-Skripten) und sollten in der Versionskontrolle oder einem ähnlichen zentralen Repository gespeichert werden.
Joonas Pulakka 04.10.10
2
@SnOrfus: Meiner Meinung nach besteht unser Geschäft darin, funktionierende Produkte zu produzieren, die die Menschen nutzen und kaufen möchten. Daher kommt unser Gehalt. Code ist nur ein Medium.
Joonas Pulakka
6

Ein Codegenerator ist eine Art Compiler. Sie machen sich keine Sorgen darüber, wie hübsch die Compiler-Ausgabe ist, Sie arbeiten nur mit dem Quellcode. Es ist oft schwieriger, die Ausgabe von Hand zu ändern, als sie von Grund auf in einer für den Menschen verständlichen Form zu schreiben. Sie können den Codegenerator also nicht ohne viel Arbeit wieder verwenden, da Sie den Code anwenden müssen Gleiche Änderungen an demselben unverständlichen Code genau.

Daher können sie in Ordnung sein, wenn sie Teil des Erstellungsprozesses sind und als solche dokumentiert sind. Die Eingabe in den Generator ist dann der Quellcode, und alles, was er erzeugt, ist ein Zwischenergebnis, das nicht zu verfälschen ist.

Wenn jedoch jemand einen verwendet, um unverständlichen Code zu erstellen, der als Quelle verwendet werden soll, dann erstellt diese Person fehlerhaften Code. Es spielt keine Rolle, ob die Person schlechten Code mechanisch oder von Hand produziert, es ist immer noch schlechter Code, und Sie haben immer noch ein Qualitätsproblem damit.

Aus diesem Grund müssen Sie dies wie alle anderen Entwickler behandeln, die sich abkürzen und fehlerhaften Code schreiben. Ich weiß nicht, wie du das in deinem Laden machst.

David Thornley
quelle
3

Aus den Kommentaren zu anderen Antworten geht hervor, dass Sie eher nach Teamstandards als nach Code-Generatoren selbst fragen.

Ein Tool zur Codegenerierung sollte in das Projekt einbezogen werden und (falls zutreffend) Teil des Erstellungsprozesses sein. Ein Beispiel wäre, dass wir in unserem Team Subsonic 2.2 verwenden, das wir beim Erstellen von Klassen aus den Datenbankobjekten generieren.

Die exe, die dies ausführt, wird im Rahmen des Projekts in SVN eingecheckt, damit ein neues Mitglied des Teams das neue Projekt von svn erhalten und sofort erstellen kann, ohne herausfinden zu müssen, woher all diese Datenbankklassen stammen (in diesem Beispiel wir) Fügen Sie nicht einmal den generierten Code in svn) ein.

Rob Stevenson-Leggett
quelle