Desarrollo de una herramienta para mejorar la calidad de código ABAP Autor: Francisco Rafael Yépez Pino Directores: José Francisco Chicano García, Enrique Alba Torres Introducción En todo proceso de desarrollo software existe un conjunto de tareas cuyo fin es asegurar la calidad del producto. Algunos ejemplos son la fase de pruebas, el uso de reglas de estilo de programación, la elaboración de plantillas para la documentación del software, etc. El control de calidad es uno de los más grandes retos que se pueden encontrar en un proyecto software, ya que un error en el software, aún siendo pequeño, puede suponer una gran pérdida económica para la empresa desarrolladora si es detectado demasiado tarde. Es por esto que se dedica tanto esfuerzo al control de calidad. Algunas de las tareas cuyo objetivo es asegurar la calidad del software pueden automatizarse, ahorrando una considerable cantidad de recursos a la empresa. Por ejemplo, existen herramientas que permiten organizar y simplificar las pruebas unitarias [5], o técnicas que pueden usarse para generar casos de prueba de forma automática [6]. Este dominio de investigación es muy extenso y evoluciona rápidamente para crear nuevas herramientas que facilitan la labor de los ingenieros encargados de velar por la calidad del software, ya que es bien conocido que la fase de pruebas es una de las más costosas de los proyectos (Figura 1). Figura 1 La fase de pruebas es la más costosa de los proyectos software. El uso de técnicas para mejorar la calidad del producto durante su desarrollo, como la inspección de código, permite reducir el coste del proyecto. En el sector del software para gestión empresarial, SAP [1] es una empresa líder a nivel mundial. A través de sus soluciones de software de gestión, SAP ofrece alternativas para más de 25 sectores industriales. Estas soluciones ayudan a las empresas a mejorar las relaciones con sus clientes, a colaborar con sus socios y a ser eficientes en su cadena de suministro y operativa del negocio. Por este motivo, el desarrollo de herramientas de ayuda para la programación en entornos SAP tiene asegurado un gran impacto en el sector empresarial. El desarrollo de aplicaciones dentro de las plataformas software de SAP se realiza habitualmente usando el lenguaje de programación ABAP [4] (Advanced Business Application Programming). Se trata de un lenguaje de 4ª generación con una gran cantidad de palabras clave y sentencias de muy alto nivel. Este lenguaje fue desarrollado por SAP como lenguaje de informes para SAP R/2 en los años 80. Inicialmente fue pensado como un lenguaje de programación para que los usuarios finales pudieran manipular la información, pero con el paso del tiempo sus distintas versiones fueron volviendo demasiado complicadas para los usuarios normales. Actualmente son necesarios programadores experimentados para realizar desarrollos. Al tratarse de un lenguaje propiedad de SAP, las herramientas para edición, compilación y depuración de código ABAP se encuentran integradas dentro de sus plataformas (e.g. NetWeaver, R/3). Estas herramientas ofrecen un análisis muy limitado del código ABAP. Desde un punto de vista de la calidad del código generado sería interesante tener a disposición del programador herramientas de análisis estático del código que realicen una comprobación más allá del propio análisis sintáctico. Así por ejemplo, sería interesante analizar las sentencias de definición y uso de variables para comprobar si todas las variables son usadas o analizar la existencia de código no alcanzable. Al final del párrafo anterior mencionamos dos ejemplos de comprobaciones sencillas sobre el código fuente que permitiría detectar posibles errores en la codificación. Herramientas para realizar tales comprobaciones ya existen para otros lenguajes de programación como Java (FindBugs [2]) o C (lint [3]). El objetivo del presente proyecto es desarrollar una herramienta para el análisis estático de código ABAP que compruebe un conjunto de reglas de buen estilo de programación. Una herramienta de este tipo permitiría ahorrar una gran cantidad de tiempo a los programadores de ABAP que actualmente deben compensar la ausencia de dicha herramienta mediante horas de análisis y depuración. Puesto que ABAP es un lenguaje masivamente utilizado en el software para gestión empresarial, se estima que el impacto de la mencionada herramienta puede ser enorme. El lenguaje de implementación será principalmente Java, ya que es un lenguaje multi-plataforma y previene de posibles problemas de despliegue. Objetivos El objetivo del presente proyecto de fin de carrera es desarrollar una herramienta, principalmente implementada en Java, que permita realizar análisis estático de código ABAP. Dicha herramienta deberá comprobar el cumplimiento de un conjunto de reglas de estilo de programación y deberá ser fácilmente extensible. Como entrada, la herramienta recibirá el código ABAP y el conjunto de reglas a comprobar junto con parámetros para las mismas. La salida del mismo deberá ser un informe detallando qué reglas se cumplen. Además, para las reglas que no se cumplen se deberá informar del motivo y de una posible solución. Fases del proyecto Este proyecto posee varias fases de documentación previas al desarrollo, ya que tanto las plataformas de SAP como el lenguaje ABAP son muy extensos. 1. Documentación acerca de la plataforma SAP NetWeaver (utilizada para el proyecto). 2. Aprendizaje del lenguaje ABAP. 3. Determinación de las reglas de estilo a implementar. 4. Diseño a alto nivel de la herramienta de análisis estático. 5. Desarrollo de la herramienta y conexión con SAP NetWeaver. 6. Implementación de las reglas dentro de la herramienta. 7. Prueba de la herramienta en un entorno real y análisis del ahorro de tiempo para el programador. 8. Creación de sitio Web con los resultados del proyecto. Medios materiales Equipo portátil o sobremesa Plataforma SAP NetWeaver Entorno de desarrollo Java Editor de textos y compilador de LaTeX para la memoria y documentos intermedios. Libros y artículos aportados por los directores del proyecto. Revistas de la hemeroteca y de acceso electrónico. Referencias [1] http://www.sap.com [2] http://findbugs.sourceforge.net [3] Ian F. Darwin, Checking C Programs with Lint, 1988, O’Reilly [4] Raquel Hijón, Programación en ABAP/4 para SAP R/3, 2005, Univ. Pontificia de Comillas [5] Vincent Massol, JUnit in Action, 2003, Manning Publications Company [6] Phil McMinn, Search-Based Software Test Data Generation: A Survey, Software Testing, Verification and Reliability, 14(2), pp. 105-156, 2004