Pregunta

Hemos empezado a utilizar un analizador estático (Coverity) en nuestra base de código. Estábamos estupefactos rápidamente por la enorme cantidad de avisos que recibimos (la de cientos de miles), que se llevará a todo el equipo de unos meses para borrar todos ellos (olvidadizamente imposible).

las opciones que hemos discutido hasta ahora son

1) contratar a un contratista para resolver la advertencia y fijarlos - que inconveniente: que probablemente necesitaremos muy experimenta la gente a hacer todas estas modificaciones, y ningún contratista habrá requerido comprensión del código

.

2) filtrar la advertencia y tratar sólo con los peligrosos - el problema aquí es que nuestro análisis estático de salida siempre será desordenada al advertir lo que hace difícil para nosotros para aislar los problemas. También el filtrado de la advertencia es también un esfuerzo importante.

De cualquier manera, con lo que nuestro código a un estado en el analizador estático puede ser una herramienta útil para nosotros parece una tarea monumental.

Entonces, ¿cómo es posible trabajar con el analizador estático sin braining actuales esfuerzos de desarrollo en un soporte completo todavía?

¿Fue útil?

Solución

Lo primero que hay que hacer es ajustar los diablos de la configuración de análisis; Coverity apoyo probablemente le dejó con una configuración bastante genérico.

  • Triage una muestra representativa de los defectos, y si no parece un corrector estar produciendo mucho más que el ruido de la señal, lo apaga por ahora. (La mayoría de las damas de Coverity son buenos, pero nadie es perfecto, y parece que usted tiene que hacer un poco de priorización implacable.)
    • A la larga, a su vez algunas de esas damas de nuevo, pero los marcan en sus informes como de baja prioridad. (Esto es más difícil de lo que debería ser, he argumentado desde hace tiempo que Coverity tiene que leer un par de artículos sobre la clasificación de defectos por alguien llamado Dawson Engler: -).
    • En el más largo plazo, incluso, tratar las fichas que están desactivados por defecto; algunos de ellos se encuentran errores impresionantes. Y analizan las advertencias son sorprendentemente útil, aunque sí es necesario para apagar algunos falsos.
  • Sea cínicamente realista acerca de qué parte de su base de código que está en realidad va a arreglar pronto. Utilizar componentes para saltar análisis sobre el código que no va a reparar defectos en, al menos por ahora. (Por ejemplo, en teoría, si el producto incluye código de terceros, usted es responsable de su calidad y debe parchear errores en ella. En la práctica, este tipo de errores rara vez se arreglen. Y si se trata de código de terceros madura, la falsa tasa positiva será alto.)
    • Configuración de componentes y la exclusión es complicado, pero una vez que se ha hecho, trabajan bien una de mis expresiones regulares de preanálisis negativos tenido más de un centenar de disyunciones.
    • Los componentes también ayuda con la asignación de la responsabilidad individual de los defectos, que he encontrado para ser crucial para conseguir solucionar los posibles problemas.
  • Configurar un informe sólo para nuevos defectos, y tienen la gente ve esa URL. Nuevos defectos están en código activo, y es más fácil para empezar con una política de no nuevas advertencias.

