Вы находитесь на странице: 1из 4

Propuesta para un sistema de vericacin de modelos para programas codicados en JavaScript

Juan Carlos Coto Ulate


31-2250, Tres Ros La Unin, Cartago

b28439@ecci.ucr.ac.cr RESUMEN
En el presente trabajo se muestra una revisin a la tcnica o e de vericacin formal de software, la revisin de modelos, y o o su aplicabilidad a una plataforma de desarrollo JavaScript. Como parte del trabajo de investigacin, se determin la o o necesidad de desarrollar un sistema de vericacin particular o para este lenguaje, y para este n se muestra una propuesta de alto nivel de un ujo de trabajo y un API complementario que funcionen como base para futuros desarrollos. es ampliamente conocida; adems, existen plataformas para a la implementacin de servidores, pertenecientes la capa de o aplicacin. Dentro de las caracter o sticas que lo hacen tan atractivo es su simplicidad gramatical, tipicacin dbil de o e variables y la utilizacin de funciones como objetos de primer o nivel [12]. Una de las ms evidentes caracter a sticas de la revisin foro mal del software es que su capacidad de apliacin en un amo biente industrial es limitada, sobre todo porque los programas reales son considerablemente ms complejos que los utia lizados en la academia; generalmente, su complejidad hace prohibitiva la utilizacin de algn mtodo de vericacin o u e o formal, ya que la elaboracin de modelos formales tienden a o requerir un alto grado de conocimiento y trabajo. Sin embargo, si se cuenta con algn tipo de lenguaje de codicacin u o (en este caso, la lgica temporal o implementaciones de la o misma por medio de algn lenguaje de programacin), es u o posible que se pueda codicar y revisar un programa ms a interesante y que se encuentre ms cercano a lo que se utia lizar en la produccin de software. a o Este art culo describe los hallazgos encontrados a partir de un proceso de investigacin orientado hacia el diseo e o n implementacin de un programa para la revisin de modeo o los para JavaScript, en aras de incrementar la productividad en el desarrollo de pruebas de software por medio de la automatizacin. Se analiz la viabilidad de la utilizacin de o o o un programa de vericacin de modelos, SPIN, para efectuar o una vericacin sobre un modelo extra a partir de un proo do grama codicado en JavaScript. En efecto, la adaptacin de o un sistema para vericacin de modelos a una plataforma se o considera como una forma satisfactoria de mejorar la calidad considerablemente para software desarrollado en la misma [5]. Inicialmente, se investig el estado de la cuestin de o o la vericacin de modelos en la actualidad; luego, se proo cedi a analizar los requerimientos de un sistema de esta o ndole, para ser aplicado a un lenguaje como JavaScript. Finalmente, se intent integrar el vericador de modelos meno cionado con la plataforma NodeJS de JavaScript, obteniendo como conclusin que la tarea de integracin resulta ser ms o o a compleja que implementar una infraestructura adaptada a un lenguaje como JavaScript. Como resultado de este proceso, se presenta una propuesta para un sistema de vericacin de modelos en JavaScript, haciendo nfasis en el ujo o e de trabajo requerido para su implmentacin. Cabe destacar o que existen otras alternativas de vericacin de modelos, tal o como lo es la utilizacin de lenguajes de arboles anidados, o que presentan ventajas como la representacin eciente de o una cantidad de estados no trivial por medio de relaciones

1.

INTRODUCCIN

