23.07.2013 Views

Introducción - NEO - Universidad de Málaga

Introducción - NEO - Universidad de Málaga

Introducción - NEO - Universidad de Málaga

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Introducción</strong><br />

Desarrollo <strong>de</strong> un plug-in para la incorporación<br />

<strong>de</strong> funciones <strong>de</strong> mo<strong>de</strong>l checking en Eclipse<br />

(Developing a plug-in for integrating mo<strong>de</strong>l checking in Eclipse)<br />

Autor: Noelia Rojas Moya<br />

Directores: José Francisco Chicano García, Enrique Alba Torres<br />

Des<strong>de</strong> el principio <strong>de</strong> la Informática, los ingenieros están interesados en técnicas que<br />

permitan conocer si un fragmento <strong>de</strong> código cumple una serie <strong>de</strong> requisitos (la<br />

especificación). Estas técnicas son especialmente importantes en el software para<br />

sistemas críticos responsables <strong>de</strong> vidas humanas como, por ejemplo, los controladores<br />

para aviones, los sistemas <strong>de</strong> control <strong>de</strong> plantas nucleares o el software para<br />

herramientas médicas. También tienen especial relevancia en el software para entida<strong>de</strong>s<br />

financieras, don<strong>de</strong> un error software pue<strong>de</strong> implicar la pérdida <strong>de</strong> gran<strong>de</strong>s cantida<strong>de</strong>s <strong>de</strong><br />

dinero. A<strong>de</strong>más <strong>de</strong> esto, el software actual es muy complejo y estas técnicas se han<br />

convertido en una necesidad en muchas compañías <strong>de</strong> software.<br />

Mo<strong>de</strong>l checking [COP00] es una técnica automática bien conocida para comprobar si un<br />

<strong>de</strong>terminado programa cumple una serie <strong>de</strong> propieda<strong>de</strong>s <strong>de</strong>seadas, como un invariante,<br />

la ausencia <strong>de</strong> interbloqueos o la posposición in<strong>de</strong>finida. En esta técnica se analizan<br />

todos los posibles estados <strong>de</strong>l programa para <strong>de</strong>mostrar (o negar) que éste satisface una<br />

<strong>de</strong>termina propiedad. Las propieda<strong>de</strong>s suelen especificarse en la mayoría <strong>de</strong> los casos<br />

usando lógicas temporales como la lógica temporal lineal (LTL) [CE82] o la lógica <strong>de</strong><br />

árboles <strong>de</strong> computación (CTL) [CES86]. Sin embargo, existen otras propieda<strong>de</strong>s que no<br />

requieren el uso <strong>de</strong> lógicas para ser especificada. Tal es el caso <strong>de</strong> la ausencia <strong>de</strong><br />

interbloqueos o la <strong>de</strong>tección <strong>de</strong> excepciones.<br />

El principal problema <strong>de</strong> esta técnica es que la memoria requerida para realizar tal<br />

verificación suele crecer exponencialmente con el tamaño <strong>de</strong>l programa a verificar. A<br />

esto se le conoce como problema <strong>de</strong> la explosión <strong>de</strong> estados y limita el tamaño <strong>de</strong> los<br />

programas que se pue<strong>de</strong>n verificar. Una forma <strong>de</strong> reducir el impacto <strong>de</strong> este problema<br />

consiste en aplicar la técnica a un mo<strong>de</strong>lo <strong>de</strong>l programa, que ocultará <strong>de</strong>talles <strong>de</strong><br />

implementación y tendrá un espacio <strong>de</strong> estados más pequeño para explorar. Hay varios<br />

lenguajes diseñados específicamente para mo<strong>de</strong>lar software, como por ejemplo,<br />

Promela [Hol04], el lenguaje <strong>de</strong> SMV [Mc92] o el lenguaje intermedio <strong>de</strong><br />

SAL [Ben00].<br />

El principal problema <strong>de</strong> estos lenguajes es que no son muy conocidos por los<br />

<strong>de</strong>sarrolladores y no se suelen utilizar para las implementaciones reales. Esto implica<br />

que para aplicar mo<strong>de</strong>l checking a cualquier programa hay que implementarlo dos<br />

veces: la versión original y su mo<strong>de</strong>lo en un lenguaje diferente. A<strong>de</strong>más <strong>de</strong> requerir un<br />