Permítanme terminar con un par de negaciones:

  • Es posible que desee volver a hacer esta pregunta en el foro de soporte Coverity ( http://forums.coverity.com / ), lo cual no es muy activo, pero en el que no tenemos que preocuparnos por violar la NDA. Tengo una lista de los inspectores no he encontrado digno de habilitación.
  • hago esto para vivir, y tal vez usted quiera contratarnos ( http://codeintegritysolutions.com/ ); Le voy a dar una charla sobre este tema en Stanford hoy. La contratación de un consultor para hacer la puesta a punto tiene mucho sentido; tener a alguien fuera de la empresa que realiza el triaje es más complicado. Tener un extraño hacer las correcciones es más difícil todavía; aprender de sus errores es aún más importante que la fijación de ellos.

Otros consejos

Un día a la semana: Activar el análisis; recoger los 100 advertencias más molestos; arreglalos; gire análisis fuera. En resumen: no se preocupe; el código funciona como está (¿no?); trabajar a través de las advertencias en trozos pequeños.

Si usted encuentra que los mismos tipos de advertencias siguen reapareciendo (malas prácticas de codificación), educar a su equipo para evitarlos en el futuro.

Lo hice con un antiguo código base: me gustaría conseguir en temprano en la mañana (antes de que el resto del equipo), subir el nivel de advertencia / análisis sobre el compilador, arreglar algunas advertencias y luego otra vez de nuevo a los valores por defecto.

  1. En el código heredado. Dar prioridad a estos insectos leagcy y salir un plan para lidiar con ellos. Equilibrar la corrección de errores y el desarrollo de funciones nuevas. Nueva función es siempre más importante.
  2. Para el nuevo código. Que sea parte de su proceso de integración:. Antes de registrarse en el nuevo código, asegúrese de que están libres de Coverity

Para su opción contratista, es posible recorrer un camino más moderado una tenerlos solamente solucionar los problemas que son claras, local y no necesitan una comprensión completa de su código. Supongo que un alto número de los golpes de Coverity son cosas como posibles desreferencias puntero nulo o posibles escrituras más allá del final de un búfer que puede ser fijo con controles simples que son completamente local para el código en cuestión y no necesitan de la comprensión de la cuadro grande.

Voy a admitir - que he hecho trabajo como este antes de utilizar el PREfast / prefijo o cualquiera que sea la herramienta se llama desde Microsoft, y un montón de que era una especie de cambios mecánica. Bien adaptado a un contratista o tal vez incluso un interno. Sin embargo, habrá cosas que necesita más análisis -. Sólo asegúrese de que está claro que el contratista (s) que no deben tratar de llegar a profundizar en las cosas

Y ser amable con ellos -. Que es un trabajo esclavo, por lo que hacer cualquier otra cosa que pueda agradable

Las personas Coverity nos dijeron que 'ignorar' todas las advertencias de la primera vez que lo utilice. Luego, en la siguiente acumulación diferencial, que tendrá incrementalmente nuevas advertencias: que se debe solucionar. Luego, después de utilizar la herramienta durante unos meses y que se sienta cómodo con él que volver atrás y empezar la fijación de las antiguas advertencias.

Trate otros analizadores estáticos. Yo solía trabajar con la prueba Parasoft C ++ y tenía una forma conveniente para filtrar las advertencias de acuerdo con sus niveles de gravedad.

¿Quiere decir que usted tiene problemas con la personalización a sus necesidades?
Como

"" Análisis personalizable

Coverity Análisis estático proporciona la capacidad de ajustar con precisión los análisis mediante la modificación o bien el número de damas desplegado, o los ajustes específicos a un corrector individuales, tales como el umbral para desreferencias puntero nulo. La capacidad de configurar Coverity para un bloque de código en particular, o la aplicación, permite a los desarrolladores para seleccionar el nivel de rendimiento más adecuado para su aplicación, y conduce a resultados más precisos y fiables. El kit de desarrollo de software de Coverity le permite detectar tipos de defectos únicos en C y C ++ código mediante la creación de las fichas personalizadas. Esto se suma a la creación de las fichas personalizadas para encontrar concurrencia, manejo de excepciones, y otras cuestiones fundamentales. ""
http://www.coverity.com/products/static-analysis.html

configuración típica de análisis fuera de la caja para Coverity tenderá a dar entre uno y tres defectos por mil líneas de código. Si usted tiene cientos de miles de defectos, y tiene significativamente menos de 100 millones de líneas de código, puedo garantizar que la configuración de análisis es incorrecto o sub-óptimo para su organización.

Además de la propia configuración del análisis de puesta a punto, puede dar prioridad al impacto - el "alto", "medio" y mapeo "baja" por defecto debería ser lo suficientemente bueno para que pueda empezar a que tengas una idea de lo que subcategorías tienden a ser más perjudicial para su aplicación.

En tercer lugar, si su código base es grande (y cuya no está) subdividirlo en componentes para que cada equipo o grupo de desarrolladores pueden echar un vistazo solamente en el código mantienen directamente - esto permite que ambas partes más manejables de trabajo para manejar, y también le permite priorizar el componente (defectos en el código del servidor son más críticos que los defectos en el código de cliente, o código de prueba, o código de terceros, etc.).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top