2009-02-10 33 views
24

¿Hay alguna manera de medir la cobertura del código con DUnit? ¿O hay alguna herramienta gratuita que logre eso? ¿Qué usas para eso? ¿Qué código de cobertura usualmente usas?Cobertura del código de medición en Delphi

Jim McKeeth: Gracias por la respuesta detallada. Estoy hablando de pruebas unitarias en el sentido de un enfoque TDD, no solo acerca de las pruebas unitarias después de que ocurre una falla. Estoy interesado en la cobertura del código que puedo lograr con algunas pruebas unitarias preescritas básicas.

+0

Todavía no acepté una de las respuestas, porque quiero alentar a la gente a escribir su opinión sobre pruebas unitarias, qué herramientas usan y qué cobertura ellos tratan de lograr. Entonces, todos, siéntanse libres de comentar;) – jpfollenius

Respuesta

24

que acaba de crear un nuevo proyecto de código abierto en Google Code con una herramienta básica de cobertura de código para Delphi 2010. https://sourceforge.net/projects/delphicodecoverage/

En este momento se puede medir la cobertura de línea, pero tengo la intención de añadir la cobertura de la clase y el método también .

Genera informes html con un resumen y una fuente marcada que le muestra qué líneas están cubiertas (verde), cuáles no (rojas) y el resto de las líneas que no tienen ningún código generado para ellas.

Actualización: A partir de la versión 0.3 de Delphi Code Coverage puede generar informes XML compatibles con el plugin de Hudson EMMA para mostrar tendencias de cobertura de código dentro de Hudson.

Actualización: Versión 0.5 trae correcciones de errores, el aumento de capacidad de configuración y limpiado informes

Actualización: Versión 1.0 trae soporte para la salida de Emma, ​​la cobertura de clases y métodos y la cobertura de DLL y BPLS

+0

Herramienta muy simple y eficiente. ¡Thx para compartir! – TridenT

+0

Solo una o dos palabras de apoyo para Christer, esta herramienta ya es útil y llega a ser REALMENTE útil. – Mmarquee

+3

He creado un pequeño asistente para ayudar con la línea de comandos de cobertura de código delphi. Ver http://code.google.com/p/delphi-code-coverage-wizard/ – TridenT

7

¿Se está refiriendo a la cobertura del código de pruebas unitarias o código obsoleto? En general, creo que solo el código comprobable que tiene un fallo debe ser cubierto con una prueba unitaria (sí, me doy cuenta de que puede estar comenzando una guerra santa, pero ahí es donde estoy). Entonces ese sería un porcentaje bastante bajo.

Ahora el código obsoleto por otro lado es una historia diferente. El código añejo es código que no se usa. Lo más probable es que no necesites una herramienta para decirte esto por una gran cantidad de tu código, solo busca los pequeños puntos azules después de compilarlos en Delphi. Todo lo que no tenga un punto azul está rancio. En general, si el código no se está utilizando, entonces se debe eliminar. Entonces eso sería una cobertura de código del 100%.

Existen otros escenarios para el código obsoleto, como si tiene un código especial para manejar si la fecha llega a ser el 31 de febrero. El compilador no sabe que no puede suceder, por lo que lo compila y le da un punto azul. Ahora puedes escribir una prueba unitaria para eso, y probarla y podría funcionar, pero luego desperdiciaste tu tiempo por segunda vez (primero para escribir el código, segundo para probarlo).

Existen herramientas para rastrear qué rutas de código se utilizan cuando se ejecuta el programa, pero eso es solo confiable ya que no todas las rutas de código se usarán todo el tiempo. Al igual que el código especial que tiene que manejar año bisiesto, solo se ejecutará cada cuatro años. Entonces, si lo sacas, tu programa se romperá cada cuatro años.

Supongo que no respondí realmente a su pregunta sobre DUnit y Cobertura de código, pero creo que es posible que le haya dejado más preguntas con las que comenzó. ¿Qué tipo de cobertura de código estás buscando?

ACTUALIZACIÓN: Si está tomando un enfoque TDD, entonces no se escribe ningún código hasta que escriba una prueba, por lo que por naturaleza tiene 100 pruebas de cobertura. Por supuesto que el hecho de que cada método sea ejercido por una prueba no significa que se ejerza toda su gama de comportamientos. SmartInspect proporciona un método realmente fácil para medir qué métodos se llaman junto con el tiempo, etc. Es un poco menos de AQTime, pero no gratis. Con un poco más de trabajo de su parte puede agregar instrumentos para medir cada ruta de código (ramas de instrucciones "if", etc.) Por supuesto, también puede agregar su propio registro a sus métodos para lograr un informe de cobertura, y eso es gratis (bueno, espera por tu tiempo, que probablemente valga más que las herramientas). Si usa JEDI Debug, también puede obtener una pila de llamadas.

TDD realmente no se puede aplicar fácilmente de forma retroactiva al código existente sin una gran cantidad de refactorización. Aunque los nuevos IDE de Delphi tienen la capacidad de generar comprobantes de prueba unitarios para cada método público, que luego le ofrece una cobertura del 100% de sus métodos públicos. Lo que coloque en esos talones determina qué tan efectiva es esa cobertura.

+0

Gracias. Edité la pregunta para que quede más claro a qué me refiero. – jpfollenius

+0

He añadido algo más para cubrir TDD. –

+0

"... pero eso solo es confiable ... tu programa se romperá cada cuatro años". Es decir, ¿las pruebas unitarias de código que (actualmente) no tienen fallas pueden ayudar a evitar que se elimine el código cuando la cobertura del código se ejecuta solo en años no bisiestos? :) Personalmente, creo que cualquier función relacionada con las fechas debe ejercerse en pruebas unitarias con todo tipo de fechas ivvy pasadas en ellas. Lo mismo se aplica a cualquier función "básica" que se ocupe de "factores ambientales". No desea depender de la configuración/fecha actual de la máquina para sus resultados de prueba/cobertura. –

11

No conozco ninguna herramienta gratuita. AQTime es casi el estándar de facto para perfilar Delphi. No lo he usado, pero una búsqueda rápida encontró Discover for Delphi, que ahora es de código abierto, pero solo cubre el código.

Cualquiera de estas herramientas debería darle una idea de cuánta cobertura de código están obteniendo las pruebas de su unidad.

+0

Discover for Delphi ahora es de código abierto https://sourceforge.net/projects/discoverd/ –

5

Uso Discover for Delphi y lo hago para pruebas unitarias con DUnit y Pruebas funcionales con TestComplete.

Discover se puede configurar para ejecutarse desde la línea de comandos para la automatización. Como en:

Discover.exe Project.dpr -s -c -m 
+2

Descubre aquí http://sourceforge.net/projects/discoverd/ now. – philnext

2

Discover funciona muy bien para mí. Apenas retarda su aplicación, a diferencia de AQTime. Esto puede no ser un problema para ti de todos modos, por supuesto. Creo que las versiones recientes de AQTime funcionan mejor a este respecto.

1

He estado usando Discover "durante años, trabajé excelentemente hasta e incluyendo BDS2006 (que fue la última versión anterior a XE * de Delphi que usé y sigo usando), pero su estado actual de apertura, no está claro cómo hacer funciona con las versiones XE * de Delphi. A sh Realmente, porque me encantó esta herramienta, rápida y conveniente en casi todos los sentidos. Así que ahora me estoy moviendo a la cobertura del código Delphi ...

Cuestiones relacionadas