[1] El anlisis formal del software es una tcnica automatia e zada bien formada que permite razonar acerca de la semna tica del software con respecto a una especicacin precisa o del comportamiento esperado, para el cual tambin se han e denido fuentes de incumplimiento [7]. La vericacin de o modelos, Model Checking es una rama de la revisin foro mal del software en la cual se revisa de manera algor tmica si un modelo abstracto, en representacin de un diseo de o n software o hardware, satisface una especicacin formal exo presada como una frmula de lgica temporal [3]. El trabajo o o en este campo ha sido de mucho inters principalmente dee bido a su capacidad de ser implementado prcticamente, soa bre todo en software, como un mtodo automatizable vlido e a para la vericacin de programas. La utilizacin de lgicas o o o temporales poderosas y simples, para especicar precondiciones hace que sea accesible; adicionalmente, la simplicidad del concepto sobre el cual opera (bsicamente, la repa resentacin de un programa como un autmata de estados o o al cual se le aplica un proceso de vericacin) hace que sea o muy interesante como blanco de un proceso de investigacin o aplicada y una posible implementacin [13]. o Adicionalmente, JavaScript es un lenguaje funcional muy popular en la actualidad, particularmente para la implementacin de aplicaciones Web. Su utilizacin prcticao o a mente ubicua en los navegadores modernos como el componente programtico para el DOM (Document Object Model) a

Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for prot or commercial advantage and that copies bear this notice and the full citation on the rst page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specic permission and/or a fee. Copyright 2012 UCR 0-12345-67-08/07/2012 ...$00.00.

indecidible no implica que casos espec cos del mismo lo sean [11]. 2. Intratabilidad : La cantidad de estados de un programa (donde un estado se dene como el contador de programa de un sistema de software, aunado al conjunto de variables en memoria que utiliza) tender a crecer, a debido a la combinacin de valores que puede tomar o cada uno de sus elementos; esto, por lo tanto, implica que se debe realizar algn proceso de reduccin de la u o cantidad de estados que sern evaluados. a 3. Compromiso de recursos: Para amortizar los efectos de los problemas de intratabilidad e indecidibilidad, debe considerarse qu tan automatizable, a qu escala e e puede operar, la cobertura del software que tendr y a la precisin (qu tan cercana al cdigo fuente es la repo e o resentacin del programa que se analizar) del mtodo o a e de vericacin que se implementar. Ejemplos de esto o a incluyen la poda condicional de la estructura del programa, organizacin del espacio de bsqueda de los o u estados y la especicacin de secciones invariantes del o cdigo (a manera de abstraccin), p entre otros [4]. o o

Figura 1: Razn observada entre el nivel de detalle del o anlisis del software y los recursos que requiere. a no estndares entre nodos de un arbol [1]. a

2.

MARCO TERICO

El proceso de seleccin de un metodo para la vericacin o o de la calidad del software no es trivial. La principal dicultad se encuentra en denir qu tipo de calidad se buscar e a garantizar, y por lo tanto bajo qu tipo de restricciones es e vlido otorgar esa garant En la prctica, la garant de a a. a a la correctitud total de un diseo, donde se entiende la corn rectitud total como la ausencia por completo de errores en dicho diseo, es generalmente prohibitivamente cara [6]. En n algunos casos se ha visto que, a medida que se aumenta el nivel de detalle o la exigencia de una garant sobre algn a u sistema, los recursos necesarios para realizarla incrementan correpondientemente, posiblemente de manera exponencial [9], como se muestra en la Figura 1. Por este motivo, es necesario establecer algn criterio para u determinar si un mtodo de vericacin formal es viable para e o la utilizacin industrial y prctica. De acuerdco con [6], un o a conjunto de criterios aplicable es: 1. El mtodo debe proveer una garant rigorosa de calie a dad. 2. El mtodo debe permitir el anlisis esttico del softe a a ware (es decir, es utilizable sin ejecutar el software blanco). 3. El mtodo debe ser altamente automatizable y permie tir escalar para lidiar con la complejidad de los sistemas de software. Para la vericacin de modelos, en particular, es necesario o establecer un conjunto de elementos que inuyen en el diseo n e implementacin de un mtodo, de manera que se posibilite o e la aplicacin para software de una complejidad considerable o que incluyen [9]: 1. Indecidibilidad : Es imposible escribir un programa capaz de determinar si cualquier programa satisface una propiedad determinada; por esta razn, deben estableo cerse condiciones sobre el tipo de anlisis que se rea alizar para evitar la indecidibilidad en la vericacin: a o el hecho de que el problema general de la vericacin es o

