• No se han encontrado resultados

Análisis y Diseño de Sistemas

N/A
N/A
Protected

Academic year: 2021

Share "Análisis y Diseño de Sistemas"

Copied!
77
0
0

Texto completo

(1)

Análisis y Diseño de Sistemas

Dpto. Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

RAISE Specificacion Language

1er. CUATRIMESTRE 2011 Telma Delladio

(2)

Agenda

Especificaciones formales: ideas generales

RAISE

RSL: RAISE Specificacion Language

(3)

Especificaciones Formales

Las propuestas de especificaciones formales utilizan distintos tipos de

lenguajes de especificación (SL: specification language)

métodos y herramientas que soportan la tarea

Hay distintas clasificaciones o tipos de lenguajes

de especificación como también distintos tipos de

métodos y herramientas de especificación

(4)

Lenguajes de Especificación

Distintos lenguajes de especificación pueden diferir en algunos aspectos, como por ejemplo

en la forma de “decir” las cosas

en la forma de definir su semántica

en el uso de la noción de variable: especificaciones aplicativas vs imperativas

en la forma de expresar los cambios del sistema:

state-based o action-based

(5)

SL: la forma de “decir” las cosas

Se dividen tradicionalmente en

Orientados a modelos: son más concretos se basan en dominios matemáticos (nros, fcs, cjtos, listas, etc)

Orientados a propiedades: son más

abstractos, se basan en definiciones

axiomáticas

(6)

SL: la forma de definir su semántica

Hay distintos estilos de definir la semántica de un lenguaje:

Semánticas operacionales

Semánticas denotacionales

Semánticas axiomáticas

(7)

SL: la noción de variable

Especificaciones aplicativas

prohiben el uso de variables haciendo las

especificaciones más abstractas y más fáciles de validar y verificar.

Especificaciones imperativas:

se centran en el uso de variables y son más cercanas a las implementaciones

Algunos lenguajes soportan ambas

(8)

SL: la forma de expresar los cambios

State-based

En cada momento el sistema está en un

determinado estado y existen operaciones para inspeccionar y modificar ese estado.

Action-based

Se ve el sistema como un conjunto de

componentes independientes que interactúan

entre sí, y con el entorno. En lugar de especificar

el “estado” del sistema, se explicitan los “cambios

de estado” (a través de acciones) capturando el

(9)

El Lenguaje de especificación solo, no es suficiente

Un lenguaje de especificación nos dice:

cuáles son las clases de expresiones que pueden

escribirse (sintaxis) y cuál es su significado (semántica)

Un lenguaje de especificaión NO nos dice:

cómo construir y validar las especificaciones para cubrir los requerimientos de los usuarios

cómo refinar correctamente una especificaión abstracta en una más concreta (eventualmente en implementación)

cómo verificar si las propiedades de la especificación se mantienen en el desarrollo

Es reponsabilidad del Método de Desarrollo

(10)

Métodos de Desarrollo

Definen la relación de refinamiento

Especificación i Especificación i+1 refinamiento

¿es correcta ?

+ abstracto + concreto

Lo ideal  diferentes componentes del

sistema sean especificados y refinados por

separado, manteniendo las propiedades del

(11)

RAISE

Rigorous Approach to Industrial

Software Engineering

(12)

RAISE

Consiste de :

Un lenguaje de especificación formal

- Raise Specification Language (RSL)

Un método para desarrollo de software

Rigorous Approach to Industrial

Software Engineering

(13)

Método RAISE

Requerimientos de Usuario Especificación 0

Especificación 0 ... ...

... ...

... ...

Especificación n Especificación n

Programa

Pasos de

Pasos de

Desarrollo

Desarrollo

(14)

Especificaciones en RAISE

Las especificaciones especificaciones en RAISE se hacen usando RSL RSL:

el lenguaje de especificación de RAISE

Hoy veremos la definición del lenguaje, sus expresiones, constructores, etc,

Hoy NO hablaremos del método RAISE

(15)

Especificaciones en RSL

Una especificación en RSL consiste de colecciones de definiciones de módulos definiciones de módulos.

