Apoiando o Entendimento e a Evolução de Software Legado: Um Estudo de Caso com o iVProg
Resumo
A compreensão de sistemas Web legados orientados a eventos é dificultada pela fragmentação dos fluxos de controle assíncronos entre manipuladores de eventos, callbacks, chamadas JavaScript nativas, mutações de estado e atualizações dinâmicas de interface. Embora modelos de linguagem de grande escala (LLMs) possam apoiar tarefas de compreensão de programas, prompts baseados em código bruto tendem a incluir informação irrelevante, exceder limites práticos de contexto e produzir explicações pouco rastreáveis. Este artigo apresenta uma abordagem para extrair fluxos de interação a partir de sistemas Web, combinando Grafo de Propriedades de Código (CPG), delimitação por grafo de chamadas e fatiamento reverso restrito por dependências. A ideia central é usar análise simbólica para selecionar apenas os elementos estruturalmente relacionados a uma interação de usuário e aos seus efeitos observáveis, produzindo uma representação compacta e rastreável tanto para explicação assistida por LLMs quanto para futuras visualizações de comportamento. A abordagem identifica pontos de entrada associados a eventos, delimita uma zona de contenção interprocedural, filtra sinks alcançáveis e reconstrói dependências relevantes para cada fluxo. Avaliamos a abordagem em três cenários de compreensão de um sistema Web educacional, comparando explicações geradas a partir de código bruto e de fluxos extraídos. Os resultados indicam redução de aproximadamente 69% no tamanho do contexto textual e sugerem potenciais ganhos em foco e rastreabilidade das explicações geradas. Esse avanço apoia a manutenção de software ao reduzir o esforço de compreensão em sistemas legados extensos, que frequentemente dependem de bibliotecas descontinuadas e carecem de documentação.
Palavras-chave:
compreensão de programas, manutenção de software, sistemasWeb, fluxos de interação, grafo de propriedades de código, fatiamento de programa bidirecional, modelos de linguagem, abordagem neurosimbólica
Referências
Esben Andreasen and Anders Møller. 2014. Determinacy in Static Analysis of jQuery. In Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems Languages & Applications (OOPSLA). ACM, 17–31. DOI: 10.1145/2660193.2660214
Gábor Antal, Péter Hegedűs, Zoltán Tóth, Rudolf Ferenc, and Tibor Gyimóthy. 2018. Static JavaScript Call Graphs: A Comparative Study. In Proceedings of the 18th IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM). IEEE, 177–186. DOI: 10.1109/SCAM.2018.00028
Ted J. Biggerstaff, Bharat G. Mitbander, and Dallas E. Webster. 1994. Program Understanding and the Concept Assignment Problem. Commun. ACM 37, 5 (1994), 72–82.
Leônidas de Oliveira Brandão and Anarosa Alves Franco Brandão. 2012. iVProg – Uma Ferramenta de Programação Visual para o Ensino de Algoritmos. (2012).
Ruven Brooks. 1983. Towards a Theory of the Comprehension of Computer Programs. International Journal of Man-Machine Studies 18, 6 (1983), 543–554.
Guiming Hardy Chen, Shunian Chen, Ziche Liu, Feng Jiang, and Benyou Wang. 2024. Humans or LLMs as the Judge? A Study on Judgement Bias. In Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing. 8301–8327.
Igor Felix, Lucas de Souza, Leônidas Brandão, Bernardo Ferreira, and Anarosa Brandão. 2019. iVProg: Programação Interativa Visual e Textual na Internet. In Anais dos Workshops do VIII Congresso Brasileiro de Informática na Educação (WCBIE 2019). Sociedade Brasileira de Computação (SBC), Brasília, DF, Brasil, 1164. DOI: 10.5753/cbie.wcbie.2019.1164
Jeanne Ferrante, Karl J. Ottenstein, and Joe D. Warren. 1987. The Program Dependence Graph and Its Use in Optimization. ACM Transactions on Programming Languages and Systems 9, 3 (1987), 319–349. DOI: 10.1145/24039.24041
José Fragoso Santos, Petar Maksimović, Théotime Grohens, Julian Dolby, and Philippa Gardner. 2018. Symbolic Execution for JavaScript. In Proceedings of the 20th International Symposium on Principles and Practice of Declarative Programming (PPDP ’18). ACM, New York, NY, USA, 11:1–11:14. DOI: 10.1145/3236950.3236956
Philippa Gardner, Sergio Maffeis, and Gareth Smith. 2012. Towards a program logic for JavaScript. In Proceedings of the 39th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL ’12). ACM, New York, NY, USA, 31–44. DOI: 10.1145/2103621.2103663
Google DeepMind. 2025. Gemini 2.5 Flash. [link]. Acessado em: 10 ago. 2026.
Daniel Jackson and Eugene J. Rollins. 1994. A New Model of Program Dependences for Reverse Engineering. In Proceedings of the ACM SIGSOFT Symposium on Foundations of Software Engineering. 2–10.
Ivar Jacobson. 1987. Object-oriented development in an industrial environment. SIGPLAN Not. 22, 12 (Dec. 1987), 183–191. DOI: 10.1145/38807.38824
Ivar Jacobson, Magnus Christerson, Patrik Jonsson, and Gunnar Övergaard. 1992. Object-Oriented Software Engineering: A Use Case Driven Approach (revised ed.). Addison-Wesley.
Ahmed Lekssays, Hamza Mouhcine, Khang Tran, Ting Yu, and Issa Khalil. 2025. LLMxCPG: Context-Aware Vulnerability Detection Through Code Property Graph-Guided Large Language Models. In Proceedings of the 34th USENIX Security Symposium. 489–507.
Nelson F. Liu, Kevin Lin, John Hewitt, Ashwin Paranjape, Michele Bevilacqua, Fabio Petroni, and Percy Liang. 2024. Lost in the Middle: How Language Models Use Long Contexts. Transactions of the Association for Computational Linguistics 12 (2024), 157–173.
Thomas Reps and Genevieve Rosay. 1995. Precise Interprocedural Chopping. In Proceedings of the ACM SIGSOFT Symposium on Foundations of Software Engineering. 41–52.
José Fragoso Santos, Petar Maksimović, Gabriela Sampaio, and Philippa Gardner. 2019. JaVerT 2.0: compositional symbolic execution for JavaScript. Proc. ACM Program. Lang. 3, POPL (2019), 66:1–66:31. DOI: 10.1145/3290379
ShiftLeft Inc. and Joern Contributors. 2024. Joern: The Bug Hunter’s Workbench. [link]. Acessado em: 10 jul. 2026.
Margaret-Anne Storey. 2005. Theories, Methods and Tools in Program Comprehension: Past, Present and Future. In Proceedings of the 13th International Workshop on Program Comprehension. 181–191.
Alejandro Velasco, Aya Garryyeva, David N. Palacio, Antonio Mastropaolo, and Denys Poshyvanyk. 2025. Toward Neurosymbolic Program Comprehension. In Proceedings of the IEEE/ACM International Conference on Program Comprehension.
Jason Wei, Xuezhi Wang, Dale Schuurmans, Maarten Bosma, Brian Ichter, Fei Xia, Ed H. Chi, Quoc V. Le, and Denny Zhou. 2022. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. In Advances in Neural Information Processing Systems (NeurIPS).
Mark Weiser. 1984. Program Slicing. IEEE Transactions on Software Engineering SE-10, 4 (1984), 352–357.
Fabian Yamaguchi, Nico Golde, Daniel Arp, and Konrad Rieck. 2014. Modeling and Discovering Vulnerabilities with Code Property Graphs. In Proceedings of the IEEE Symposium on Security and Privacy. IEEE, 590–604.
Kerui Zhu, Bo-Wei Huang, Bowen Jin, Yizhu Jiao, Ming Zhong, Kevin Chang, Shou-De Lin, and Jiawei Han. 2024. Investigating Instruction Tuning Large Language Models on Graphs. arXiv:2408.05457 [cs.CL] [link]
Gábor Antal, Péter Hegedűs, Zoltán Tóth, Rudolf Ferenc, and Tibor Gyimóthy. 2018. Static JavaScript Call Graphs: A Comparative Study. In Proceedings of the 18th IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM). IEEE, 177–186. DOI: 10.1109/SCAM.2018.00028
Ted J. Biggerstaff, Bharat G. Mitbander, and Dallas E. Webster. 1994. Program Understanding and the Concept Assignment Problem. Commun. ACM 37, 5 (1994), 72–82.
Leônidas de Oliveira Brandão and Anarosa Alves Franco Brandão. 2012. iVProg – Uma Ferramenta de Programação Visual para o Ensino de Algoritmos. (2012).
Ruven Brooks. 1983. Towards a Theory of the Comprehension of Computer Programs. International Journal of Man-Machine Studies 18, 6 (1983), 543–554.
Guiming Hardy Chen, Shunian Chen, Ziche Liu, Feng Jiang, and Benyou Wang. 2024. Humans or LLMs as the Judge? A Study on Judgement Bias. In Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing. 8301–8327.
Igor Felix, Lucas de Souza, Leônidas Brandão, Bernardo Ferreira, and Anarosa Brandão. 2019. iVProg: Programação Interativa Visual e Textual na Internet. In Anais dos Workshops do VIII Congresso Brasileiro de Informática na Educação (WCBIE 2019). Sociedade Brasileira de Computação (SBC), Brasília, DF, Brasil, 1164. DOI: 10.5753/cbie.wcbie.2019.1164
Jeanne Ferrante, Karl J. Ottenstein, and Joe D. Warren. 1987. The Program Dependence Graph and Its Use in Optimization. ACM Transactions on Programming Languages and Systems 9, 3 (1987), 319–349. DOI: 10.1145/24039.24041
José Fragoso Santos, Petar Maksimović, Théotime Grohens, Julian Dolby, and Philippa Gardner. 2018. Symbolic Execution for JavaScript. In Proceedings of the 20th International Symposium on Principles and Practice of Declarative Programming (PPDP ’18). ACM, New York, NY, USA, 11:1–11:14. DOI: 10.1145/3236950.3236956
Philippa Gardner, Sergio Maffeis, and Gareth Smith. 2012. Towards a program logic for JavaScript. In Proceedings of the 39th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL ’12). ACM, New York, NY, USA, 31–44. DOI: 10.1145/2103621.2103663
Google DeepMind. 2025. Gemini 2.5 Flash. [link]. Acessado em: 10 ago. 2026.
Daniel Jackson and Eugene J. Rollins. 1994. A New Model of Program Dependences for Reverse Engineering. In Proceedings of the ACM SIGSOFT Symposium on Foundations of Software Engineering. 2–10.
Ivar Jacobson. 1987. Object-oriented development in an industrial environment. SIGPLAN Not. 22, 12 (Dec. 1987), 183–191. DOI: 10.1145/38807.38824
Ivar Jacobson, Magnus Christerson, Patrik Jonsson, and Gunnar Övergaard. 1992. Object-Oriented Software Engineering: A Use Case Driven Approach (revised ed.). Addison-Wesley.
Ahmed Lekssays, Hamza Mouhcine, Khang Tran, Ting Yu, and Issa Khalil. 2025. LLMxCPG: Context-Aware Vulnerability Detection Through Code Property Graph-Guided Large Language Models. In Proceedings of the 34th USENIX Security Symposium. 489–507.
Nelson F. Liu, Kevin Lin, John Hewitt, Ashwin Paranjape, Michele Bevilacqua, Fabio Petroni, and Percy Liang. 2024. Lost in the Middle: How Language Models Use Long Contexts. Transactions of the Association for Computational Linguistics 12 (2024), 157–173.
Thomas Reps and Genevieve Rosay. 1995. Precise Interprocedural Chopping. In Proceedings of the ACM SIGSOFT Symposium on Foundations of Software Engineering. 41–52.
José Fragoso Santos, Petar Maksimović, Gabriela Sampaio, and Philippa Gardner. 2019. JaVerT 2.0: compositional symbolic execution for JavaScript. Proc. ACM Program. Lang. 3, POPL (2019), 66:1–66:31. DOI: 10.1145/3290379
ShiftLeft Inc. and Joern Contributors. 2024. Joern: The Bug Hunter’s Workbench. [link]. Acessado em: 10 jul. 2026.
Margaret-Anne Storey. 2005. Theories, Methods and Tools in Program Comprehension: Past, Present and Future. In Proceedings of the 13th International Workshop on Program Comprehension. 181–191.
Alejandro Velasco, Aya Garryyeva, David N. Palacio, Antonio Mastropaolo, and Denys Poshyvanyk. 2025. Toward Neurosymbolic Program Comprehension. In Proceedings of the IEEE/ACM International Conference on Program Comprehension.
Jason Wei, Xuezhi Wang, Dale Schuurmans, Maarten Bosma, Brian Ichter, Fei Xia, Ed H. Chi, Quoc V. Le, and Denny Zhou. 2022. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. In Advances in Neural Information Processing Systems (NeurIPS).
Mark Weiser. 1984. Program Slicing. IEEE Transactions on Software Engineering SE-10, 4 (1984), 352–357.
Fabian Yamaguchi, Nico Golde, Daniel Arp, and Konrad Rieck. 2014. Modeling and Discovering Vulnerabilities with Code Property Graphs. In Proceedings of the IEEE Symposium on Security and Privacy. IEEE, 590–604.
Kerui Zhu, Bo-Wei Huang, Bowen Jin, Yizhu Jiao, Ming Zhong, Kevin Chang, Shou-De Lin, and Jiawei Han. 2024. Investigating Instruction Tuning Large Language Models on Graphs. arXiv:2408.05457 [cs.CL] [link]
Publicado
11/09/2026
Como Citar
SANTOS, Guilherme Vieira dos; BRANDÃO, Anarosa Alves Franco.
Apoiando o Entendimento e a Evolução de Software Legado: Um Estudo de Caso com o iVProg. In: WORKSHOP DE VISUALIZAÇÃO, EVOLUÇÃO E MANUTENÇÃO DE SOFTWARE (VEM), 14. , 2026, São Paulo/SP.
Anais [...].
Porto Alegre: Sociedade Brasileira de Computação,
2026
.
p. 158-164.
DOI: https://doi.org/10.5753/vem.2026.33006.