2.1

Trabajo relacionado

En [3], Clarke, Emerson y Sifakis (2009) describen el concepto general de vericacin de modelos, estableciendo las o bases matemticas algor a tmicas que permiten su justicacin o y funcionamiento. Se utilizan autmatas de estados nitos o para denir procesos concurrentes en un programa, y se denen ciertas restricciones temporales sobre los estados del mismo. Adicionalmente, se exploran opciones, como la simplicacin de un modelo o la reduccin de estados repetio o tivos, para limitar el espacio de estados posibles de un programa y hacer factible su vericacin. Finalmente, se propoo nen visiones interesantes para el futuro, dentro de las cuales se incluye lograr, mediante alguna metodolog garantizar a, la correctitud de los programas, tal y como sucede con mtoe dos usados en f sica y algunas ingenier de manera que se as, comporten de manera predecible y conocida. En [10], Iosif (2000) discute la utilizacin de Spin como o software para vericacin de modelos, mencionando alguo nas restricciones importantes con respecto al ciclo de vida de las variables y estados dentro de programas Java. Adicionalmente menciona la importancia de incorporar extensiones a un sistema de vericacin que sea capaz de lidiar o con esas restricciones a nivel de estado. Explica que un modelo aceptable de un programa en Java ser considerar a un autmata en el cual los nodos determinan los posibles o estados del programa y las transiciones ser instrucciones an de cdigo. Plantea, de manera similar a lo que se busca o en este proyecto, un sistema de vericacin eciente para o incorporacin con prcticas de desarrollo. o a Ferreira, Loureiro y Oliveira (2007), en [8] comentan su experiencia desarrollando un sistema de vericacin de modo elos para Java, basado en anotaciones en comentarios. Se utiliza un acercamiento en el cual se especica tanto el modelo como los requerimientos y luego se proveen como insumo para Spin, el mismo programa de vericacin que ser utio a lizado en este proyecto. Chandra, Godefroid y Palm (2002) en [2], describen una posible aplicacin de la vericacin de modelos a nivel ino o dustrial, donde se utiliza para determinar la validez de un sistema de procesamiento de llamadas de una compa real. na

Dentro de las caracter sticas que se mencionan como atractivas se encuentra la existencia de un mtodo formal algoe r timico para realizar la revisin y la posibilidad de, por o medio de la representacin adecuada de los estados y requero imientos de un sistema, realizar procesos automatizados de vericacin sobre el mismo, an a un nivel de complejidad o u industrial. Adicionalmente, se menciona la importancia de analizar cuidadosamente el espacio de estados para determinar qu condiciones se debern imponer sobre los casos e a evaluados por el vericador, para evitar una explosin ino manejable de estados del programa.

de entrada de lgicas temporales, para identicar las funo ciones que se sometern a un anlisis sintctico para generar a a a el modelo actual del programa y nalmente, a partir de estos dos insumos (especicacin determinada por anotaciones y o modelo extra del programa), alimentar al vericador de do modelos, lo que permitir determinar si el modelo especia cado cumple las restricciones especicadas o no. La funcin o de ejecucin, en caso de que alguna condicin no se cumplio o era, debe mostrar un contraejemplo.

4.

RESULTADOS

3. 3.1

METODOLOGA Metodologas relacionadas


Especicacin de restricciones por comentarios en Java

3.1.1

Los investigadores en [8] denen un formato para las anotaciones Java a utilizar, para denir el modelo y la especicacin. Luego, un programa se anota, en los mtodos que o e son interesantes para la vericacin, con comentarios que ino dican qu se espera del modelo (@spec) y cmo se comporta e o el modelo (@model), de manera que, por medio de un plugin de Eclipse se pueda recopilar la informacin y enviarla o a un programa de vericacin de modelos. Una vez envio ado el programa para anlisis, el vericador determina si se a cumple la especicacin indicada para los mtodos anotao e dos, usando la descripcin dada por la anotacin de modelo o o comparada contra los requerimientos dados en la anotacin o de especicacin. o

