1
Reduciendo la brecha entre los requerimientos y el código: Overture o VDMToolBox VDMToolBox? ? n!lisis com"arativo de herramientas "ara generación de código desde #s"eci$icacioes %ormales
Angel Luna Calderón, Harold Cáceres Cáceres Zea, Jerson Herrera Rivera Universidad Nacional de San Agustín Arequipa , er! er! ,angel"#$"%$"&'g(ail$co(
Abstract.-
Ho) en dí Ho) díaa la ne nece cesi sida dadd de so so*t *t+a +are re co con* n*ia iale le en la industria ) en la sociedad se se -a -ec-o (ás evidente$ .as aun si estos son de carácter crítico$ Ante estos desa*íos los inge in genie niero ross de so so*t *t+a +are re ut utili ili/a /ann t0 t0cn cnic icas as a asa sada dass en (ate(áticas co(o las especi*icaciones *or(ales$ 1L uso de especi*icaciones *or(ales para que sea costo2e*ectiva dee ser asistido por alg!n tipo de -erra(ienta que per(ita no sólo la valid validación ación de especi*ica especi*icacione cioness sinó ade(ás la genera gen eració ciónn de cód código igo$$ 1n est estee art artícu ículo lo pre presen senta( ta(os os el análisis co(parativo de dos -erra(ientas que per(iten reali/ar especi*icaciones *or(ales en el lengua3e 45.66 ) generar código Java$ Nuestra principal contriución es presentar una a)uda para los desarrolladores de so*t+are que se inician en el uso de especi*icaciones *or(ales para que puedan reutili/ar código previa(ente validado $
7$
7ntroducción
Las especi*icacions *ora(les son un lengua3e asado en (ate(áticas cu)o propósito en asistir en la construcción construcción de siste(as de so*t+are 1l tie(po que se invierte en la especi*icación ) el dise8o dise8o se recupera al tener un producto producto d alta calidad$ 1l uso de especi*icaciones *or(ales i(plica inve in verti rtirr (a (a)o )orr es es*u *uer er/o /o en la lass et etap apas as te te(p (pra rana nass de dell desarr des arroll olloo de so* so*t+a t+are$ re$ Su uso red reduce uce los err errore oress por a(ig9edad a(ig9 edad en los requer(ie requer(ientos ntos ) oliga a un análisis análisis detallado de requeri(ietnos$$ requeri(ietnos$$ :";$ Requeri(ientos inco(pletos e inconsistencias son puestos al descuierto ) resueltos Asistidas general(ente por una -erra(ienta -erra (ienta per(iten descriir descriir los requeri(ietos requeri(ietos de un siste(a, anali/ar su co(porta(iento, veri*icar propiedades de inter0s ) (uc-as veces generar código$ 1l poder tener código generado desde una especi*icación *or(al no sólo nos per(ite tener requeri(ientos (enos a(iguos sino tener un código que reprodu/ca dic-os requeri(ientos$$ 1n este artículo presenta(os el análisis co(parativo de dos -erra(i -er ra(ient entas as que per per(ite (itenn rea reali/ li/ar ar esp especi eci*ic *icaci acione oness *or(ales en el lengua3e 45.66 ) generar código Java < 45.=ool>o? 45.=oo l>o? ) @verture$
1l resto del artículo está organi/ado de la siguiente(aera$ 1n la sección da(os una reve descripción del concepto de especi*icación *or(al$ 1n la sección sección # presenta(os las cara ca ract cter erís ísti tica cass de 45 45.= .=oo ool> l>o? o?$$ 1n la se secc cció iónn B presenta(os las características de @verture$ 1n la sección & (ed (edian iante te uti utili/ li/a(o a(oss la des descrip cripció ciónn de un pro pro)ec )ecto to reali/ado reali /ado en nuestra nuestra universidad universidad reali reali/a(os /a(os el análisis análisis co(par co( parati ativo vo de a( a(as as -er -erra( ra(ien ientas tas$$ 1n la sec secció ciónn presenta(os los resultados otenidos$ Dinal(ente presenta(os nuestras conclusiones$ conclusiones$
77$
1speci*i *iccació iónn Do Dorr(al
A$ 5e* e*in inic ició iónn La especi*icación *or(al o (0todos *or(ales son< t0cnicas, lengua3es ) -erra(ientas de*inidos (ate(ática(ente, para especi*icar ) veri*icar los requeri(ientos de un siste(a : ;$ $ 1l uso de .0todo .0todo Dor(al propi propicia cia la con*iaili con*iailidad dad ) la seguri seg uridad dad de un sis siste( te(a, a, al au( au(ent entar ar la co( co(pre prensi nsión ón acer ac erca ca de un si sist ste( e(aa re reve vela land ndoo in inco cons nsis iste tenc ncia ias, s, a(ig9 a( ig9eda edades des e in2 in2co( co(ple pletitu titudes des,, que de otr otraa (an (anera era pasan desaperciidas$ :L$ .endo/a, .$ 0re/ ) .$ Capel; Capel ; :";$ Los (0t (0todo odoss *or *or(al (ales es que se uti utili/ li/an an par paraa des desarr arroll ollar ar siste(as de co(putadoras son t0cnicas de ase (ate(ática para descriir las propiedades del siste(a$ 1stos (0todos *or(ales proporcionan (arcos de re*erencia en el seno de los cuales las personas pueden especi*icar, desarrollar ) veri*icar los siste(as de (anera siste(ática, en lugar de -acerlo ad -oc$ :Jo-n J$ .arciniaE;$:"; .arciniaE; $:"; >$ 45.66 1l 4ien ienna na 5ev 5evelo elop(e p(ent nt .et .et-od -od F45 F45.G, .G, en esp espa8o a8ol, l, .0tod .0 todoo de 5es 5esarr arroll olloo de 4ien ienaI aI es un (0todo *or(al lengua3e de especi*icación *or(al :",; "$ 5e* 5e*ini inició ciónn de Cla Clases ses 1
2
5e acuerdo a :"; FN@ HA " 1N SUS R1DR1NC7AS G los (odelos en 45.66 consisten en un con3unto de clases$ Una clase representa una colección de o3etos que co(parten ele(entos co(unes co(o atriutos u operaciones$ La estructura de la descripción de una clase se (uestra en la Dig$ "$ La clase se representa con la palara reservada class, seguida por el no(re de la clase$ La descripción consta de varios loques, precedidos por la palara reservada que indica el tipo de ele(ento descrito en dic-o loque$ 1n *igura " pode(os apreciar que una clase en 45.66 tiene los siguientes loques< aG 4ariales de 7nstancia Finstance varialesG, las cuales (odelan el estado interno del o3eto$ G =ipos Ft)pesG< presenta la de*inición de tipos de datos$ cG 4alores FvaluesG< per(ite la de*inición de constantes$ dG @peraciones FoperationsG< de*ine operaciones que pueden (odi*icar las variales de instancia$:#;
resultado un solo valor$ 45.66 tiene & categorías di*erentes de e?presiones :;$ Una de las categorías (ás utili/adas para la de*inición de pre2condiciones, post2 condiciones en invariantes son las e?presiones cuanti*icadoras$:#; B$ 1?presiones cuanti*icadoras Las e?presiones cuanti*icadoras son un tipo de e?presión lógica$ Son utili/adas de *or(a *recuente cuando es necesario reali/ar una aserción acerca de una colección de valores$ 1?isten dos tipos de e?presiones cuanti*icadoras< cuanti*icador universal F*orallG ) cuanti*icador e?istencial Fe?istsG$ A(as enla/an una o (ás variales a un tipo de 45.66 o, a un valor que pertenece a un con3unto, ) los eval!a contra una e?presión ooleana :#;$ &$ 7nvariantes Si las variales de instancia especi*icadas en una clase contienen valores que no deerían ser per(itidos, entonces es posile restringir dic-os valores por (edio de invariantes$ 1l resultado será que el tipo es restringido a un sucon3unto de los valores originales :,%;$ ara especi*icar una invariante se utili/a la palara reservada inv a continuación de la de*inición de todas las variales de instancia declaradas en la clase$:#; $ @peraciones
Dig$ "$ 1structura de clase en 45.66
$ =ipos 1n cuanto a los tipos de dato, 45.66 cuenta con tipos ásicos ) tipos co(puestos$ 1ntre los tipos ásicos se tiene< oleanos FoolG, naturales Fnat, nat"G, reales FrealG ) caracter Fc-arG$ 1n los tipos co(puestos presenta< con3untos Fset o*G, secuencias Fseq o*G, (apeos F(ap toG, entre otros$ Cada uno de estos tipos tiene operaciones pre2 de*inidas$ ara la aplicación de nuestro traa3o quere(os resaltar las operaciones pre2de*inidas para el tipo secuencia (ostradas en la *igura :#;$
Digura$ $ @peraciones pre de*inidas sore el tipo secuencia #$ 1?presiones Las e?presiones son utili/adas para descriir cálculos que no producen e*ectos secundarios, esto signi*ica que nunca podrán a*ectar el valor de una variale de instancia Fa (enos que contenga un lla(ado a operaciónG$ Las e?presiones pueden ser evaluadas (ediante el re(pla/o del identi*icador utili/ado en la e?presión con valores actuales$ La evaluación de una e?presión da co(o
1n 45.66 los algorit(os son de*inidos por operaciones$ Las operaciones pueden (anipular tanto variales gloales ) variales locales$ Las operaciones pueden ser de*inidas de *or(a e?plícita F(ediante un algorit(o e?plícitoG o de *or(a i(plícita F(ediante el uso de pre2condiciones ) post2condicionesG$ ara poder e3ecutar nuestras operaciones en el int0rprete de la -erra(ienta, las operaciones deen ser de*inidas e?plícita(ente$ 45.66 ta(i0n per(ite agregar pre2condiciones ) post2 condiciones en las operaciones e?plícitas :,";$ La idea principal de las pre2condiciones ) post2condiciones es que una clase ) sus usuarios tienen un Kcontrato$ 1l usuario dee garanti/ar ciertas condiciones antes del lla(ado a la operación Fpre2condiciónG ) por su parte la clase garanti/a que ciertas propiedades serán verdaderas cuando ter(ine la operación Fpost2condiciónG :#;$ 777$ A.
45.=ool>o?
Caracteristicas
1s una -erra(ienta integrada que soporta el análisis de (odelos 45.66 vía análisis sintáctico, análisis de tipos, generación de condiciones de integridad ) análisis de coertura, ade(ás que per(ite la generación de código Java ) C$ La -erra(ienta ade(ás posee un int0rprete que per(ite validar las especi*icaciones$ La -erra(ienta ta(i0n per(ite convertir directa(ente diagra(as de clase 2
3
U.L creados en Rational Rose en especiación 45.66$ :#; Una ve/ reali/ada la especi*icación en 45.66, es necesario veri*icar si las clases concuerdan con las reglas sintácticas de 45.66$ 1l anali/ador sintáctico veri*ica si la sinta?is de la especi*icación es correcta$ 1l anali/ador sintáctico reporta los errores, si los -uiera, ) reali/a supuestos sore cual pudo -aer sido el error$ Luego que la especi*icación -a pasado el anali/ador sintáctico, dee veri*icarse la correctitud de los tipos de acuerdo a las reglas de 45.66$ Haiendo garanti/ado tanto la correctitud sintáctica co(o la correctitud de tipos, 45.6 6=ool>o? provee soporte para validación de la especi*icación a trav0s de la e3ecución de prueas utili/ando un int0rprete$ 1l int0rprete per(ite e3ecutar partes de la especi*icación utili/ando valores seleccionados por el desarrollador Fcasos de prueaG$:#;
1l desarrollo de especi*icación *or(al para siste(as con la -erra(ienta 45.=ool>o? es (ás a(plia que con @verture, esto deido al poco conoci(iento de la segunda -erra(ienta$ Algunos pro)ectos que -an aplicado 45.=ool>o? son< 1n el traa3o de A1LL75@ :; se presenta el (odela(iento ) validación del calculo de tari*as d tren utili/ando 45.66$ Se resaltana los resultados ) e?periencias ganadas en un ro)ecto de investigación colaorativa entre A7S= ) @.R@N, en el que 45. 66 -a sido aplicado para *or(ali/ar las especi*icaciones de =DCAS ) validar su consistencia ) propiedades de con*iailidad$:; A1LL75@ :M; reali/ó una -erra(ienta de 4alidación r áfica para un Marcpaso.. En su artículo se dise8ó e i(ple(entó una inter*a/ grá*ica de usuario para usar en la validación de un (odelo *or(al de un (arcapasos cardíaco$ Los (odelos se e3ecutan utili/ando el int0rprete 45.=ools ) la co(unicación con la U7 de validación se lleva a cao a trav0s de la A7 C@R>A del =oolEit$ Se requerían algunos ca(ios en el (odelo para *acilitar esta co(unicación< estos ca(ios se llevaron a cao con 0?ito$ Se dise8ó un editor de escenarios para los (odelos pero no se i(ple(entó deido a li(itaciones de tie(po :M; 1l traa3o de : ; descrie un en*oque para el uso del (0todo *or(al 45. en el dise8o ) la i(ple(entación de inter*aces .icroso*t Oindo+s=.$ 1ste en*oque se desarrolló durante el desarrollo de 5ust21?pert=., un siste(a asado en Oindo+s$ :%;
Digura # $1ntorno de 5esarrollo de 45.=ool>o? 74$ A.
@verture =ool
Caracteristicas
@verture =ool es un entorno de desarrollo integrado F751G de código aierto para desarrollar ) anali/ar (odelos 45.$ La suite de -erra(ientas está escrita entera(ente en Java ) construida sore la plata*or(a 1clipse$:B; La (isión de @verture es dole< P roporcionar una -erra(ienta de *uer/a industrial que apo)e el uso de (odelos astractos precisos en el desarrollo de so*t+are, P Do(entar un entorno que per(ita a los investigadores ) a otras partes interesadas e?peri(entar con (odi*icaciones ) a(pliaciones de la -erra(ienta$:&; Digura B $ 4ista del @utLine de 54.=ool>o?
B.
Casos de Uso Reales con VDMToolBox
3
4
ara (ostrar el uso de a(as -erra(ientas ) su posterior co(paración se -a utili/ado un caso de estduio que corresponde al desarrollo de un siste(a de< L@CAL7ZAC7@N ARA =UR7S=AS$ 1L7CAR 1L S7S=1.A =AL CUAL L@ 1US71R@N 1N CLAS1$ .@S=RAR 1L .@51L@ 51 CLAS1S C@.L1=@ LU1@ S1 57C1 TU1 @R .@=74@S 51 1SAC7@ S@L@ S1 =RA>AJAR LA CLAS1 L@CA=7@N Digura B $ 1ntorno de 5esarrollo @verture =ool
Se -a utili/ado el lengua3e 45. en el dialecto 45.66 que e?tiende a 45.2SL rindándole características para el (odelado orientado a o3etos ) para la concurrencia$FN@ S1 U=7L7Z@ C@NCURR1NC7A 1N SU =RA>AJ@G Se -a reali/ado la especi*icación *or(al de una clase Location$
Digura $ 4ista del @utLine de @verture =ool
B.
Cosos de Uso con Overture
La generación de especi*icaciones con overture está en una etapa evolutiva, los desarrolladores de so*t+are e(pie/an a interesarse en esta nueva -erra(ienta de legua3e de especi*icación *or(al con 45., algunos de los pro)ectos que e(pie/an a validar sus requeri(ientos son $ La investigaciond e A1LL75@ :Q; (uestra el uso de @verture para (ane3ar requeri(ientos *or(ales$ Su traa3o propone un proceso evolutivo de un via3e de ida ) vuelta entre la especi*icación pre2*or(al ) la especi*icación *or(al con la -erra(ienta A1LL75@ : ; presenta un entorno grá*ico para (odelado ) prototipado de siste(as interactivos$ Los prototipos desarrollados dentro de 4Sio2+e pueden parecerse (uc-o a la apariencia visual ) al co(porta(iento de un siste(a real$ 1l co(porta(iento de los prototipos está total(ente i(pulsado por (odelos *or(ales e3ecutales$ :"; 1n : ;, A1LL75@ se (uestra las -erra(ientas =AS=1 ) @verture, los autores -an de(ostrado con 0?ito que la integración de (0todos es una estrategia (u) pro(etedora para crear suites de -erra(ientas roustas ) e*icaces$ 1?plora(os el ca(ino de la integración de a(as suites de -erra(ientas de código aierto, para aprovec-ar a!n (ás su e*icacia, con el o3etivo de proporcionar una plata*or(a potencial para el dise8o de e?tre(o a e?tre(o ) la ingeniería de siste(as e(eidos *iales, centrándose en la aviónica de la nave espacial$ 4$
Digura M $ 5iagra(a de Clases de Location 5ic-a clase representa la uicación geográ*ica de un deter(inado punto$ ara ello cuenta con valores para longitud ) latitud, ) una descripción adicional$ 5ic-a clase tiene co(o atriutos< P description< cadena de caracteres, P longitud< real, P latitud< real$
Digura % $ Class Location en lengua3e 45. Se -an de*inido las variantes para que las coordenadas no pierdan su integridad a lo largo de la puesta en (arc-a de la clase$ 1n pri(er lugar se aseguró que el co(ponente longitud de la coordenada se encuentre entre los lí(ites 2"% ) "%$ 5el (is(o (odo, el co(ponente latitud se dee encontrar en el rango de 2Q a Q$
Caso de 1studio Digura % $ 5escripción de invariantes en Location 4
5
Adicional(ente se -an de*inido *unciones< # getter ) # setter para cada atriuto$
Digura Q $ .0todos get para la clase Location 1n el setter de longitud ) latitud se aseguró que el nuevo valor de cada uno, se encuentre en el rango de valores válidos descritos anterior(ente utili/ando para ello precondiciones$ 1n el caso del atriuto description, *ue descrito utili/ando una precondición que garantice que la longitud del nuevo valor no e?cede los & caracteres$
1l generador -a creado los setter ) getter adecuada(ente, ade(ás e?isten controles para las variantes, precondiciones, pos2condiciones de*inidas en el arc-ivo vpp$ 1l generador adicional(ente -a creado un constructor que e3ecuta un (0todo para garanti/ar la integridad de las invariantes durante la instanciación de o3etos de la clase Location$ A continuación, se (uestra el código generado del set5escription, en el cual se asegura que que la longitud del nueo atriuto cu(pla con la condición de no tener un leng-t (a)or a &$ Los de(ás setter ) getter son generados si(ilar(ente$ Digura "# $ Control de precondición de set5escription$
Digura "B $ set5escription veri*ica la precondición$ >$ Aplicando @verture=ool>o?
Digura " $ recondicion para set5escription
47$
1l nivel de acceso de los atriutos es private ) -an sido iniciali/adas con $ Flongitud ) latitudG ) con cadena vacía FdescripciónG$ Se puede oservar que la secuencia de caracteres de 45. se -a convertido en un String en el arc-ivo Java ) los tipos real se -an sido traducidos a tipo Nu(er$
rueas
A$ Aplicando 45.=ool>o? 1N LA D7URA s presenta la generación de código utili/ando 45.=ools66$ 1l nivel de acceso de los atriutos es private ) -an sido iniciali/adas con $ Flongitud ) latitudG ) con cadena vacía FdescripciónG F1N TU1 L7N1ASG$ Se puede oservar que la secuencia de caracteres de 45. se -a convertido en un String en el arc-ivo Java ) los tipos real se -an sido traducidos a tipo 5oule$
Digura "& $ 5eclaración de variales co(o privadas$ 1l generador -a creado los setter ) getter adecuada(ente, sin e(argo, no e?iste ning!n control para las variantes, precondiciones, post2condiciones de*inidas en el arc-ivo vpp$
Digura " $ etters ) setters de*inidos por cada atriuto$ 1l generador adicional(ente -a creado un constructor por de*ecto ) un (0todo toString que i(pri(e todos los atriutos de la clase Location$
Digura "" $ Atriutos privados iniciali/ados con null$
Digura " $ Atriutos con valores de acuerdo a su tipo
Digura "M $ Constructor anóni(o ) (0todo toStringFG 477$
Análisis de Resultados 5
6
5e acuerdo a las prueas reali/adas, se presenta la =ala " con un análisis co(parativo entre las -erra(ientas evaluadas para deter(inar cuál es las (ás ópti(a en el proceso de generación código a partir de especi*icación *or(al utili/ando el lengua3e 45.< =A>LA " < ANAL7S7S C@.AR=74@ &aracter' stica
VDMToolBox((
Co(pletit enera código con ud todas las precondiciones ) postcondiciones$
OvertureToolBox
enera código con pocas precondiciones ) postcondiciones$
Readale Código di*ícil de leer$ Código *ácil de leer$ 1?ceso de No genera co(entario co(entarios< al inicio alguno$ ) *in de cada atriuto ) (0todo$ Si(ilitud
Código generado no Código generado (u) si(ilar al código (u) si(ilar al código original de 45.$ original de 45.$
5eug ) Relativa(ente co(pilaci sencillo reali/ar ón a(as tareas, sin e(argo necesitan lirerías especí*icas F3p$co$csE$vd($toolo ?$45.G$
Relativa(ente sencillo reali/ar a(as tareas, sin e(argo necesitan lirerías especí*icas Forg$overture$codegen$ runti(eG$
=ra/ailid =ra/ailidad -acia el =ra/ailidad -acia el ad código original 45. código original 45. co(pleta pero di*ícil$ inco(pleta $
4777$
Conclusiones
A(as -erra(ientas, 45.=ools66 ) @verture=ool, dan la posiilidad de generar código Java F45.=ools66 ade(ás puede generar código C66G a partir de un arc-ivo vpp Fque al(acena código vd(G que descrie especi*icaciones *or(ales$
todas las invariantes, precondiciones ) post2condiciones evitando violaciones de integridad e inconsistencia con las especi*icaciones *or(ales dise8adas$ 1SCR7>AN ATU SUS
[email protected]@1S ARA L@S USUAR7@S$$C@N TU1 51>1R7AN 1.1ZAR ARA 1S1C7D7C7CAR 1N 45.66 TU1
[email protected] ARA 1N1RAR C@57@
7$
Re*erencias
:"; R$ .$ Hierons, K. Bogdanov, J.P.Bowen, R. Cleaveland, J. Derrick, J. Dick, M. Gheorghe, M. Harman, K. Kapoor, P. Krause, and G. and !""gen, #$$%. &sing 'ormal speci'ica"ions "o suppor" "es"ing. ACM Computing Surveys (CSUR), 41(#), p.%.
4ieena 5evelop(ent .et-od, -ttps
:; 5aisuEe Sou(a, oro -ata)a(a, Hitos-i @-saEi, Ngu)en 4an =ang, .odeling and 4alidating t-e =rain Dare Calculation and Ad3ust(ent S)ste( Using 45.66 :M; 1((a Nic-olls, A rap-ical 4alidation =ool *or a 45.66 .odel o* a Cardiac ace(aEer , August M :% ; =i( Cle(ent Adelard, =-e *or(al develop(ent o* a Oindo+s inter*ace , Nove(er "&, "QQQ$ :Q; oic-i @(ori, Xei3iro AraEi , and eter or( Larsen, J@5=ool on t-e @verture =ool to (anage *or(al require(ent dictionaries , 3une "& :"; aolo .asci", Luis 5iogo Couto , eter or( Larsen , and aul Cur/on ,7ntegrating t-e 4Sio2+e (odelling and protot)ping environ(ent +it- @verture, , June "& :""; .arcel 4er-oe* .a?i(e errotin ,=AS=1 *or @verture to Eeep SL7., 3une "&
@verture genera un código Java (ás li(pio, (ás legile ) *ácil de testear en co(paración con el código generado por 45.66$ Sin e(argo, no re*le3a las condiciones de*inidas en invariantes, precondiciones, pos2condiciones ) las ignora en el código generado$ A di*erencia, 45.=ools66 utili/a todas las aserciones ) las re*le3a en el código, lo que le da (a)or con*iailidad pues tiene dentro del código 6