Extracción y Análisis de Información Estática Orientada a la Comprensión de Programas para Sistemas OO
Abstract
Sin lugar a dudas, una de las tareas más complejas y que más tiempo consume en el ciclo de vida de una aplicación es la de Mantenimiento. En este entorno, las actividades que más tiempo consumen son aquellas que debe ejecutar el programador para lograr un completo entendimiento del sistema. A partir de esta necesidad, es que surge una disciplina de la Ingeniería de Software denominada Comprensión de Programas (CP). En este contexto, muchos autores afirman que un programador efectivamente comprende un programa cuando puede relacionar el Dominio del Problema con el Dominio del Programa. El primero hace referencia a la salida del sistema bajo estudio. El segundo se relaciona con los componentes del sistema utilizados para producir dicha salida. En este artículo se presenta una estrategia que asiste al programador durante el proceso de Comprensión de Programas de sistemas Orientados a Objetos (OO). Dicha estrategia realiza las siguientes tareas: i) extrae el Grafo Estático de Llamadas a Métodos (GELM), ii) aplica filtros que eliminan métodos muy relacionados con detalles de implementación, del GELM y iii) posibilita el análisis del GELM reducido, con el propósito de inferir funcionalidades. De esta manera la estrategia planteada pretende asistir al arduo proceso cognitivo que implica comprender un sistema.
Downloads
References
Bacon, D. F., y Sweeney, P. F. (1996). Fast Static Analysis of C++ Virtual Function Calls. ACM Sigplan Notices, 31(10), 324–341.
Ball, T. (1999). The Concept of Dynamic Analysis. En Software Engineering -ESEC/FSE99 (pp. 216–234).
Bennett, K., y Rajlich, V. (2000). Software Maintenance and Evolution: a Roadmap. En Proceedings of the Conference on the Future of Software Engineering (pp. 73–87). New York, NY, USA: ACM.
Berón, M., Henriques, P., Varanda Pereira, M. J., y Uzal, R. (2007). PICS un Sistema de Comprensión e Inspección de Programas. Congreso Argentino de Ciencias de la Computacion (CACIC07).
Beron, M. (2010). Program Inspection to interconnect Behavioral and Operational Views for Program Comprehension. Ph.D Thesis Dissertation at University of Minho. Braga. Portugal.
Binkley, D. (2007). Source Code Analysis: a Road Map. En 2007 Future of Software Engineering (pp. 104–119).
Boehm, B. (1984). Software Engineering Economics. Software Engineering, EEE Transactions on (1), 4–21.
Booch, G., James, R., y Jacobson, I. (2004). The Unified Software Development Process. Addison-Wesley Object Technology Series.
Bracha, G., Darcy, J. D., y Von Der Ahe, P. (2010, febrero 23). Introspection Support for Local and Anonymous Classes. Google Patents. (US Patent 7,669,184)
Brandes, U. (2001). A Faster Algorithm for Betweenness Centrality*. Journal of Mathematical Sociology, 25(2), 163–177.
Brooks, R. (1978). Using a Behavioral Theory of Program Comprehension in Software Engineering. Proceedings of the 3rd International Conference on Software Engineering, 196–201.
Cornelissen, B., Zaidman, A., Holten, D., Moonen, L., van Deurse, A., y Wijk, J. (2008). Execution Trace Analysis through Massive Sequence and Circular Bundle Views. Report TUD-SERG-2008-008.
Da Cruz, D., Henriques, P., y Pinto, J. (2009). Code Analysis: Past and Present. Proceeding of the Third International Workshop on Foundations and Techniques for Open Source Software Certification, 00, 1-10.
De Lucia, A. (2001). Program Slicing: Methods and Applications. En Source Code Analysis and Manipulation, 2001. Proceedings. First IEEE International Workshop on (pp. 142–149).
Eisenbarth, T., Koschke, R., y Simon, D. (2001). Aiding Program Comprehension by Static and Dynamic Feature Analysis. En Software Maintenance, 2001. Proceedings. IEEE International Conference on (pp. 602–611).
Fielding, R. (2000). Representational State Transfer. Architectural Styles and the Design of Netowork-based Software Architecture, 76–85.
Gupta, R., Soffa, M. L., y Howard, J. (1997). Hybrid Slicing: Integrating Dynamic Information with Static Analysis. ACM Transactions on Software Engineering and Methodology (TOSEM), 6(4), 370–397.
Hamou-Lhadj, A., y Lethbridge, T. (2006). Summarizing the Content of Large Traces to Facilitate the Understanding of the Behaviour of a Software System. En Program Comprehension, 2006. ICPC 2006. 14th IEEE International Conference on (pp. 181–190).
Lieberman, H., y Fry, C. (1995). Bridging the Gulf Between Code and Behavior in Programming. En Proceedings of the SIGCHI Conference on Human Factors in Computing Systems (pp. 480–486).
Littman, D., Pinto, J., Letovsky, S., y Soloway, E. (1987). Mental Models and Software Maintenance. Journal of Systems and Software, 7(4), 341–355.
Maletic, J., Leigh, J., Marcus, A., y Dunlap, G. (2001). Visualizing Object Oriented Software in Virtual Reality. En Proceedings of the 9th International Workshop on Program Comprehension (IWPC’01) (pp. 26–35). Society Press.
Murphy, G. C., Notkin, D., Griswold, W. G., y Lan, E. S. (1998). An Empirical Study of Static Call Graph Extractors. ACM Transactions on Software Engineering and Methodology (TOSEM), 7(2), 158–191.
Nicol, G., Wood, L., Champion, M., y Byrne, S. (2001). Document Object Model (DOM) Level 3 Core Specification.
Pigoski, T. (1996). Practical Software Maintenance: Best Practices for Managing
Your Software Investment. New York, NY, USA: John Wiley & Sons, Inc.
Rohatgi, A., Hamou-Lhadj, A., y Rilling, J. (2008). An Approach for Mapping Features to Code Based on Static and Dynamic Analysis. En Program Comprehension, 2008. ICPC 2008. The 16th IEEE International Conference on (pp. 236–241).
Rugaber, S. (1995). Program comprehension. Encyclopedia of Computer Science and Technology, 35(20), 341–368.
Spärck Jones, K. (2007). Automatic Summarising: the State of the Art. Information Processing & Management, 43(6), 1449–1481.
Storey, M.-A. (2005). Theories, Methods and Tools in Program Comprehension: Past, Present and Future. Proceedings of the 13th International Workshop on Program Comprehension, 181–191.
Sundaresan, V., Hendren, L., Razafimahefa, C., Vallée-Rai, R., Lam, P., Gagnon, E., y Godin, C. (2000). Practical Virtual Method Call Resolution for Java. ACM SIGPLAN Notices, 35(10), 264–280.
von Mayrhauser, A., y Vans, M. (1994). Comprehension Processes During Large Scale Maintenance. En Proceedings of the 16th International Conference on Software Engineering (pp. 39–48).
The articles published in the journal Ciencia y Tecnología are the exclusive property of their authors. Their opinions and content belong to their authors, and the Universidad de Palermo declines all responsibility for the rights that may arise from reading and/or interpreting the content of the published articles.
The reproduction, use or exploitation by any third party of the published articles is not authorized. Its use is only authorized for exclusively academic and/or research purposes.