3.1.2

Utilizacin de generador de pruebas

En [2] se propone un sistema de pruebas de software basado en la vericacin de modelos utilizando el software VeriSoft. o El sistema sometido a vericacin consiste de un sistema de o procesamiento de llamadas, CDMA, implantado sobre una infraestructura de comunicacin de telefon mvil. Para reo a o alizar la prueba, se utiliza un ambiente simulado en software donde se prueba el programa, que utiliza la infraestructura ya existente para soportar las operaciones normales del sistema. Se utiliza un programa generador de pruebas (test driver) y un programa vericador de respuestas del sistema, que, a medida que se efectan solicitudes al sistema, veriu ca que el sistema est generando las respuestas esperadas. e En resumen, la arquitectura del sistema de vericacin cono siste en un mdulo externo al programa, con interfaces al o mismo, que puede realizar llamadas y vericar las respuestas generadas. Para lograr una vericacin efectiva del estado o de espacios del programa, se utilizaron ciertas restricciones sobre algunas variables, lo que permite limitarlo en ciertas instancias, al mismo tiempo permitiendo el desarrollo de operaciones sucientemente similares a las normales para darle validez a las pruebas [2].

A partir del proceso de investigacin e implementacin o o del sistema de integracin de SPIN a una plataforma de o desarrollo JavaScript, se determin que la tarea no es eo cientemente realizable. Principalmente, esta condicin se o debe a que el vericador de modelos no soporta el anlisis a de programas codicados en lenguajes dbilmente tipados, e y las modicaciones necesarias para que lo haga requerir an de un trabajo similar o mayor al desarrollo de un vericador especializado para JavaScript, sin, evidentemente, rendir los mismos resultados. Utilizando como insumo el trabajo realizado para analizar las implicaciones de esta adaptacin, se o propone un ujo de trabajo y un API, que se muestra en el Programa 1 como base para la implementacin de un sistema o de vericacin de modelos para el lenguaje JavaScript. En la o Figura 2 se especica el ujo de trabajo propuesto: se toma un programa de entrada, al cual se le somete a un proceso de anlisis sintctico, analizando las funciones marcadas por a a el API como interesantes. Con el arbol de sintxis abstracto a generado, se realiza una traduccin a un lenguaje de repreo sentacin de procesos intermedio, al cual se le efecta una o u reduccin esttica de estados, hasta obtener un modelo suo a cientemente abstracto (de acuerdo con algn parmetro), el u a cual se verica contra una especicacin codicada en algn o u sabor de lgica temporal lineal y se retorna un documento o con un contraejemplo en caso de que la especicacin no se o cumpliera, o bien, se retorna alguna indicacin de xito si el o e programa ha sido vericado satisfactoriamente. function analyzeCode(code) { ... } function checkFun(fName, spec, fBody) { ... } function executeCheck() { ... } function main() { ... } Programa 1: API propuesto para vericador de modelos de programas JavaScript. El segmento de cdigo Programa 1 muestra el API que se o deni para el sistema de vericacin. La funcin de anao o o lyzeCode permite realizar el anlisis sintctico de una funa a cin, retornando un modelo (al cual se le han aplicado las o tcnicas de reduccin de estados implementadas). Luego, e o checkFun indica que se debe tomar en cuenta una funcin o para la vericacin; executeCheck realiza la vericacin para o o el programa de entrada y nalmente main permite la ejecucin del programa para realizar la vericacin. o o

3.2

Metodologa propuesta

La metodolog que se plante para este proyecto de ina o vestigacin se asemeja a la expuesta en Ferreira et. al., 2007, o con la salvedad de que ha sido adaptada para el paradigma funcional bajo el cual se comporta JavaScript. Utilizando como sistema de vericacin al programa SPIN, se deni un o o API para generar especicaciones de acuerdo con su formato

