Cookies Policy
The website need some cookies and similar means to function. If you permit us, we will use those means to collect data on your visits for aggregated statistics to improve our service. Find out More
Accept Reject
  • Menu
About

About

João Saraiva is Professor Auxiliar at the Departmento de Informática, Universidade do Minho, Braga, Portugal, and a researcher member of HASLab/INESC TEC. He obtained a MSc degree from University do Minho in 1993 and a Ph.D. degree in Computer Science from Utrecht University in 1999. His main research contributions have been in the field of program language design and implementation, program analysis and transformation, and functional programming. He supervised 4 (FCT funded) PostDoc projects, 8 PhD projects (5 awarded and 3 running) and over 30 (Pos-Bologna) MSc thesis. He has published over 80 publications (scopus) in conferences and journals. He has served in over 60 program committees of international events, and in the evaluation committees of 5 research agencies: ANII (Uruguay), FRS-FNRS (Belgium), NWO (The Netherlands), FWF (Austria), and FCT (Portugal).

He has experience in participating and coordinating research projects in his research areas, both at national level with projects funded by FCT (projects: PURe, IVY, AMADEUS, CROSS, SSaaPP, AutoSeer, FATBIT, and GreenSwLab) and at international level with projects funded by EPSRC (UK), FLAD/NSF (USA) and by the European Union.

João Saraiva is one of the founders of the successful series of summer schools on Generative and Transformational Techniques in Software Engineering (GTTSE), which he co-organized in 2005, 2007, 2009, 2011, and 2015 (volumes 4143, 5235, 6491, and 7680 of LNCS - Tutorial by Springer-Verlag) in Braga. He was the organizing chair of ETAPS'07, The European Joint Conferences on Theory and Practice of Software, organized in Braga in 2007, and a member of its scientific committee (2007-2012).

Interest
Topics
Details

Details

  • Name

    João Alexandre Saraiva
  • Role

    Research Coordinator
  • Since

    01st November 2011
Publications

2025

Understanding the adoption of modern Javascript features: An empirical study on open-source systems

Authors
Lucas, W; Nunes, R; Bonifácio, R; Carvalho, F; Lima, R; Silva, M; Torres, A; Accioly, P; Monteiro, E; Saraiva, J;

Publication
EMPIRICAL SOFTWARE ENGINEERING

Abstract
JavaScript is a widely used programming language initially designed to make the Web more dynamic in the 1990s. In the last decade, though, its scope has extended far beyond the Web, finding utility in backend development, desktop applications, and even IoT devices. To circumvent the needs of modern programming, JavaScript has undergone a remarkable evolution since its inception, with the groundbreaking release of its sixth version in 2015 (ECMAScript 6 standard). While adopting modern JavaScript features promises several benefits (such as improved code comprehension and maintenance), little is known about which modern features of the language have been used in practice (or even ignored by the community). To fill this gap, in this paper, we report the results of an empirical study that aims to understand the adoption trends of modern JavaScript features, and whether or not developers conduct rejuvenation efforts to replace legacy JavaScript constructs and idioms with modern ones in legacy systems. To this end, we mined the source code history of 158 JavaScript open-source projects, identified contributions to rejuvenate legacy code, and used time series to characterize the adoption trends of modern JavaScript features. The results of our study reveal extensive use of JavaScript modern features which are present in more than 80% of the analyzed projects. Our findings also reveal that (a) the widespread adoption of modern features happened between one and two years after the release of ES6 and, (b) a consistent trend toward increasing the adoption of modern JavaScript language features in open-source projects and (c) large efforts to rejuvenate the source code of their programs.

2025

Property-based Testing of Attribute Grammars

Authors
Macedo, JN; Viera, M; Saraiva, J;

Publication
PROCEEDINGS OF SLE 2025 18TH ACM SIGPLAN INTERNATIONAL CONFERENCE ON SOFTWARE LANGUAGE ENGINEERING, SLE 2025

Abstract
Software testing is an integral part of modern software development. Testing frameworks are part of the toolset of any software language allowing programmers to test their programs in order to detect bugs. Unfortunately, there is no work on testing in attribute grammars. In this paper we combine the powerful property-based testing technique with the attribute grammar formalism. In such property-based attribute grammars, properties are defined on attribute instances. Properties are tested on large sets of randomly generated (abstract syntax) trees by evaluating their attributes. We present an implementation that relies on strategies to express property-based attribute grammars. Strategies are tree-based recursion patterns that are used to encode logic quantifiers defining the properties.