Los módulos son el medio para descomponer una especificación en partes manejables, partes manejables,

comprensibles y reusables comprensibles y reusables.

Un módulo puede ser usado para definir otro módulo.

Existen dos clases de módulos

Esquemas (expresiones de clases)

Objetos (instancias de los esquemas)

(16)

Módulos

Hay dos tipos de módulos

Esquemas (SCHEME): expresiones de clases

Objetos (OBJECT): instancias de esquemas

Una declaracióndeclaración comienza con una palabra reservada (keyword) que indica el tipo de declaración, seguida por una o más definicionesdefiniciones de ese tipo de declaración

Un módulo es una colección de módulo

declaraciones con nombre

(17)

Módulos

Expresiones de clases

Declaraciones

. . .

end class

<keyword>

Definiciones

(18)

Módulos

Declaraciones

Declaración

(keyword) Definen...

Object

Object Módulos embebidos Type

Type Tipos

Value

Value Valores: constantes y funciones Variable

Variable Variables que pueden almacenar valores Channel

Channel Canales de entrada y salida Axiom

Axiom Propiedades lógicas que deben verificarse

(19)

Módulos scheme

scheme móduloNombre = classclass

object object

......

......

typetype

...

value value

...

......

endend

Expresión Expresión de clase de clase Declaración

Declaración de objetos de objetos

Declaración Declaración de tipos de tipos Declaración Declaración de valores de valores Otras

Otras declaraciones declaraciones

(20)

Declaraciones

Veremos ahora como declarar:

Tipos (type)

Valores (value)

Axiomas (axiom)

Variables (variable)

Objetos (object)

Hoy no hablaremos de:

Canales (canales) –

asociado a concurrencia

Casos de Test (test case)

(21)

Declaración de tipos

scheme móduloNombre = classclass

object object

......

typetype

...

...

value value

...

......

endend

Declaración Declaración de objetos de objetos Declaración Declaración de tipos de tipos

Declaración Declaración de valores de valores Otras

Otras declaraciones declaraciones

(22)

Declaración y definición de tipos

Como en todo lenguaje, un tipotipo determina el conjunto de posibles valores que puede tomar un identificador de valor, de variable, etc.

Veremos :

Tipos predefinidosTipos predefinidos (built-in)

Contructores de tipo: para construir un tipo a partir Contructores de otro

Definiciones de tiposDefiniciones

(23)

Tipos predefinidos

Tipo Valores de Ejemplo Operadores

Bool true, false ∧, ∨, ⇒, ~

Int .., -1, 0, 1, … +, -, *, /, \ , ↑, ≥, ≤, >, <, abs, real

Nat 0, 1, … Idem Int

Real …, -4.3, …, 0.0, … +, -, *, / , ↑, ≥, ≤, >, <, abs, real Char ...'a', …

Text "", "Juan", … Los de listas de caracteres

Unit ()

Ver definici

Ver definición de operadores en la bibliografíaón de operadores en la bibliografía

(24)

Constructores de tipos

Permiten construir expresiones de tipo a partir de tipos ya existentes

Constructor Simbolo Para formar o definir...

Producto ><

Tuplas

Conjuntos -set

Cjtos, listas y mapeos finitos.

(existen versiones infinitas)

Listas *

Mapeos -m->

Fcs totales ->

(25)

Expresiones de tipos

Una expresión de tipo expresión de tipo toma alguna de las siguientes formas:

un tipo Built-in

un tipo definido por el usuario

un tipo formado por un constructor de tipo aplicado a otras expresiones de tipo

subtipos

(26)

Ejemplo de

Expresiones de Tipos

Int >< Nat >< Int >< Nat %4-upla

(Int >< Nat)><(Int >< Na) %par de pares

Int* %lista de enteros

Text %string

Text->Int %función

Persona –m-> Int %mapeo

Real-set %cjto de reales

Libro-set %cjto de Libros

Persona* %lista de Personas

Persona >< Libro %2-upla

{|n: Int • n > 100|} %subtipo. Enteros

%mayores a 100

(27)

Definiciones de Tipos de Usuario

Los usuarios pueden definir sus propios tipos y hay dos clases de definiciones:

abreviaciones abreviaciones

<identificador> = <expresión_de_tipo>

ejemplos: NroRegistro = Nat

Inscriptos = Persona*

tipos nuevos: que se definen por medio de tipos nuevos:

Sorts (o tipos abstractos)

Registros

Variantes

Uniones

(28)

Definición Nuevos Tipos

 Sorts (tipos abstractos) Sorts (tipos abstractos)

Registros Registros

Variantes Variantes

Uniones Uniones

(29)

Sorts (tipos abstractos )

Son simplemente identificadores

type

Persona, Libro

Sirven para mencionar tipos cuya definición final

no se ha decidido aún

(30)

Definición Nuevos Tipos

 Sorts (tipos abstractos) Sorts (tipos abstractos)

Registros Registros

Variantes Variantes

Uniones Uniones

(31)

Registros

Similar a los registros de muchos lenguajes de programación

type

Libro ::

titulo : Text autor : Text

precio : Real <-> new_precio<-> new_precio

Definimos un nuevo tipo nuevo tipo Libro como un

registro de tres componentes (titulo,

autor, precio)

(32)

Componentes de Registros

Cada componente tiene

un identificador, llamado destructor,destructor, y una expresión de tipo

titulo : Text

opcionalmente tiene un reconstructor

reconstructor

precio : Real <-> new_precio <-> new_precio

(33)

Destructors

El identificador de un componente define una función función de acceso

de acceso

En el ejemplo: autor puede verse como una función con el siguiente signature

Libro -> Text

Así, para un valor de libro b, escribimos autor(b)

para denotar valor (de tipo Text) del componente “autor” del libro b

Obs: NO se denota como b.autor

(34)

Reconstructors

Un reconstructor es una función total que toma la

reconstructor

expresión de tipo del componente

tipo del componente junto con un

registro

registro

, para generar un nuevo registro

nuevo registro

En el ejemplo el componente precio tiene un reconstructor new_precio

new_precio

precio : Real <-> new_precio<-> new_precio

El tipo de (la función) new_precio

new_precio

es

Real >< Libro -> Libro

La expresión new_precio

new_precio(20.5, b) es un nuevonuevo

(35)

Constructores

La definición de un tipo registro provee

implícitamente una función de construcción función de construcción

(constructor) para crear nuevos registros a partir de los valores de sus componentes.

El identificador de la función implícita de

construcción se obtiene de anteponer el prefijo mk_

al identificador del tipo del registro

En el ejemplo tenemos entonces una función de construcción mk_Libro cuyo tipo es

Text >< Text >< Real -> Libro

(36)

Entonces… en el ejemplo

titulo(b): es el titulo del libro b

new_price(15,b): es un libro con titulo y autor de b, y precio igual a 15

mk_Libro(“Nubes”,“Ana Lopez”,10): es un libro

type

Libro ::

titulo : Text autor : Text

precio : Real <-> new_precio<-> new_precio

destructors

reconstructor

(37)

Definición Nuevos Tipos

 Sorts (tipos abstractos) Sorts (tipos abstractos)

Registros (::) Registros (::)

Variantes Variantes

Uniones Uniones

(38)

Variantes

Permiten definir tipos como una opción de distintos valores

Por ejemplo:

Color == rojo | verde | amarillo

Se define un nuevo tipo denominado Color y tres constantes (diferentes) rojo, verde y

amarillo, de tipo Color

(39)

Variantes (2)

Los tipos variantes permiten la utilización de estructuras más complejas, no solo

constantes (como el ejemplo anterior) Por ejemplo:

Tree == nil|

node(hl:Tree,val:Elem,hr:Tree)

(40)

Ejemplo: Tree (1)

Se define un nuevo tipo Tree como:

- una constante nil tipo Tree o - un constructor constructor node de tipo

Tree >< Elem >< Tree -> Tree

Tree ==

nil|

node(hl:Tree, val:Elem, hr:Tree)

(41)

Ejemplo: Tree (2)

Tree ==

nil|

node(hl:Tree, val:Elem, hr:Tree)

Aquí, hl,val, y hr son destructores destructores (funciones de acceso) de tipo

