Introducción - NEO - Universidad de Málaga
Introducción - NEO - Universidad de Málaga
Introducción - NEO - Universidad de Málaga
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.