2025

Is There Hypothesis for Attribute Grammars?

Authors
Rodrigues, E; Macedo, JN; Saraiva, J;

Publication
Companion Proceedings of the 9th International Conference on the Art, Science, and Engineering of Programming, Programming 2025, June 2-6, 2025, Prague 1, Czechia

Abstract

2025

Greening AI-enabled Systems with Software Engineering: A Research Agenda for Environmentally Sustainable AI Practices

Authors
Cruz, L; Fernandes, JP; Kirkeby, MH; Fernández, SM; Sallou, J; Anwar, H; Roque, EB; Bogner, J; Castaño, J; Castor, F; Chasmawala, A; Cunha, S; Feitosa, D; González, A; Jedlitschka, A; Lago, P; Muccini, H; Oprescu, A; Rani, P; Saraiva, J; Sarro, F; Selvan, R; Vaidhyanathan, K; Verdecchia, R; Yamshchikov, IP;

Publication
CoRR

Abstract

2024

A large-scale empirical study on mobile performance: energy, run-time and memory

Authors
Rua, R; Saraiva, J;

Publication
EMPIRICAL SOFTWARE ENGINEERING

Abstract
Software performance concerns have been attracting research interest at an increasing rate, especially regarding energy performance in non-wired computing devices. In the context of mobile devices, several research works have been devoted to assessing the performance of software and its underlying code. One important contribution of such research efforts is sets of programming guidelines aiming at identifying efficient and inefficient programming practices, and consequently to steer software developers to write performance-friendly code.Despite recent efforts in this direction, it is still almost unfeasible to obtain universal and up-to-date knowledge regarding software and respective source code performance. Namely regarding energy performance, where there has been growing interest in optimizing software energy consumption due to the power restrictions of such devices. There are still many difficulties reported by the community in measuring performance, namely in large-scale validation and replication. The Android ecosystem is a particular example, where the great fragmentation of the platform, the constant evolution of the hardware, the software platform, the development libraries themselves, and the fact that most of the platform tools are integrated into the IDE's GUI, makes it extremely difficult to perform performance studies based on large sets of data/applications. In this paper, we analyze the execution of a diversified corpus of applications of significant magnitude. We analyze the source-code performance of 1322 versions of 215 different Android applications, dynamically executed with over than 27900 tested scenarios, using state-of-the-art black-box testing frameworks with different combinations of GUI inputs. Our empirical analysis allowed to observe that semantic program changes such as adding functionality and repairing bugfixes are the changes more associated with relevant impact on energy performance. Furthermore, we also demonstrate that several coding practices previously identified as energy-greedy do not replicate such behavior in our execution context and can have distinct impacts across several performance indicators: runtime, memory and energy consumption. Some of these practices include some performance issues reported by the Android Lint and Android SDK APIs. We also provide evidence that the evaluated performance indicators have little to no correlation with the performance issues' priority detected by Android Lint. Finally, our results allowed us to demonstrate that there are significant differences in terms of performance between the most used libraries suited for implementing common programming tasks, such as HTTP communication, JSON manipulation, image loading/rendering, among others, providing a set of recommendations to select the most efficient library for each performance indicator. Based on the conclusions drawn and in the extension of the developed work, we also synthesized a set of guidelines that can be used by practitioners to replicate energy studies and build more efficient mobile software.

Supervised
thesis

2023

Large Language Models in Automated Program Repair

Author
Sofia Guilherme Rodrigues dos Santos

Institution
UM

2023

Automatic generation of program executions

Author
José Nuno Castro de Macedo

Institution
UM

2023

Green Software in the Large: Energy-driven Techniques, Tools and Repositories

Author
Rui António Ramada Rua

Institution
UM

2023

Explaining Software Faults in Source Code

Author
Francisco José Torres Ribeiro

Institution
UM

2023

Análise e Optimização da Performance de Programação Estratégica baseda em Zippers

Author
José Emanuel Silva Rodrigues

Institution
UM