¿La generación de código aumenta la calidad del código?

12

Discutiendo sobre la generación de código, estoy buscando algunos ejemplos de las formas en que aumenta la calidad del código. Para aclarar a qué me refiero con la generación de código, solo puedo hablar sobre un proyecto mío:

Usamos archivos XML para describir las relaciones entre entidades en nuestro esquema de base de datos, por lo que nos ayudan a generar nuestro marco ORM y formularios HTML que se pueden usar para agregar, eliminar y modificar entidades.

En mi opinión, aumenta la calidad del código porque se reduce el error humano. Si algo se implementa incorrectamente, se rompe en el modelo, lo cual es bueno porque el error puede aparecer antes, ya que también se rompe más código generado.

Desde que me pidieron la definición de calidad de código , permítanme aclarar esto. Lo que quise decir es calidad de software .

Calidad del software : No es un atributo sino muchos, por ejemplo. Eficiencia, modificabilidad, legibilidad, corrección, robustez, comprensibilidad, facilidad de uso, portabilidad, etc., que se impactan entre sí.

    
pregunta platzhirsch 25.04.2011 - 21:05

11 respuestas

38

Los generadores de código no pueden generar un código mejor que la persona que escribió el generador.

Mi experiencia con los generadores de código es que están bien siempre que nunca tengas que editar el código generado . Si puedes mantener esa regla, entonces puedes irte. Esto significa que puede volver a generar esa parte del sistema de manera confiable con confianza y velocidad, agregando automáticamente más funciones si es necesario. Supongo que eso podría contar para la calidad.

Una vez escuché un argumento para los generadores de código de que un solo programador puede producir tantas líneas de código por día y con los generadores de código, ¡podrían producir miles de líneas! Obviamente, esa no es la razón por la que estamos utilizando generadores.

    
respondido por el Martin Wickman 25.04.2011 - 21:29
18

Yo diría lo contrario : suponiendo que esté escribiendo aplicaciones interesantes, la generación de código disminuye la calidad del código. La naturaleza de la generación de código recompensa a los entramados sobreexplotados, exagerados, que se vuelven muy difíciles de manejar sin depender continuamente de la herramienta de generación de código para generar continuamente conjuntos de código más grandes, más complejos y más feos. Si bien puede ser una buena herramienta, realmente no debería ser la herramienta principal en el cuadro.

    
respondido por el Wyatt Barnett 25.04.2011 - 21:15
13

Creo que la generación automatizada de código y la calidad del código son algo ortogonales y no necesariamente se correlacionan.

La generación de código es simplemente una forma de resolver una tarea técnica específica. Si resulta en una mayor calidad de código depende mucho de lo que esté haciendo.

Su situación es un buen ejemplo de generación de código que resulta en una mayor calidad del código a través de una puesta al día de posibles errores.

Puedo darte otro ejemplo cuando la generación automatizada de código disminuye la calidad del código. Está fuera todopoderoso de los formularios web de ASP.NET. Realiza la generación automatizada de código mediante la traducción de una jerarquía de controles de IU en el marcado HTML, que es todo menos estable, predecible y manejable.

Para llegar a una conclusión, la generación automatizada de código puede ayudar a aumentar la calidad del código cuando se usa correctamente.

    
respondido por el user8685 25.04.2011 - 21:13
11

La generación de código no afecta al código calidad , per se, tanto como al código consistencia .

El código generado será consistente entre las instancias de generación. Si el generador está diseñado para emitir un código de buena calidad, entonces el código generado será de una calidad consistentemente buena. Sin embargo, si el generador de código emite código de mala calidad, obtendrás un código constantemente malo.

La generación de código también se puede usar para generar el código más rápido . Más rápido, sin embargo, no significa mejor ... Podría significar que obtienes tu código de mala calidad mucho más rápido.

    
respondido por el Eric King 25.04.2011 - 21:20
6

La generación de código es buena si:

  • el código generado no debe editarse
  • el generador de código le brinda suficiente flexibilidad para hacer lo que necesita hacer
  • el idioma de entrada al generador de código es mejor (es decir, SECO) que lo que de otro modo tendría que escribir
  • el generador de código crea un buen código confiable del cual no tienes que preocuparte, incluso si es Wordy

Cuando este es el caso, el código cuya calidad debe considerar es el código que se ingresa al generador.

Una medida simple de la calidad es, para los cambios típicos en los requisitos, la cantidad de edición manual que tiene que hacer. Cuanto menos, mejor.

    
respondido por el Mike Dunlavey 26.04.2011 - 00:20
4

Aumento de la calidad del código debido a DRY (no se repita)

Las reglas de generación de código se escriben una vez; no están codificados para cada instancia de código generado y, por lo tanto, reducen el potencial de error humano al copiar / pegar el contenido con pequeñas modificaciones.

    
respondido por el earlNameless 25.04.2011 - 23:21
2

Supongo que te refieres a los generadores de código propietarios que se manejan a mano para un uso interno específico, ya que, de lo contrario, cualquier cosa que no sea código de máquina es un generador de código. Pero aquí tienes:

CreoqueesmuydiscutiblequeelgráficodenodosenBlueprintsseamásfácildemantenerymuchomenospropensoaerroresqueelcódigoGLSL/HLSLquegenera(ydelocontrariohabríasidonecesarioescribirloamano).

Tambiénesmuchomásproductivocrearnuevossombreadores,yaqueobtienesunaretroalimentaciónvisualentiemporealdecómoseveelresultadofinalamedidaquecambiaselgráfico.Definitivamente,prefieromantenermilesdesombreadoresrepresentadoscongráficosnodalesdeestamaneraenlugardelcódigoGLSL/HLSL,yenrealidadestoymásfamiliarizadoconlaescrituradeGLSL/HLSLqueconlosBlueprints.Creoqueenrealidadesprácticamenteimposiblecausarunerrormayor,ademásdeunpequeñoproblemavisualqueprobablementedetectaríadeinmediatoporqueel"lenguaje visual" impone restricciones sensibles con un estilo funcional puro que no le permite, por ejemplo, choca un sombreador, al menos AFAIK (no soy un experto en Blueprints).

