Per year | Per venue | Per topic | Books

Software Maintenance (evolution, refactoring, and comprehension)

An Empirical Catalog of Code Smells for the Presentation Layer of Android Apps
Suelen Goularte Carvalho, Maurício Aniche, Júlio Veríssimo, Rafael Durelli, Marco Aurélio Gerosa
Empirical Software Engineering journal (EMSE), 2019
This paper proposes a catalog of code smells that might happen in the presentation layer of Android apps. The paper also empirically evaluates how often these smells happen in ~600 open source Android apps.

Comprehending Test Code: An Empirical Study
Chak Shun Yu, Christoph Treude, Maurício Aniche
35th IEEE International Conference on Software Maintenance and Evolution (ICSME), 2019
Developers spend a large portion of their time and effort on comprehending source code. In this paper, we report on the results of an empirical study with 44 developers to understand which factors influence developers when comprehending Java test code. Our main findings were that (i) prior knowledge of the software project decreases the total reading time, (ii) experience with Java affects the proportion of time spent on the Arrange and Assert sections of test cases, (iii) experience with Java and prior knowledge of the software project positively influence the ability to produce additional test cases of certain categories, and (iv) experience with automated tests is an influential factor towards understanding and extending an automated test suite.

Current Challenges in Practical Object-Oriented Software Design
Maurício Aniche, Joseph W. Yoder, Fabio Kon
50th ACM Technical Symposium on Computer Science Education, 2019
The paper discusses challenges in practical object-oriented software design. We focus on three main challenges: (1) how technologies, frameworks, and architectures pressure developers to make design decisions that they would not take in an ideal scenario, (2) the complexity of current real-world problems require developers to devise not only a single, but several models for the same problem that live and interact together, and (3) how existing quality assessment techniques for object-oriented design should go beyond high-level metrics.

The Adoption of JavaScript Linters in Practice: A Case Study on ESLint
Kristín Fjóla Tómasdóttir, Maurício Aniche, Arie van Deursen
Transactions on Software Engineering (TSE), 2018
We examine developers’ perceptions on JavaScript linters. Our results provide practitioners with reasons for using linters in their JavaScript projects as well as several configuration strategies and their advantages. We also provide a list of linter rules that are often enabled and disabled, which can be interpreted as the most important rules to reason about when configuring linters.

Understanding Developers’ Needs on Deprecation as a Language Feature
Anand Ashok Sawant, Maurício Aniche, Arie van Deursen, Alberto Bacchelli
40th International Conference on Software Engineering (ICSE), 2018
We investigated how developers perceive the deprecation mechanism and whether the new JEP covers all their needs. We ended up proposing three further enhancements that we believe languages should adopt.

When Testing Meets Code Review: Why and How Developers Review Tests
Maurício Aniche, Felienne Hermans, Arie van Deursen
40th International Conference on Software Engineering (ICSE), 2018
We studied the effort that developers put in reviewing test code (when compared to production code). We observed that developers tend to give more attention to production code when both are on the same patch, that developers mostly point code quality issues in their review (rather than missing tests, as they claim they do), and that review tools do not really help them in reviewing both the test and the class under test. [Video summary] [Vídeo em português]

Mock objects for testing java systems: Why and how developers use them, and how they evolve
Davide Spadini, Maurício Aniche, Magiel Bruntink, Alberto Bacchelli
Empirical Software Engineering Journal (EMSE), 2018
Mocks are highly dependent on the responsibility and the architectural concern of the class; developers report that maintaining the behavior of the mock compatible with the behavior of original class is hard and that mocking increases the coupling between the test and the production code. Their perceptions are confirmed by our data, as we observed that mocks mostly exist since the very first version of the test class, and that they tend to stay there for its whole lifetime, and that changes in production code often force the test code to also change.

Code smells for Model-View-Controller architectures
Maurício Aniche, Gabriele Bavota, Christoph Treude, Marco Gerosa, Arie van Deursen
Empirical Software Engineering Journal (EMSE), 2017
This paper proposes a set of smells that can exist in MVC applications. Empirically validates the change- and defect-proneness of classes affected by the smell as well as their evolution over time. Proposes SpringLint, a tool that automatically detects these smells in Spring MVC applications. [Video summary] [Vídeo em português]

Why and How JavaScript Developers Use Linters
Kristín Fjóla Tómasdóttir, Maurício Aniche, Arie van Deursen
32nd IEEE/ACM International Conference on Automated Software Engineering (ASE), 2017
This paper discusses the current reasons of why JavaScript developers use linters as well as most common strategies to configure them. Results derived after 15 interviews with developers from known-well large JavaScript systems.