Figura 2: Flujo de trabajo propuesto para vericador de modelos de programas JavaScript.

5.

CONCLUSIONES Y TRABAJO FUTURO

Se considera que la mayor contribucin de este trabajo se o encuentra en la labor de revisin del estado de la cuestin de o o la revisin de modelos, y su aplicabilidad a una plataforma o de desarrollo JavaScript. Adems, como trabajo futuro, se a ha determinado que, para la implementacin de un sistema o como el que se propone en este art culo, se requiere efectuar un anlisis a profundidad de la gramtica del lenguaje a a JavaScript, de manera que sea posible disear mtodos efecn e tivos de reduccin de estados, lo cual es imperativo para deo sarrollar un sistema efectivo. En efecto, se ha determinado que en este nicho particular existen muchas oportunidades para desarrollar un sistema de vericacin efectivo, y, a su o vez, es necesario mucho trabajo de investigacin para contar o con los conocimientos y recursos necesarios para hacerlo.

6.

REFERENCIAS BIBLIOGRFICAS

[1] R. Alur, S. Chaudhuri, and P. Madhusudan. Software model checking using languages of nested trees. ACM Trans. Program. Lang. Syst., 33(5):15:115:45, Nov. 2011. [2] S. Chandra, P. Godefroid, and C. Palm. Software model checking in practice: an industrial case study. In Proceedings of the 24th International Conference on Software Engineering, ICSE 02, pages 431441, New York, NY, USA, 2002. ACM. [3] E. M. Clarke, E. A. Emerson, and J. Sifakis. Model checking: algorithmic verication and debugging. Commun. ACM, 52(11):7484, Nov. 2009. [4] P. T. Darga and C. Boyapati. Ecient software model checking of data structure properties. SIGPLAN Not., 41(10):363382, Oct. 2006. [5] P. de la Cmara, M. M. Gallardo, P. Merino, and a D. Sann. Model checking software with well-dened a apis: the socket case. In Proceedings of the 10th international workshop on Formal methods for industrial critical systems, FMICS 05, pages 1726, New York, NY, USA, 2005. ACM.

[6] V. DSilva, D. Kroening, and G. Weissenbacher. A survey of automated techniques for formal software verication. Trans. Comp.-Aided Des. Integ. Cir. Sys., 27(7):11651178, July 2008. [7] M. B. Dwyer, J. Hatcli, R. Robby, C. S. Pasareanu, and W. Visser. Formal software analysis emerging trends in software model checking. In 2007 Future of Software Engineering, FOSE 07, pages 120136, Washington, DC, USA, 2007. IEEE Computer Society. [8] G. Ferreira, E. Loureiro, and E. Oliveira. A java code annotation approach for model checking software systems. In Proceedings of the 2007 ACM symposium on Applied computing, SAC 07, pages 15361537, New York, NY, USA, 2007. ACM. [9] A. Hu. Automatic formal verication of software: Fundamental concepts. In Communications, Circuits and Systems, 2009. ICCCAS 2009. International Conference on, pages 11551159. IEEE, 2009. [10] R. Iosif. Formal verication applied to java concurrent software. In Proceedings of the 22nd international conference on Software engineering, ICSE 00, pages 707709, New York, NY, USA, 2000. ACM. [11] R. Jhala and R. Majumdar. Software model checking. ACM Computing Surveys (CSUR), 41(4):21, 2009. [12] S. Tilkov and S. Vinoski. Node.js: Using javascript to build high-performance network programs. IEEE Internet Computing, 14(6):8083, Nov. 2010. [13] J. Woodcock, P. Larsen, J. Bicarregui, and J. Fitzgerald. Formal methods: Practice and experience. ACM Computing Surveys (CSUR), 41(4):19, 2009.

Вам также может понравиться