Generatori di codice automatici [chiuso]


13

A uno dei miei colleghi piace usare generatori di codice automatici, che creano grandi quantità di codice che è scarsamente documentato e molto difficile da mantenere.

Il costo dell'utilizzo di un generatore di codice vale la seccatura nella manutenzione, per i tempi di creazione ridotti?

Risposte:


10

Riformuliamo che:

Ne vale la pena il costo di un buon generatore di codice automatico?

Sì.

Il costo di un generatore di codice automatico scarso crea più lavoro per tutti gli altri ma ne vale la pena per l'autore?

Assolutamente no. Non ci sono scuse per un codice scadente. Se qualcuno vuole essere intelligente e usare la generazione automatica del codice, dovrebbe prendersi il tempo necessario per assicurarsi che il codice generato sia un buon codice. Altrimenti, che senso ha? Sta solo spingendo il dollaro verso il basso e quando si tratta di produzione di codice, il dollaro dovrebbe fermarsi allo sviluppatore che l'ha scritto.


16
Non sono d'accordo con il tuo secondo punto. Il codice generato deve solo essere abbastanza buono da funzionare e non creare prestazioni / sicurezza o altri problemi. Dal momento che non dovresti mai mantenere manualmente il codice generato, non importa se non è all'altezza dei soliti standard di codifica.
Hila,

4
Va bene per te non essere d'accordo. Tuttavia, se hai intenzione di prendere il tempo per creare un generatore di codice, allora perché non impiegare il tempo per rendere il codice generato piuttosto? Una volta generato, non so chi l'abbia realizzato, come sia stato realizzato, né l'intenzione, a meno che non sia leggibile / mantenibile come tutte le altre parti. A volte i generatori sono lì solo per creare un punto di partenza piuttosto che il prodotto finito a tutti gli effetti.
Wheaties

1
Inoltre, se la generazione del codice fa parte della build (ovvero viene rigenerata ogni build), non ha molto senso produrre un codice "bello". Ma se hai intenzione di generare il codice una volta e basta, allora è una storia diversa.
Dean Harding,

5
Hila, non dovresti mai mantenere il codice generato a mano, ma quando arriva il giorno in cui devi cambiare quel codice a causa di nuovi / mutevoli requisiti, hai bisogno che il codice sia chiaro e comprensibile in modo da poter facilmente apportare le modifiche necessarie al generatore e quindi rigenerare.
Carson63000,

6
Il codice generato non deve essere abbastanza per la manutenzione, ma deve essere abbastanza intelligibile per il debug e per la validazione.
Huperniketes,

23

Il codice generato da un generatore non dovrebbe mai essere gestito a mano. Se è necessario modificarlo, è necessario modificare il generatore e / o le sue impostazioni ed eseguirlo nuovamente. Considerato ciò, non importa se il codice risultante è incomprensibile e non documentato, purché il meccanismo di generazione stesso sia cristallino. (Assicurati di documentare il fatto che il codice viene generato, dove si trova il generatore e come funziona.)

Analogia: mentre il processore del mio computer esegue sempre il codice macchina, non ho bisogno di sapere nulla finché so come creare quel codice macchina usando un linguaggio e un compilatore di alto livello. Ho sentito che a volte GCC produce un codice macchina scadente, ma chi se ne frega, purché funzioni perfettamente. I livelli di astrazione del database producono SQL per funzionare con il motore DB, ma a chi importa che aspetto ha quel SQL, purché il livello di astrazione sia chiaro e funzioni?

Se utilizzati correttamente, i generatori di codice possono sicuramente risparmiare non solo la creazione, ma anche i costi di manutenzione.


4
Il problema diventa quindi, solo una persona ha lo strumento, nessun altro lo fa e quindi deve mantenere manualmente il codice.
Borbotta il

Questo sta passando il dollaro. Come sviluppatori di software, la nostra attività è il codice, indipendentemente da come lo produciamo.
Steven Evers,

12
@David, se solo una persona ha lo strumento, non dovresti usarlo per un progetto che coinvolge più di una persona.
Matt Olenik,

2
@ Matt, esattamente. I generatori fanno parte del progetto (paragonabile agli script di compilazione) e devono essere archiviati nel controllo versione o in un repository centrale simile.
Joonas Pulakka,

2
@SnOrfus: penso che la nostra attività sia quella di produrre prodotti funzionanti che le persone sono disposte a utilizzare e acquistare. Ecco da dove viene il nostro stipendio. Il codice è solo un mezzo.
Joonas Pulakka,

6

Un generatore di codice è un tipo di compilatore. Non ti preoccupare di quanto sia bello l'output del compilatore, lavori solo con il codice sorgente. Usarlo e quindi modificare manualmente l'output è spesso più difficile che scriverlo da zero in una forma comprensibile dagli umani, e significa che non è possibile utilizzare di nuovo il generatore di codice senza molto lavoro, poiché è necessario applicare il stesse modifiche con precisione allo stesso codice incomprensibile.

Pertanto, possono andare bene se fanno parte del processo di compilazione e sono documentati come tali. L'input per il generatore è quindi il codice sorgente, e qualunque cosa produca sono risultati intermedi, da non confondere.

Tuttavia, se qualcuno ne sta usando uno per produrre un codice incomprensibile che dovrebbe essere usato come sorgente, allora quella persona sta producendo un codice errato. Non importa se la persona sta producendo cattivo codice meccanicamente o manualmente, è comunque un cattivo codice e hai ancora un problema di qualità con esso.

Pertanto, è necessario considerare questo come qualsiasi altro sviluppatore che taglia gli angoli e scrive codice errato. Non so come lo gestisci nel tuo negozio.


3

Dai commenti su altre risposte sembra che tu stia chiedendo degli standard di squadra piuttosto che i generatori di codice stessi.

Uno strumento di generazione del codice dovrebbe essere incluso nel progetto e dovrebbe (ove appropriato) far parte del processo di compilazione. Un esempio potrebbe essere il nostro team che utilizziamo Subsonic 2.2 che abbiamo generato classi dagli oggetti del database durante la compilazione.

L'exe che lo fa viene registrato in SVN come parte del progetto in modo che un nuovo membro del team possa ottenere il nuovo progetto da svn e costruirlo immediatamente senza dover capire da dove provengono tutte queste classi di database (in questo esempio abbiamo non includere nemmeno il codice generato in svn).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.