
Eduardo Guerra- PhD
- Researcher at Free University of Bozen-Bolzano
Eduardo Guerra
- PhD
- Researcher at Free University of Bozen-Bolzano
About
165
Publications
33,993
Reads
How we measure 'reads'
A 'read' is counted each time someone views a publication summary (such as the title, abstract, and list of authors), clicks on a figure, or views or downloads the full-text. Learn more
731
Citations
Introduction
Current institution
Additional affiliations
January 2008 - February 2013
Publications
Publications (165)
Despite the widespread use of domain models, the modeling process remains underexplored, particularly regarding the interactions among agents, products, and activities. Building on prior work that identified 16 recurrent moments of dissatisfaction ("pain points") experienced by modelers during these interactions, this study offers a deeper analysis...
Agility embraces changes in the functional and non-functional requirements. When the latter happens, the architecture needs to evolve, putting architectural refactoring in evidence. Microservices is an architectural style that enables more agility in a system’s architecture, as it favors the evolution of the system by adding new operations. But it...
Generative AI has been rapidly adopted by the software development industry in various ways, offering innovative approaches to transforming requirements into working software. Combining Generative AI with Test-Driven Development (TDD) presents a creative method to accelerate this transformation. However, questions remain about ChatGPT’s readiness f...
Previous research has identified mutation testing as a promising technique for detecting unintended changes in test behavior during test code refactorings. Despite its theoretical support, the practical adoption of this approach has been hindered by a lack of corresponding tools. Consequently, these studies have been unable to fully validate the ef...
Companies adopt agile methodologies for various reasons, primarily due to their adaptability to change and evolving business demands. In this context, addressing non-functional requirements (NFRs) may not always be a priority and can present challenges for agile teams. The focus on User Stories present in agile methods and tools often does not offe...
Frameworks are essential for software development, providing code design and facilitating reuse for their users. Well‐known Java frameworks and APIs rely on metadata configuration through code annotations, using Reflection API to consume and process them. Code elements that share the same annotations often exhibit similarities, creating the opportu...
Modelers and organizations often struggle to assess the benefits and drawbacks of modeling activities. This paper proposes addressing this challenge through a risk-oriented lens, leveraging the Common Ontology of ValuE and Risk (COVER) and the Reference Ontology for Security Engineering (ROSE). The proposal focuses on identifying assets at risk thr...
Software analytics is a data-driven approach to decision-making, which allows software practitioners to leverage valuable insights from data about software to achieve higher development process productivity and improve many aspects of the software quality. Although widely adopted by large companies, software analytics has not yet reached its full p...
General-purpose AI-assisted tools, such as ChatGPT, have recently gained much attention from the media and the general public. That raised questions about in which tasks we can apply such a tool. A good code design is essential for agile software development to keep it ready for change. In this context, identifying which design pattern can be appro...
The success of test refactoring, particularly in the removal of test smells, relies on a post-refactoring evaluation to ensure that the refactored test maintains its behavior, meaning its defect detection capability. Test smells are indicative of issues within test code. While various approaches in the literature propose strategies for evaluating t...
This article presents the case of a start-up applying a technique named ArchHypo that uses hypotheses to express uncertainties related to the software architecture. Ten months after identifying the hypotheses, it was assessed how the usage of this technique impacted their decisions.
Auxiliary functions in software systems, often overlooked due to their perceived simplicity, play a crucial role in overall system reliability. This study focuses on the effectiveness of agile practices, specifically the pair programming and the test-first programming practices. Despite the importance of these functions, there exists a dearth of em...
Context: Defining and designing a software product is not merely a technical endeavor, but also a socio-technical journey. As such, its success is associated with human-related aspects, such as the value users perceive. To handle this issue, the product manager role has become more evident in software-intensive companies. A unique, challenging cont...
Software engineering researchers and practitioners have pursued manners to reduce the amount of time and effort required to develop code and increase productivity since the emergence of the discipline. Generative language models are another step in this journey, but it will probably not be the last one. In this chapter, we propose DAnTE, a Degree o...
Context
Code annotations have gained widespread popularity in programming languages, offering developers the ability to attach metadata to code elements to define custom behaviors. Many modern frameworks and APIs use annotations to keep integration less verbose and located nearer to the corresponding code element. Despite these advantages, practiti...
In the current scenario of digital transformation, understanding the interaction between the areas of business and software architecture is essential for delivering successful projects. This research aims to elucidate perceptions related to both domains, thus seeking a more efficient collaboration in the context of agile software development projec...
Uncertainty is present in software architecture decisions due to a lack of knowledge about the requirements and the solutions involved. However, this uncertainty is usually not made explicit, and decisions can be made based on unproven premises or false assumptions. This paper focuses on a technique called ArchHypo that uses hypotheses engineering...
Context
The COVID‐19 pandemic has had a disruptive impact on how people work and collaborate across all global economic sectors, including software business. While remote working is not new for software engineers, forced WFH situations come with both limitations and opportunities. As the ‘new normal’ for working might be based on the current state...
Evaluating mutation testing behavior can help decide whether refactoring successfully maintains the expected initial test results. Moreover, manually performing this analytical work is both time-consuming and prone to errors. This paper extends an approach to assess test code behavior and proposes a tool called MeteoR. This tool comprises an IDE pl...
In the context of enterprises, a wide range of models is developed and used for diverse purposes. Due to the investments involved in modeling, these models should ideally be used in projects in which their benefits outweigh their costs. The analysis of modeling benefits and costs requires an in-depth understanding of the goals of modeling and the p...
Context Generative Artificial Intelligence (GenAI) tools have become increasingly prevalent in software development, offering assistance to various managerial and technical project activities. Notable examples of these tools include OpenAI's ChatGPT, GitHub Copilot, and Amazon CodeWhisperer. Objective. Although many recent publications have explore...
In the context of enterprises, a wide range of models is developed and used for diverse purposes. Due to the investments involved in modeling, these models should ideally be used in projects in which their benefits outweigh their costs. The analysis of modeling benefits and costs requires an in-depth understanding of the goals of modeling and the p...
Evaluating mutation testing behavior can help decide whether refactoring successfully maintains the expected initial test results. Moreover, manually performing this analytical work is both time-consuming and prone to errors. This paper extends an approach to assess test code behavior and proposes a tool called MeteoR. This tool comprises an IDE pl...
Managing non-functional requirements (NFRs) has been a challenge in software development for many years. These requirements are typically used to make important architectural decisions early in the project, which can be problematic if they are uncertain or unstable. When this uncertainty is not considered when designing the software architecture, c...
A aprendizagem de programação é vista como uma tarefa complexa, onde existem alunos com dificuldades em entender os conceitos, e outros que entendem mas possuem dificuldades em aplicá-los. As dificuldades juntamente com o desconhecimento da sintaxe das linguagens de programação, fazem com que aprendizes cometam erros durante o desenvolvimento de se...
Frameworks are essential for software development, providing code design and reuse for its users. Well-known Java frameworks and APIs such as Spring, JUnit, and JPA rely on metadata usage, commonly defined by code annotations. Those frameworks use the Java Reflection API for consuming and processing these annotations. Code elements usually have som...
The Annotation Visualizer (AVisualizer) is a software visualization tool for displaying code annotations distribution in a given target Java-based software system. Implemented as a web application, it can extract annotations usage from the target source code and display it using a hierarchical circle packing approach. Using a dedicated suite of sof...
The restrictions imposed by the COVID-19 pandemic required software development teams to adapt, being forced to work remotely and adjust the software engineering activities accordingly. In the studies evaluating these effects, a few have assessed the impact on software engineering activities from a broader perspective and after a period of time whe...
In response to the prevailing challenges in contemporary software development, this article introduces an innovative approach to code augmentation centered around Impermanent Identifiers. The primary goal is to enhance the software development experience by introducing dynamic identifiers that adapt to changing contexts, facilitating more efficient...
The aim of this study is to introduce a virtual laboratory platform with metadata-based API for the creation of dynamic software components. Also, the study seeks to assess the platform’s validity and technological acceptance among the community of system developers. The platform is referred to as Esfinge Virtual Lab, and it has been developed util...
Code annotations are used mainly in modern Java software, and their primary purpose is to configure metadata into programmable elements such as methods and classes. The Annotation Sniffer is a stable tool that analyses Java source code and generates a JSON report with code annotations metrics values. In other words, it measures metadata configurati...
Context: Code annotation is a feature to define custom metadata about programming elements. Many modern frameworks and APIs use annotations to keep integration less verbose and closer to the corresponding code element. However, contrary to the initial intent, practitioners often complain about the negative impacts of annotations on code readability...
Context:
Code annotations is a widely used feature in Java systems to configure custom metadata on programming elements. Their increasing presence creates the need for approaches to assess and comprehend their usage and distribution. In this context, software visualization has been studied and researched to improve program comprehension in differen...
Context
Software startups work under uncertain market conditions, constant time pressures, and extremely limited resources. Startup practitioners commonly adopt agile practices and lean development to build and release software quickly. Within this context, User eXperience (UX) work is critical for generating user value and creating a competitive a...
Clean Architecture (CA) aims to address the need for more loosely coupled components and better cohesion. CA focuses on preparing software engineers to write more stable, durable, and flexible applications capable of distinguishing between details (e.g., what framework it uses) and the business logic requirements. A literature review shows that con...
Massive Open Online Courseware (MOOCs) appeared in 2008 and grew considerably in the past decade, now reaching millions of students and professionals all over the world. MOOCs do not replace other educational forms. Instead, they complement them by offering a powerful educational tool that can reach students that, otherwise, would not have access t...
Context: Software startups develop innovative, software-intensive products. Given the uncertainty associated with such an innovative context, experimentation, an approach based on validating assumptions about the software product through data obtained from diverse techniques, like A/B tests or interviews, is valuable for these companies. Relying on...
[Context] The COVID-19 pandemic has had a disruptive impact on how people work and collaborate across all global economic sectors, including the software business. While remote working is not new for software engineers, forced Work-from-home situations to come with both constraints, limitations, and opportunities for individuals, software teams and...
The promise of increased agility, autonomy, scalability, and reusability has made the microservices architecture a \textit{de facto} standard for the development of large-scale and cloud-native commercial applications. Software patterns are an important design tool, and often they are selected and combined with the goal of obtaining a set of desire...
Software analytics is a data-driven approach to decision making, which allows software practitioners to leverage valuable insights from data about software to achieve higher development process productivity and improve different aspects of software quality. In previous work, a set of patterns for adopting a lean software analytics process was ident...
Code annotations is a widely used feature in Java systems to configure custom metadata on programming elements. Their increasing presence creates the need for approaches to assess and comprehend their usage and distribution. In this context, software visualization has been studied and researched to improve program comprehension in different aspects...
Digital games are also a software product. However, games have a fun requirement and tightly coupled UI, which makes them hard to test. Nevertheless, they are made of code and might also benefit from the advantages that automated tests bring to enterprise software systems. In this paper, we discuss two categories of automated tests for games, focus...
Object cloning is demanded in many situations. Traditional deep cloning is an approach that usually is implemented programmatically, with reflection or serialization. However, those implementations may not fulfil requirements like performance, memory usage, and code maintainability. In this paper, we propose the Lazy Clone Pattern that aims to bett...
One of the main objectives of Empirical Software Engineering is the improvement of methods, techniques, and tools for Software Engineering (SE) through the conduction and execution of experiments. Although research in empirical software engineering is well established in the literature, it is possible to verify that there are few supporting environ...
Context
: The study of cognitive aspects around software activities can provide valuable insights to improve software engineering practices. Objective: This paper presents an approach based on distributed cognition and sequential analysis to explore cognitive activities in the software development context by analyzing the interactions between softw...
[Context] Software startups are engines of innovation and economy, yet building software startups is challenging and subject to a high failure rate. They need to act and respond fast in highly uncertain business environments. To do so, they need to identify crucial and actionable information that supports them in making correct decisions and reduce...
Software start-ups develop innovative software products working with disruptive technologies in time pressure and market-driven environment. Recently, User eXperience (UX) has become a hot topic that interests software teams of start-ups. However, software and UX professionals have struggled to match UX practices into the development activities, pa...
The Adaptive Object Model (AOM) is an architectural style in which domain entity types are represented as instances that can be changed at runtime. It can be used to achieve higher flexibility in domain classes. Due to AOM entities having a distinct structure, they are not compatible with most popular frameworks, especially those that use reflectio...
Context: Software startups develop innovative, software-intensive products. Given the uncertainty associated with such an innovative context, experimentation is a valuable approach for these companies, especially in the early stages of the development, when implementing unnecessary features represents a higher risk for companies' survival. Neverthe...
Test Driven Development (TDD) is an iterative software development technique in which unit tests are defined before production code, while Test-Last Development (TLD) is a more traditional development technique in which unit tests are written after the features are implemented. There have been a number of empirical studies investigating the effects...
Context
The higher availability of software usage data and the influence of the Lean Startup led to the rise of experimentation in software engineering, a new approach for development based on experiments to understand the user needs. In the models proposed to guide this approach, the first step is generally to identify, prioritize, and specify the...
Construir uma boa arquitetura é fundamental para obter sucesso no processo de desenvolvimento de software . Porém, essa não é uma atividade trivial, pois envolve uma série de decisões de domínio do negócio, técnicas e de estrutura. Assim, com a finalidade de apoiar a construção de uma arquitetura mais adequada a um determinado contexto, constanteme...
Software Ecosystem (SECO) is a consolidated research area in software engineering, emerging as a paradigm for understanding dynamics and relationships among software systems that collaborate with each other to achieve their goals. Understanding the ecosystem and how its elements interact is essential for software evolution, especially for those tha...
Several companies whose businesses are not centered on technology might fail to innovate and get advantages over their competitors. For them, meaningful innovations are not necessarily related to the usage of new technologies but the optimization of some business process. In the literature, experimentation is described as an essential aspect of the...
Java developers make extensive use of code annotations since their introduction in version 5 of the language. They are inserted directly on the source code for custom metadata configuration , similar to C# attributes. The software engineering community has few works investigating their usage and impact on source code. Being able to visualize charac...
Manufacturers are creating powerful CPUs by exponentially increasing the number of cores over time, as producing faster sequential chips has become more expensive. Developers must now employ parallel strategies and design parallel algorithms if they want to use every resource available in the machine. Still, many successful open-source projects are...
The rise of technological dependency made some requirements crucial to online systems, such as availability, and scalability. The microservices architectural style provides improvements to scalability and software maintainability and has been broadly adopted. Although, microservices highlight trade-offs between consistency and coupling level. This...
In safety-critical systems keeping complete trace of requirements and detailed testing is an extremely relevant part of software development life cycle. Safety standards like ISO 26262, DO178C and many others prescribe that critical requirements must be completely traceable. These standards also demand detailed and regression testing of system. Her...
Developing complex systems using microservices is a current challenge. In this paper we present our experience with teaching this subject for more than 80 students at the University of São Paulo (USP), fostering team work and simulating the industry's environment. We show it is possible to teach such advanced concepts for senior undergraduate stude...
Developing complex systems using microservices is a current challenge. In this paper we present our experience with teaching this subject for more than 80 students at the University of São Paulo (USP), fostering team work and simulating the industry’s environment. We show it is possible to teach such advanced concepts for senior undergraduate stude...
Since the introduction of code annotations in the Java language,this feature has been widely adopted by software developers across the globe. Main enterprise frameworks make extensive use of code annotations as a replacement for XML based solutions. Code annotations are inserted directlyon code elements, providing a simple way to introduce custom m...
Test-Driven Development (TDD) is an iterative software development technique in which unit tests are defined before production code, while Test-Last Development (TLD) is a more traditional development technique in which unit tests are written after the features are implemented. There have been a number of empirical studies investigating the effects...
Environmental issues have become the subject of strong discussions nowadays and games have become great allies in the teaching and awareness of environmental problems, especially when applied in children's education. This paper presents a 2D serious game for the PC platform to raise awareness about the environment, focusing on water pollution. Play...
Startup education presence in Computer Science and Software Engineering curriculum has risen in the recent years. Currently, most reported courses focus on teaching innovation and business techniques and try to emulate real-world projects to convey the content. They have not focused on team composition which is a critical element for the success of...
Nowadays, web services became one of the main alternatives for communication between software systems and even inside the components of the same application. In some domains, the change of requirements happens frequently, demanding flexibility from the architecture of the applications, and consequently also in the web services that they provide. In...
The C# attributes have been available since the release of this language as a means to configure custom metadata on code elements. Being very similar to Java annotations, they are both introduced directly in the source code. Several C# frameworks such as NUnit, Unity Game Engine, and JSON.net use attributes to allow applications to configure custom...
Aplicações que usam gamificação desbloqueiam novas funcionalidades conforme o usuário obtém conquistas ou atinge certa pontuação. Porém, fazer o controle do acesso integrado a estes conceitos se torna uma atividade complexa, e sua implementação tende a acontecer isoladamente nos métodos das classes de negócio, aumentando o acoplamento entre as regr...
As the software evolves, new codes are written, and many other codes are refactored. Refactoring also involves the test code, to ensure that it continues performed, and adequately verifying the behavior of the software. This work proposes the creation of an extensible architecture named EARTC to perform refactoring safely in test code. The coding o...
TDD is a technique traditionally applied in applications with deterministic algorithms, in which the input and the expected result are known. However, the application of TDD with randomized algorithms have been a challenge, especially when the execution demands several random choices. The goal of this paper is to present an approach to allow the us...
The demand for software application development has grown exponentially in recent years and will certainly continue growing as new programming techniques and patterns are adopted. The development of applications that better adjust to the real needs of the customers is a challenge. Understanding the behavior of users to improve certain points of the...