PLACENTA Y LÍQUIDO AMNIÓTICO Lorena Gallardo Gallardo ENFM-121 2009.
Métodos para la construcción de software fiable ...gallardo/abstractmodelchecking0304.pdf · •...
Transcript of Métodos para la construcción de software fiable ...gallardo/abstractmodelchecking0304.pdf · •...
Métodos para la construcción desoftware fiable:Abstracción y verificación de software
María del Mar Gallardo MelgarejoPedro Merino Gómez
Dpto. de Lenguajes y Ciencias de la ComputaciónUniversidad de Málaga
(gallardo,pedro)@lcc.uma.es
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino2
Ejemplo: Un ascensor
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino3
Modelo Promela del Ascensorproctype Sampler() {
do /* Make one internal request and then schedule */
:: f = Position[0] ->if:: (f == (nb_floor - 1)) -> f = 0:: else -> f++fi;do /* Choose the floor to request */:: ((f < (nb_floor - 1)) && (f != Position[0])) ->
f++:: breakod;
progress_request: internal_request[f]=true;
/* Gives control to other processes */Token_1!go;Token_1?go;Token_3[0]!go;Token_3[0]?go;Token_4[0]!go;
od }
init{
atomic{
if /* decide the initial floor */
:: Position[0] = 0
:: Position[0] = 1
:: Position[0] = 2
:: Position[0] = 3
fi;
/* configure the initial system */
run Lift(0);
run SysLift(0);
run Sampler();
run SysStop();
run SysPanel();
#ifdef CONFIG
config = true; /* employed to check NoMove */
#endif
}
}
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino4
El modelo Promela en SPIN
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino5
Un escenario
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino6
Verificación del ModeloUna propiedad crítica:“el ascensor no se mueve de un extremo a otro, si no hay llamadas”
No existe ninguna traza en el modelo que satisfata NoMove
NoMove: <> (configured &&<> ( (posL && [] no_request && <> posU)
|| (posU && [] no_request && <> posL)))
#define configured (config==true)#define posU (Position[0] == (nb_floor -1))#define posL (Position[0] == 0)#define no_request ((internal_request[0] != true) &&
(internal_request[1] != true) &&(internal_request[2] != true) &&(internal_request[3] != true))
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino7
Verificación del Modelo#define configured (config==true)#define posU (Position[0] == (nb_floor -1))#define posL (Position[0] == 0)
#define no_request ((internal_request[0] != true) &&(internal_request[1] != true) &&(internal_request[2] != true) &&(internal_request[3] != true)) .....
La verificación depende del número de pisos
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino8
Verificación del Modelo
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino9
Abstracción
Paso 1. Abstracción de datos
Retículo FloorsOperaciones abstractas
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino10
AbstracciónPaso 2. Transformación del Modelo#define FLR_INCR(x) if
:: x==Lower -> x = Middle \:: x==Middle ->x = noLower \:: x==noUpper ->x = noLower \:: x==noLower ->x = noLower \:: x==Unknown ->x = noLower \:: else -> x = ILLEGAL \fi
proctype Lift(int pid){ int Order=null;do...:: SysLift_Lift[pid]?Order;
if:: (Order==Up) -> FLR_INCR(Position[pid]);
...}
#define FLR_EQunder(x,y) ((x==Lower && y==Lower) ||(x==Upper && y==Upper) )
#define FLR_EQimp(x,y) (((x==Upper)&&(y==noLower)) ||((x==noLower)&&(y==Upper)) ||((x==Lower)&&(y==noUpper)) ||((x==noUpper)&&(y==Lower)) ||((x==Middle)&&(y==noUpper))||((x==noUpper)&&(y==Middle))||((x==Middle)&&(y==noLower))||((x==noLower)&&(y==Middle))||((x==Middle)&&(y==Middle))||((x==Unknown)) || ((y==Unknown)))
#define FLR_EQ(x,y) (FLR_EQimp(x,y) || FLR_EQunder(x,y))
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino11
Corrección de la abstracciónDado un modelo M, construir una sobreaproximación Mα
M
Mα
M y Mα deben satisfaceralguna condición de corrección
Una posibilidad es que Mα simule a Maunque hay otras opciones
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino12
Corrección
Dada la abstracción α: Σ → Σα
M = (Σ,Inst,s0,→) Mα = (Σα,Inst,s0α,→α)
Mα es una α−simulación de M sii∀s,s’ ∈ Σ, ∀inst ∈ Inst, ∀sα ∈ Σα
α(s) ≤ sα, s → s’ ⇒ ∃ s’α ∈ Σα | α(s’) ≤ s’α, sα →α s’αinst inst
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino13
Correccióninsts s’
sα inst s’αααα
inc10 1
Lower inc1 Middleααα
inc11 2
Middle inc1 NoLowerααα
inc1Nb_floors -2
Middle inc1 NoLowerααα
Nb_floors -1
Instrucciones
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino14
Corrección insts s’
sα inst s’αααα
IsNull0 0
Lower IsNull Lowerααα
IsOne1 2
Middle IsOne Middleααα
IsOneNb_floors -2
Middle IsOne Middleαα
tests
test(p,s) ⇒ testoα(p,sα) testo
α(b,sα) = ∨{s|α(s) ≤ sα} test(p,s)
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino15
Conservación de propiedades
#define FLR_INCR(x) if
M ⊨ f
Modelo
Propiedad
Mα ⊨ f α
M ⊨α f ??
Interpretaciónabstracta
Transformación
Modelchecking
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino16
Model checking
Mf
Contraejemplos
M
Contraejemplos
Mf
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino17
Model checking
M ¬f M ¬f
Contraejemplos
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino18
Model checking + abstracción
M
Mα
f
fα
Subaproximaciónde propiedades
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino19
Model checking + abstracción
Sobreaproximaciónde propiedades
M
¬fαMα ¬f
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino20
Semántica LTL
testoα(p,sα) = ∨{s|α(s) ≤ sα} test(p,s)
testuα(p,sα) = ∧{s|α(s) ≤ sα} test(p,s)
ti = si, si+1,...
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino21
Conservación de propiedades
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino22
Transformación de propiedades
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino23
Transformación de propiedades
#define configured (config == true)#define posU FLR_EQ(Position[0],FLR_Map(FLR_LOW,FLR_HIGH,(nb_floor-1)))#define posL FLR_EQ(Position[0],FLR_Map(FLR_LOW,FLR_HIGH,0))#define no_request (ARRAY_ISNOTSET(internal_request,
FLR_Map(FLR_LOW,FLR_HIGH,0), true)&& ARRAY_ISNOTSET(internal_request,
FLR_Map(FLR_LOW,FLR_HIGH,(nb_floor/2)), true)&& ARRAY_ISNOTSET(internal_request,
FLR_Map(FLR_LOW,FLR_HIGH,(nb_floor-1)), true))
NoMove: <> (configured &&
<> ( (posL && [] no_request && <> posU)
|| (posU && [] no_request && <> posL)))
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino24
Transformación de propiedades
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino25
Verificación del modelo abstracto
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino26
Verificación del modelo abstracto
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino27
Verificación del modelo abstracto
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino28
Vista de αSpin
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino29
Model checking on-the-fly vssobre y sub aproximación
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino30
Trazas espurias
M
f
Contraejemplosespurios
M
Contraejemplosespurios
M
Contraejemplosespurios
M
Contraejemplosespurios
M
Contraejemplosespurios
M
Contraejemplosespurios
M
Contraejemplosespurios
M
Contraejemplosespurios
M
f
Refinamientodel modelo
Mαfα Mα
fα
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino31
Trazas espurias
M
¬fαMα¬f
Contraejemplosespurios
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino32
Trazas espurias
M
¬fαMα¬f
refinamiento
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino33
Refinamiento
Explota el poder delmodel checking paraanalizar la parte del modeloque nos interesa
Combina sobre ysubaproximaciónde propiedades
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino34
EjemploSistema de transición
Variables globalesInt x, proc;x = Min;
o1
even(x)/proc =1
Process P1
o2
odd(x)/proc =1
s1
s2
Process P2
s3x!=Min/proc =2
/x = x+1
/x = x-1
x!=Max/proc =2
noprogress = ⃟⃞ (proc == 1) M ⊭ ∃ noprogress
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino35
EjemploModelo concreto
s1, o2,x=0,proc=1
s1, o1,x=0,proceven(x)/proc =1
s1, o1,x=1,proc=2s2, o2,x=0,proc=1
/x = x+1
s2, o1,x=0,proc=2
x!=Max/proc =2
even(x)/proc =1
x!=Max/proc =2
s1, o1,x=2,proc=2
....
....
....
M ⊭∃⃟⃞ (x == Max) ???
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino36
Ejemplo Modelo abstracto α(Min) = minα(Max) = maxα(v) = middle (min < v < max)
min middle max
⊥
⊤
s1, o1,x=min,proc
even(x)/proc =1
s1, o1,x=middle,proc=2s1, o2,x=min,proc=1
/x = x+1
s2, o1,x=min,proc=2
x!=Max/proc =2
even(x)/proc =1
s1, o2, x=middle,proc=1
even(x)/proc =1
s1, o1, x=middle,proc=1
odd(x)/proc =1
even(x)/proc =1
s1, o2,x=min,proc=1
s1, o2, x=max,proc=2
x!=Max/proc =2
s1, o2, x=max,proc=1
even(x)/proc =1
/x = x+1
s1, o2, x=max,proc=1
odd(x)/proc =1
odd(x)/proc =1
Mα ⊨α ∃⃟⃞ (x == Max)
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino37
M ⊭ ∃ noprogress
Ejemplo
Mα ⊩ ∀ (⃟⃞ (x == Max)α → noprogress)
M ⊭∃⃟⃞ (x == Max)
⇓
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino38
Hot topics en Técnicas formales
• Extensión de las técnicas de análisis para estudiar aspectos de tiempo real, rendimiento, planificabilidad,...
• Explorar distintos modelos matemáticos que permitan representar nuevos sistemas o problemas: por ejemplo, sistemas híbridos, integración de los principios matemáticos de abstracción, composición y jerarquía.
• Integración sin costuras de las nuevas herramientasdesarrolladas en el proceso del desarrollo del software.
• Verificación probabilística.
Métodos para la Construcción de Software Fiable- María del Mar Gallardo—Pedro Merino39
Bibliografía
• Dennis Dams: Abstraction in Software Model Checking: Principles and Practice (Tutorial Overview and Bibliography). SPIN 2002: 14-21
• M. M. Gallardo, P.Merino, E.PimentelRefinement of LTL Formulas for Abstract Model Checking The 9thInternational Static Analysis Symposium SAS '02 LNCS v. 2477 pp395-410
• M. M. Gallardo, J. Martínez, P.Merino, E.Pimentel αSPIN: A Tool for Abstract Model Checking International Journal on Software Tools for Technology Transfer (en imprenta)
• J. Wing Platitudes and attitudes International Journal on SoftwareTools for Technology Transfer (2003) 4: 261-265