Metodo VDM
Short Description
Descripción: metodo de representacion VDM...
Description
Universidad Mayor de San Andres Facultad de Ciencias Puras y Naturales Carrera de Informática
Método VDM INTEGRANTES:
CUSIQUISPE ANCASI JUAN PABLO
6161096 LP
MARTHA ROCIO MAURICIO LLIFUTA
5969412 LP
DOCENTE:
LIC. GERMAN HUANCA TICONA
MATERIA:
ESPECIFICACIONES FORMALES Y VERIFICACION
GESTION II - 2014
1.- Introducción El desarrollo del método VDM se inició en 1970 en el laboratorio de IBM en Viena. Un grupo formado por Heinz Zemanek estaba trabajando en la definición de un diseño del lenguaje formal y en el proyecto de compiladores. Ideas para crear un enfoque de la semántica operacional capaces de definir el conjunto de PL/I, incluyendo las características del lenguaje paralelas fueron construidos. Para ello, se utilizó un idioma de destino llamado lenguaje de definición de Viena (VDL). El enfoque fue muy exitosa, pero se observó que la semántica operacional podría causar complicaciones para el razonamiento formal. Entonces, surgió un nuevo enfoque, llamado semántica denotativa en 1972. Un compilador de PL/I fue diseñado usando ese metalenguaje, llamado Meta-IV, de la que surgió el VDM. A partir de ahí, el VDM se expandió, pero se centró en dos áreas principales. Una de ellas en Lyngby, Dinamarca, con el profesor Dines Bjorner, uno de los precursores de VDM y el otro en Manchester, Inglaterra, con el profesor de Cliff B. Jones. La semántica formal es una de las áreas de estudio de la ciencia de la computación, preocupada en atribuir significado a las construcciones de los lenguajes de programación. Semántica operacional es un enfoque para la semántica formal, donde el significado de una construcción del lenguaje que se especifica por la computación cuando se ejecuta en una máquina hipotética. La semántica operacional está más preocupado sobre cómo se ejecutan los programas que simplemente los resultados de estos cálculos. Semántica denotacional asigna un enfoque de la semántica formal. En este enfoque, los significados son modelados por objetos matemáticos a menudo funciones semánticas de composición definidos, que representan el efecto de funcionamiento de una estructura. El término VDM se utiliza como un término genérico. Varios dialectos surgieron debido a la diversificación de la investigación llevada a cabo en la zona. Diferentes dialectos surgieron principalmente por las diferentes áreas de aplicación que podrían abarcar VDM. Esta diversidad de dialectos, sin embargo, difícil de introducir el método en la industria. En 1986, fue iniciado, entonces, un trabajo para establecer una versión estandarizada de VDM-SL. Este primer estándar fue iniciado por BSI, que estableció un grupo cuya participación fue abierta también para miembros de otras organizaciones. En 1991, la necesidad de normalización también ha sido reconocido por la ISO / IEC JTC1 con la formación de un grupo de trabajo, el SC22 / WG19, para tal tarea. La norma ISO fue lanzado en 1996.
Meta-IV se utiliza para definir las porciones grandes del lenguaje de programación PL / I. Otros lenguajes de programación descritas, o parcialmente descritas utilizan el Meta-IV y VDM-SL y BASIC, FORTRAN, APL, Algol-60, PASCAL y ADA. 2.- Marco Teórico VDM significa "Método de Desarrollo de Viena", es una colección de técnicas para la especificación formal y el desarrollo de sistemas informáticos. Consiste en un lenguaje de especificación llamada VDM-SL; normas para los datos y las operaciones de refinación para establecer vínculos entre las especificaciones que requieren abstracción y especificaciones de diseño detalladas a nivel de código; y un método teórico de la prueba donde los argumentos rigurosos se pueden inferir acerca de las propiedades de los sistemas específicos y la exactitud de las decisiones de diseño. El término "VDM" a menudo se utiliza incorrectamente para referirse sólo a la especificación del lenguaje. Los orígenes de VDM proviene de la investigación en la semántica formal de los lenguajes de programación en el laboratorio de IBM en Viena entre 1960 y 1970, incluyendo las notaciones VDL y Meta-IV. El VDM es su descendiente moderno, que ahora se utiliza más allá del propósito de lenguaje semántico en el desarrollo de sistemas industriales y en la investigación académica. Un gran número de lenguajes de especificación fue derivada o inspirada en el VDM-SL, incluyendo RSL, y VDM ++ VVSL, que soporta el modelado de Orientación a Objetos y sistemas de la competencia. 2.1.- El Lenguaje VDM El VDM es un método formal basado en un marco basado en modelos para la semántica denotativa para apoyar el perfeccionamiento gradual de los modelos abstractos a las implementaciones concretas. El método VDM tiene un lenguaje de especificación formal, VDM-SL, que admite dos formas de abstracción: la abstracción representacional y la abstracción operacional. La abstracción representacional está dada por las facilidades del modelado de datos. Estas características se basan en los seis mecanismos para la estructuración de los datos matemáticos: conjuntos, secuencias, correspondencias, objetos compuestos, los productos cartesianos y las uniones. En un lenguaje de bajo nivel proporciona diversos tipos numéricos, booleanos, entre otras cosas, pueden ser compuestos formados por dominios, llamados dominios, a través de la utilización de mecanismos de estructura de datos. Los dominios forman las clases de objetos que tienen una estructura matemática específica. Los subtipos son soportados por las definiciones del dominio utilizando los invariantes de dominio. La abstracción operacional es soportada por la abstracción funcional y por la abstracción relacional. La primera se refiere al de especificación de las funciones y
la segunda con la realacion a la especificación de las operaciones. Ambos pueden ser especificados implícitamente usando pre y post-condiciones, o explícitamente utilizando construcciones aplicativas para especificar las funciones y construcciones imperativas para especificar operaciones. La diferencia básica es que las operaciones tienen acceso directo a una colección de objetos globales, es decir, el estado de la especificación. El estado es un objeto compuesto construido de componentes etiquetados. Una especificación VDM consiste en una descripción del estado, utilizando predicados de la inicialización y predicados de invariantes, un conjunto de configuraciones de dominio que también utilizan invariantes, constantes, operaciones y funciones. Para la estandarización de VDM-SL se utilizó, como punto de partida, la semántica de dialecto STC / VDM-RL, para llegar a su definición completa. La definición completa del patrón de VDM-SL se puede dividir en diferentes componentes, tales como: (a) sintaxis definida en varios niveles de abstracción; (b) representaciones de símbolos; (c) semántica estática; (d) semántica dinámica; y (e) la sintaxis de mapeo. La sintaxis es el componente principal de VDM-SL y aparece en dos formas, una como reglas de verificación y otra como definiciones de tipo. Como un ejemplo de verificación de reglas considere la sintaxis de una expresión if-then-else. La sintaxis concreta viene dada por:
Ya como definiciones de tipo relación, la sintaxis de la expresión if-then-Elsee dado por:
Tenga en cuenta que la sintaxis es el punto de partida para definir todos los demás aspectos pertinentes de la norma VDM-SL.
En cuanto a la representación de los símbolos, en la actualidad hay dos maneras, una matemática y otra ASCII. Una representación matemática tiene símbolos "elegantes", distinguiendo entre las palabras clave, palabras reservadas, y se parece mucho a la notación matemática. La representación ASCII para hacer el procesamiento automático de especificaciones VDM-SL. Tomemos, por ejemplo, un mapeo sencillo de números naturales en valores booleanos. En representación N mB matemática o mapeo estaría dada por la colección ext rw: mientras que → en el mapeo ASCII sería de la forma colección wr ext: map nat a bool . La semántica estática define las especificaciones que pueden estar sintácticamente correctas, pero eso no necesariamente obedece las reglas del tipo y el alcance del lenguaje. La semántica dinámica se basa en la teoría de conjuntos y la notación matemática. Aquí, los operadores se utilizan para construir un universo de dominio que contiene todos los valores válidos que se pueden expresar en VDM-SL. La sintaxis de mapeo es el componente responsable de la transformación entre las especificaciones VDM-SL y las representaciones de las especificaciones definidas a priori. 2.2.- Estructura del VDM VDM soporta dos tipos de estructuras: (1) la abstracción representacional, en la que los datos pueden ser descritos sin detalle estructural utilizado en la aplicación final y (2) abstracción de funcionamiento, en el que las manipulaciones sobre los objetos abstractos introducidos se describen en la abstracción de representación. Para que se puede utilizar la lógica de predicados de primer orden y declaraciones análogas de lenguajes de programación. Una especificación en VDM se estructura en varios bloques, cada bloque se identifica por una palabra clave: types values functions operations state of
end 2.3.- Abstracción Representacional En la abstracción representacional un modelo de software puede ser construido a partir de dos tipo básicos de lenguaje de especificación y de tipos construidos a través de otras composiciones, previamente definidos. Existen cinco definiciones matemáticas: conjunto, secuencia, mapeo, registro y tupla. Los identificadores en VDM están formados por caracteres alfanuméricos (distingue mayúsculas y minúsculas) y las letras griegas, y sin restricciones a su tamaño. Los comentarios en VDM tienen el prefijo con el carácter '-'. 2.3.- Tipos Simples En VDM los tipos simples pueden ser subdivididos en dos categorías: tipos primitivos definidos en el lenguaje y "constantes" definido por el usuario. Los tipos primitivos son los elementos básicos que pertenecen al propio lenguaje VDM, que se relaciona con las definiciones matemáticas y no su representación en un lenguaje de programación, como por ejemplo: el tipo de número entero Z no está limitado por el número de bits soportados por el lenguaje de implementación. La Tabla 1 presenta las tipos primitivos en VDM, entre ellos el tipo "token" que representa una colección de contabilidad de valores asociados a otros tipos.
Tabla 1: Tipos
Básicos
Sobre estos se definen operadores aritméticos como "+", "-", "*", "/" y los operadores relacionales '', '≤ "," ≥', '=' y '≠'. Los operadores listados en la Tabla 2 también se pueden aplicar a ellos:
Tabla 2: Operaciones con tipos básicos Una constante es un identificador definido por el usuario, cuyo valor es su propio "nombre", es decir, su representación interna es una cadena con el mismo valor que su "nombre", por ejemplo: Naranja es una constante cuyo valor es naranja. 2.4.- Tipos Compuestos Son tipos que se construyen a partir de otros tipos previamente definidos usando para estos constructores de tipos. Estos constructores pueden ser: uniones, conjuntos, secuencias, mapeos, registros, productos cartesianos y tipos de funciones. Uniones combinan dos o más tipos en un único tipo a través del operador "|", por ejemplo: Usuario = Profesor | Estudiante, es decir, una variable de tipo de usuario puede ser un instante dado "profesor" o "estudiante" o también "Mensaje = Éxito | ERROR-de entrada" mensaje en un momento dado puede tener como valor Éxito o ERROR-de entrada, pero nunca los dos valores a la vez. Los conjuntos en VDM deben ser finitos, o conjuntos contablemente infinitos pueden ser especificados. Estos son tratados como conjuntos finitos suficientemente "grandes", por lo que de esta manera se puede simplificar las eventuales pruebas matemáticas. La sintaxis se define de la siguiente manera: "Ind: P-set", donde "Ind" es el identificador asociado a una variable, "P" es el tipo (debe ser definido previamente) y la palabra "-set" indica que este variable tendrá un conjunto de valores. También es posible definir nuevos tipos de manera análoga, por ejemplo: Las personas = Empleados-conjunto, es decir, el tipo "Empleado" es un conjunto de personas. Otra forma de especificar conjuntos es utilizando la notación matemática, por ejemplo: Pares ¿ { n ∈ N|n mod 2=0 } y Digitos
¿ {0, 1,2, 3, 4, 5,6, 7, 8, 9} . Un conjunto vacío esta descrito por
{} . Son
permitidas las operaciones sobre conjuntos con los símbolos tradicionalmente utilizados en matemática para expresar: unión, intersección, diferencia, esta contenido, pertenece, igualdad, entre otros. Además de una operación denotada por la palabra "card", donde "card S" devuelve la cardinalidad del conjunto S. Las secuencias se permiten bajo las operaciones como se muestra en la Tabla 3.
Tabla 3: Operaciones con secuencias Mapeos son como funciones matemáticas (y no funciones en lenguajes de programación). Estas funciones se asocian un conjunto de dominio a otro conjunto de imagen. Como por ejemplo: X ={ 1,2, 3, 4,5 } Y ={1,8, 27, 64,125 } M =X m Y →
– mapeo del dominio X para imagen Y, siendo las
instancias del mapeo: M 1={1↦ 1,2 ↦ 8, 3 ↦ 27, 4 ↦ 64, 5 ↦ 125 } M 2={ n ↦ m|n∈ X ∧m ∈Y ∙ m=n ↑3 } Sobre estos mapeos pueden ser aplicadas las operaciones que se describen en la tabla 4.
Tabla 4: Operaciones con funciones Registros en VDM son análogos a los registros en un lenguaje de programación, y se describen en la siguiente sintaxis:
donde T es el identificador de tipo de registro que está siendo definido y T1, T2, T3, ... Tn representan los tipos de cada componente de T. Estos componentes son llamados campos y son identificables por las variables v1, v2,..., vn. El símbolo “::” es parte de la sintaxis y separa estos campos del identificador del tipo de registro creado. Ejemplo:
La función de "mk-" se utiliza para instanciar valores de un determinado tipo, se pueden asignar como parámetros, valores iniciales o variables que contiene valores que serían asignados a cada campo de acuerdo a su orden de declaración. Por ejemplo: "nl = mk-Book (tit," John ", de 2000)", en la que una instanciamos un nuevo libro con el valor de título igual al valor "tit", el valor del campo autor igual a "John "y el año igual "2000 ". Para acceder a estos valores de la variable "nl", sólo hay que poner el nombre de la variable seguido de "." y el nombre del campo, por ejemplo, para saber el título del libro que acaba de escribir "nl.Titulo". Un producto cartesiano en VDM y una colección ordenada de símbolos agrupados por un único nombre, de acuerdo con la siguiente sintaxis: "T = Tn T1xT2x ...", donde "T" es el nombre del tipo de producto cartesiano y "T1xT2x ... Tn 'son sus componentes. A modo de ejemplo, si Libro = String X String X N y Colección= String X String X N, entonces Libro = Colección. En VDM, "los tipos de funciones" definen el tipo de dominio y el contra-dominio de una función, utilizando la siguiente sintaxis: F=N ↦ N , para denotar una función recibe un numero entero y devuelve otro número entero. Ejemplos de instancias (funciones) asociados con este tipo son: (λn : N ∙ n+2) ∈ F
( λn : N ∙ n2 )∈ F
– recibe – recibe
n , y retorna n+2 n , y retorna n2
( λn : N ∙ n mod 2)∈ F - recibe n , y retorna n mod 2 Un patrón es una estructura que se compone de colecciones de identificadores, símbolos y valores.
Una entrada está asociada a un patrón, si se tiene un conjunto de valores por defecto asociados al patrón, de acuerdo a los ejemplos de la Tabla 5.
Tabla 5: Ejemplos de patrones 2.5.- Estados En VDM un "estado", consiste es una especificación de un determinado problema, incluyendo la representación de objetos de dominio y las operaciones que se pueden realizar con el mismo. La sintaxis es simple: al principio del estado se coloca la siguiente secuencia el "state of", y al final del bloque la palabra "end". En la Figura 1, se da un ejemplo simplificado, ya que no incluye operaciones. En este ejemplo se declaran tres objetos de dominio relacionados a un estado llamado "departamento", siendo estos: (1) los cursos que el departamento tiene (tipo: conjunto de cursos), (2) los estudiantes que están relacionadas con este departamento (tipo: conjunto estudiantes) y (3) profesores asociados al departamento (tipo: conjunto de profesores).
Figura 1: Ejemplo de estado 2.6.- Invariantes
Son las propiedades que cada entidad (objeto) debe preservar, análogas a las "restricciones" en la base de datos. Se expresan a través de notaciones matemáticas que describen las restricciones sobre los valores para los diferentes objetos del dominio, estas restricciones deben ser obedecidas al final de cada operación. Ellos pueden hacer referencia a un determinado objeto, en este caso se llaman "invariantes de tipo" a los varios objetos contenidos en el mismo estado, clasificándolos como "invariante de estados". Un ejemplo de invariante de tipo. inv
mk-Student
cursoconcluido
(nombre,
id,
cursoconcluido,
cursomatriculado)
△
∧ cursomatriculado = {}
donde inv una palabra clave que debe preceder a cualquier declaración invariante, mk- es una función que se utiliza para crear instancias de un registro, "Δ" es el símbolo utilizado para creación de instancias separadas del registro de la expresión que describe la invariable y "cursomatriculado cursoconcluido = {} "expresión que significa la siguiente restricción: la intersección de los cursos realizados por un estudiante con los cursos se matriculó debe estar vacío. Es decir, al final de cada operación se debe mantener este invariante, asegurando que un estudiante hace el mismo curso dos veces. Los invariantes de estado puede ser construidos de manera similar. 2.7.- Abstracción operacional La abstracción representacional describe los objetos en el dominio del software modelado, el comportamiento de este modelo es capturada a través de la abstracción operacional. Este comportamiento se describe por funciones y operaciones declaradas en los "estados" del sistema, de acuerdo con el concepto del estado previamente presentado. La principal diferencia entre las operaciones y funciones, es que estos últimos no acceden a las variables globales, mientras que las operaciones, además de acceder a las variables globales también pueden cambiar sus valores. 2.7.1.- El comando Let Además de las funciones y operaciones se pueden usar las expresiones "complejas" para describir el comportamiento del sistema. Cuando estas expresiones son utilizadas en varias ocasiones durante la especificación, se torna interesante asociar un identificador. De cierta forma es posible hacer una analogía entre las expresiones y “macros” disponibles en los lenguajes de programación, como por ejemplo “C”. Para asociar los identificadores de las expresiones que utilizamos el comando letque de acuerdo la siguiente sintaxis: let in . Vemos un ejemplo:
let estudiante : Estudiante = mk-Estudiante (“Rodrigo”, “1234”,{}. IngInfor) in valida-estudiante (estudiante). 2.7.2.- Definición de funciones Funciones en VDM pueden ser de cuatro tipos: (1) funciones implícitas, (2) las funciones explícitas, (3) de alto nivel y (4) funciones polimórficas. Las funciones implícitas se caracterizan por propiedades declarativas, y se diferencian de las funciones explicitas principalmente por la sintaxis. La sintaxis de las funciones implícitas es:
donde "func" es el nombre de la función que está siendo declarado ", p1, p2, ..., pn" son los parámetros de entrada, "t1, t2, ..., tn" son los tipos asociados a cada parámetro, "p" es el parámetro de retorno cuyo tipo es "t", "B" es una expresión booleana que indica los "pres" -condiciones que deben cumplirse antes de que la función sea ejecutada y "B '' son los "post " -condiciones que debe ser satisfechas después de la ejecución de la función, donde "B '' especifica la mayor parte de la semántica de la función. El estilo de especificación de las funciones explícitas posee dos componentes: una declaración de función y su definición, siguiendo asi la sintaxis: Declaracion func: t1xt2x…..xtn t donde “func” es el nombre de la función, “t1xt2….xtn” son los tipos asociados a cada parámetro y “t” el tipo de retorno de la función, y Definicion func(p1, p2,……., pn)
△Ε
pre B donde “func” es el nombre de la función, “p1, p2, …..,pn” son parámetros de entrada, el símbolo △ es un separador, Ε es una expresión de tipo “t” y “B” es una pre-condicion. En VDM se puede definir funciones de “alto nivel” a partir de funciones con niveles de abstracción más bajos. Como por ejemplo:
power : N x N → N power : ( n ) ( x ) 4 n △ x Una función es polimorfa o genérica si posee una estructura capaz de tratar apropiadamente diferentes tipos de parámetros. Como por ejemplo: subsequence [ @ X ] : @ X∗x @ X∗→ B subsequence( small , large)
∃i , j ϵ inds large∨ j>i ⋀ lensmall= j−i+1 ∙ ∃m : (inds samll ) → i … … . j ∙ ∀ k ∈inds samll ∙ small ( k )=large (m ( k ) ) Esta función verifica si la secuencia "small" y la subsecuencia "large" devuelve un valor booleano. Sin embargo, los dos tipos de elementos "small" y "large" no están definidos en la función en sí, es decir, esta función es válida para cualquier tipo de conjunto. Esta funcionalidad está sintácticamente garantizada por el símbolo "@". 2.7.3.- Definición de Operación Las operaciones también pueden ser de dos tipos: (1) operaciones implícitas y (2) las operaciones explícitas. Las operaciones implícitas tienen funciones similares a las funciones implícitas, pero poseen dos cláusulas adicionales: cláusula externa "ext", la cual contiene una lista de todas las variables globales que se accede por la operación y el bloque de error de "err". Formando de este modo la siguiente sintaxis:
donde, "Oper" es el nombre de la operación, los "p’s", "t’s" y los bloques "B" y "B '' tienen el mismo significado que tienen las funciones," ext "es la palabra clave que indica el inicio de la cláusula externa, donde es modo (rd-lectura y wrescritura) con lo cual las variables “g1, g2, ..., gk " son utilizadas, "err" es la palabra clave que indica el inicio del bloque de errores, donde "e1, e2, ..., en" indican los identificadores de cada error "B1, B2, ..., Bn" son expresiones booleanas que indican la ocurrencia de errores y "B'1, B'2, ... b'n "son acciones asociadas con cada error. 2.7.4.- Definición de declaraciones En VDM es posible utilizar las declaraciones existentes en lenguajes de programación como C o Pascal. La Tabla 6 presenta algunas declaraciones válidas seguidas de su definición sintáctica. Estas declaraciones tienen semántica similar a los comandos utilizados en los lenguajes de programación. Generalmente, estas declaraciones son utilizadas para detallar mejor la especificación, cuando está se encuentra en un nivel de abstracción muy cerca del nivel de programación.
Tabla 6: Ejemplos de declaraciones
3.- Conclusiones: Podemos concluir que el método VDM ayuda a la abstracción de pruebas de simulación donde el refinamiento de datos incluye la especificación de maquinas de estado ya que el VDM soporta dos tipos de estructuras: la abstracción representacional, en la que los datos pueden ser descritos sin detalle estructural utilizado en la aplicación final y la abstracción de funcionamiento, en el que las manipulaciones sobre los objetos abstractos introducidos se describen en la
abstracción de representación para que se puede utilizar la lógica de predicados de primer orden y declaraciones análogas de lenguajes de programación. 4.- Bibliografía
Seven Myths of Formal Methods. Anthony Hall. IEEE Software, September 1990.
Seven More Myths of Formal Methods. Jonathan P. Bowen, Michael G. Hinchey. IEEE Software, July 1995.
Ten Commandments of Formal Methods. Jonathan P. Bowen, Michael G. Hinchey.
Ten Commandments of Formal Methods... Ten Years Later. Jonathan P. Bowen, Michael G. Hinchey. IEEE Computer, January 2006.
Verified Software: theories, tools, experiments. Vision of a Grand Challenge Project. Tony Hoare and Jay Misra, July 2005.
Verified Software: A Grand Challenge. Cliff Jones, Peter O'Hearn, Jim Woodcock. IEEE Computer, April 2006.
First Steps in the Verified Software Grand Challenge. Cliff Jones, Peter O'Hearn, Jim Woodcock. IEEE Computer, April 2006.
A Specifier's Introduction to Formal Methods Jeanette M. Wing. IEEE Computer, 1990.
View more...
Comments