Estoy trabajando en una empresa que obtendría un puntaje de 11 en Joel Test, al menos en papel.
En la práctica, sin embargo, nada funciona tan bien como se esperaba, y el proyecto ha estado en DEFCON 1 durante medio año. Ahora, la mayoría de mis compañeros están felices si pueden volver a casa a las 6 p.m., el domingo.
Una de las prácticas aparentemente buenas que me llamó la atención por no funcionar es el uso de herramientas de análisis estático. El proyecto rastrea gcc -Wall warnings y una herramienta "C / C ++" patentada y muy costosa .
Las advertencias de CCG suelen señalar errores reales (si la mayoría de las veces son inofensivos).
Sin embargo, las herramientas propietarias enumeran cosas tales como conversiones implícitas y el tamaño de un literal de cadena. Los moldes implícitos también están en la lista negra de su libro de estilo.
La práctica estándar es presionar a las personas para que callen cada advertencia. Tenga en cuenta que esto excluye las advertencias que son predominantemente falsos positivos, este no es el problema.
El resultado es:
- Las personas agregan conversiones de tipos a cada valor y a cada argumento, ocultando desajustes de tipo problemáticos reales en el proceso.
- Las personas se presentan por uno de los errores, o usan una característica de lenguaje problemática diferente (strlen en lugar de sizeof, strncpy en lugar de strcpy, etc.)
- Las advertencias son silenciadas.
- Los informes de errores comienzan a aparecer.
El punto principal es que el código original funcionaba y estaba escrito por personas que jugaban de manera segura dentro de sus habilidades lingüísticas, mientras que las correcciones no.
Ahora, realmente no creo que esta compañía pueda salvarse. Sin embargo, me gustaría saber si hay una mejor manera, preferiblemente trabajando, de usar las herramientas "pro" o si simplemente debería evitar usarlas por completo en caso de que yo sea quien tome la decisión en el futuro.
Una solución que no asume que todos los programadores son genios que no pueden errar. Porque bueno, si lo son, entonces no hay necesidad de usar las herramientas en primer lugar.