Especificación Formal secuencial
Short Description
Descripción: Especificación Formal secuencial...
Description
ESCUELA ACADEMICO PROFESIONAL DE INFORMÁTICA
TEMA: LENGUAJES DE ESPECIFICACIÓN FORMAL BASADA EN MODELOS SECUENCIALES INTEGRANTES: SANTILLAN HUALLAN, DANIEL SALCEDO SALAZAR, JUAN DIEGO SIFUENTES GUZMAN, LUIS ERNESTO VALLEJOS BARDALES, GIAN PIERE
DOCENTE: CRUZ FLORIAN, IRIS
CURSO: ESPECIFICACIÓN FORMAL
TRUJILLO – PERU 2014
1. Introducción En ciencias de la computación, las especificaciones formales son matemáticamente técnicas basadas cuyo propósito es ayudar con la implementación de sistemas y software. Se utilizan para describir un sistema, para analizar su comportamiento, y para ayudar en su diseño mediante la verificación de las propiedades clave de interés rigurosa y eficaz de razonamiento. Estas especificaciones son formales en el sentido de que tienen una sintaxis, su semántica caen dentro de un dominio, y que son capaces de ser utilizados para inferir información útil. En cada uno de los sistemas informáticos pasan década se han vuelto cada vez más potentes y, como resultado, se han vuelto más impactante para la sociedad. Debido a esto, se necesitan mejores técnicas para asistir en el diseño e implementación de software fiable. Disciplinas de ingeniería establecidos utilizan el análisis matemático como fundamento de la creación y validación de diseño de producto. Las especificaciones formales son una de las maneras de lograr esto en la ingeniería del software. Aunque útiles, los métodos formales en realidad no tienen el control como el estándar para la fiabilidad del software como una vez predijo. Otros métodos, como las pruebas son más comúnmente usados para mejorar la calidad del código. Prueba encuentra errores en la aplicación. Lo mejor es encontrar estos lo antes posible, ya que cuanto más largo en un proyecto de un error se encuentra, más costoso que es para arreglar. La idea con las especificaciones formales es reducir al mínimo la creación de dichos errores. Esto se hace mediante la reducción de la ambigüedad de los requisitos del sistema informales. Al crear una especificación formal de los diseñadores se ven obligados a hacer un análisis detallado del sistema al principio del proyecto. Dicho análisis generalmente revelar errores o inconsistencias que existen en los requisitos del sistema informales. Como resultado se reduce la posibilidad de errores sutiles que se introducen y no sea detectada en los sistemas de software complejos. Encontrar y corregir este tipo de errores al principio de la etapa de diseño le ayudará a evitar costosas reparaciones que puedan surgir en el futuro. Pruebas de control de calidad y contribuyen a más de 50% del coste total de desarrollo de algunos proyectos; mediante el uso de las especificaciones formales de prueba determinados procesos pueden ser automatizados que conduce a pruebas de costo-efectiva una mejor y más.
Teniendo en cuenta tal especificación, es posible utilizar técnicas de verificación formal para demostrar que un diseño del sistema es correcta con respecto a su especificación. Esto permite que los diseños del sistema incorrectos que se revisen antes de cualquier inversión importante se han hecho en una implementación real. Otro enfoque es el uso de pasos de refinamiento demostrablemente correctas para transformar una especificación en un diseño, que en última instancia se transforma en una implementación que es correcto por la construcción. Es importante tener en cuenta que una especificación formal no es una aplicación, sino que puede ser utilizado para desarrollar una implementación. Las especificaciones formales describen lo que un sistema debe hacer, no cómo el sistema debe hacerlo. Una buena especificación debe tener algunos de los siguientes atributos: adecuado, internamente coherente, sin ambigüedades, completo, satisfecho, mínimo Una buena especificación tendrá: Constructibilidad capacidad de gestión y capacidad de evolución Usabilidad Transmisibilidad Análisis potente y eficiente Una de las principales razones que hay interés en las especificaciones formales es que proporcionarán una capacidad de realizar pruebas de implementaciones de software. Estas pruebas se pueden usar para validar una especificación, verificar la corrección del diseño, o para demostrar que un programa satisface una especificación. Técnicas de especificación formal han existido en diferentes ámbitos y en diferentes escalas desde hace bastante tiempo. Las implementaciones de las especificaciones formales serán diferentes dependiendo de qué tipo de sistema que están tratando de modelar, la forma en que se aplican y en qué punto del ciclo de vida del software se han introducido. Estos tipos de modelos se pueden clasificar en los siguientes paradigmas de especificación: Especificación basada en la historia: historias de sistemas basados en el comportamiento y afirmaciones se interpretan en el tiempo Especificación basada en Estado: comportamiento basado en los estados del sistema, serie de pasos secuenciales e idiomas como Z, VDM o B se basan en este paradigma.
Especificación basada en Transición: comportamiento basado en las transiciones de un estado a otro del sistema, mejor utilizado con un sistema reactivo e idiomas como Statecharts, PROMELA, STEP-SPL, RSML o SCR dependen de este paradigma. Especificación funcional: especificar un sistema como una estructura de funciones matemáticos, OBJ, ASL, PLUSS, alerce, HOL o PVS se basan en este paradigma. Especificación Operacional: idiomas tempranos como Paisley, GIST, redes de Petri o álgebras de procesos se basan en este paradigma. Además de los paradigmas anteriores, hay maneras de aplicar ciertas heurísticas para ayudar a mejorar la creación de estas especificaciones. En el documento se hace referencia aquí mejor discute heurísticas a utilizar en el diseño de una especificación. Lo hacen mediante la aplicación de un divide y vencerás.
2. VDM un lenguaje de Especificación Historia 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.
Definición 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 VDMSL; 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.
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-thenElsee 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 matemática o mapeo estaría dada por la colección ext rw: → mapeo ASCII sería de la forma colección wr ext:
mientras que en el
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.
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
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 '-'.
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 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.
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 { | y Digitos { . 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. Poseen secuencias similares a la sintaxis de los conjuntos, excepto para el intercambio de "{" con "[". Sin embargo, difieren en su semántica por el hecho de que las secuencias en el orden de los elementos deben ser considerados.
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: { { → – mapeo del dominio X para imagen Y, siendo las instancias del mapeo: { {
|
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 contradominio de una función, utilizando la siguiente sintaxis: , para denotar una función recibe un numero entero y devuelve otro número entero. Ejemplos de instancias (funciones) asociados con este tipo son:
– recibe , y retorna – recibe , y retorna - recibe , y retorna Un patrón es una estructura que se compone de colecciones de identificadores, símbolos y valores. Una entrada está asociado 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
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
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 (nombre, id, cursoconcluido, cursomatriculado) cursoconcluido 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.
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.
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).
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: →
Una función es polimorfa o genérica si posee una estructura capaz de tratar apropiadamente diferentes tipos de parámetros. Como por ejemplo: [
]
→
| → 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 "@".
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 wr-escritura) 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.
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. El método B Definición Es una colección de técnicas matemáticas para la especificación, diseño e implementación de componentes de software. Existen sistemas que están modelados como una colección de Máquinas Abstractas Independientes, cuyo enfoque basado en objetos es usado en todas las fases del desarrollo. B es uno de los pocos métodos de desarrollo de software que cubre completamente el ciclo de vida del software, desde los requerimientos (especificación), a través del diseño (refinamiento) hasta la implementación, generación de código y mantenimiento.
Uso del método B
El método B se puede usar para mantener la alta integridad que puede concentrarse a través del uso de rigurosos métodos de desarrollo matemáticos específicos. Aplicaciones con el método B Se ha aplicado el método-B en varias aplicaciones como sistemas de control de trenes y Smart Cards. Así mismo, en algunos países el uso de sistemas formales es fundamental para algunos sistemas críticos, como la Línea Meteoro (usa Método-B).
Maquinas Abstractas Un Abstract Machine Notation (AMN) es usado por B. Son máquinas que encapsulan estado y operaciones. El estado tiene un conjunto de variables condicionadas por invariantes y las operaciones pueden cambiar de estado, mientras mantienen la invariante y pueden devolver una secuencia de resultados.
Notación
Todos los componentes de B desarrollados tendrán una forma de origen, que es usada para especificar máquinas. La forma de origen tiene una notación ASCII. Por ejemplo, cuenta:CUENTA. Significa que la variable cuenta es un elemento del conjunto CUENTA. Vale resaltar que las variables de máquina en B deben tener al menos 2 caracteres.
Notación de Máquinas Abstractas (AMN) Son usadas para describir Máquinas abstractas. Las AMN le dan a B una apariencia de Lenguaje de Programación aunque el nivel de abstracción no cambia.
Modelo Simple ( Una Alcancía) Para modelar una alcancía se identificarán los atributos y métodos: 1. 2. 3. 4. 5.
Se puede agregar y retirar dinero Se usará la variable alcancía cuyo valor es un número natural. AgregarDinero(monto): Agrega un monto a la alcancía. RetirarDinero(monto): Retira un monto de la alcancía. Dinero
View more...
Comments