hl: Tree -~-> Tree Val: Tree -~-> Elem

hr: Tree -~-> Tree

Son funciones que no están definidas para todo el

dominio de Tree, (no están definidas para nil). Esto es:

son funciones parciales (-~->)

(42)

Registros como variantes

Los registros pueden definirse como tipos variantes con una única opción

Libro == mk_Libro(titulo:Text, autor:Text,

precio:Real<->new_precio)

Ejercicio: chequear que los tipos del constructor

constructor y destructores destructores son idénticas al

(43)

Definición Nuevos Tipos

 Sorts (tipos abstractos) Sorts (tipos abstractos)

Registros (::) Registros (::)

Variantes (==) Variantes (==)

Uniones Uniones

(44)

Uniones (1)

La definición A = B|C es un un atajo para que, a partir del identificador A y las definiciones de B y C, se generen los identificadores de los constructoresconstructores y destructoresdestructores

correspondientes. Esto es:

type

Permite definir nuevos tipos como variantes de tipos definidos existentes.

Por ejemplo:

Empleado = Docente | NoDocente

(45)

Uniones (2)

Se permite la coerción implícita desde los componentes de la unión al tipo unión.

Si tenemos una función f con un parámetro que es de tipo A

f: A -> X

La aplicación de f a un valor c1 de tipo C, se escribe simplemente como

f(c1)

Lo cual, es un atajo para la expresión

f(A_from_C(c1))

(46)

Declaración de valores

scheme móduloNombre = classclass

object object

......

typetype

...

value value

...

...

Declaración Declaración de objetos de objetos Declaración Declaración de tipos de tipos

Declaración Declaración de valores de valores

(47)

Definición de Valores

Cuando hablamos de valores hablamos de

constantes

funciones

Obs: una constante puede verse como una

función 0-aria.

(48)

Definición de Valores

Hay tres formas de definir un valor (constante o función)

Definiendo solo su tipo ( typing )

Definiendo implícitamente el valor

Definiendo explícitamente su valor

(49)

Valores: definiendo solo su tipo (typing)

Estas definiciones tienen la siguiente forma:

<identificador>: <expresión_de_tipo>

Por ejemplo:

value

cant_pisos: Nat

nombre: Persona -> Text

Son ejemplos de la definición del tipo de un valor constante cant_pisos y del tipo

(signature) de una función nombre

(50)

Valores: definiendo

implícitamente un valor

Ejemplo para constantes

value

cant_pisos: Nat • cant_pisos > 2

Ejemplo de definición implícita de funciones utilizando postcondiciones postcondiciones

value

raiz_cuadrada: Real -~-> Real raiz_cuadrada(x) as r

post (r >=0.0)∧(r*r = x)

(51)

Valores: Definiendo

explícitamente un valor

Ejemplo para constantes

value

cant_pisos: Nat = 11

Ejemplo de definición implícita de funciones

value

factorial: Int -~-> Int factorial(n) ≡

if n=1 then 1 else n*factorial(n-1) end pre (n>0)

(52)

Expresiones de valor

Expresiones de Conjuntos

Expresiones de Listas

Expresiones de Mapeos

Expresiones Let

Expresiones Case

(53)

Expresiones de Conjuntos

Pueden estar dadas por :

Enumeraciones:

{ }, {1,2,3}

Rangos (solo para Int):

{1,...,5}

Comprensión:

{i*3|i:Int • i{5,10,7}}

(54)

Expresiones de Listas

Pueden estar dadas por:

Enumeraciones:

〈〉,

4,3,2,3,5,6〉, etc

Rangos (solo para Int):

1,...,5〉

Comprensión:

i/2|i in 〈1,...,15〉• i > 8〉

(55)

Expresiones de Mapeos

Pueden estar dadas por:

Enumeración:

[],

[1|-> true, 3|->false, 2|->true ]

Comprensión:

[ i|-> es_par(i)|i:Int • i > 0 ∧ i < 4 ]

(56)

Expresiones Let

Pueden usarse de dos formas:

para destruir (desarmar) un producto let (x,y) = (1,2) in x+y end

Para organizar una evaluación en pasos value

