stringtranslate.com

Secuencia de código lineal y salto.

La secuencia y salto de código lineal ( LCSAJ ), en sentido amplio, es un método de análisis de software que se utiliza para identificar unidades estructurales en el código bajo prueba. Su uso principal es el análisis dinámico de software para ayudar a responder la pregunta "¿Cuántas pruebas son suficientes?". [1] El análisis de software dinámico se utiliza para medir la calidad y eficacia de los datos de prueba de software, donde la cuantificación se realiza en términos de unidades estructurales del código bajo prueba. Cuando se utiliza para cuantificar las unidades estructurales ejercidas por un conjunto determinado de datos de prueba, el análisis dinámico también se denomina análisis de cobertura estructural .

En un sentido más estricto, una LCSAJ es una región lineal bien definida del código de un programa. Cuando se usa en este sentido, LCSAJ también se llama JJ-path , que significa ruta de salto a salto.

Historia

El método de análisis LCSAJ fue ideado por el profesor Michael Hennell para realizar evaluaciones de calidad de las bibliotecas matemáticas de las que dependía su investigación en física nuclear en la Universidad de Liverpool . [2] [3] Posteriormente, el profesor Hennell fundó la empresa Liverpool Data Research Associates (LDRA) para comercializar el banco de pruebas de software producido para este trabajo, lo que dio como resultado el producto LDRA Testbed .

Introducido en 1976, el LCSAJ [4] ahora también se conoce como ruta de salto a salto (ruta JJ). [5] También se le ha llamado la contribución de Liverpool a las siglas y chistes tontos. [ cita necesaria ]

Definición y características de LCSAJ como región de código

Un LCSAJ es un fragmento de ruta de código de software que consta de una secuencia de código (una secuencia de código lineal) seguida de un salto de flujo de control y consta de los tres elementos siguientes: [6]

A diferencia de los bloques básicos (máximos) , los LCSAJ pueden superponerse entre sí porque puede ocurrir un salto (fuera) en medio de un LCSAJ, mientras que no está permitido en medio de un bloque básico. En particular, los saltos condicionales generan LCSAJ superpuestos: uno que llega hasta donde la condición se evalúa como falsa y otro que termina en el salto cuando la condición se evalúa como verdadera (el ejemplo que se proporciona más adelante en este artículo ilustra tal ocurrencia). Según una monografía de 1986, los LCSAJ eran normalmente cuatro veces más grandes que los bloques básicos. [7]

La definición formal de una LCSAJ se puede dar en términos de bloques básicos de la siguiente manera: [8]

una secuencia de uno o más bloques básicos numerados consecutivamente, p , ( p +1), ..., q , de una unidad de código, seguida de un salto de flujo de control ya sea fuera del código [unidad] o a un bloque básico numerado r , donde r ≠( q +1), y p =1 o existe un salto de flujo de control para bloquear p desde algún otro bloque en la unidad. (Un bloque básico al que se puede realizar dicho salto de flujo de control se denomina objetivo del salto [LCSAJ].)

Según el libro de texto de Jorgensen de 2013, fuera de la literatura de Gran Bretaña y del ISTQB , la misma noción se llama DD-path . [9] [ dudosodiscutir ]

Relación de efectividad de la prueba

Las métricas de análisis de cobertura se utilizan para medir cuántas pruebas se han realizado. La métrica más básica es la proporción de declaraciones ejecutadas, Test Effectiveness Ratio 1 (TER1): [10]

También se pueden generar métricas de cobertura de nivel superior, en particular: [11]

Estas métricas satisfacen una jerarquía pura, según la cual cuando se ha alcanzado TER3 = 100%, se deduce que también se han alcanzado TER2 = 100% y TER1 = 100%.

Tanto la métrica TER1 como la TER2 estaban en uso a principios de la década de 1970 y la tercera data de finales de la década de 1970. El requisito para lograr TER1 = 100% fue el nivel seleccionado originalmente para el estándar de aviónica DO-178 hasta que fue complementado por el requisito adicional MCDC ( cobertura de decisión/condición modificada ) en 1992. [12] Se han establecido niveles más altos TER3 = 100%. mandato para muchos otros proyectos, incluidos los aeroespaciales, de telefonía y bancarios. [ cita necesaria ] Un problema práctico del uso de TER3 es que muchos LCSAJ nunca se pueden ejecutar debido a las condiciones conflictivas que contienen.

Ejemplo

