Existen varias normas de codificación aplicadas en las compañías de software que tienen el objetivo de aumentar la confiabilidad, la portabilidad y, lo más importante, la legibilidad del código escrito conjuntamente por diferentes desarrolladores.
Dos ejemplos notables son el MISRA C y el estándar C ++ desarrollado para el proyecto JSF .
Por lo general, están en la siguiente forma, después de especificar cuidadosamente lo que significan las palabras "debe", "deberá", "debería", "podría", etc.
Ejemplo:
Regla 50: Las variables de coma flotante no se evaluarán para determinar la igualdad o desigualdad exactas.
Justificación: Dado que los números de coma flotante están sujetos a errores de redondeo y truncamiento, es posible que no se logre la igualdad exacta, incluso cuando se espera.
Estas normas de codificación imponen restricciones, generalmente en el código que sería legal desde el punto de vista del compilador, pero es peligroso o ilegible y, por lo tanto, "se considera dañino".
¡Ahora abusemos de esto!
Usted es aceptado como miembro de un pequeño comité de estandarización en su empresa, que está diseñado para diseñar los nuevos estándares de codificación que cada desarrollador de la empresa deberá usar. Sin que los demás lo sepan, usted está secretamente al servicio de una organización siniestra y tiene como misión sabotear la empresa. Debe proponer una o más entradas al estándar de codificación que luego obstaculizará a los desarrolladores. Sin embargo, debe tener cuidado de no hacer esto inmediatamente obvio, de lo contrario corre el riesgo de que no sea aceptado en el estándar.
En otras palabras, debe introducir reglas para el estándar de codificación que parezcan legítimas y tengan una buena posibilidad de ser aceptadas por los otros miembros del comité. Después se ponen en marcha los proyectos y un sinnúmero de horas-hombre se invierten en el código, que debe ser capaz de abusar de estas normas (por ejemplo, por un detalle técnico, o por una muyinterpretación literal) para marcar el código normal y de buena calidad como contrario al estándar. Por lo tanto, deben hacer un gran esfuerzo para rediseñarlo, y las reglas los obstaculizarán a partir de este momento, pero como las reglas están activas durante bastante tiempo, el impulso puro mantendrá vivos estos roles, y como hay conflictos significativos de intereses entre los diferentes niveles de gestión, los otros gerentes probablemente mantendrán las reglas vivas (¡serían tontos si admitieran su error!), lo que obstaculizaría la empresa. Mwahahahahaaa!
Tanteo
La respuesta más votada después de aproximadamente 2 semanas desde la primera entrada válida gana. Tengo una idea para una buena respuesta, pero solo la publicaré unos días después, ya que alguien más podría tener la misma idea, y no quiero robarles el placer. Por supuesto, mi propia respuesta no será aceptada por encima de ninguna otra, sin importar el puntaje.
Se alienta a los votantes a calificar las respuestas en función de qué tan bien están ocultas las lagunas y lo frustrantes que serían para los desarrolladores.
Reglas y regulaciones
- La regla o reglas deben verse escritas profesionalmente, como en el ejemplo anterior
- Las reglas deben verse genuinas (por lo que no se aceptan cosas como "todas las variables deben contener al menos un guión bajo, una letra mayúscula, una letra minúscula y dos números" . De hecho, obstaculizarían a los desarrolladores, pero probablemente no serían aceptadas por el comité) y si su mérito no es inmediatamente obvio, debe dar una buena justificación.
- Debería poder encontrar una manera de usar / abusar de sus reglas para sabotear a los desarrolladores más adelante. Puede abusar de cualquier ambigüedad en otras reglas, o puede usar múltiples reglas que son inofensivas por sí mismas, ¡pero diabólicas una vez combinadas!
- Debe publicar una explicación en las etiquetas de spoiler al final de su publicación sobre cómo podría abusar de las reglas
- El lenguaje utilizado no debe ser un lenguaje esotérico. Se debe elegir un lenguaje ampliamente utilizado en proyectos reales, por lo que se prefieren los lenguajes con sintaxis tipo C (en lugar de cosas como Golfscript).
Respuestas:
C / C ++
Si quieres ser aún más malvado, agrega lo siguiente:
Cómo puede ser abusado:
Tome el siguiente programa simple que agregará los primeros 10 elementos de una matriz. Este código no sería conforme a la norma.
fuente
0
es una constante octal? Supongo que es porque comienza con el personaje0
. Fortalecería el argumento de su hipotético pedante.Pitón
Regla 1: Todo el código debe compilarse en bytes utilizando el
-OO
indicador, que optimiza el código de bytes . ¡Queremos un bytecode optimizado para tamaño y eficiencia!Regla 2: Las pruebas deben ejecutarse contra el mismo "artefacto" de código que se pondrá en producción. Nuestros auditores requieren esto.
fuente
help()
REPL, y las pruebas REPL informales aún se están probando.unittest
módulo o, que implementa sus propias afirmaciones sin depender del__debug__
indicador. Doctests silenciosamente no se ejecutará sin embargo. ¡Furtivo!Esto es para un proyecto Node.JS.
Cómo puede ser abusado:
fuente
JavaScript (ECMAScript)
(La sintaxis del extracto de gramática en sí [no la que define] corresponde a la de la especificación ECMAScript. Por supuesto, esto se definiría de manera más rigurosa en otro punto de la especificación hipotética).
El truco
El siguiente programa no es conforme:
fuente
DO#
Por qué
fuente
JAVA / PRIMAVERA
El truco
fuente
Codificación del sitio web
Cómo puede ser abusado:
fuente
Operadores a nivel de bits de JavaScript
Cómo puede ser abusado:
fuente
x = (x<<10) + (x<<8) + (x<<5) + (x<<4) + (x<<3) + (x)
es inferior en todos los sentidos (posiblemente incluso la velocidad)x *= 1337
y que reemplazar la división por un no poder de dos con sumas de cambios de bits es aún peor.JavaScript (ECMAScript)
El truco
fuente