Ya ni siquiera hay "código" para mantener. Simplemente coloque los nodos dentro de un gráfico y dibuje enlaces entre ellos y, por supuesto, generará un código de sombreado para usted. Quién mantiene estas cosas y dice: " Sabes, mi vida sería mucho más fácil y tendría mucho más tiempo libre si esto solo estuviera escrito en código GLSL en lugar de usar Blueprints. " Probablemente nunca.

Dicho esto, me he topado con mi parte de generadores de código propietarios que hicieron la vida más difícil, haciéndome aprender este lenguaje meta estúpido que tiene beneficios muy limitados, si es que los hay, sobre escribir código en el idioma del código que generó. Para mí, una señal reveladora de la generación de código que es shite es una que hace poco más que reducir una pequeña cantidad de repetitivo y en realidad no reduce, por ejemplo, la posibilidad de errores. Usted sabe que es especialmente malo si realmente introduce nuevas formas de causar errores que el idioma original no tenía. Pero hay casos para la generación de código, como el anterior, donde el aumento de la productividad es tan masivo, lo que hace que las cosas meticulosas que cuestan muchísimo tiempo cuesten unos centavos, que nadie lo use y luego mire hacia atrás.

Para mí, hay un argumento más legítimo para el desarrollo propietario de Blueprints entre el equipo de Epic que muchos lenguajes de programación superfluos para el público en general que apenas aportan nada nuevo a la mesa.

    
respondido por el user204677 12.12.2017 - 19:13
1

Yo diría que, en su caso, podría aumentar la calidad un poco, pero reduce mucho el tiempo de desarrollo. A veces, el código generado es inestable, incómodo o simplemente malo. En esos casos, el código generado puede disminuir la calidad y agregar más tiempo de prueba / corrección / prueba de regresión al proyecto. Y algunas tareas son demasiado complejas para ser generadas fácilmente: el generador se convierte en un sistema completamente separado (posiblemente más grande y más complejo que el proyecto principal) en sí mismo.

Los generadores de código están bien, ¡pero ten cuidado con ellos!

    
respondido por el FrustratedWithFormsDesigner 25.04.2011 - 21:18
1

Solía trabajar en una tienda que dependía mucho de la generación de código. En mi opinión hizo que el código para el proyecto fuera muy uniforme. Y en ese sentido, la calidad estaba bien.

Sin embargo, cuando ya no se te permite escribir código personalizado porque todo tiene que pasar por el generador, creo que pierdes parte de la ventaja de ser un programador.

Así que creo que este es un tema de la espada de doble filo con seguridad. Sí, los generadores son geniales porque reducen los errores y aumentan los estándares de código, sin embargo, también hacen que "algunos" de los programadores sean tontos, porque dependen de los generadores en lugar de tener que ensuciarse las manos.

Sólo mis 2 centavos.

    
respondido por el webdad3 25.04.2011 - 21:21
1

Además de la respuesta de Martin, agregaría que la generación de código SQL es muy buena cuando trabaja registro por registro (seleccione * en la pestaña 1 donde tab1.pkcolumn =: parámetro, actualice la pestaña1 establecida [cualquier número de columnas] donde tab1.pkcolumn =: parámetro, etc). Y su ORM brillará en ese escenario, ya que el SQL que debe generarse es ciertamente repetitivo.

Mis principales preocupaciones son las metaqueries: consultas sobre las propiedades de los objetos que el ORM traduce a SQL usando cualquier algoritmo. Las metaceries muy similares pueden generar SQL que es completamente diferente, y no tienen garantía de que este SQL generado sea performático.

Un lenguaje de metaquería que se traduce a otro idioma (SQL) que se traduce en un plan de consulta para ejecutar efectivamente la recopilación de datos. Y el resultado generado debe ser objetos, por lo que el ORM debe crear una instancia de los objetos afectados, de modo que pueda desencadenar otra lluvia de consultas para completar los atributos de los objetos no traídos por la propia metaquery ...

    
respondido por el Fabricio Araujo 30.03.2012 - 21:33
0

Estoy totalmente de acuerdo con aquellos que dicen que la generación de código está bien siempre y cuando nunca tenga que editar (preferiblemente, nunca tenga que mirar) el código generado.

Si podemos aceptar que el código generado es aproximadamente el mismo número de líneas escritas a mano, y si podemos decir que está libre de errores, entonces el número de líneas que potencialmente podrían contener errores tiene disminuido Ergo, la calidad del código debería haber aumentado.

Adición: por supuesto, otros factores, como el tiempo de ejecución, pueden jugar un papel.

Personalmente, he escrito algunos generadores de código, pero nunca como un enfoque inicial.

Siempre ha sido cuando noté un patrón repetitivo en el código existente, por lo que mi generador toma un código existente cuando agrega un código nuevo, pero similar, y parametriza algunas partes variables del mismo.

Hasta ese punto, mi código generado es casi idéntico al código escrito a mano existente (excepto que tiende a tener una mejor disposición visual y más uniforme, lo que encuentro legible para el sida, si es que alguna vez tiene que ser revisado).

Por cierto, abogo por insertar comentarios de apertura / cierre que indiquen que el código se generó, incluidos los detalles de la herramienta y su mantenedor.

    
respondido por el Mawg 26.03.2015 - 15:39

Lea otras preguntas en las etiquetas