Currently, I'm an Associate Professor at the Faculty of Engineering at University of Porto and an integrated member of the research center HASLab/INESC TEC.
My research is mainly focused on aiding end users being more effective and efficient when developing their software systems. In particular, I've made several contributions to improve the effectiveness and efficiency of spreadsheet users/developers. More recently I've also worked on improving software energy consumption through the analysis and transformation of its source code. Currently I'm focused on making data science more accessible for (end) users. Moreover, I'm also studying how to improve the development of software applications based on the microservices architectural style.
I obtained my PhD degree in Computer Science from the University of Minho in 2011. Afterward, I was a postdoctoral fellow jointly at University of Minho and Oregon State University, and was also an Invited Professor at School of Management and Technology of Polytechnic Institute of Porto, Assistant Professor at NOVA University of Lisbon and Assistant Professor at University of Minho.
Bidirectional transformations have application in a wide number of computer science domains. Spre... more Bidirectional transformations have application in a wide number of computer science domains. Spreadsheets, on the other hand, are widely used for developing business applications, but their formulas are unidirectional, in the sense that their result can not be edited and propagated back to their input cells. In this poster, we propose the bidirectionalization of such formulas, by recasting them as lenses [1], a successful bidirectional transformation framework with instantiations in various data domains relevant for this endeavor. Keywords-bidirectional transformations; spreadsheets.
This work is financed by the FCT – Fundacao para a Ciencia e a Tecnologia (Portuguese Foundation f... more This work is financed by the FCT – Fundacao para a Ciencia e a Tecnologia (Portuguese Foundation for Science and Technology) within project UID/EEA/50014/2013. This work has also been partially funded by FLAD/NSF through a project grant (ref. 233/2014). The last author is supported by CAPES through a Programa Professor Visitante do Exterior (PVE) grant (ref. 15075133).
The use of powerful mobile devices, like smartphones, tablets and laptops, is changing the way pr... more The use of powerful mobile devices, like smartphones, tablets and laptops, is changing the way programmers develop software. While in the past the primary goal to optimize software was the run time optimization, nowadays there is a growing awareness of the need to reduce energy consumption. This paper presents techniques and tools to detect anomalous energy consumption in Android applications, and to relate it directly with the source code of the application. We present a methodology to classify program execution and program methods according to the energy consumed. Thus, we monitored and analyzed the results of energy consumed by a corpus of Android applications, and we defined greenaware energy thresholds. Such thresholds are used to classify program methods according to energy consumption. Moreover, we manually inspect the source code of both energy efficient and inefficient methods and we identify program features that influence energy consumption.
One of the most important assets of any company is being able to easily access information on its... more One of the most important assets of any company is being able to easily access information on itself and on its business. In this line, it has been observed that this important information is often stored in one of the millions of spreadsheets created every year, due to simplicity in using and manipulating such an artifact. Unfortunately, in many cases it is quite difficult to retrieve the intended information from a spreadsheet: information is often stored in a huge unstructured matrix, with no care for readability or comprehensiveness. In an attempt to aid users in the task of extracting information from a spreadsheet, researchers have been working on models, languages and tools to query. In this paper we present an empirical study evaluating such proposals assessing their usage to query spreadsheets. We investigate the use of the Google Query Function, textual model-driven querying, and visual model-driven querying. To compare these different querying approaches we present an emp...
Data science has started to become one of the most important skills one can have in the modern wo... more Data science has started to become one of the most important skills one can have in the modern world, due to data taking an increasingly meaningful role in our lives. The accessibility of data science is however limited, requiring complicated software or programming knowledge. Both can be challenging and hard to master, even for the simple tasks. With this in mind, we have approached this issue by providing a new data science platform, termed DS4All.Curation, that attempts to reduce the necessary knowledge to perform data science tasks, in particular for data cleaning and curation. By combining HCI concepts, this platform is: simple to use through direct manipulation and showing transformation previews; allows users to save time by eliminate repetitive tasks and automatically calculating many of the common analyses data scientists must perform; and suggests data transformations based on the contents of the data, allowing for a smarter environment.
2017 IEEE/ACM 2nd International Workshop on Variability and Complexity in Software Design (VACE), 2017
Applications based on micro or web services have had significant growth due to the exponential in... more Applications based on micro or web services have had significant growth due to the exponential increase in the use of mobile devices. However, using such kind of loosely coupled interfaces provides almost no guarantees to the developer in terms of evolution. Changes to service interfaces can be introduced at any moment, which may cause the system to fail due to mismatches between communicating parts. In this paper, we present a programming model that allows the development of web service applications, server end-points and their clients, in such a way that the evolution of services' implementation does not cause the disruption of the client. Our approach is based on a type based code slicing technique that ensures that each version only refers to type compatible code, of the same version or of a compatible version, and that each client request is redirected to the most recent type compatible version implemented by the server. We abstract the notion of version and parametrize typ...
Functional programmers are strong enthusiasts of modular solutions to programming problems. Since... more Functional programmers are strong enthusiasts of modular solutions to programming problems. Since software characteristics such as readability or maintainability are often directly proportional to modularity, this programming style naturally contributes to the beauty of functional programs. Unfortunately, in return of this beauty we often sacrifice efficiency: modular programs rely, at runtime, on the creation, use and elimination of intermediate data structures to connect its components. In this tutorial paper, we study an advanced technique that attempts to retain the best of this two worlds: (i) it allows programmers to implement beautiful, modular programs (ii) it shows how to transform such programs, in a way that can be incorporated in a compiler, into programs that do not construct any intermediate structure.
In the last few years we have been seeing a drastic change in the way software is developed. Larg... more In the last few years we have been seeing a drastic change in the way software is developed. Large-scale software projects are being assembled by a flexible composition of many (small) components possibly written in different programming languages and deployed anywhere in the cloud – the so-called microservice-based applications. The dramatic growth in popularity of microservice-based applications has pushed several companies to apply major refactorings to their software systems. However, this is a challenging task that may take several months or even years. We propose a methodology to automatically evolve a Java monolithic application into a microservice-based one. Our methodology receives the Java code and a proposition of microservices and refactors the original classes to make each microservice independent. Our methodology creates an API for each method call to classes that are in other services. The database entities are also refactored to be included in the corresponding service. The initial evaluation shows that our tool can successfully refactor 80% of the applications tested.
Proceedings of the 36th Annual ACM Symposium on Applied Computing
Microservices emerged as one of the most popular architectural patterns in the recent years given... more Microservices emerged as one of the most popular architectural patterns in the recent years given the increased need to scale, grow and flexibilize software projects accompanied by the growth in cloud computing and DevOps. Many software applications are being submitted to a process of migration from its monolithic architecture to a more modular, scalable and flexible architecture of microservices. This process is slow and, depending on the project's complexity, it may take months or even years to complete. This paper proposes a new approach on microservice identification by resorting to topic modelling in order to identify services according to domain terms. This approach in combination with clustering techniques produces a set of services based on the original software. The proposed methodology is implemented as an open-source tool for exploration of monolithic architectures and identification of microservices. A quantitative analysis using the state of the art metrics on independence of functionality and modularity of services was conducted on 200 open-source projects collected from GitHub. Cohesion at message and domain level metrics' showed medians of roughly 0.6. Interfaces per service exhibited a median of 1.5 with a compact interquartile range. Structural and conceptual modularity revealed medians of 0.2 and 0.4 respectively. Our first results are positive demonstrating beneficial identification of services due to overall metrics' results.
Today's software systems must accommodate a wide range of usage and deployment scenarios. The... more Today's software systems must accommodate a wide range of usage and deployment scenarios. The increasing size and heterogeneity of software-intensive systems, dynamic and critical operating conditions, fast moving and highly competitive markets, and increasingly powerful and versatile hardware makes it more and more difficult to handle the additional complexity in design caused by variability. This paper reports results of the Second International Workshop on Variability and Complexity in Software Design. It also outlines directions the field might move in the future.
Bidirectional transformations have application in a wide number of computer science domains. Spre... more Bidirectional transformations have application in a wide number of computer science domains. Spreadsheets, on the other hand, are widely used for developing business applications, but their formulas are unidirectional, in the sense that their result can not be edited and propagated back to their input cells. In this poster, we propose the bidirectionalization of such formulas, by recasting them as lenses [1], a successful bidirectional transformation framework with instantiations in various data domains relevant for this endeavor. Keywords-bidirectional transformations; spreadsheets.
This work is financed by the FCT – Fundacao para a Ciencia e a Tecnologia (Portuguese Foundation f... more This work is financed by the FCT – Fundacao para a Ciencia e a Tecnologia (Portuguese Foundation for Science and Technology) within project UID/EEA/50014/2013. This work has also been partially funded by FLAD/NSF through a project grant (ref. 233/2014). The last author is supported by CAPES through a Programa Professor Visitante do Exterior (PVE) grant (ref. 15075133).
The use of powerful mobile devices, like smartphones, tablets and laptops, is changing the way pr... more The use of powerful mobile devices, like smartphones, tablets and laptops, is changing the way programmers develop software. While in the past the primary goal to optimize software was the run time optimization, nowadays there is a growing awareness of the need to reduce energy consumption. This paper presents techniques and tools to detect anomalous energy consumption in Android applications, and to relate it directly with the source code of the application. We present a methodology to classify program execution and program methods according to the energy consumed. Thus, we monitored and analyzed the results of energy consumed by a corpus of Android applications, and we defined greenaware energy thresholds. Such thresholds are used to classify program methods according to energy consumption. Moreover, we manually inspect the source code of both energy efficient and inefficient methods and we identify program features that influence energy consumption.
One of the most important assets of any company is being able to easily access information on its... more One of the most important assets of any company is being able to easily access information on itself and on its business. In this line, it has been observed that this important information is often stored in one of the millions of spreadsheets created every year, due to simplicity in using and manipulating such an artifact. Unfortunately, in many cases it is quite difficult to retrieve the intended information from a spreadsheet: information is often stored in a huge unstructured matrix, with no care for readability or comprehensiveness. In an attempt to aid users in the task of extracting information from a spreadsheet, researchers have been working on models, languages and tools to query. In this paper we present an empirical study evaluating such proposals assessing their usage to query spreadsheets. We investigate the use of the Google Query Function, textual model-driven querying, and visual model-driven querying. To compare these different querying approaches we present an emp...
Data science has started to become one of the most important skills one can have in the modern wo... more Data science has started to become one of the most important skills one can have in the modern world, due to data taking an increasingly meaningful role in our lives. The accessibility of data science is however limited, requiring complicated software or programming knowledge. Both can be challenging and hard to master, even for the simple tasks. With this in mind, we have approached this issue by providing a new data science platform, termed DS4All.Curation, that attempts to reduce the necessary knowledge to perform data science tasks, in particular for data cleaning and curation. By combining HCI concepts, this platform is: simple to use through direct manipulation and showing transformation previews; allows users to save time by eliminate repetitive tasks and automatically calculating many of the common analyses data scientists must perform; and suggests data transformations based on the contents of the data, allowing for a smarter environment.
2017 IEEE/ACM 2nd International Workshop on Variability and Complexity in Software Design (VACE), 2017
Applications based on micro or web services have had significant growth due to the exponential in... more Applications based on micro or web services have had significant growth due to the exponential increase in the use of mobile devices. However, using such kind of loosely coupled interfaces provides almost no guarantees to the developer in terms of evolution. Changes to service interfaces can be introduced at any moment, which may cause the system to fail due to mismatches between communicating parts. In this paper, we present a programming model that allows the development of web service applications, server end-points and their clients, in such a way that the evolution of services' implementation does not cause the disruption of the client. Our approach is based on a type based code slicing technique that ensures that each version only refers to type compatible code, of the same version or of a compatible version, and that each client request is redirected to the most recent type compatible version implemented by the server. We abstract the notion of version and parametrize typ...
Functional programmers are strong enthusiasts of modular solutions to programming problems. Since... more Functional programmers are strong enthusiasts of modular solutions to programming problems. Since software characteristics such as readability or maintainability are often directly proportional to modularity, this programming style naturally contributes to the beauty of functional programs. Unfortunately, in return of this beauty we often sacrifice efficiency: modular programs rely, at runtime, on the creation, use and elimination of intermediate data structures to connect its components. In this tutorial paper, we study an advanced technique that attempts to retain the best of this two worlds: (i) it allows programmers to implement beautiful, modular programs (ii) it shows how to transform such programs, in a way that can be incorporated in a compiler, into programs that do not construct any intermediate structure.
In the last few years we have been seeing a drastic change in the way software is developed. Larg... more In the last few years we have been seeing a drastic change in the way software is developed. Large-scale software projects are being assembled by a flexible composition of many (small) components possibly written in different programming languages and deployed anywhere in the cloud – the so-called microservice-based applications. The dramatic growth in popularity of microservice-based applications has pushed several companies to apply major refactorings to their software systems. However, this is a challenging task that may take several months or even years. We propose a methodology to automatically evolve a Java monolithic application into a microservice-based one. Our methodology receives the Java code and a proposition of microservices and refactors the original classes to make each microservice independent. Our methodology creates an API for each method call to classes that are in other services. The database entities are also refactored to be included in the corresponding service. The initial evaluation shows that our tool can successfully refactor 80% of the applications tested.
Proceedings of the 36th Annual ACM Symposium on Applied Computing
Microservices emerged as one of the most popular architectural patterns in the recent years given... more Microservices emerged as one of the most popular architectural patterns in the recent years given the increased need to scale, grow and flexibilize software projects accompanied by the growth in cloud computing and DevOps. Many software applications are being submitted to a process of migration from its monolithic architecture to a more modular, scalable and flexible architecture of microservices. This process is slow and, depending on the project's complexity, it may take months or even years to complete. This paper proposes a new approach on microservice identification by resorting to topic modelling in order to identify services according to domain terms. This approach in combination with clustering techniques produces a set of services based on the original software. The proposed methodology is implemented as an open-source tool for exploration of monolithic architectures and identification of microservices. A quantitative analysis using the state of the art metrics on independence of functionality and modularity of services was conducted on 200 open-source projects collected from GitHub. Cohesion at message and domain level metrics' showed medians of roughly 0.6. Interfaces per service exhibited a median of 1.5 with a compact interquartile range. Structural and conceptual modularity revealed medians of 0.2 and 0.4 respectively. Our first results are positive demonstrating beneficial identification of services due to overall metrics' results.
Today's software systems must accommodate a wide range of usage and deployment scenarios. The... more Today's software systems must accommodate a wide range of usage and deployment scenarios. The increasing size and heterogeneity of software-intensive systems, dynamic and critical operating conditions, fast moving and highly competitive markets, and increasingly powerful and versatile hardware makes it more and more difficult to handle the additional complexity in design caused by variability. This paper reports results of the Second International Workshop on Variability and Complexity in Software Design. It also outlines directions the field might move in the future.
Uploads
Papers by Jácome Cunha