programas programa lenguaje funciones ejemplos completo comandos codigos basicos c++ windows visual-studio-2005 code-coverage dead-code

programa - manual completo de c++ pdf



¿Detección automática de código muerto en la aplicación nativa de C++ en Windows? (3)

Solicite al vinculador que elimine objetos sin referencia (/ OPT: REF). Si utiliza un enlace a nivel de función y una salida de enunciador detallado, la salida del vinculador enumerará todas las funciones que pueda probar que no se utilizan. Esta lista puede estar lejos de ser completa, pero ya tiene las herramientas necesarias.

Fondo

Tengo una aplicación escrita en C ++ nativo en el transcurso de varios años que es alrededor de 60 KLOC. Hay muchas funciones y clases que están muertas (probablemente 10-15% como la siguiente pregunta similar a Unix). Recientemente, comenzamos a realizar pruebas unitarias en todos los códigos nuevos y a aplicarlos al código modificado siempre que sea posible. Sin embargo, yo haría un SWAG de que tenemos menos del 5% de cobertura de prueba en este momento.

Suposiciones / Restricciones

El método y / o las herramientas deben ser compatibles:

  • C ++ nativo (es decir, no gestionado)
  • Windows XP
  • Visual Studio 2005
  • No debe requerir casos de prueba proporcionados por el usuario para la cobertura. (por ejemplo, no puede depender de pruebas unitarias para generar cobertura de código)

Si los métodos soportan más que estos requisitos, entonces genial.

NOTA: Actualmente usamos la edición Professional de Visual Studio 2005, no el Team System. Por lo tanto, usar Team System podría ser una sugerencia válida (no sé, nunca lo he usado), pero espero que no sea la única .

Por qué el uso de pruebas unitarias para la cobertura del código es problemático

Creo que es imposible que una herramienta genérica encuentre todos los muertos (por ejemplo, código inalcanzable) en cualquier aplicación arbitraria con cero falsos positivos (creo que esto sería equivalente al problema de Detención). Sin embargo, también creo que es posible que una herramienta genérica encuentre muchos tipos de código muerto que son altamente probables de estar muertos, como clases o funciones que nunca son referencia en el código por ninguna otra cosa.

Al usar pruebas unitarias para proporcionar esta cobertura, ya no se usa un algoritmo genérico y, por lo tanto, se aumenta tanto el porcentaje de código muerto que se puede detectar como la probabilidad de que los aciertos no sean falsos positivos. Por el contrario, el uso de pruebas unitarias podría generar falsos negativos ya que las pruebas de la unidad podrían ser lo único que ejercita una determinada pieza de código. Idealmente, tendría pruebas de regresión que ejercen todos los métodos, API, controles de usuario, etc. disponibles externamente, que servirían como una medición de referencia del análisis de cobertura de código para descartar que ciertos métodos sean falsos positivos. Lamentablemente, sin embargo, no tengo esta prueba automatizada en este momento.

Sin embargo, dado que tengo una base de códigos tan grande con un porcentaje de cobertura de casos de prueba tan bajo, estoy buscando algo que pueda ayudar sin requerir una gran cantidad de tiempo invertido en la redacción de casos de prueba.

Pregunta

¿Cómo se puede detectar el código muerto de forma automática o semiautomatizada en una aplicación nativa de C ++ en la plataforma Windows con el entorno de desarrollo de Visual Studio 2005?

Ver también

Detección de código inactivo en un proyecto heredado de C / C ++ Quiero decirle al compilador de VC ++ que compile todo el código. Se puede hacer?


Usamos Bullseye , y puedo recomendarlo. No necesita ejecutarse desde un entorno de prueba unitaria, aunque eso es lo que hacemos.


Use una herramienta de cobertura de código contra su conjunto de pruebas de unidad.