suma: Int* -> Int

suma(s) ≡ if s =

〈〉

then 0 else

let h=hd s, t=tl s, x=suma(t) in h+x

(57)

Expresiones Case

Usadas sobre listas y estructuras variantes

value

suma: Int* -> Int suma(s) ≡

case s of -> 0,

h〉^t -> h + suma(t) end

value

InOrden: Tree -> Elem*

InOrden(t) ≡ case t of nil -> 〈,

node(l,e,r)-> InOrden(l) ^ 〈e〉 ^ InOrden(r) end

Tree == nil|

node(hl:Tree, val:Elem, hr:Tree)

(58)

Declaración de axiomas

scheme móduloNombre = classclass

......

value value

...

axiom axiom

...

...

Declaración Declaración de valores de valores

Declaración Declaración de axiomas de axiomas

(59)

Axiomas

Cada definición de axioma es un predicado predicado, opcionalmente precedido por un identificador identificador entre corchetes

Por ejemplo

value

cant_pisos: Nat axiom

[restriccionPisos] cant_pisos >=2

(60)

Ejemplos varios

scheme M_Ejemplar = class

type

TClase == revista | tesis | libro, TReserva,

TEjemplar ::

titulo: Text clase: TClase

reservas: TReserva*, value

tieneReservas: TEjemplar -> Bool

primeraReserva: TEjemplar -~-> TReserva estaAntes: TReserva><TReserva -> Bool ...

typing typing registro

registro

variante variante

lista lista sortsort

(61)

61

scheme M_Ejemplar = class

type

...

value

tieneReservastieneReservas: TEjemplar -> Bool

tieneReservas(e)tieneReservas(e) ≡ ~(reservas(e)= 〈〉 ) primeraReservaprimeraReserva: TEjemplar -~-> TReserva axiom

[ax_1raReserva]

e: TEjemplar, p:TReserva • p ∈ reservas(e) ∧

~(∃ o: TReserva• o ∈ reservas(e)∧ estaAntes(o,p)) ⇒ primeraReserva(e)

primeraReserva(e)= p pre tieneReservas(e)

...

end

Ejemplos varios (sigue)

(62)

Estilo imperativo

Para soportar un estilo de especificación imperativo, RSL permite:

la declaración de variables

expresiones de asignación (

:=

)

expresiones de secuencia (

;

)

expresiones condicionales (

if

)

expresiones iterativas (

while, until, for

)

expresiones locales (

local

)

(63)

Declaración de variables

scheme móduloNombre = classclass

object object

......

typetype

...

variable variable ...

...

......

endend

Declaración Declaración de objetos de objetos Declaración Declaración de tipos de tipos

Declaración Declaración de variables de variables Otras

Otras declaraciones declaraciones

(64)

Declaración de variables

Consiste de un identificador, una expresión de tipo y, opcionalmente, un valor inicial.

identificador:expresión_de_tipo [:= 〈valor〉]

variable variable

counter: Nat := 0,

i: Int

(65)

Expresiones de asignación (:=) y secuencia (;)

Asignación y secuencia son expresiones, no sentencias, por son expresiones lo tanto son evaluables. El tipo de una asignación es Unit variable

counter: Nat := 0, result: Real

value

increment: Unit -> write write counter Nat

increment() ≡ counter := counter + 1 ; counter sum: Nat -~-> writewrite counter, result Real

Cláusula de acceso Cláusula de acceso

Cláusulas de acceso: write, read, any …

(66)

Expresiones condicionales (1)

Expresiones if (son expresiones, no sentencias)

type

Tcomp == mayor|igual|menor value

comparar: Int >< Int -> Tcomp

comparar(x,y) ≡ if x > y then mayor elsif x = y then igual else menor end

El tipo de la expresión if del ejemplo es TComp

(67)

variable

counter: Nat := 0 value

decrement: Unit -> write counter Unit decrement() ≡ if counter > 0 then

counter := counter – 1 end

El tipo de la expresión if del ejemplo es Unit.Para expresiones if de tipo Unit la cláusula else puede ser omitida ( es equivalente a “ else skip” )

