Oct 2026· ScholarWorks@UMassAmherst (University of Massachusetts Amherst)
Software Testing and Debugging Techniques
Abstract
Python has become one of the most widely used programming languages, valued for its flexibility and ease of use. However, its dynamic nature provides only limited static guarantees, making programs more difficult to write reliably: errors are more likely to remain undetected until runtime. Tests and type checking can mitigate these issues by detecting bugs—including runtime errors—before release, but creating tests and the type annotations required for checking demands substantial developer effort, discouraging their widespread use. Approaches to automating test generation and type inference are hindered not only by Python’s dynamic features but also by the substantial performance limitations of CPython, the standard Python interpreter, which make dynamic analysis costly in practice. In this dissertation, I explore how low-overhead dynamic analysis can be used to improve the reliability of Python software. First, I introduce SlipCover, a code coverage measurement tool that significantly reduces runtime overhead through efficient bytecode instrumentation and dynamic de-instrumentation. SlipCover enables practical use of coverage tracking in iterative workflows by achieving near-zero overhead, supporting a range of software engineering applications. Building on SlipCover, I next present CoverUp, a regression test generation tool that uses coverage feedback to efficiently guide a large language model in generating unit tests that significantly outperform previous methods in coverage. Finally, I propose RightTyper, an efficient and effective type annotation system. RightTyper combines types observed through low-overhead, statistically guided runtime sampling with static analysis and name resolution to produce type annotations comparable in quality to current LLM-based approaches and substantially better than those of all other evaluated tools—while remaining grounded in observed program behavior rather than probabilistic inference. Collectively, these contributions advance the state of the art by showing how low-overhead dynamic analysis helps overcome significant challenges in writing and maintaining reliable Python code.
This publication proposes a definition and a classification of agile software development approaches and analyses ten software development methods that can be characterized as being "agile" against the defined criterion.
P. Abrahamsson, O. Salo, Jussi Ronkainen et al.· arXiv.org· 727 citations· ⚡54
The study shows that agile practices improve both informal and formal communication, but indicates that, in larger development situations involving multiple external stakeholders, a mismatch of adequate communication mechanisms can sometimes even hinder the communication.
M. Pikkarainen, Jukka Haikara, O. Salo et al.· Empirical Software Engineeri...· 401 citations· ⚡48
The results indicate that software engineering work practices are chosen opportunistically, adapted and configured to provide value under the constrains imposed by the startup context.
Nicolò Paternoster, Carmine Giardino, M. Unterkalmsteiner et al.· Information and Software Tec...· 394 citations· ⚡54
The results show that the embedded industry has been able to apply agile methods in its development processes and that the appreciation of the agile methods and their individual practices appears to increase once adopted and applied in practice.
O. Salo, P. Abrahamsson· IET Software· 238 citations· ⚡9
Consequences of happiness and unhappiness that are beneficial and detrimental for developers' mental well-being, the software development process, and the produced artifacts are found.
D. Graziotin, Fabian Fagerholm, Xiaofeng Wang et al.· Journal of Systems and Softw...· 236 citations· ⚡13
The Mobile-D approach is briefly outlined here and the experiences gained from four case studies are discussed, which helped develop an agile development approach for mobile application development.
P. Abrahamsson, Antti Hanhineva, H. Hulkko et al.· Conference on Object-Oriente...· 225 citations· ⚡18
StudentSim is a research system for evaluating and improving AI tutoring tools before they are tested with learners. It models how individuals may engage with tutors, giving feedback to improve tutor performance across subjects like chess, writing, and mathematics. The post Simulating student learning for better AI tutoring appeared first on Microsoft Research.
Requirements in large systems rarely exist in isolation. Their meaning depends on the wider project context - other requirements, policies, decisions, tests, and implementation details. That becomes especially important when AI is used for review, because spotting a possible conflict or gap is only the beginning. ReqSpace explores how AI, visualisation, and connected project context can help reviewers understand those findings, trace the relationships behind them, and focus on the questions that…