tiempo extra, esta doble implementación tiene el inconveniente <strong>de</strong> que no hay forma <strong>de</strong><br />

asegurar <strong>de</strong> que el mo<strong>de</strong>lo y la implementación final se comportan <strong>de</strong> la misma manera<br />

con respecto a la propiedad a verificar.


Como solución a esta costosa implementación <strong>de</strong>l mo<strong>de</strong>lo, existen mo<strong>de</strong>l checkers que<br />

son capaces <strong>de</strong> trabajar sobre lenguajes usados en el <strong>de</strong>sarrollo <strong>de</strong> aplicaciones. Tal es el<br />

caso <strong>de</strong> Verisoft [God97] que trabaja sobre programas en C o <strong>de</strong> Java PathFin<strong>de</strong>r [JPF]<br />

que trabaja sobre código Java (en concreto, sobre byteco<strong>de</strong>s <strong>de</strong> Java). El uso <strong>de</strong> estos<br />

mo<strong>de</strong>l checkers ahorra tiempo <strong>de</strong> implementación y, si el programa es suficientemente<br />

pequeño, permite la aplicación <strong>de</strong> la técnica sobre el programa mismo, no sobre su<br />

mo<strong>de</strong>lo, con lo que se evita el problema <strong>de</strong> la equivalencia entre programa y mo<strong>de</strong>lo.<br />

Figura 1: Arquitectura <strong>de</strong> Java PathFin<strong>de</strong>r<br />

En <strong>de</strong>finitiva, existen técnicas y herramientas que permiten la verificación <strong>de</strong> código y<br />

que, por tanto, permiten asegurar que el software es completamente correcto o, en caso<br />

contrario, pue<strong>de</strong>n ayudar al programador a encontrar su error. Sin embargo, son pocos<br />

los entornos <strong>de</strong> <strong>de</strong>sarrollo que incorporan dichas herramientas <strong>de</strong> verificación. La<br />

integración <strong>de</strong> los mo<strong>de</strong>l checkers <strong>de</strong>ntro <strong>de</strong> los entornos <strong>de</strong> <strong>de</strong>sarrollo pue<strong>de</strong> suponer un<br />

importante ahorro <strong>de</strong> tiempo en el <strong>de</strong>sarrollo <strong>de</strong> aplicaciones.<br />

Uno <strong>de</strong> los entornos <strong>de</strong> <strong>de</strong>sarrollo más populares hoy en día es Eclipse [Ecl]. Se trata <strong>de</strong><br />

una aplicación <strong>de</strong>sarrollada siguiendo el estándar OSGi y, en concreto, una<br />

implementación en Java <strong>de</strong>l mismo: Equinox. Eclipse está formado por un gran<br />

conjunto <strong>de</strong> pequeños módulos software, <strong>de</strong>nominados plug-ins, cada uno <strong>de</strong> los cuales<br />

aporta una funcionalidad específica y concreta. La facilidad con la que pue<strong>de</strong>n crearse<br />

nuevos plug-ins para exten<strong>de</strong>r la plataforma ha hecho que eclipse crezca a gran<br />

velocidad y ofrezca a los programadores una gran cantidad <strong>de</strong> herramientas útiles para<br />

su labor <strong>de</strong> programación. Aunque es conocido principalmente por albergar<br />

herramientas para el <strong>de</strong>sarrollo <strong>de</strong> aplicaciones Java, es posible realizar <strong>de</strong>sarrollos en<br />

cualquier lenguaje siempre que exista algún plug-in que lo soporte.<br />

Objetivos<br />

El objetivo principal <strong>de</strong>l proyecto es realizar un plug-in para la plataforma Eclipse que<br />

permita incorporar a dicha plataforma el mo<strong>de</strong>l checker Java PathFin<strong>de</strong>r, facilitando así<br />

su uso por parte <strong>de</strong> la comunidad <strong>de</strong> <strong>de</strong>sarrolladores Java que usan Eclipse. Dicho plugin<br />

<strong>de</strong>be permitir la configuración <strong>de</strong> Java PathFin<strong>de</strong>r <strong>de</strong> tal forma que no pierda<br />

