Verificacin y Prueba de Programas - PowerPoint PPT Presentation

1 / 24
About This Presentation
Title:

Verificacin y Prueba de Programas

Description:

2. Especificaci n de Problemas] habla sobre precondiciones y postcondiciones, [Cap. 4. Dise o iterativo] habla entre otras cosas sobre invariantes en bucles. ... – PowerPoint PPT presentation

Number of Views:62
Avg rating:3.0/5.0
Slides: 25
Provided by: juanramn
Category:

less

Transcript and Presenter's Notes

Title: Verificacin y Prueba de Programas


1
Verificación y Prueba de Programas
Teoría de la Programación TP
  • Juan Ramón Pérez Pérez

2
Especificació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?

3
Destinatarios 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
4
Especificació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.

5
Formas 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.

6
Ejemplo 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.

7
Imprecisiones 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?

8
Problemas 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.
9
Té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.

10
Precondició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)

11
Especificació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

12
Respuesta 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.

13
Ejercicios 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)

14
Precondiciones 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.

15
Precondiciones 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)

16
Precondiciones 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)

17
Condiciones 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.

18
Verificació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.

19
Condiciones 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?

20
Relació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

21
Definició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

22
Invariante 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.

23
Ejemplo 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.

24
Bibliografí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.
Write a Comment
User Comments (0)
About PowerShow.com