Academia.eduAcademia.edu

Program Comprehension

description1,455 papers
group53 followers
lightbulbAbout this topic
Program comprehension is the study of how software developers understand, interpret, and navigate code and software systems. It encompasses cognitive processes, strategies, and tools used to acquire knowledge about program structure, behavior, and functionality, aiming to improve software maintenance, debugging, and overall development efficiency.
lightbulbAbout this topic
Program comprehension is the study of how software developers understand, interpret, and navigate code and software systems. It encompasses cognitive processes, strategies, and tools used to acquire knowledge about program structure, behavior, and functionality, aiming to improve software maintenance, debugging, and overall development efficiency.

Key research themes

1. How can dynamic and phase-based analysis of execution traces enhance program comprehension?

This research theme focuses on leveraging runtime information, particularly execution traces and their phases, to improve understanding of a software system's behavior. Analyzing execution phases can simplify large trace data, enabling developers to identify distinct computation tasks and transitions within program execution. This focus matters because program behavior is complex and dynamic, and trace analysis can provide precise, contextual insights to aid debugging, maintenance, and reverse engineering tasks.

Key finding: Introduces an on-the-fly phase detection algorithm that segments large execution traces of method calls into execution phases, such as initialization or specific computations, based on the fading in/out of sets of prevalent... Read more
Key finding: Develops COSPEX, a dynamic analysis tool integrated into an IDE that extracts runtime key information (e.g., function call arguments, variable value changes) and presents it as interactive, worked-example style summaries for... Read more
Key finding: Proposes integrating static and dynamic analysis via code annotation techniques targeting the operational (program) and behavioral (problem) domains to create multi-level views that reflect both program structure and runtime... Read more

2. What cognitive frameworks and metrics best characterize program comprehension complexity for educational and instructional design?

This theme explores theoretical and empirical frameworks that model the cognitive complexity involved in understanding computer programs, aiming to inform programming education, assessment, and curriculum design. It encompasses cognitive load theory, hierarchical complexity, and learner-focused metrics to analyze and sequence programming tasks effectively. This area is significant as it directly supports designing instructional materials, assessments, and tools that align with learners' mental models and cognitive capabilities.

Key finding: Proposes a theoretical framework called Cognitive Complexity of Computer Programs (CCCP) integrating Cognitive Load Theory and the Model of Hierarchical Complexity to analyze programs at the level of mental schemas and their... Read more
Key finding: Extends previous work by introducing 'Rules of Program Behavior' to augment notional machine research, offering a conceptualization to encode and communicate program semantics explicitly among instructors and learners. The... Read more
Key finding: Investigates learners' prior knowledge and cognitive load considerations to design program comprehension assessment and instructional tasks that progress from simpler to more complex programs. It introduces frameworks and... Read more

3. How can software visualization techniques improve program comprehension by representing code structure, annotations, and workflow?

This theme examines visual approaches that help developers understand software by graphically depicting structural and semantic information such as code annotations distribution and data science workflows. By transforming code-related metadata and execution information into intuitive visual representations, these methods reduce cognitive burden and support navigation, architecture comprehension, and identification of anomalies. The importance lies in facilitating developers' mental models and aiding understanding especially in complex or poorly documented codebases.

Key finding: Presents CADV, a visualization approach using circle packing to display the distribution and organization of Java code annotations across software system components. Empirical evaluation with students and professional... Read more
Key finding: Employs data mining techniques such as clustering, classification, and association rule mining to analyze C++ source code for extracting functional and relational insights at class and function levels. By mapping mining... Read more
Key finding: Proposes and empirically evaluates an interactive visualization method that explicitly represents data science notebooks’ non-linear workflows as graphs capturing forking paths and dead-ends. The approach includes annotating... Read more

All papers in Program Comprehension