funcionalidad alguna con respecto a su versión <strong>de</strong> línea <strong>de</strong> comando. A<strong>de</strong>más <strong>de</strong> los<br />

algoritmos ya incorporados en Java PathFin<strong>de</strong>r, se añadirán otros algoritmos


experimentales <strong>de</strong>sarrollados en un grupo <strong>de</strong> investigación <strong>de</strong> la <strong>Universidad</strong> <strong>de</strong> <strong>Málaga</strong>.<br />

Adicionalmente se elaborará material <strong>de</strong> ayuda para el uso <strong>de</strong>l plug-in así como una<br />

página Web para su difusión.<br />

Fases <strong>de</strong>l proyecto<br />

Para la realización <strong>de</strong>l proyecto se seguirán las siguientes fases.<br />

1. Estudio <strong>de</strong> la plataforma Eclipse y <strong>de</strong> su arquitectura basada en plug-ins.<br />

2. Estudio <strong>de</strong> las técnicas <strong>de</strong> mo<strong>de</strong>l checking en general.<br />

3. Estudio <strong>de</strong>l mo<strong>de</strong>l checker Java PathFin<strong>de</strong>r.<br />

4. Diseño <strong>de</strong>l plug-in i<strong>de</strong>ntificando las extensiones a implementar en eclipse y <strong>de</strong><br />

los puntos <strong>de</strong> extensión permitidos por el plug-in.<br />

5. Implementación <strong>de</strong>l plug-in.<br />

6. Realización <strong>de</strong> pruebas para comprobar el correcto funcionamiento <strong>de</strong>l plug-in.<br />

7. Elaboración <strong>de</strong> la documentación <strong>de</strong>l plug-in y <strong>de</strong> una Web asociada.<br />

Medios materiales<br />

Equipo portátil o PC con JDK y la plataforma Eclipse.<br />

Adobe Dreamweaver para el <strong>de</strong>sarrollo <strong>de</strong> la página Web.<br />

Editor <strong>de</strong> textos y compilador <strong>de</strong> LaTeX para la memoria y documentos<br />

intermedios.<br />

Libros y artículos aportados por los directores <strong>de</strong>l proyecto. Revistas <strong>de</strong> la<br />

hemeroteca y <strong>de</strong> acceso electrónico.<br />

Referencias<br />

[Ben00] Sad<strong>de</strong>k Bensalem, Vijay Ganesh, Yassine Lakhnech, César Munoz, Sam<br />

Owre, Harald Rueß, John Rushby, Vlad Rusu, Hassen Saïdi, N. Shankar,<br />

Eli Singerman, and Ashish Tiwari. An overview of SAL. In C. Michael<br />

Holloway, editor, Fifth NASA Langley Formal Methods Workshop,<br />

pages 187–196, Hampton, VA, 2000.<br />

[CE82] E. M. Clarke and E. A. Emerson, Design and synthesis of<br />

synchronization skeletons using branching-time temporal logic. in Logic<br />

of Programs, Workshop. London, UK: Springer-Verlag, 1982, pp. 52–71.<br />

[CES86] E. M. Clarke, E. A. Emerson, and A. P. Sistla, Automatic verification<br />

of finite-state concurrent systems using temporal logic specifications.


ACM Trans. Program. Lang. Syst., vol. 8, no. 2, pp. 244–263, 1986.<br />

[COP00] E. M. Clarke, O. Grumberg, and D. A. Peled. Mo<strong>de</strong>l Checking. The MIT<br />

Press, January 2000.<br />

[Ecl] http://www.eclipse.org<br />

[God97] Patrice Go<strong>de</strong>froid. VeriSoft: A Tool for the Automatic Analysis of<br />

Concurrent Reactive Software.Proc. of the 9th Conference on Computer<br />

Ai<strong>de</strong>d Verification, LNCS 1254, pages 476-479, 1997.<br />

[Hol04] Gerald J. Holzmann. The SPIN Mo<strong>de</strong>l Checker. Addison-Wesley, 2004.<br />

[JPF] http://javapathfin<strong>de</strong>r.sourceforge.net/<br />

[Mc92] Kenneth L. McMillan. Symbolic Mo<strong>de</strong>l Checking. An approach to the<br />

state explosion problem. PhD thesis, Carnegie Mellon University, 1992.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!