Considere el siguiente código C:

#incluir <stdlib.h> #incluir <cadena.h> #incluir <matemáticas.h> #definir MAXCOLUMNAS 26#definir MAXROW 20#definir MAXCOUNT 90#definir ITERACIONES 750int principal ( vacío )  { int recuento = 0 , totales [ MAXCOLUMNS ], val = 0 ;        memset ( totales , 0 , MAXCOLUMNS * tamaño de ( int ));      contar = 0 ;   mientras ( cuenta < ITERACIONES )      { val = abs ( rand ()) % MAXCOLUMNAS ;     totales [ val ] += 1 ;   si ( totales [ val ] > MAXCOUNT )      { totales [ val ] = MAXCOUNT ;   } contar ++ ; }  retorno ( 0 ); }

En este ejemplo se puede ver que el bloque básico identificado por un triple LCSAJ puede abarcar un punto de decisión, reflejando las condiciones que deben existir para que se ejecute el LCSAJ. Por ejemplo, LCSAJ 2 para el ejemplo anterior incluye la whiledeclaración donde la condición (count < ITERATIONS)se evalúa como verdadera.

Cada línea de código tiene una 'densidad' LCSAJ asociada; la línea 17, por ejemplo, aparece dentro de 6 LCSAJ únicos, es decir, tiene una densidad LCSAJ de 6. Esto es útil al evaluar la mantenibilidad del código; Si se va a cambiar una línea de código, entonces la densidad es indicativa de cuántos LCSAJ se verán afectados por ese cambio.

Se alcanzaría un nivel de cobertura de TER3 = 100% cuando los datos de prueba utilizados provoquen la ejecución de cada uno de estos LCSAJ al menos una vez.

Referencias

  1. ^ MAHennell, D.Hedley y MRWoodward, "Cuantificación de la eficacia de las pruebas de los programas Algol 68", Actas de la conferencia Strathclyde ALGOL 68 de 1977, págs. 36 a 41, ISSN 0362-1340
  2. ^ MA Hennell, un banco de pruebas experimental para software numérico. {I}. {Fortran} , The Computer Journal 21(4):333--336, @nov, 1978
  3. ^ MA Hennell y D. Hedley, un banco de pruebas experimental para software numérico. {II}. {ALGOL 68} , The Computer Journal 22(1):53--56, @feb, 1979
  4. ^ MA Hennell, MRWoodward y D.Hedley, "Sobre el análisis de programas", Information Processing Letters, 5(5), págs. 136-140, 1976
  5. ^ MR Woodward, MA Hennell, "Sobre la relación entre dos criterios de cobertura de flujo de control: todas las rutas JJ y MCDC", Tecnología de la información y el software 48 (2006) págs.
  6. ^ MAHennell, D.Hedley e IJRiddell, "Evaluación de una clase de herramientas de software", Actas de la séptima conferencia internacional sobre ingeniería de software, marzo de 1984, págs. 266 - 277. ISSN 0270-5257
  7. ^ Martyn A. Ould y Charles Unwin, ed. (1986). Pruebas en Desarrollo de Software . Prensa de la Universidad de Cambridge. pag. 102.ISBN​ 978-0-521-33786-1.
  8. ^ Groenda, Henning (2013). Certificación de especificaciones de rendimiento de componentes de software . KIT de publicaciones científicas. págs. 198-200. ISBN 978-3-7315-0080-3.citando a Yates, DF (2009). "Inclusión, subsunción, rutas JJ y pruebas de rutas estructuradas: una reparación". Pruebas, verificación y confiabilidad de software . 19 (3): 199–213. doi :10.1002/stvr.400.
  9. ^ Paul C. Jorgensen (2013). Pruebas de software: un enfoque artesanal, cuarta edición . Prensa CRC. pag. 136.ISBN 978-1-4665-6068-0.
  10. ^ JRBrown, "Aplicación práctica de herramientas de software automatizadas", Informe TRW No. TRW-SS-72-05, presentado en WESCON, 1972
  11. ^ MRWoodward, D.Hedley y MAHennell, "Experiencia con análisis de rutas y pruebas de programas", IEEE Transactions on Software Engineering, vol. 6, núm. 3, págs. 278 – 286, mayo de 1980
  12. ^ Consideraciones de software en la certificación de equipos y sistemas aerotransportados-RTCA/DO-178B, RTCA Inc., Washington DC, diciembre de 1992