Esto se refiere a una discusión en una respuesta y los comentarios de esta pregunta: ¿Qué pasa con la aversión a la documentación en la industria? . La respuesta afirmaba que "el código no puede mentir" y, por lo tanto, debería ser la ubicación de acceso en lugar de la documentación. Varios comentarios señalaron que "el código puede mentir". Hay verdad en ambos lados, al menos en parte debido a lo mal que se maneja la documentación de manera inapropiada.
¿Deberíamos estar atentos al código mentiroso y compararlo con cualquier documentación existente? ¿O suele ser la mejor fuente de lo que necesita hacer? Si es un código ágil, ¿es menos probable que mienta o ese código no puede mentir en absoluto?
documentation
jueves
fuente
fuente
Respuestas:
En palabras simples:
Sí , debes buscar un código mentiroso y hacerlo decir la verdad. Pero no comparándolo con la documentación. Ese sería un método para detectar la documentación que miente.
Hay varias formas en que el código puede mentir, de las cuales mencionaré solo algunas:
Cuanto más corto es, menos miente. Es evidente por sí mismo.
Cuanto menos complicado es el código, más transparente es. Entonces yace menos.
Los trucos de sintaxis arcana yacen mucho. Prefiere algoritmos claros, paso a paso. Mienten menos.
Una buena herramienta de análisis de código estático puede ayudarlo a encontrar el código que miente.
Además, una buena batería de prueba automatizada obliga al código a decir la verdad.
fuente
The shorter and terser the code is, the less it lies. It's self evident.
Apenas diría eso. En mi experiencia, cuanto más corto y terser es el código, más oportunidades tiene para barrer mentiras debajo de la alfombra, generalmente ocultándolos en llamadas de funciones engañosas.p
para una variable que No es un puntero.El código no puede mentir.
Lo que está en el código es lo que su programa está haciendo actualmente, sin importar la documentación, el control de calidad o el cliente. Especialmente si su código ha sido publicado y ha estado en el campo por un tiempo, ese comportamiento esperado no debe ser ignorado.
El código ciertamente puede ser incorrecto . Ciertamente puede ser engañoso en su denominación u organización. Ciertamente puede ser ilegible.
Pero si desea la fuente de la verdad sobre lo que está haciendo su código , no lo que se supone que debe hacer, no lo que fue diseñado para hacer, no lo que pensó que estaba haciendo ... si necesita saber lo que realmente está haciendo, Ve al código.
fuente
Usted hace varias preguntas
¡Por supuesto!
Eso nunca podría doler, aunque como se menciona en otras respuestas, la mayoría de las veces esto lo llevará a encontrar problemas en la documentación , no en el código .
Siempre es la mejor fuente de lo que está haciendo. Sin embargo, la mejor fuente de lo que debería hacer el código puede ser (una combinación de) cosas diferentes, siendo las principales:
Cuál es la "mejor" fuente (o combinación de ellas) depende de su situación.
No estoy seguro de lo que quiere decir con "código ágil", AFAIK "ágil" generalmente se refiere al proceso de codificación. Suponiendo que quiere decir "código creado en un proceso de programación ágil", creo que es seguro decir que todavía puede mentir. La probabilidad de mentir, en comparación con el código creado en, por ejemplo, proyectos de estilo cascada es un asunto subjetivo (personalmente no creo que haya una gran conexión).
Nota al pie de página
Todo lo anterior está bajo el supuesto de que el código puede mentir, y que este es un ejemplo básico (aunque un poco artificial):
Este es solo un ejemplo en el que diría "mentiras de código", @ user61852 tiene algunos otros (código inalcanzable, complejidad del código que no coincide con la complejidad del problema, mala denominación), y creo que hay muchos más. Wikipedia tiene un resumen bastante decente de mentiras , muchas de ellas se pueden encontrar en código.
Tenga en cuenta que si tiene una discusión con alguien, asegúrese de que la otra persona no quiere decir "código no puede mentir" que "el código hace lo que hace". En esencia, la otra persona aquí está definiendo el uso de una definición de "mentira" que es tan limitada que puede declarar la declaración "el código no puede mentir" como un axioma / verdad básica. En este caso, probablemente sea mejor estar de acuerdo con su axioma.
fuente
Puede discutir si la palabra "mentir" es técnicamente apropiada, pero este código implica claramente que x a veces será mayor que 5 y otras no. Si observa el programa completo y descubre que esta función siempre se llama en un solo lugar y que x siempre se establece en un 6 constante, entonces eso es mentira.
Además, el compilador puede haber notado esto, y reemplazado este bloque de código con simplemente
Si no se llama a doADifferentThing en ningún otro lugar de su programa, se puede eliminar por completo del programa.
Si su idioma admite
assert
algún tipo, que está desactivado en las compilaciones de producción, cadaassert
declaración es potencialmente una mentira. Un encasillado es otra afirmación que podría ser una mentira.fuente