Spencer Rugaber · 1995
Descriptions Computer programs are incredibly detailed. In essence they control the values of million of bits of memory inside of a computer. One of the jobs of the reverse engineer is to decide, from all this detail, which are the important concepts. This process is called abstraction; the reverse engineer must create an abstract representation of the program from the mass of concrete details. The abstraction process is not linear. That is, a given section of a program may be a part of several abstractions. The abstractions are said to be interleaved [7], and, because of this, the designer's plan is delocalized in the section [8]. Typically there is no documentation in the source code of the interleaving. C. Coherent Models and Incoherent Artifacts When a program is originally constructed, there is a coherent structuring of details. The process that creates the structuring is called design. A large variety of design methods and representation techniques have been developed to aid th...
Cited by 0
2014
Understanding of a system is a cognitive issue, and to study the cognitive processes behind the task many cognition models have been developed. This chapter begins with a discussion on program comprehension, and explains the concepts of knowledge and mental model. This is followed by a discussion of the characteristics of expert programmers. The static elements of the mental model include text-structures, chunks, schemas, plans, and hypotheses. On the other hand, the dynamic elements of mental models are: chunking, cross-referencing, and strategies. The chapter also explains the following comprehension models: Letovsky model, Shneiderman and Mayer model, Brooks model, Soloway, Adelson, and Ehrlich model, Pennington model, and Integrated metamodel. Following this, the chapter provides a discussion on protocol analysis, which is composed of two sequential steps: concurrent verbalization of a comprehension task and analysis of protocol data. Finally, the idea of program understanding is explained by means of software visualization.
Cited by 14
Claire Knight, Malcolm Munro · 2003
Tools are vital to support the various activities that form the many tasks that are part of the program comprehension process. In order for these tools to be used and useful, it is necessary that they support the activities of the user. This support must complement the work methods and activities of the user and not hinder them. Whilst features of good tools have been identified, tool builders do not always adhere to them. It is important to consider whether needs have changed, and if those desirable properties need augmenting or revising. From experience of maintaining and enhancing an existing program comprehension tool for the purposes of participating in a re-engineering activity, many lessons on tool support have been learned. Various program comprehension strategies are introduced in this paper. The use of GXL (Graph eXchange Language) and involvement in the SORTIE project are presented with reference to the tool being adapted and used. Details of the changes made are given to illustrate the support desired. These all feed into the final section of the paper that discusses the sort of support that tools should provide, current tool deficiencies and some of the ways in which these could be addressed.
Cited by 7
Xin Xia, Lingfeng Bao, David Lo et al. · 2018
During software development and maintenance, developers spend a considerable amount of time on program comprehension. Previous studies show that program comprehension takes up as much as half of a developer's time. However, most of these studies are performed in a controlled setting, or with a small number of participants, and investigate the program comprehension activities only within the IDEs. However, developers' program comprehension activities go well beyond their IDE interactions.
Cited by 17
Rui Yin, Rudolf K. Keller · 2002
To make program comprehension more effective, the analyst needs high-level information about the software under investigation, in particular information at the structure and the design levels. Visualization in Contexts allows the analyst to investigate software in terms of various contexts at different levels of abstraction and to form a variety of mental models of the software at hand. Moreover, the analyst can mentally integrate disparate mental models by cross-referencing. In this paper, the Visualization in Contexts strategy is introduced. Then, the Context Viewer, a prototype tool supporting the strategy within the SPOOL reverse engineering environment, is detailed. Three usage scenarios illustrate the approach. The scenarios, complemented by an informal evaluation and comparison, suggest the usefulness of the tool and the underlying strategy.
Cited by 0
Nuñez, Alejo, Castro Abdallah, Fabiana Corina, Poppino, Micaela Anahí et al. · El Servicio de Difusión de la Creación Intelectual (National University of La Plata) · 2023
La disciplina “Comprensión de programas” –CP- se define como el proceso por el cual los desarrolladores estudian y comprenden el comportamiento y operación de un sistema o software, utilizando el código fuente como referencia principal. Si se tiene un servicio restful íntegramente diseñado, desarrollado y ejecutado en un Sistema de Gestión de Reglas de Negocio, construido por personas con formación informática pero también por usuarios de negocio, existe conocimiento (información, premisas, criterios de diseño, abstracciones) que queda distribuido entre ambos perfiles complementarios. Si a eso se suman los frecuentes cambios de las normativas impositivas en Argentina que constituyen el ámbito de aplicación de este software y el dinamismo que hoy en día experimentan los equipos de desarrollo por el recambio de sus integrantes, transcurrido un lapso de tiempo no tan prolongado, el único conocimiento actualizado e íntegro queda atrapado dentro del código fuente. Como paliativo para esta problemática, se desarrolla una herramienta que da soporte al ciclo de vida propio de este sistema. El conocimiento del dominio de ambos perfiles se extrae del código fuente, para modelarlo y representarlo visualmente, colaborando con el entendimiento de quienes deban realizar tareas de mantenimiento, entrenando nuevos recursos o acompañando a los existentes.
Cited by 0Open access
Yu Liu, Xiaobing Sun, Xiangyue Liu et al. · 2014
A large amount of software maintenance effort is spent on program comprehension. How to accurately and quickly get the functional features in a program becomes a hot issue in program comprehension. Some studies in this area are focused on extracting the topics by analyzing linguistic information in the source code based on the textual mining techniques. However, the extracted topics are usually composed of some standalone words and difficult to understand. In this paper, we attempt to solve this problem based on a novel program summarization technique. First, we propose to use latent semantic indexing and clustering to group source artifacts with similar vocabulary to analyze the composition of each package in the program. Then, some topics composed of a vector of independent words can be extracted based on latent semantic indexing. Finally, we employ Minipar, a nature language parser, to help generate the summaries. The summaries can effectively organize the words from the topics in the form of the predefined sentence based on some rules. With such form of summaries, developers can understand what the features the program has and their corresponding source artifacts.
Cited by 9
Yann-gaël Guéhéneuc, École Polytechnique De Montréal · 2005
In theory, there is no difference between theory and practice. But, in practice, there is. Jan L. A. van de Snepscheut There exists an extensive literature on vision science, on the one hand, and on program comprehension, on the other hand. However, these two domains of research have been so far rather disjoint. Indeed, several cognitive theories have been proposed to explain program comprehension. These theories explain the processes taking place in the software engineers’ minds when they understand programs. They explain how software engineers process available information to perform their tasks but not how software engineers acquire this information. Vision science provides explanations on the processes used by people to acquire visual information from their environment. Joining vision science and program comprehension provides a more comprehensive theoretical framework to explain facts on program comprehension, to predict new facts, and to frame experiments. We join theories in vision science and in program comprehension; the resulting theory is consistent with facts on program comprehension and helps in predicting new facts, in devising experiments, and in putting certain program comprehension concepts in perspective. 1 1
Cited by 0
D. J. Robson, Keith Bennett, Barry Cornelius et al. · Journal of Systems and Software · 1991
Cited by 76
Jeremy Gibbons · Oxford University Research Archive (ORA) (University of Oxford) · 2006
Fusion is a program transformation that combines adjacent computations, flattening structure and improving efficiency at the cost of clarity. Fission is the same transformation, in reverse: creating structure, ex nihilo. We explore the use of fission for program comprehension, that is, for reconstructing the design of a program from its implementation. We illustrate through rational reconstructions of the designs for three different C programs that count the words in a text file. © Springer-Verlag Berlin Heidelberg 2006.
Cited by 0
D. Ng · 2004
Aspect oriented programming (AOP) is a powerful reflective programming tool. In this paper we discuss how simple yet effective AOP constructs can be used to facilitate the process of program comprehension on three bodies of code. The first is the Java portion of a sizable third party legacy system for manipulating and displaying protein sequences entitled Friend. The second is Eclipse, an open source Java IDE. The third is Compress, a SPEC JVM98 Java benchmark. We study uses of the AspectJ AOP language to expose both dynamic and static software characteristics. Examples provided are actual code and data from our experience re-engineering the Friend software but the AOP techniques presented can be applied towards any system.
Cited by 18
Asfa Praveen · 2016
Due to continuous change in business requirements and to implement proactive, adaptive maintenance procedures in application program; it is required to evolve application program time to time. Program comprehension is a process of program understanding and reverse engineering, which supports the analyst to easily undertake the program for further reengineering. This paper highlights the program elements, components, its analytical solutions for understanding, comprehensions and extension.
Cited by 3Open access
Alejandro Velasco, Aya Garryyeva, David N. Palacio et al. · 2025
Recent advancements in Large Language Models (LLMs) have paved the way for Large Code Models (LCMs), enabling automation in complex software engineering tasks, such as code generation, software testing, and program comprehension, among others. Tools like GitHub Copilot and ChatGPT have shown substantial benefits in supporting developers across various practices. However, the ambition to scale these models to trillion-parameter sizes, exemplified by GPT-4, poses significant challenges that limit the usage of Artificial Intelligence (AI)-based systems powered by large Deep Learning (DL) models. These include rising computational demands for training and deployment and issues related to trustworthiness, bias, and interpretability. Such factors can make managing these models impractical for many organizations, while their “black-box” nature undermines key aspects, including transparency and accountability. In this paper, we question the prevailing assumption that increasing model parameters is always the optimal path forward, provided there is sufficient new data to learn additional patterns. In particular, we advocate for a Neurosymbolic research direction that combines the strengths of existing DL techniques (e.g., LLMs) with traditional symbolic methods-renowned for their reliability, speed, and determinism. To this end, we outline the core features and present preliminary results for our envisioned approach, aimed at establishing the first Neurosymbolic Program Comprehension (NsPC) framework to aid in identifying defective code components.
Cited by 2
Lewis I. Berman · Durham e-Theses (Durham University) · 2011
Background: Comprehension of computer programs is daunting, thanks in part to clutter in the software developer's visual environment and the need for frequent visual context changes. Non-speech sound has been shown to be useful in understanding the behavior of a program as it is running. \nAims: This thesis explores whether using sound to help understand the static structure of programs is viable and advantageous. \nMethod: A novel concept for program sonification is introduced. Non-speech sounds indicate characteristics of and relationships among a Java program's classes, interfaces, and methods. A sound mapping is incorporated into a prototype tool consisting of an extension to the Eclipse integrated development environment communicating with the sound engine Csound. Developers examining source code can aurally explore entities outside of the visual context. A rich body of sound techniques provides expanded representational possibilities. Two studies were conducted. In the first, software professionals participated in exploratory sessions to informally validate the sound mapping concept. The second study was a human-subjects experiment to discover whether using the tool and sound mapping improve performance of software comprehension tasks. Twenty-four software professionals and students performed maintenance-oriented tasks on two Java programs with and without sound. \nResults: Viability is strong for differentiation and characterization of software entities, less so for identification. The results show no overall advantage of using sound in terms of task duration at a 5% level of significance. The results do, however, suggest that sonification can be advantageous under certain conditions. \nConclusions: The use of sound in program comprehension shows sufficient promise for continued research. Limitations of the present research include restriction to particular types of comprehension tasks, a single sound mapping, a single programming language, and limited training time. Future work includes experiments and case studies employing a wider set of comprehension tasks, sound mappings in domains other than software, and adding navigational capability for use by the visually impaired.
Cited by 1Open access
Mikio Ohki, Y. Hosaka · 2004
At the beginning stage of programming education, comprehending program logics plays a more important role than capturing knowledge of a specific program language. In this paper, the authors describe an outline of a visualization tool that animates the actions of a program by adding simple annotations to the variables defined in a program, and show several ideas to improve the usability of this tool. The authors also discuss the effectiveness of program visualization.
Cited by 2
Richard Wettel, Michele Lanza · 2007
The comprehensive understanding of a large software system is a daunting task because of the sheer size and complexity that such systems exhibit. In this context software visualization is a widely used approach, since well-conceived visual representations allow one to spot patterns. The large majority of visualizations use 2D representations, because they are easier to construct, navigate, and interact with. 3D representations usually exploit the 3rd dimension as an additional means to encode quantitative values, which is dismissed by many as a too small benefit in the light of the added complexity in terms of navigation and interaction. We argue that a well-constructed, interactive, and easily navigable 3D visualization can greatly help in program comprehension tasks by supporting habitability. Habitability transmits to a developer the notion that a software system is a physical space with strong orientation points. This can give developers the feeling of being "at home" in a system. We propose a 3D visualization of software systems hinging on the city metaphor. It is useful for program comprehension because it leads to clarity about the overall structure of a system. We apply our visualization technique on two large systems and discuss its benefits and drawbacks.
Cited by 101
Deborah A. Boehm‐Davis · Encyclopedia of Software Engineering · 2002
Abstract Computer programmers are required to perform a number of different software tasks. Fundamental to most of these is software comprehension–the ability to understand what a program does and how it does it. It has argued that the costs arising from the process of program comprehension represents the majority of maintenance costs, which themselves account for a large proportion of the costs involved in the total software life cycle. As a result, there has been a fair amount of research devoted to understanding the process of software comprehension and even more work examining the factors affecting performance on various software tasks. This article describes existing models of comprehension, a summary of measures that have been used to measure comprehension, and problems with these measures. The chapter also describes empirical research on factors influencing software comprehensibility.
Cited by 2
Shane Sharpe · Journal of Computer Information Systems · 1997
Cited by 5
Susan Weidenbeck · 1986
Cited by 34
Darren Ng David R. Kaelidept, Information Science · 2008
Cited by 0