2011-06-11 13 views
8

Por lo tanto, no estoy seguro de cuáles son los pros y los contras de la cobertura du-path (o, por ejemplo, cualquier criterio de cobertura de flujo de datos) versus los criterios de predicado o los criterios de rama/nodo.¿Cuál es la razón detrás de la elección de tipos específicos de criterios de cobertura cuando se mira un algoritmo?

Veo que, en ciertos casos, hay claras ventajas de un tipo de cobertura para el otro. Por ejemplo, si una gran parte de mi algoritmo consiste en algo parecido al siguiente ejemplo

void m(); 
void n(); 

void method(boolean b) { 
    if (b) { 
     m(); 
    } else { 
     n(); 
    } 
} 

es evidente que el uso de cualquier tipo de criterios de cobertura de flujo de datos permite a un montón de lógica no probado (que es algo que nos gustaría para evitar). Usando para el caso dado, un criterio predicado/cláusula sería mucho mejor.

Ahora, lo que me gustaría saber es para el caso general, ¿cuáles son las cosas que busca en un algoritmo para decidir qué tipo de criterios de cobertura que siguen, entre

  • Gráfico
  • flujo de datos
  • lógica
  • entrada
  • sintaxis

tipos de criterios de cobertura (básicamente, los que se encuentran en Introduction to Software Testing). Es decir, básicamente busco la heurística general a seguir, para el caso general.

Gracias

Respuesta

3

Es cierto, yo no he hecho mucha investigación en esta área y no estoy necesariamente te siguen por completo (sobre todo debido a mi falta de experiencia en este tema). Pero espero que esto no esté muy lejos de la base.

Mi comprensión de Cobertura de código siempre ha sido que desea cubrir todas las rutas de ejecución posibles. Ahora sé que algunos caminos son mucho más importantes que otros (por ejemplo: el "camino feliz" es mucho más importante que algún camino oscuro para establecer algunas propiedades), pero independientemente del clima o no "cubres" todos los caminos, al menos Quiero ser consciente de su existencia y hacer una elección consciente de qué y qué no cubrir (a través de pruebas unitarias o manualmente).

Puede comenzar observando métodos y escribiendo teselas, pero esto rápidamente no es confiable ya que se garantiza que NO verá todas las posibles rutas de ejecución sin importar el tipo de algoritmo. Incluso los programas muy pequeños producirán fallas que no se tuvieron en cuenta ya que el probador no pensó en "intentarlo" de esa manera.

Lo que realmente necesita es una herramienta de Cobertura de código que le diga qué rutas de ejecución fueron cubiertas por sus pruebas unitarias y cuáles no. En ese punto, puede tomar decisiones lógicas sobre el clima o no cubrir esos casos faltantes (ya que no todos los casos pueden no valer la pena). Sin esa herramienta, creo que pasaría innumerables horas hombre yendo línea por línea y haciendo un seguimiento de qué pruebas cubrían qué ... Incluso si la herramienta cuesta varios cientos de dólares (o incluso varios miles de dólares), creo que Recuperaría rápidamente esos fondos a tiempo.

Así que mi heurística general para usted es utilizar una herramienta de este tipo para rastrear su cobertura de prueba y tomar decisiones para cubrir o no cubrir en función de sus resultados.

Algunas herramientas de cobertura de código (no exhaustivos):

+0

Agradezco su respuesta, pero supongo que, como se dijo, está completamente fuera del alcance de la respuesta esperada (en relación con los diferentes criterios de prueba, como se encuentra en Introducción a las pruebas de software). Pero bueno, parece que nadie sabe cómo responderlo, de todos modos. –

+0

Pensé que lo probaría, ya que nadie más lo intentó ... Es difícil cuando el único experto en el tema es "usted". :) Tal vez podrías tratar de contactar al autor. ¡Buena suerte para encontrar tu respuesta! –

Cuestiones relacionadas