
Filipe Figueiredo CorreiaUniversity of Porto | UP · Departamento de Engenharia Informática
Filipe Figueiredo Correia
Professor
About
49
Publications
13,963
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
267
Citations
Citations since 2017
Publications
Publications (49)
Adopting DevOps practices is nowadays a recurring task in the industry. DevOps is a set of practices intended to reduce the friction between the software development (Dev) and the IT operations (Ops), resulting in higher quality software and a shorter development lifecycle. Even though many resources are talking about DevOps practices, they are oft...
Container orchestration tools supporting infrastructure-as-code allow new forms of collaboration between developers and operatives. Still, their text-based nature permits naive mistakes and is more difficult to read as complexity increases. We can find few examples of low-code approaches for defining the orchestration of containers, and there seems...
Context: Container orchestration tools supporting infrastructure-as-code allow new forms of collaboration between developers and operatives. Still, their text-based nature permits naive mistakes and is more difficult to read as complexity increases. We can find few examples of low-code approaches for defining the orchestration of containers, and th...
Documenting frameworks provides its users and maintainers useful information on that software's architecture, design, and customization. Despite documentation's importance, the process of creating and maintaining it is considered to imply considerable effort, to be tedious, and expensive. In this work, we mine patterns from open source frameworks t...
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...
Cloud computing and Infrastructure-as-Code (IaC), supported by technologies such as Docker, have shaped how many software systems are built and deployed. Previous research has identified typical issues for some types of IaC specification but not why they come to be, or they have delved into collaboration aspects but not into technical ones. This wo...
This work takes as a starting point a collection of patterns for engineering software for the cloud and tries to find how they are regarded and adopted by professionals. Existing literature assessed the adoption of cloud computing with a focus on business and technological aspects and fall short in grasping a holistic view of the underlying approac...
Infrastructure-as-Code tools, such as Docker and Docker Compose, play a crucial role in the development and orchestration of cloud-native and at-scale software. However, as IaC relies mostly on the development of text-only specifications, these are prone to misconfigurations and hard to debug. Several works suggest the use of models as a way to abs...
A number of approaches have been proposed to identify service boundaries when decomposing a monolith to microservices. However, only a few use systematic methods and have been demonstrated with replicable empirical studies. We describe a systematic approach for refactoring systems to microservice architectures that uses static analysis to determine...
A number of approaches have been proposed to identify service boundaries when decomposing a monolith to microservices. However, only a few use systematic methods and have been demonstrated with replicable empirical studies. We describe a systematic approach for refactoring systems to microservice architectures that uses static analysis to determine...
We present the proceedings of the AMP 2020 workshop, co-located with XP 2020, and report our main insights from its conduction. The workshop focused on exploring the interplay between agile methods and microservice architectures. Due to the COVID outbreak, AMP 2020 was moved online, divided into two parts: a live presentation session and a three-we...
Successful software systems tend to grow considerably, ending up suffering from essential complexity, and very hard to understand as a whole. Software visualization techniques have been explored as one approach to ease software understanding. This work presents a novel approach and environment for software development that explores the use of liven...
Trusted open data can be used for auditing, accountability, business development, or as an anti-corruption mechanism. Metadata information can address provenance concerns, and trust issues can somehow be mitigated by digital signatures. Those approaches can trace the data origin, but usually lack information about the transformation process. Creati...
Live Programming is an idea pioneered by programming environments from the earliest days of computing, such as those for Lisp and Smalltalk. One thing they had in common is liveness: an always accessible evaluation and nearly instantaneous feedback, usually focused on coding activities. In this paper, we argue for Live Software Development (LiveSD)...
The explosion of blockchain projects in last couple of years shows the general interest in the blockchain technology. Looking towards the current state of the art regarding this technology it becomes clear that the main driver of innovation is the private sector. We believe that understanding main applications of the technology, academic contributi...
The applications of the blockchain technology are still being discovered. When a new potential disruptive technology emerges, there is a tendency to try to solve every problem with that technology. However, it is still necessary to determine what approach is the best for each type of application. To find how distributed ledgers solve existing probl...
The applications of the blockchain technology are still being discovered. When a new potential disruptive technology emerges, there is a tendency to try to solve every problem with that technology. However, it is still necessary to determine what approach is the best for each type of application. To find how distributed ledgers solve existing probl...
Cloud software continues to expand globally, highly motivated by how widespread the Internet is and the possibilities it unlocks with cloud computing. Still, cloud development has some intrinsic properties to it, making it complex to unexperienced developers.
This research is capturing those intricacies in the form of a pattern language that gather...
Cloud software continues to expand globally, highly motivated by how widespread the Internet is and the possibilities it unlocks with cloud computing. Still, cloud development has some intrinsic properties to it, making it complex to unexperienced developers.
This research is capturing those intricacies in the form of a pattern language, gathering...
Software business continues to expand globally, highly motivated by the reachability of the Internet and possibilities of Cloud Computing. While widely adopted, development for the cloud has some intrinsic properties to it, making it complex to any newcomer. This research is capturing those intricacies using a pattern catalog, with this paper contr...
Software businesses are quickly moving towards the cloud. While cloud computing is not a new research subject, engineering software for the cloud is still a challenge, demanding broad knowledge over a multitude of processes and tools that most software development teams lack. This paper identifies and briefly describes the practices required to eff...
Software businesses are redirecting their expansion towards service-oriented businesses models, highly supported by cloud computing. While cloud computing is not a new research subject, there’s a clear lack of documented best practices on how to orchestrate cloud environments, either public, private or hybrid. This paper is targeted at DevOps pract...
Creating and using software documentation presents numerous challenges, namely in what concerns the expression of knowledge structures, consistency maintenance and classification. Adaptive Software Artifacts is a flexible approach to expressing structured contents that tackles these concerns, and that is being realized in the context of a Software...
The benefits of using models have long been acknowledged by research and industry, but in practice the use of modeling tools often implies a more-than-reasonable effort or confines itself to points in the project lifetime when the requirements and/or design is well understood.
Free-form tools like whiteboards and textual documents fill information...
Providing efficient access to information can be approached in different ways, but ultimately implies the creation of an Index, represented with an indexing language, like a Taxonomy, a Thesaurus, an Ontology or a Folksonomy. Each of these languages strikes a different balance between the effort to create and maintain the index, the effectiveness o...
An Adaptive Object Model (AOM) is a common architectural style for systems in which classes, attributes, relationships and behaviors of applications are represented as metadata, allowing them to be changed at runtime not only by programmers, but also by end users. Frequently, behavior is added to AOM systems by increasingly adding expressiveness to...
Meta-architectures, also known as reflective architectures, are a specific type of software architectures that are able to inspect their own structure and behavior, and dynamically adapt at runtime, thus responding to new user requirements or changes in their environment. This paper describes the Lazy Semantics pattern, which arrises when there is...
The knowledge of software developers materializes itself as software artifacts, that may be seen at two different levels (information and structure), which are difficult to change independently from each other. This work explores how the expression of software knowledge using adaptive software techniques, may support the creation of adaptive softwa...
Meta-architectures, also known as reflective architectures, are a specific type of software architectures that are able to inspect their own structure and behavior, and dynamically adapt at runtime, thus responding to new user requirements or changes in their environment. In object-oriented program-ming, these architectures rely on a small set of c...
Software development is a knowledge-intensive activity and frequently implies a progressive crystallization of knowledge, towards programming language statements. Although wikis have proved very eective, for both collaborative authoring and knowledge management, it would be useful for knowl- edge acquisition to better support team awareness and the...
Knowledge plays a key role in software development, and the effectiveness of how it is captured into artifacts, and acquired by other team members, is of crucial importance to a project's success. The life-cycle of knowledge in software development is derived from the adopted artifacts, practices and tools. These axes are here reviewed from a knowl...
Documentation is an important part of the captured knowl-edge of a software project, providing a flexible and effective way of recording informal contents. However, maintaining documentation's consistency requires a considerable effort. Existing solutions encompass different tools and approaches that support the process of creating, evolving and us...
The Adaptive Object-Model (AOM) architectural pattern has been significantly documented in literature, but there is not yet enough documentation explaining how to design and build a full AOM-based system. A AOM framework would need to address an additional number of issues that go well beyond individual software patterns. In this paper, we propose...
An Adaptive Object-Model (AOM) is an architectural pat-tern based upon a dynamic meta-modeling technique where the object model of the system is explicitly defined as data to be interpreted at run-time. The object model encompasses the full specification of domain objects, states, events, con-ditions, constraints and business rules. Several design...
An Adaptive Object Model (AOM) is a meta-modeling dy-namic technique, where a runtime model is used in order to allow for fast prototyping and model experimentation. It uses several levels of abstrac-tion but differs from generative approaches and reflection in it's degree of dynamism and application domain. We present a set of common AOM-related d...
Projects
Project (1)