Testability Refactoring in Pull Requests: Patterns and Trends

Authors: Pavel Reich, Walid Maalej

ICSE2023

Results of the summarizing process for the arXiv paper: 2303.14253v1

  • Comprehensive Summary
  • Key points
  • Layman's Summary
  • Blog article
In software development, creating unit tests is crucial for ensuring the quality and reliability of the code. To create effective unit tests, it may be necessary to refactor the production code. This can involve widening access to specific methods or decomposing classes into smaller units that are easier to test independently. Pavel Reich and Walid Maalej conducted an extensive analysis of composite refactoring procedures aimed at improving testability. They collected and studied 346,841 Java pull requests from 621 GitHub projects. The researchers compared atomic refactorings in two populations: pull requests with changed test-pairs (i.e., with co-changes in production and test code) and those without test-pairs. They found significantly more atomic refactorings in test-pairs pull requests such as Change Variable Type Operation or Change Parameter Type. Additionally, they manually analyzed 200 pull requests where developers explicitly mentioned terms like "testability" or "refactor + test". These patterns included extract a method for override or invocation, widen access to a method for invocation, and extract a class for invocation. Furthermore, they manually analyzed 524 randomly selected test-pair pull requests related to dependency or concurrency issues where they expected to find testability refactorings; about 25% of all analyzed pull requests included one or more of these patterns. This study provides insight into frequent atomic refactorings that co-occur with these patterns and discusses their implications for research, practice, and education in software development by identifying composite refactoring procedures aimed at improving testability which could provide guidance for developers seeking to create effective unit tests while minimizing disruption to existing codebases.
AI-generated keywords: Software Development Unit Tests Refactoring Testability GitHub

AI-generated Key Points

  • Creating unit tests is crucial for ensuring code quality and reliability in software development.
  • Refactoring production code may be necessary to create effective unit tests.
  • Pavel Reich and Walid Maalej analyzed 346,841 Java pull requests from 621 GitHub projects to identify composite refactoring procedures aimed at improving testability.
  • Significantly more atomic refactorings were found in pull requests with changed test-pairs compared to those without test-pairs.
  • Extract a method for override or invocation, widen access to a method for invocation, and extract a class for invocation are common patterns identified in the manual analysis of 200 pull requests where developers explicitly mentioned terms like "testability" or "refactor + test".
  • About 25% of all analyzed pull requests related to dependency or concurrency issues included one or more of these patterns.
  • This study provides insight into frequent atomic refactorings that co-occur with these patterns and discusses their implications for research, practice, and education in software development.
Also access our AI generated: Comprehensive summary, Lay summary, Blog-like article; or ask questions about this paper to our AI assistant.

Abstract: To create unit tests, it may be necessary to refactor the production code, e.g. by widening access to specific methods or by decomposing classes into smaller units that are easier to test independently. We report on an extensive study to understand such composite refactoring procedures for the purpose of improving testability. We collected and studied 346,841 java pull requests from 621 GitHub projects. First, we compared the atomic refactorings in two populations: pull requests with changed test-pairs (i.e. with co-changes in production and test code and thus potentially including testability refactoring) and pull requests without test-pairs. We found significantly more atomic refactorings in test-pairs pull requests, such as Change Variable Type Operation or Change Parameter Type. Second, we manually analyzed the code changes of 200 pull requests, where developers explicitly mention the terms "testability" or "refactor + test". We identified ten composite refactoring procedures for the purpose of testability, which we call testability refactoring patterns. Third, we manually analyzed additional 524 test-pairs pull requests: both randomly selected and where we assumed to find testability refactorings, e.g. in pull requests about dependency or concurrency issues. About 25% of all analyzed pull requests actually included testability refactoring patterns. The most frequent were extract a method for override or for invocation, widen access to a method for invocation, and extract a class for invocation. We also report on frequent atomic refactorings which co-occur with the patterns and discuss the implications of our findings for research, practice, and education

Submitted to arXiv on 24 Mar. 2023

Tools for this paper

Explain it differently 3 free rewrites left today
Export BibTeX · RIS (Zotero, Mendeley, EndNote) · Markdown (Notion, Obsidian) · Premium
Citation alerts Premium
Journal club Slides to present it Premium
For journalists Press kit and hype check Premium

Ask questions about this paper to our AI assistant

You can also chat with multiple papers at once here.

⚠The license of the paper does not allow us to build upon its content and the AI assistant only knows about the paper metadata rather than the full article.

Figures and plots

Ask about a figure by number or use its question button to request visual analysis. Up to two figures and four image panels per question. Values read from plots are approximate; check the original data.

AI assistant instructions?

Assess the quality of the AI-generated content by voting

Score: 0

Why do we need votes?

Votes are used to determine whether we need to re-run our summarizing tools. If the count reaches -10, our tools can be restarted.

The previous summary was created more than a year ago and can be re-run (if necessary) by clicking on the Run button below.

⚠The license of this specific paper does not allow us to build upon its content and the summarizing tools will be run using the paper metadata rather than the full article. However, it still does a good job, and you can also try our tools on papers with more open licenses.

Similar papers summarized with our AI tools

Navigate through even more similar papers through a

tree representation

Disclaimer: The AI-based summarization tool and virtual assistant provided on this website may not always provide accurate and complete summaries or responses. We encourage you to carefully review and evaluate the generated content to ensure its quality and relevance to your needs.