Cuando nos encontremos en un proyecto de desarrollo de software en el que el diseño y la arquitectura se encuentren dirigidos por modelos (model-driven development), nos plantearemos en algún momento la necesidad de llevar a cabo las tareas de su verificación. En este contexto, la verificación la podemos entender como el proceso de determinar si la implementación del modelo y sus datos representa con exactitud la especificación y la descripción conceptual del desarrollador. Además deberemos responder a la siguiente cuestión: ¿El modelo codificado es correcto?

Tendremos a nuestra disposición diferentes técnicas de ingeniería del software que nos ayudarán a evaluar el grado de extensión en el cuál los requisitos para la simulación del modelo y su diseño conceptual se han transformado en un modelo computacional preciso. Habremos de comparar entonces los elementos o artefactos de un modelo en simulación del sistema con la descripción de cuáles deberían ser sus requisitos y capacidades. Y para ello necesitaremos conocer los métodos de verificación de modelos existentes en la actualidad:

  • Métodos informales: cualitativos y subjetivos, se basan en gran medida en el conocimiento de la materia. Tienen la ventaja de que son relativamente sencillos de llevar a cabo y entender. Erróneamente se cree que no se encuentran estructurados, pero de hecho, algunos emplean listas muy detalladas. Son muy efectivos cuando se aplican de manera estructurada y con guías, y suelen ser de bajo coste. Ejemplos: auditorías, inspecciones, revisiones, walkthroughs.

 

  • Métodos estáticos: se basan en características de elementos sin ejecutar simulaciones. El análisis de código de un modelo ejecutable puede tener el soporte de herramientas automatizadas, notaciones manuales o diagramas. En general se emplean para examinar el modelo y su implementación y se obtiene información relativa a la estructura del modelo, técnicas de codificación y prácticas empleadas, flujo de datos y de control. Resultan útiles durante la codificación del modelo pero no son efectivos en las propias simulaciones, dado que se requiere su ejecución. Ejemplos: análisis sintáctico, análisis semántico, análisis estructural, análisis de flujo de datos, chequeo de consistencia.

 

  • Métodos dinámicos: implican lanzar un modelo ejecutable y evaluar los resultados, que son cuantitativos y objetivos. En su forma más sencilla, pueden consistir en el examen de la salida de una ejecución, si bien resulta insuficiente. En su lugar, es más efectivo realizar el examen durante la propia ejecución mediante la inserción de código adicional en el modelo. De esta manera, se capturan los datos y después se analiza el comportamiento dinámico y las salidas del modelo. Como contrapartida, hay que tener cuidado al agregar estas sentencias adicionales, proceso que se conoce como instrumentación de código, porque modifica ligeramente el modelo y puede afectar al rendimiento y los tiempos de ejecución. Ejemplos: caja negra, caja blanca, estrés, ejecución de trazas, regresión.

 

  • Métodos formales: se basan en pruebas matemáticas formales cuantitativas, lógicas y objetivas de la exactitud del modelo que ponen de manifiesto si este satisface sus especificaciones. Llevan a cabo una exploración exhaustiva de todos los posibles comportamientos y son los más eficaces cuando se emplean porque, por ejemplo, en los casos en los que la especificación depende de la semántica del lenguaje natural, el proceso de verificación es menos efectivo y riguroso cuando el sistema va creciendo y se vuelve más complejo. Por otra parte, la aplicación de este tipo de métodos posibilita automatizar el proceso de verificación y mejorar su efectividad, y facilita la comprensión de los requisitos de software. Su utilización se hace prácticamente imprescindible en el caso de sistemas distribuidos, concurrentes y de tiempo real. Ejemplos: aserciones inductivas, chequeo de modelos, métodos deductivos.

No aconsejamos intentar aplicar todas las técnicas en un proyecto pues muchas de ellas se superponen en cobertura, y en la mayoría de los casos, es la experiencia lo que va a determinar qué técnica o combinación de ellas es la mejor para satisfacer las necesidades de dicho proyecto en cuestión.

Para concluir queremos resaltar que emplear estos métodos de verificación proporciona confianza en los resultados obtenidos y ayuda en la toma de decisiones informadas relativas a cuándo utilizar o no un modelo específico en una aplicación concreta. Algo que resultaría imposible de no disponer del respaldo de un proceso de verificación que informe acerca del grado de adecuación del modelo con respecto a su uso intencionado.

Soy Ingeniera de Validación y Verificación Senior en SQS. Además formo parte del departamento formativo de la empresa, revisando, actualizando e impartiendo alguno de los cursos de nuestro portfolio.