In order to make frameworks easier to use we need to better understand the difficulties that programmers have with them. The questions that programmers ask give clues to the quality of design, documentation, and programmer practice. We... more
In the context of program understanding, a challenge research topic 1 is to learn how techniques and tools for the comprehension of General-Purpose Languages (GPLs) can be used or adjusted to the understanding of Domain-Specific Languages... more
Program conditioning consists of identifying and removing a set of statements which cannot be executed when a condition of interest holds at some point in a program. It has been applied to problems in maintenance, testing, re-use and... more
Program slicing has long been used to facilitate program understanding. Several approaches have been suggested for computing slices based on different perspectives, including forward slicing, backward slicing, static slicing, and dynamic... more
Program slicing has long been used to facilitate program understanding. Several approaches have been suggested for computing slices based on different perspectives, including forward slicing, backward slicing, static slicing, and dynamic... more
An efficient lightweight forward static slicing tool is presented. The tool is implemented on top of srcML, an XML representation of source code. The approach does not compute the full program dependence graph but instead dependency... more
Comprehending programs is key to learning programming. Previous studies highlight novices' naive approaches to comprehending the structural, functional, and behavioral aspects of programs. And yet, with the majority of them examining... more
Graph visualisation is a well-known and researched field of graphical informatics. Several good algorithms were developed and reviewed by our days. However, most of the graph drawing tools mainly focus on static drawing generation. In... more
Conditioned slicing can be applied to reverse engineering problems which involve the extraction of executable fragments of code in the context of some criteria of interest. This paper introduces ConSUS, a conditioner for the Wide... more
A novel framework to evaluate computer programming labs is proposed. The primary focus is fair and effective evaluation of programming labs. The proposed framework includes a user friendly interface for instructor to detect cheating and... more
Recent IDEs have become more extensible tool platforms but do not concern themselves with how other tools running on them collaborate with each other. They compel developers to use proprietary representations or the classical abstract... more
Recent IDEs have become more extensible tool platforms but do not concern themselves with how other tools running on them collaborate with each other. They compel developers to use proprietary representations or the classical abstract... more
Currently, research indicates that comprehending code takes up far more developer time than writing code. Given that most modern programming languages place little to no limitations on identifier names, and so developers are allowed to... more
Translation between natural language and source code can help software development by enabling developers to comprehend, ideate, search, and write computer programs in natural language. Despite growing interest from the industry and the... more
by Ak YA
Background Upazila Health Complexes (UHCs) and District Hospitals (DHs) play a crucial role in the healthcare delivery system of Bangladesh. But very few research has been conducted to find out the prevailing challenges of the medical... more
What kinds of feedback can we give to students as part of a computer-based system for supporting programming? One kind of feedback is whether the idioms that students use in their programs are typical of experienced programmers. In this... more
This paper discusses reverse engineering source code to produce UML sequence diagrams, with the aim to aid program comprehension and other software life cycle activities (e.g., verification). As a first step we produce scenario diagrams... more
This paper describes the use of search techniques to ease the burden of software maintenance for Services Oriented Architecture composite applications. Services Oriented Architecture is a paradigm that offers many potential business and... more
In this paper we report partial progress of our research about system comprehension. We used levels of abstraction and decomposition strategy to reduce system complexity. Concept Relationship Oriented methodology is one of its result, the... more
While code understanding is the primary program comprehension activity, it is quite challenging to recognize the application requirements from code, since they have usually been occluded by a set of layers of later implementation... more
We consider a while loop on some space S and we are interested in deriving the function that this loop defines between its initial states and its final states (when it terminates). Such a capability is useful in a wide range of... more
Improving youth science comprehension is critical to youth development, yet this intended outcome is often overlooked in terms of how Extension programs are delivered. The purpose of the study reported in this article was to determine... more
With the recent success of embeddings in natural language processing, research has been conducted into applying similar methods to code analysis. Most works attempt to process the code directly or use a syntactic tree representation,... more
Despite general agreement among practitioners and educators alike that the application of solid uniform coding guidelines is beneficial, the application of coding standards in computer science education seem to be problematic. We applied... more
Libraries are the most widespreaded form of software reuse. In order to properly use a library API, its clients should fulfill a series of (many times implicit) assumptions made by the API programmers. Failing to fulfill these assumptions... more
While programming is modeling the reality, reverse engineering is concerned with recovering it from the code. Parts of this reality can be formalized as concepts and relations among them. As previous research suggests, the identification... more
Learning to read source code is an important part of developing programming skills. Using pseudo-code and program traces for this allows creating exercises developing comprehension of basic algorithmic concepts like control structures,... more
Artificial intelligence (AI) has become increasingly influential in computer science (CS) education, where it holds potential for automating feedback and personalized learning. AI tools have been shown to increase equitability within CS,... more
Despite existing methodologies in the field, most requirements engineers are poorly trained to define security requirements. This is due to a considerable lack of security knowledge. Some security ontologies have been proposed, but a gap... more
Recent popularity of mobile devices increased the demand for mobile network services and applications that require minimal delay. 5G mobile networks are expected to provide much lesser delay than the present mobile networks. One of the... more
Test smells can reduce the developers' ability to interact with the test code. Refactoring test code offers a safe strategy to handle test smells. However, the manual refactoring activity is not a trivial process, and it is often... more
The current article is an interdisciplinary attempt to decipher automatic program repair processes. The review is done by the manner typical to human science known as diffraction. We attempt to spot a gap in the literature of self-healing... more
Modern software development methodologies include reuse of open source code. Reuse can be facilitated by architectural knowledge of the software, not necessarily provided in the documentation of open source software. The effort required... more
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... more
In this paper, we propose a framework for reconstructing software architecture from a software system. The framework consists of the steps to reconstruct software architecture for modifying source code. The framework can be used for... more
Curriculum Vitae ix It does not happen often that you get the chance to acknowledge the people that make a difference for you, and, as I am getting to learn, people deserve to know that you appreciate them. I would start by saying that... more
Download research papers for free!