Title: Verificacin y Prueba de Programas
1Verificación y Prueba de Programas
Teoría de la Programación TP
2Especificación ? Implementación
- Secuencia que se debe seguir en el desarrollo de
un programa - Especificar
- Implementar
- Especificar ? Contestar a la pregunta Qué hace
el programa?
3Destinatarios de una especificación
Especificación
Implementador del algoritmo, define los
requisitos que cualquier implementación válida
debe satisfacer.
Usuarios del algoritmo, debe recoger todo lo
necesario para un uso correcto del mismo.
Algoritmo
4Especificación Barrera - Interfaz entre
componentes
- La especificación actúa como barrera Interfaz
que permite independizar los razonamientos de
corrección de los distintos componentes de un
programa grande y descomponer la tarea de razonar
en unidades manejables que corresponden a la
estructura modular de un programa. - Especificación ha de ser precisa.
5Formas de especificación
- Dos formas de construir especificaciones
- Especificación en lenguaje natural
- Especificación con una notación formal ? podemos
aplicar el razonamiento formal para garantizar la
corrección de los programas. - Una tercera forma que se está planteando en
nuevos métodos de desarrollo como XP - Especificación mediante casos de prueba.
6Ejemplo de especificación de una función
- Tipo vect vector 1..1000 de entero.
- fun essuma(a vect nentero) dev (bbooleano)
- Una función que, dado un vector a de tipo vect y
un entero n, devuelva un valor booleano que
indique si el valor de alguno de los elementos
a1,, an es igual a la suma de todos los
elementos que le preceden en el vector.
7Imprecisiones especificación en lenguaje natural
- No están del todo claras las obligaciones del
implementador - Si ngt1 y a10, qué ha de devolver la función?
- Tampoco, quedan claras las obligaciones del
usuario - Serían admisibles llamadas a essuma con valores
negativos de n? - y con n0?
- y con ngt1000?
8Problemas que pueden causar las imprecisiones
- El primer lanzamiento del Ariane 5 (vuelo 501)
tuvo lugar el 4 de junio de 1996, desde el Centro
Espacial de la Guayana (Kourou). Pero apenas 40
segundos después de iniciarse la secuencia de
vuelo y a una altitud aproximada de 3.8 km, la
lanzadera sufrió una desviación de su trayectoria
originando graves cargas aerodinámicas que
acabaron por partir la lanzadera, la cual acabó
explosionando. - Tras el riguroso estudio efectuado, la comisión
concluyó que el fallo del Ariane 501 fue causado
por la completa pérdida de guía e información de
orientación 37 segundos después del inicio de la
secuencia de ignición del motor principal. Esta
pérdida de información fue causada por errores de
especificación y diseño en el software del
sistema de referencia inercial.
errores de especificación y diseño en el
software del sistema de referencia inercial.
9Técnica de especificación formal técnica pre/post
- Técnica basada en el uso de la lógica de
predicados. - Considera el algoritmo como una caja negra de la
cual sólo nos es posible observar sus parámetros
de entrada y de salida, - Actúa como una función de estados comienza su
ejecución en un estado inicial válido, descrito
por el valor de los parámetros de entrada y, tras
un cierto tiempo, termina en un estado final en
el que los parámetros de salida contienen los
resultados esperados.
10Precondición / Postcondición
- Si S representa la función a especificar, Q es un
predicado que tiene como variable los parámetros
de entrada de S, y R es un predicado que tiene
como variable los parámetros de entrada y de
salida. - QSR
- Esto se lee Si S comienza su ejecución en un
estado descrito por Q, S termina, y lo hace en un
estado descrito por R - Q ? precondición (obligaciones del usuario)
- R ? postcondición (obligaciones del implementador)
11Especificación formal de es suma
- Q? 0?n ? 1000
- fun essuma(a vect nentero) dev (bbooleano)
- R? b ?i ? 1..n.ai? (j 1 hasta i-1) aj
12Respuesta a las imprecisiones
- Llamadas con n negativo o con ngt1000 son
incorrectas. - Las llamadas con n0 son correctas y, en ese
caso, la función ha de devolver b falso. - Las llamadas con n 1 y a10 han de devolver
b cierto.
13Ejercicios técnica pre/post
- División entera
- fun division (a, b entero) dev (q, r entero)
- Valor máximo de los n primeros elementos de un
vector - Tipo vector array 1..1000 de entero
- fun maximo (a vector n entero) dev (x entero)
- Índice del elemento con valor máximo de los n
primeros elementos de un vector - Tipo vector array 1..1000 de entero
- fun maximo (a vector n entero) dev (j entero)
14Precondiciones con parámetros que cambian (I)
- Modificación de un vector
- Dado un vector a, un entero n, y dos entero x e
y, se trata de sustituir en el subvector a1..n
todas las apariciones del valor x por el valor y. - accion sustituir(aent/sal vect n, x, yentero)
- Primera propuesta de pre / post.
- Q? 0?n?1000
- R? (?i ? 1..n.aix ? aiy)
- Sólo es posible si xy pero no lo establece la
precondición. - O si ?i ailtgtx pero no es lo que queríamos.
15Precondiciones con parámetros que cambian (II)
- Error las variables que aparecen en las
postcondiciones se refieren al estado en la
terminación y necesitamos referirnos también al
valor antes de ejecutar el algoritmo. - Convenio en la precondición damos otro nombre al
parámetro que cambia para poder referirnos a él. - Q? (0?n?1000) ? (acopia)
- accion sustituir(aent/sal vect n, x, yentero)
- R? (?i ? 1..n.copiaix ? aiy)
16Precondiciones con parámetros que cambian (y III)
- Sin embargo, no verificamos que el resto de los
elemento permanecen con el mismo valor. - Especificación definitiva
- Q? (0ltnlt1000) ? (acopia)
- accion sustituir(aent/sal vect n, x, yentero)
- R? (?i ? 1..n.copiaix ? aiy) ?
(copiai?x?aicopiai)
17Condiciones en puntos intermedios de un algoritmo
- La idea de aplicar predicados para establecer
precondiciones y postcondiciones se puede
generalizar. - Podemos aplicar un predicado para describir el
conjunto de estados alcanzados por el algoritmo
en un punto intermedio de su ejecución. - Estos predicados reciben el nombre de asertos.
18Verificación de los bucles
- No es práctico establecer asertos al iniciar y
finalizar un bucle. - Para poder razonar sobre un bucle necesitamos un
predicado especial que llamamos invariante.
19Condiciones inicial y final en un bucle
- i 0 q 0 p 1
- while (iltn)
-
- i i1 q qp p p2
-
- Antes del bucle podemos establecer la siguiente
condición - P0 i0 ? q0 ? p1
- Después del bucle podemos establecer la siguiente
condición - Pn in ? q? ? p?
20Relación entre las variables durante todas las
iteraciones
- Las variables van cambiando de valor pero se
mantienen invariables ciertas relaciones entre
ellas. - Para ver estas relaciones, veamos los valores
para los estados Pi observados justo antes de
evaluar la condición del while. - Estudiando los valores podemos comprobar que la
relación entre las tres variables es - q i2 ? p 2i1 ? i ? 0..n ? Invariante
21Definición de invariante
- El invariante es un predicado que describe todos
los estados por los que atraviesa el cómputo
realizado por un bucle, observados justo antes de
evaluar la condición de terminación. - El invariante se satisface antes de la primera
iteración, después de cada una de ellas y,
después de la última
22Invariante de clase
- Una invariante de clase define el estado de
cualquier instancia de la clase. - Como el estado viene dado por los valores de
atributos de una clase, la invariante estará
expresada como un predicado que relaciona esos
atributos. - Las instancias deben mantener este estado
mientras se realizan las operaciones. - Cada operación de una clase puede asumir que
encontrará que la invariante es cierta a su
entrada y debe dejar a su salida la invariante
como cierta.
23Ejemplo de invariante de clase
- La clase lista ordenada, tendría un predicado que
verificaría que realmente los elementos de la
lista tienen el orden adecuado antes y después
de realizar una operación sobre una instancia de
la clase.
24Bibliografía
- PEÑA MARÍ, Ricardo (1998) Diseño de Programas.
Formalismo y Abstracción. Prentice Hall. - Cap. 2. Especificación de Problemas habla sobre
precondiciones y postcondiciones, Cap. 4. Diseño
iterativo habla entre otras cosas sobre
invariantes en bucles.