Articulo de referencia

Verificación de software

La verificación de software es una disciplina de la ingeniería de software , los lenguajes de programación y la teoría de la computación cuyo objetivo es asegurar que el softwar...

La verificación de software es una disciplina de la ingeniería de software , los lenguajes de programación y la teoría de la computación cuyo objetivo es asegurar que el software cumpla con los requisitos esperados.

Amplio alcance y clasificación

Una definición amplia de verificación la relaciona con las pruebas de software . En ese caso, existen dos enfoques fundamentales para la verificación:

  • Verificación dinámica , también conocida como experimentación , prueba dinámica o simplemente prueba. - Esto es bueno para encontrar fallas ( errores de software ).
  • La verificación estática , también conocida como análisis o prueba estática , es útil para comprobar la corrección de un programa. Sin embargo, puede generar falsos positivos cuando existen uno o más conflictos entre el proceso que realmente realiza el software y lo que la verificación estática supone que hace.

Según el Sistema de Clasificación de Computación de la ACM , los temas de verificación de software aparecen en "Software y su ingeniería", dentro de "Creación de software", mientras que la verificación de programas también aparece en Teoría de la computación , dentro de Semántica y razonamiento, Razonamiento de programas.

Verificación dinámica (Prueba, experimentación)

La verificación dinámica se realiza durante la ejecución del software y comprueba dinámicamente su comportamiento; comúnmente se conoce como la fase de prueba . La verificación es un proceso de revisión. Según el alcance de las pruebas, podemos clasificarlas en tres familias:

  • Prueba en pequeña escala : una prueba que verifica una sola función o clase ( prueba unitaria ).
  • Prueba a gran escala : una prueba que verifica un grupo de clases, como por ejemplo:
    • Prueba de módulo (un solo módulo)
    • Prueba de integración (más de un módulo)
    • Prueba del sistema (sistema completo)
  • Prueba de aceptación : una prueba formal definida para verificar los criterios de aceptación de un software.

El objetivo de la verificación dinámica de software es encontrar los errores introducidos por una actividad (por ejemplo, un software médico para analizar datos bioquímicos) o por la ejecución repetitiva de una o más actividades (como una prueba de estrés para un servidor web, es decir, comprobar si el producto actual de la actividad es tan correcto como lo era al principio de la misma).

Verificación estática (Análisis)

La verificación estática es el proceso de comprobar que el software cumple con los requisitos mediante la inspección del código antes de su ejecución. Por ejemplo:

Verificación mediante análisis: Este método se aplica a la verificación mediante investigación, cálculos matemáticos, evaluación lógica y cálculos utilizando métodos clásicos de libros de texto o métodos informáticos de uso general aceptados. El análisis incluye el muestreo y la correlación de datos medidos y resultados de pruebas observados con valores esperados calculados para establecer la conformidad con los requisitos.

Alcance limitado

En una definición más estricta, la verificación equivale únicamente a las pruebas estáticas y se aplica a los artefactos. Por otro lado, la validación (del producto de software completo) equivale a las pruebas dinámicas y se aplica al producto de software en ejecución (no a sus artefactos, excepto los requisitos). Cabe destacar que la validación de requisitos puede realizarse de forma estática y dinámica (véase validación de artefactos ).

Comparación con la validación

La verificación de software a menudo se confunde con la validación de software. La diferencia entre verificación y validación es:

  • La verificación del software plantea la pregunta: "¿Estamos construyendo el producto correctamente?"; es decir, ¿el software se ajusta a sus especificaciones? (Como una casa se ajusta a sus planos).
  • La validación de software plantea la pregunta: "¿Estamos creando el producto adecuado?"; es decir, ¿el software satisface las necesidades reales del usuario? (Como una casa se adapta a las necesidades y deseos de su propietario).

Véase también

Referencias

  • IEEE : SWEBOK: Guía del Cuerpo de Conocimientos de Ingeniería de Software
  • Carlo Ghezzi , Mehdi Jazayeri , Dino Mandrioli : Fundamentos de ingeniería de software , Prentice Hall, ISBN 0-13-099183-X
  • Alan L. Breitler : Un procedimiento de verificación para software derivado de redes neuronales artificiales , Revista de la Asociación Internacional de Pruebas y Evaluación, enero de 2004, vol. 25, n.° 4.
  • Vijay D'Silva, Daniel Kroening , Georg Weissenbacher: Un estudio de técnicas automatizadas para la verificación formal de software . IEEE Trans. on CAD of Integrated Circuits and Systems 27(7): 1165-1178 (2008)