SATT: Tailoring Code Metric Thresholds for Different Software Architectures
Maurício Aniche, Christoph Treude, Andy Zaidman, Arie van Deursen, Marco Gerosa
16th IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM), 2016
This paper analyzes the distribution of different code metrics as to understand how traditional threshold derivation techniques behave among different architectural roles. Proposes SATT, an approach that derives specific thresholds for specific architectural roles of the system architecture.

Developers’ Perceptions on Object-Oriented Design and System Architecture
Maurício Aniche, Christoph Treude, Marco Gerosa
30th Brazilian Symposium on Software Engineering (SBES), 2016
This paper investigates whether developers from within the same development team perceive differently the responsibilities of each architectural role (e.g., what kind of code should be placed in a Controller class?)

A Validated Set of Smells in Model-View-Controller Architecture
Maurício Aniche, Gabriele Bavota, Christoph Treude, Marco Gerosa, Arie van Deursen
32th International Conference on Software Maintenance and Evolution (ICSME), 2016
The first step of this research, that was evolved in 2017 and published at EMSE. Proposes a set of smells that can exist in MVC applications. Empirically validates the change- and defect-proneness of classes affected by the smell. Proposes SpringLint, a tool that automatically detects these smells in Spring MVC applications.

Are the Methods in Your Data Access Objects (DAOs) in the Right Place? A Preliminary Study
Maurício Aniche, Gustavo Oliva, Marco Aurélio Gerosa
6th International Workshop on Managing Technical Debt (MTD), 2014
We propose a simple heuristic to automatically detect DAO methods that might be in the wrong place. The heuristic seems to be correct in 50% to 75% of cases.

Software Testing

Comprehending Test Code: An Empirical Study
Chak Shun Yu, Christoph Treude, Maurício Aniche
35th IEEE International Conference on Software Maintenance and Evolution (ICSME), 2019
Developers spend a large portion of their time and effort on comprehending source code. In this paper, we report on the results of an empirical study with 44 developers to understand which factors influence developers when comprehending Java test code. Our main findings were that (i) prior knowledge of the software project decreases the total reading time, (ii) experience with Java affects the proportion of time spent on the Arrange and Assert sections of test cases, (iii) experience with Java and prior knowledge of the software project positively influence the ability to produce additional test cases of certain categories, and (iv) experience with automated tests is an influential factor towards understanding and extending an automated test suite.

Search-Based Test Data Generation for SQL Queries
Jeroen Castelein, Maurício Aniche, Mozhan Soltani, Annibale Panichella, Arie van Deursen
40th International Conference on Software Engineering (ICSE), 2018
We propose a search-based algorithm that generates test data for a given SQL query, using MC/DC coverage criteria. Our approach is able to generate test data for more than 90% of our dataset, and it is highly superior to others (as they tend to model the problem as CSP, which fails in most complex queries). The tool is available in our GitHub. [Video summary] [Vídeo em português]

Mock objects for testing java systems: Why and how developers use them, and how they evolve
Davide Spadini, Maurício Aniche, Magiel Bruntink, Alberto Bacchelli
Empirical Software Engineering Journal (EMSE), 2018
Mocks are highly dependent on the responsibility and the architectural concern of the class; developers report that maintaining the behavior of the mock compatible with the behavior of original class is hard and that mocking increases the coupling between the test and the production code. Their perceptions are confirmed by our data, as we observed that mocks mostly exist since the very first version of the test class, and that they tend to stay there for its whole lifetime, and that changes in production code often force the test code to also change.

To Mock or Not To Mock? An Empirical Study on Mocking Practices
Davide Spadini, Maurício Aniche, Magiel Bruntink, Alberto Bacchelli
IEEE 14h International Conference on Mining Software Repositories (MSR), 2017
This paper empirically analyzes the usage of mocks in four different software systems. Discusses strategies taken by developers to decide whether to mock a class as well as challenges they face when mocking.

An Experience Report on Applying Passive Learning in a Large-Scale Payment Company
Rick Wieman, Maurício Aniche, Willem Lobbezoo, Sicco Verwer, Arie van Deursen
33rd IEEE International Conference on Software Maintenance and Evolution (ICSME), 2017
This paper describes our experience after applying passive learning techniques in log files to model the behavior of a real-world embedded system. Our industry partner was able to find and fix bugs due to our findings. Proposes a set of lessons learned as well as suggestions on how to apply passive learning in the real world.

Does test-driven development improve class design? A qualitative study on developers’ perceptions
Maurício Aniche, Marco Aurélio Gerosa
Journal of the Brazilian Computer Society (JBCS), 2015
This paper analyzes the perceptions of TDD practitioners on its advantages and disadvantages. Interviews were conducted after participants performed a short development task. Main finding is that TDD does not lead to good class design by itself; developers’ previous knowledge is fundamental.

Improving Code Quality on Automated Tests of Web Applications: A Set of Patterns
Maurício Aniche, Eduardo Guerra, Marco A. Gerosa
Conference on Pattern Languages of Programs (PLoP), 2014
We present a set of patterns that deals with real world problems when writing automated tests for web applications, such as the difficulty in building scenarios and the constant change of the HTML element’s attributes.

Preparing for a Test Driven Development Session
Eduardo Guerra, Maurício Aniche, Marco A. Gerosa, Joe Yoder
Conference on Pattern Languages of Programs (PLoP), 2014
We present some patterns to be applied before starting a TDD session.

What Do the Asserts in a Unit Test Tell Us about Code Quality? A Study on Open Source and Industrial Projects
Maurício Aniche, Gustavo Oliva, Marco Gerosa
17th European Conference on Software Maintenance and Reengineering (CSMR), 2013
This paper analyzes the relationship between the quantity of assert instructions in a JUnit test and the complexity of the class under test.

Most common mistakes in test-driven development practice: Results from an online survey with developers
Maurício Aniche, Marco Aurélio Gerosa
1st International Workshop on Test-Driven Development, 2014
This paper presents the results of a survey on common mistakes that practitioners do when applying TDD.

Runtime monitoring, log analysis, and DevOps

Monitoring-Aware IDEs
Jos Winter, Maurício Aniche, Jürgen Cito, Arie van Deursen
27th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE), 2019
We want IDEs to be more aware of what happens to the software in production. To that aim, we propose what we call a ‘monitoring-aware IDE’. After implementing a prototype, we experimented with it at Adyen, with 12 of their developers using it for a month. Our results show that such IDEs can indeed make developers more productive (and more aware about what happens with their software in the wild!)

Tracing Back Log Data to its Log Statement: From Research to Practice
Daan Schipper, Maurício Aniche, Arie van Deursen
16th International Conference on Mining Software Repositories, short practice paper, 2019
Log analysis techniques often require the link between the log messages in the raw log file and the log statements in the source code that produce them. We implemented the state-of-the-art research on log parsing in Adyen’s logging environment and evaluated their accuracy and performance. Our results show that, with some adaptation, the current static analysis techniques are highly efficient and performant. In other words, ready for use.

Factors Affecting Cloud Infra-Service Development Lead Times: A Case Study at ING
Hennie Huijgens, Eric Greuter, Jerry Brons, Evert A. van Doorn, Ioannis Papadopoulos, Francisco Morales Martinez, Maurício Aniche, Otto Visser, Arie van Deursen
41st ACM/IEEE International Conference on Software Engineering, industry track, 2019
We benchmark ING’s Cloud Infra-Services, and explore which factors affect their lead time. The initial perception among several stakeholders, that Cloud Infra-Services within ING take longer than those in peer companies, is not confirmed by our analysis.

An Exploratory Study on Faults in Web API Integration in a Large-Scale Payment Company
Joop Aué, Maurício Aniche, Maikel Lobbezoo, Arie van Deursen
40th International Conference on Software Engineering (ICSE), Industry Track, 2018
We studied and catalogued the common mistakes that developers make when trying to integrate to a (complex) web API after analysis 2MM exception log entries. We hope developers will avoid such mistakes from now on. We also provide suggestions for API developers and researchers on how to facilitate such process.

An Experience Report on Applying Passive Learning in a Large-Scale Payment Company
Rick Wieman, Maurício Aniche, Willem Lobbezoo, Sicco Verwer, Arie van Deursen
33rd IEEE International Conference on Software Maintenance and Evolution (ICSME), 2017
This paper describes our experience after applying passive learning techniques in log files to model the behavior of a real-world embedded system. Our industry partner was able to find and fix bugs due to our findings. Proposes a set of lessons learned as well as suggestions on how to apply passive learning in the real world.

APIs

Where does Google find API documentation?
Christoph Treude, Maurício Aniche
2nd International Workshop on API Usage and Evolution, 2018
API documentation are spread everywhere on the internet. We understand the document landscape by analyzing where Google searches for the elements of 10 popular APIs. We found that their documentation is widely dispersed among many sources, that GitHub and Stack Overflow play a prominent role among the search results, and that most sources are quick to document new API functionalities.

An Exploratory Study on Faults in Web API Integration in a Large-Scale Payment Company
Joop Aué, Maurício Aniche, Maikel Lobbezoo, Arie van Deursen
40th International Conference on Software Engineering (ICSE), Industry Track, 2018
We studied and catalogued the common mistakes that developers make when trying to integrate to a (complex) web API after analysis 2MM exception log entries. We hope developers will avoid such mistakes from now on. We also provide suggestions for API developers and researchers on how to facilitate such process.

Understanding Developers’ Needs on Deprecation as a Language Feature
Anand Ashok Sawant, Maurício Aniche, Arie van Deursen, Alberto Bacchelli
40th International Conference on Software Engineering (ICSE), 2018
We investigated how developers perceive the deprecation mechanism and whether the new JEP covers all their needs. We ended up proposing three further enhancements that we believe languages should adopt.

Human Factors in Software Engineering

Where does Google find API documentation?
Christoph Treude, Maurício Aniche
2nd International Workshop on API Usage and Evolution, 2018
API documentation are spread everywhere on the internet. We understand the document landscape by analyzing where Google searches for the elements of 10 popular APIs. We found that their documentation is widely dispersed among many sources, that GitHub and Stack Overflow play a prominent role among the search results, and that most sources are quick to document new API functionalities.

Unusual Events in GitHub Repositories
Christoph Treude, Larissa Leite, Maurício Aniche
Journal of Systems and Software (JSS), 2018
Several different events may happen in a GitHub repository. Which ones should developers care about? Probably the unusual ones. We devised a comprehensive list of unusual events and validated their usefulness with 140 developers.

How Modern News Aggregators Help Development Communities Shape and Share Knowledge
Maurício Aniche, Christoph Treude, Igor Steinmacher, Igor Wiese, Gustavo Henrique Lima Pinto, Margaret-Anne Storey, Marco Aurélio Gerosa
40th International Conference on Software Engineering (ICSE), 2018
We studied how and why developers have been using modern news aggregators, such as Reddit and HackerNews. Our paper provides cues for developers to maximize their benefits when using such tools, as well as for tool builders on how to improve such aggregators.

Increasing Learning in an Agile Environment: Lessons Learned in an Agile Team
Maurício Aniche, Guilherme Silveira
Agile Conference, 2011
An experience report on how agile teams share knowledge. More spefically, this paper shows how to build a learning environment by doing some well-known practices, such as Book Club, Brown Bags, Dojo sessions, Pair Programming, Open Spaces, etc.

Mining Software Repository

Tracing Back Log Data to its Log Statement: From Research to Practice
Daan Schipper, Maurício Aniche, Arie van Deursen
16th International Conference on Mining Software Repositories, short practice paper, 2019
Log analysis techniques often require the link between the log messages in the raw log file and the log statements in the source code that produce them. We implemented the state-of-the-art research on log parsing in Adyen’s logging environment and evaluated their accuracy and performance. Our results show that, with some adaptation, the current static analysis techniques are highly efficient and performant. In other words, ready for use.

PyDriller: Python Framework for Mining Software Repositories
Davide Spadini, Maurício Aniche, Alberto Bacchelli
26th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE), 2018
We propose PyDriller, a tool that helps researchers in doing mining software repositories. PyDriller offers a very simple API/abstract layer on top of GitPython. The tool is freely available on GitHub.

To Mock or Not To Mock? An Empirical Study on Mocking Practices
Davide Spadini, Maurício Aniche, Magiel Bruntink, Alberto Bacchelli
IEEE 14h International Conference on Mining Software Repositories (MSR), 2017
This paper empirically analyzes the usage of mocks in four different software systems. Discusses strategies taken by developers to decide whether to mock a class as well as challenges they face when mocking.

MetricMiner: Supporting Researchers in Mining Software Repositories
Francisco Zigmund Sokol, Maurício Finavaro Aniche, Marco Aurélio Gerosa
IEEE 13th International Working Conference on Source Code Analysis and Manipulation (SCAM), 2013
Metricminer is a framework that helps researchers in mining software engineering repositories. This project has been deprecated. See our FSE 2018 publication on Pydriller.

Software Engineering Education

Pragmatic Software Testing Education
Maurício Aniche, Felienne Hermans, Arie van Deursen
50th ACM Technical Symposium on Computer Science Education, 2019
This paper discusses how we have been teaching software testing in a pragmatic way. More specifically, we list 9 key elements we introduce in our course. Later, we then analyze students’ performance by reading their assignments and providing them feedback, and report the most common mistakes they make, challenges they face, and learning methods they prefer.

A Collaborative Approach to Teaching Software Architecture
Arie van Deursen, Maurício Aniche, Joop Aué, Rogier Slag, Michael de Jong, Alex Nederlof, Eric Bouwers
48th ACM Technical Symposium on Computer Science Education (SIGCSE), 2017
This paper describes the Software Architecture course given to the MSc students of Computer Science at TU Delft. Students collaboratively write a book about several open source systems that they analyze throughout the course.