Expresiones condicionales (2)

Expresiones if (son expresiones, no sentencias)

(68)

Expresiones Iterativas

while <condition>

do

...

end

do

...

until <condition>

for counter in

1..n〉

do

...

(69)

69

Expresiones locales

Para restringir el alcance de los identificadores

value

sumatoria: Nat -> Nat sumatoria(n) ≡

local

variable counter:Nat:=n, result:Nat:=0 in

while counter > 0 do

result:= result + counter;

counter:= counter – 1 end;

result end

pre n > 0

(70)

Expresiones de Módulos

Los módulos scheme son básicamente clases

Las expresiones de clases pueden tomar una de las siguientes (seis) formas

Básica (class...end)

De extensión (extend C1 with C2)

De renombre (use id1 for idx in C1)

De ocultamiento ( hide id in C)

With (with o1, o2, ... in C)

De instanciacion de esquema (scheme S=C)

(71)

Declaración de objetos

scheme móduloNombre = classclass

object object

......

......

typetype

...

value value

...

......

endend

Declaración Declaración de objetos de objetos Declaración Declaración de tipos de tipos

Declaración Declaración de valores de valores Otras

Otras declaraciones declaraciones

(72)

Clases (esquemas) vs Objetos

Técnicamente una expresión de clase expresión de clase es una colección de posibles implementaciones posibles implementaciones de

Esas posibles implementaciones se denominan objetos

objetos

object

Obj: C

En esa declaración,

Obj

denota algún objeto en la

clase

C

. Si

x

es una entidad (tipo,variable, etc) en

C

(73)

Parametrización de esquemas

scheme ELEM = class

type

TElem, end

scheme TREE(E:ELEM)= /* E es un objeto de la clase ELEM*/

class type

Tval = E.TElem /* toma el tipo definido en la clase ELEM*/

TTree == nil|

node(hl:TTree, val:Tval, hr:TTree) end

(74)

Lógica del lenguaje

La lógica del lenguaje define

Qué sucede con expresiones que no terminan (i.e expresiones que no evaluan: chaos)

Qué significa igualdad (=) y equivalencia ( ≡ ).

Cuándo es lo mismo y cuándo no.

Para más referencia ver bibliografía

(75)

Resumen… hablamos de :

Lenguajes de especificación

RSL: modulos

Declaraciones de

tipos

predefinidos, constructores,

de usuario (sorts, registros, variantes, uniones)

valores(constantes/funciones)

typing- def. implicita – def. explicita

expr. de valor (de cjtos, listas, mapeos, let, case)

(76)

axiomas

variables

Expresiones de estilo imperativo

:=, ;, if, while, until, for, local

objetos

expresiones de módulos, objetos, parametrización de esquemas

Lógica del lenguaje

Resumen… hablamos de :

(77)

Bibliografía

Specification Case Studies in RAISE

Hung Dang Van,

Chris George,

Tomasz Janowski, and

Richard Moore (Eds)

Referencias

Documento similar

Además, es muy importante la valoración completa de la paciente con atención en el origen de la fístula, tiempo de recidiva, ausencia de infección, estado de los tejidos y

Pero antes hay que responder a una encuesta (puedes intentar saltarte este paso, a veces funciona). ¡Haz clic aquí!.. En el segundo punto, hay que seleccionar “Sección de titulaciones

La aplicación debe ser capaz de prever errores simples en el sistema dado antes de comenzar la simulación, como, por ejemplo, parámetros necesarios no especifcados o falta de

Para conseguir el primer objetivo existen determinados bancos éticos que financian actividades concretas como son empresas y proyectos sociales,

Y de otra parte, porque con motivo de tal efemérides se actualiza con toda justicia la ingente obra realizada durante medio siglo por los fundadores y miembros de la Editorial, a la

Estas restricciones son que el par´ametro S de adaptaci´on est´e por debajo de −7 dB para conseguir una buena adaptaci´on en los cuatro puertos del array, que los diagramas

Un método de estudio aparte de ser una herramienta muy útil al momento de estudiar también nos ayuda a agilizar nuestra mente y tener una buena memoria para futuro?. Palabras

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637: