Architecture

 

Modernizing a legacy system is a costly process that requires a deep understanding of the system architecture and its components. Without an understanding of the software architecture that will be rewritten, the entire process of reengineering can fail. For this reason, semi-automatic and automatic techniques for architecture recovery have been active focuses of research. However, there are still important improvements that need to be addressed in this field of research, w.r.t. achieving a more accurate architecture recovery process. In our research, we have proposed ways to use visualization and clustering techniques applied together to provide a higher accuracy on the software architecture recovery process and co-change clusters analysis. We have conducted experimental studies in an industrial environment and publicly available software repository to evaluate our investigations empirically.

 

Besides its scope, importance, and increasing relevance in the generation of software quality, few academic centers in the world offer the opportunity for Computer Science students to know better how to understand and analyze the software from the perspective of dependability. In our group, we are mostly interested in developing methods, processes, and techniques that make dependability an inherent part of software engineering as an active discipline of research and practice. In particular, our current research interests are in dependability analysis and modeling in software systems, particularly probabilistic model checking, self-adaptive systems, and goal-oriented requirements engineering.

 

We work with a very talented and engaged research group. If you are interested in one of our topics of interest and have a proactive attitude, let's talk!


 

Within the scope of our Software Engineering laboratory, we conduct research activities that employ scientific methods to investigate and understand various phenomena related to software development. Initially, we dedicate our efforts to a comprehensive literature review to understand the current state of knowledge in specific areas of interest. This literature review highlights relevant previous findings and identifies gaps in knowledge, guiding the direction of our investigations.

 

Based on this consolidated knowledge, we formulate specific hypotheses and design-controlled experiments to fill identified gaps. Collecting relevant data and applying statistical analysis are crucial steps in interpreting the results obtained during our investigations. In addition, the initial literature review contributes to the definition of informed hypotheses, influencing the careful choice of variables and metrics for evaluation during the experiments carried out in our laboratory. The execution of secondary studies, such as analyses of previous work, systematic reviews, and meta-analyses, plays a fundamental role in consolidating and interpreting experimental results, guaranteeing a more robust and comprehensive approach to the activities carried out in our Software Engineering research environment.


Gamification

 


Project Management

 

In the dynamic context of Software Engineering, Project Management is a guide for creating and delivering software. It is not just an administrative tool but a vital element in ensuring that projects are delivered on time, within budget, and with the desired quality. Whether adopting agile or traditional methodologies, project management in software engineering deals with the complexity inherent in development, prioritizing tasks, allocating resources efficiently, and adapting to inevitable changes. The balance between schedules, budgets, multidisciplinary teams, and clients defines the successful delivery of innovative, high-quality products.

 

In this context, effective project management is a practical necessity and a strategic opportunity. By integrating modern management tools, agile methodologies, and transparent communication, we seek to meet objectives and promote a culture of innovation and continuous learning. Project management in software engineering is the art of balancing efficient execution with the flexibility needed to meet constantly evolving challenges. It is an essential component in successfully delivering software solutions.


Programming Language Features

 

Research into the Characteristics of Programming Languages in Software Engineering is a crucial discipline that aims to understand and improve the linguistic resources used in software development. This study thoroughly analyzes the characteristics of programming languages, from syntactic constructs to design paradigms, to optimize expressiveness, security, and efficiency in coding. Research in this area contributes to developing more robust languages, facilitating the implementation of innovative solutions, and promoting efficiency in the software lifecycle. By exploring and evaluating the characteristics of programming languages, we aim to gain a deeper understanding of how these elements influence code quality, maintainability, and productivity within the scope of Software Engineering.


Program Transformations

 

The study of Program Transformations in Software Engineering is an area of research focusing on the systematic analysis and manipulation of source code. This field seeks to develop techniques and tools for the efficient transformation of programs, allowing controlled and automatic modifications on a large scale. Program transformations have diverse applications, from refactoring code to improve readability to adapting existing systems to new requirements. The main goal is to provide a systematic approach to software's continuous evolution and optimization, making it easier to maintain, update, and customize complex systems. By exploring Program Transformations, Software Engineering research aims to improve code quality, development efficiency, and the adaptability of technological solutions.


 

We work with a very talented and engaged research group. If you are interested in one of our topics and have a proactive attitude, let's talk!

 


Secondary Studies

 

Secondary Studies not only consolidate but also broaden our understanding by providing a panoramic view of existing research. By understanding and critically analyzing previous work in Software Engineering, we can identify gaps in knowledge, avoid duplication, and, crucially, build on the established foundation. The importance of Secondary Studies is undeniable because by systematically reviewing existing work, we build a solid understanding of the current state of knowledge in our field. This critical analysis enables us to identify trends and gaps and develop an informed perspective for moving forward. Secondary Studies are the foundation for building new ideas and approaches, ensuring our research is innovative and contextualized.


 

In the evolving scenarios of software engineering and user data privacy and security, our research group is dedicated to advancing the field of security and privacy requirements in software and systems development. Our team is on a mission to create a comprehensive and practical resource for developers, organizations, and industry professionals seeking to integrate security and privacy requirements elicitation into their projects.

 

Our primary mission is to gather and synthesize academic and industrial approaches to security and privacy requirements elicitation. We aim to create a set of guidelines for software and systems development that reflects the current best practices in the ever-evolving landscape of user data considerations.

Our research group plans to go beyond frameworks and engage in practical applications. We propose a hands-on approach to ensure the relevance and effectiveness of our guidelines in real-world scenarios.

 

Our research group aspires to contribute with a methodology for specifying security and privacy requirements in software engineering. This proposed methodology will be the culmination of our collective expertise and insights, providing a structured and effective framework for integrating security and privacy considerations seamlessly into the software development life cycle.

 

By addressing these objectives, our research group aims to make significant contributions to the field of security and privacy requirements, offering practical tools and insights that will empower developers and organizations to create digital solutions that prioritize and respect user privacy and ethical considerations.

 

Join us in shaping the future of responsible and privacy-centric software development!


 

To best characterize self-adaptive systems, we cite the recent roadmap in Software Engineering for Self-Adaptive Systems (SAS) [1]: "SAS are systems that are able to adjust their behavior in response to their perception of the environment and the system itself – has become an important research topic. It is important to emphasize that in all the many initiatives to explore self-adaptive behavior, the common element that enables the provision of self-adaptability is usually the software. (...) It also holds for many research fields, which have already investigated some aspects of self-adaptation from their own perspective, such as fault-tolerant computing, distributed systems, biologically inspired computing, distributed artificial intelligence, integrated management, robotics, knowledge-based systems, machine learning, control theory, etc. In all these cases, software’s flexibility allows such heterogeneous applications; however, the proper realization of the self-adaptation functionality still remains a significant intellectual challenge, and only recently have the first attempts in building self-adaptive systems emerged within specific application domains."[1] Cheng, B.H.C., Lemos, R. L., Giese, H., - Software Engineering for Self-Adaptive Systems: A Research Roadmap, In Software Engineering for Self-Adaptive Systems (2009), Springer, p, 1-26.


Software Architecture and Modularity


The study of Software Architecture and Modularity in Software Engineering is a discipline that focuses on the design and organization of complex software systems. This area of research aims to understand, design, and improve the architectural structures that support the functionality and scalability of applications. The emphasis is on creating modular architectures, making it easier to understand, maintain, and evolve software over time. By analyzing architectural principles and modular techniques, the research seeks to promote efficiency in development, enabling the construction of a more robust and adaptable system.

 

The intersection between Software Architecture and Modularity is crucial to meeting the challenges of developing complex systems. Research in this area not only provides a deeper understanding of architectural principles but also seeks innovative strategies to promote the flexibility and scalability of software systems. The importance of this discipline lies in its ability to positively influence software quality, favoring the construction of systems that are more flexible, easily understandable, and ready to evolve according to the ever-changing demands of Software Engineering.

 

Focus on various critical aspects, including conversation-driven development, model-driven development, human-chatbot interaction, and privacy protection. Our research aims to contribute to the evolution of chatbot technologies, addressing challenges and pushing the boundaries of their capabilities.

 

Conversation-driven development stands as a centerpiece of our research efforts, emphasizing the importance of seamlessly integrating chatbots into natural, user-friendly conversations. We explore innovative methods and techniques to enhance the conversational aspects of chatbots, striving to create systems that understand and respond to users in a more intuitive and context-aware manner.

 

Model-driven development is another key area of interest, where we delve into creating efficient and scalable models for chatbots. By leveraging advancements in machine learning and artificial intelligence, we seek to empower chatbots with sophisticated models that enable them to learn and adapt to diverse user interactions, ultimately improving their overall performance and user satisfaction.

 

Human-chatbot interaction is a crucial aspect that underpins the effectiveness and acceptance of chatbot technologies. Our research delves into understanding the dynamics of human-chatbot interactions, aiming to enhance the user experience and foster more natural and meaningful conversations. We explore user-centric design principles and employ user studies to inform the development of chatbots that align with human expectations and preferences.

 

Privacy protection is a paramount concern in the age of digital communication, and our research group is committed to addressing this challenge in the context of chatbots.

 

We investigate methods to ensure that chatbot interactions respect user privacy, employing techniques such as encryption, anonymization, and user-centric privacy controls to safeguard sensitive information and instill trust in users if you share our enthusiasm for advancing the capabilities of chatbots and are eager to contribute to cutting-edge research, we invite you to engage with us.


Software Product Line

 

Software Product Line Engineering (SPLE) aims to develop a large number of software systems that share a common and managed set of features. In the past years, it has been an active area in both research and industry. SPLE aims to improve productivity and reduce the time, effort, and cost required to develop a family of products (also called variants). The key point to achieving this goal is managing the variability among various products of a Software Product Line (SPL). SPLE mainly relies on model-based techniques by which variable features and behaviors are specified. The models are then used to derive numerous products, each of which contains a specific set of features.


Software Quality


We recognize the fundamental importance of quality in software development, and our efforts focus on understanding, improving, and innovating practices that guarantee efficiency, reliability, and usability in the resulting software. Our research covers advanced testing methodologies, static code analysis, and quality metrics. Within the lab, we explore topics such as code review, improved debugging processes, and comprehensive quality assurance strategies throughout the software lifecycle. Test automation, implementation of coding standards, and continuous integration are research focuses aimed at establishing consistent excellence in software construction.