Générateurs de code automatiques [fermé]

13

Un de mes collègues aime utiliser des générateurs de code automatiques, qui créent de grandes quantités de code mal documenté et très difficile à maintenir.

Le coût d'utilisation d'un générateur de code vaut-il la peine d'être entretenu, pour le temps de création réduit?

Marmonne
la source

Réponses:

10

Reformulons cela:

Le coût d'un bon générateur de code automatique en vaut-il la peine?

Oui.

Le coût d'un pauvre générateur de code automatique qui crée plus de travail pour tout le monde mais son auteur en vaut-il la peine?

Absolument pas. Il n'y a aucune excuse pour un mauvais code. Si quelqu'un veut être intelligent et utiliser la génération automatique de code, il doit prendre le temps de s'assurer que le code généré est un bon code. Sinon, à quoi ça sert? Cela ne fait que pousser la balle vers le bas et quand il s'agit de la production de code, la balle devrait s'arrêter au développeur qui l'a écrit.

blés
la source
16
Je ne suis pas d'accord avec votre deuxième point. Le code généré doit seulement être suffisamment bon pour qu'il fonctionne et ne crée pas de performances / sécurité ou d'autres problèmes. Étant donné que vous ne devez jamais conserver le code généré à la main, peu importe s'il n'est pas conforme à vos normes de codage habituelles.
Hila
4
C'est bien pour vous d'être en désaccord. Cependant, si vous allez prendre le temps de créer un générateur de code, alors pourquoi ne pas prendre le temps de rendre le code généré assez? Une fois généré, je ne sais pas qui l'a fait, comment il a été fait, ni l'intention de celui-ci à moins qu'il ne soit aussi lisible / maintenable que toutes les autres parties. Parfois, les générateurs ne sont là que pour créer un point de départ plutôt que le produit fini à part entière.
Wheaties
1
De plus, si la génération du code fait partie de votre build (c'est-à-dire qu'il est re-généré à chaque build), il n'est pas aussi logique de produire du "beau" code. Mais si vous allez générer le code une fois et c'est tout, c'est une autre histoire.
Dean Harding
5
Hila, vous ne devez jamais conserver le code généré à la main, mais le jour où vous devez modifier ce code en raison d'exigences nouvelles / changeantes, vous devez que le code soit clair et compréhensible afin que vous puissiez facilement apporter les modifications nécessaires au générateur. , puis recréer.
Carson63000
6
Le code généré ne doit pas être assez joli pour la maintenance, mais il doit être suffisamment intelligible pour le débogage et pour la validation.
Huperniketes
23

Le code généré par un générateur ne doit jamais être conservé à la main. S'il doit être modifié, le générateur et / ou ses paramètres doivent être modifiés et exécutés à nouveau. Compte tenu de cela, peu importe si le code résultant est incompréhensible et non documenté tant que le mécanisme de génération lui-même est limpide. (Assurez-vous de documenter le fait que le code est généré, et où se trouve le générateur et comment il fonctionne.)

Analogie: alors que le processeur de mon ordinateur exécute toujours du code machine, je n'ai besoin de rien savoir à ce sujet tant que je sais comment créer ce code machine en utilisant un langage et un compilateur de haut niveau. J'ai entendu dire que GCC produit parfois du code machine de qualité inférieure, mais peu importe, tant qu'il fonctionne parfaitement. Les couches d'abstraction de base de données produisent du SQL pour fonctionner avec le moteur de base de données, mais peu importe à quoi ressemble ce SQL, tant que la couche d'abstraction est claire et fonctionne?

Lorsqu'ils sont correctement utilisés, les générateurs de code peuvent certainement économiser non seulement la création, mais également les coûts de maintenance.

Joonas Pulakka
la source
4
Le problème devient alors, une seule personne a l'outil, personne d'autre ne le fait et doit donc maintenir manuellement le code.
Marmonne
C'est passer la balle. En tant que développeurs de logiciels, notre activité est le code, quelle que soit la façon dont nous le produisons.
Steven Evers
12
@David, si une seule personne a l'outil, vous ne devriez pas l'utiliser pour un projet impliquant plus d'une personne.
Matt Olenik
2
@Matt, exactement. Les générateurs font partie du projet (comparables aux scripts de génération) et doivent être stockés dans le contrôle de version ou un référentiel central similaire.
Joonas Pulakka
2
@SnOrfus: Je pense que notre activité consiste à produire des produits fonctionnels que les gens sont prêts à utiliser et à acheter. C'est de là que vient notre salaire. Le code n'est qu'un moyen.
Joonas Pulakka
6

Un générateur de code est un type de compilateur. Vous ne vous inquiétez pas de la beauté de la sortie du compilateur, vous travaillez simplement avec le code source. L'utiliser puis modifier manuellement la sortie est souvent plus difficile que de l'écrire à partir de zéro sous une forme compréhensible par les humains, et signifie que vous ne pouvez pas utiliser à nouveau le générateur de code sans beaucoup de travail, car vous devrez appliquer le mêmes changements au même code incompréhensible avec précision.

Par conséquent, ils peuvent être corrects s'ils font partie du processus de génération et sont documentés comme tels. L'entrée du générateur est alors le code source, et tout ce qu'il produit est des résultats intermédiaires, à ne pas gâcher.

Cependant, si quelqu'un en utilise un pour produire du code incompréhensible censé être utilisé comme source, alors cette personne produit du mauvais code. Peu importe que la personne produise du mauvais code mécaniquement ou à la main, c'est toujours du mauvais code, et vous avez toujours un problème de qualité avec.

Par conséquent, vous devez traiter cela comme tout autre développeur coupant les coins et écrivant du mauvais code. Je ne sais pas comment tu gères ça dans ton magasin.

David Thornley
la source
3

D'après les commentaires sur d'autres réponses, il semble que vous posiez des questions sur les normes d'équipe plutôt que sur les générateurs de code eux-mêmes.

Un outil de génération de code devrait être inclus dans le projet et devrait (le cas échéant) faire partie du processus de construction. Un exemple serait dans notre équipe que nous utilisons Subsonic 2.2 que nous avons généré des classes à partir des objets de base de données lors de la construction.

L'exe qui fait cela est archivé dans SVN dans le cadre du projet afin qu'un nouveau membre de l'équipe puisse obtenir le nouveau projet à partir de svn et le construire immédiatement sans avoir à comprendre d'où viennent toutes ces classes de base de données (dans cet exemple, nous n'inclut même pas le code généré dans svn).

Rob Stevenson-Leggett
la source