2010-05-11 23 views
8

¿Hay algún SW para generar pruebas unitarias en C y aplicaciones integradas? La razón por la que estoy preguntando es que mi jefe me dijo que escuchó de alguien que "necesitas una herramienta para analizar el código y crear automáticamente el 80% de todos los casos de prueba relevantes, el 20% restante utilizas todo tu tiempo y te enfocas", sino tomaría "demasiado tiempo".Generación de prueba de unidad automática incorporada C

Soy muy escéptico acerca de esta afirmación y no puedo ver claramente qué tipo de pruebas se podrían generar automáticamente y si serían buenas para nada.

Puedo, sin embargo, ver que sería posible generar pruebas de unidad de interfaz automáticamente para la API: s.

Entonces, ¿alguien me puede aclarar sobre este tema?

Respuesta

5

Su jefe tiene el extremo equivocado.

No conozco ninguna herramienta que genere pruebas de unidad para usted.

Lo que él puede confundir es code coverage y unit testing. Mientras están relacionados, de hecho son cuestiones separadas.

La cobertura de código instrumentará su código y, una vez que termine de ejecutarse, le indicará qué cantidad de la fuente se utilizó en la ejecución. Esto es útil cuando se realizan pruebas unitarias, ya que de hecho le mostrará dónde ha realizado la prueba y dónde debe enfocar su trabajo.

Es bastante fácil obtener los primeros dos tercios del código cubierto, pero la disminución de los retornos significa acercarse a una magia 100% requiere mucho tiempo y esfuerzo.

+0

Acabo de mirar Microsoft Pex. Parece generar pruebas de interfaz para el código C#. Tal vez algo similar para C podría ser una gran ventaja? – Henrik

+1

Parece que Pex necesita instrumentar su código para generar los resultados de la prueba. –

1

Google "generador de prueba de unidad" aparece un montón de cosas, pero no sé si son buenas o si se adaptan a su caso.

No es una prueba unitaria, pero puede hacer algunas comprobaciones de código con pelusa o herramientas relacionadas. Veo: http://www.lysator.liu.se/c/ten-commandments.html Creo que una herramienta de código abierto actual es férula http://www.splint.org/

libros de Jon Bentley tienen una buena discusión sobre el papel del código de "andamiaje", incluyendo los andamios de prueba.

0

Usamos CANtata aquí donde trabajo para generar pruebas unitarias/cobertura de código. Es decente, aunque me imagino que es un poco caro.

5

recomiendo API Sanity Checker herramienta:

un generador automático de pruebas unitarias básicas para una compartida de C/C++ biblioteca. Es capaz de generar datos de entrada razonables (en la mayoría, pero desafortunadamente no todos) para parámetros y redactar casos de prueba simples ("cordura" o "superficial") para cada función en la API mediante el análisis de declaraciones en el encabezado archivos.

La calidad de las pruebas generadas permite comprobar la ausencia de errores críticos en casos de uso simple.La herramienta puede construir y ejecutar pruebas generadas y detectar bloqueos (segfaults), abortos, todo tipo de señales emitidas, código de retorno de programa distinto de cero y ejecución de programa.

características únicas:

  • Generación automática de argumentos de entrada y datos de ensayos (incluso para tipos de datos complejos)
  • Modern specialized types en lugar de accesorios y plantillas

ver ejemplos para FreeType2 .

enter image description here

Yo soy autor de este proyecto y que me puede hacer cualquier pregunta sobre el mismo.

+0

Se [avisó] (http://stackoverflow.com/help/promotion) para divulgar su afiliación al hacer referencia a sus propios proyectos en las respuestas de SO. –

+2

@DmitryGrigoryev: Añadido. Gracias. – aponomarenko

2

Antes que nada, ¿qué quiere decir con pruebas unitarias y pruebas de unidades generadas?

Quiere decir generar un marco, un arnés de prueba o quiere decir generar una prueba con datos y comprobaciones de datos o aserciones que realmente llaman a su código. Y, en este último caso, ¿cómo se genera esa prueba?

Más fundamentalmente, ¿por qué estás haciendo pruebas? ¿Está siguiendo un estándar que requiere cierto nivel de prueba, o simplemente 'está' tratando de reducir el riesgo y el costo en las últimas etapas de desarrollo? O tal vez está construyendo sobre un sistema existente y solo quiere asegurarse de no romper ninguna funcionalidad existente.

Una respuesta anterior mencionó Cantata, recientemente hemos lanzado una nueva versión con un componente llamado 'prueba de línea base'. Esto puede ser justo lo que estás buscando. Creará, para el código C, un conjunto de pruebas unitarias, que contienen casos de prueba que tienen una buena posibilidad de ejercitar completamente cada uno de sus archivos fuente. La herramienta logra esto leyendo su fuente y produciendo un conjunto de pruebas que determinan la ejecución en cada ruta con el objetivo de alcanzar su objetivo de cobertura deseado: declaración del 100%, decisión o incluso cobertura de MC/DC. La intención es "basar" su código fuente como parte del desarrollo continuo de un sistema heredado, o para llenar vacíos de cobertura después de pruebas funcionales o quizás del sistema.

Ver la página web Cantata++ para obtener más información (y evaluaciones gratuitas)

0

¿Hay alguna SW para generar pruebas unitarias en C y aplicaciones embebidas?

Sí. Rational Test Realtime de IBM será la mejor opción.

una herramienta para analizar el código y crear un 80% de todos los casos de prueba pertinentes de forma automática

No. No hay ninguna herramienta que puede hacer este trabajo para todo tipo de códigos fuente C.

Pero sí para algunos casos. Por ejemplo, en mi caso, tengo una gran cantidad de códigos fuente C que el cliente debe probar. Pero debido a que cada archivo fuente es bastante similar, entonces hacemos una pequeña herramienta que lee cada archivo y genera un caso de prueba (al lenguaje de scripting de la herramienta Unit Testing Tool) y luego lo ejecuta la herramienta Unit Testing Tool. Y sí, en este caso, ahorra un 80% de esfuerzo.

Así que podría considerar hacer esto, descubrir los códigos fuente similares, y crear su propia herramienta que pueda generar casos de prueba para similares.

Cuestiones relacionadas