Fernando Castor

Fernando Castor
Federal University of Pernambuco | UFPE · Department of Computer Science

Ph.D in Computer Science (UNICAMP 2006)

About

128
Publications
21,254
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
2,273
Citations
Citations since 2017
33 Research Items
1079 Citations
2017201820192020202120222023050100150200
2017201820192020202120222023050100150200
2017201820192020202120222023050100150200
2017201820192020202120222023050100150200
Introduction
My broad research goal is to help developers build more efficient software systems more efficiently. I tend to have a hard time focusing on a single research topic. In the past, I've worked on a wide variety of subjects, such as program transformation systems, formal modeling of exception propagation (in sequential and concurrent systems), failure detection in distributed systems, aspect-oriented programming, and design diversity in service-oriented architectures. Nowadays, I'm more interested in the energy efficiency of software systems, in particular, how exploiting off-the-shelf design diversity combined with software refactoring can be a cheap way of saving energy. I'm also puzzled by how developers employ existing constructs for concurrency control and for managing parallel execution

Publications

Publications (128)
Preprint
Full-text available
Context: Software programs can be written in different but functionally equivalent ways. Even though previous research has compared specific formatting elements to find out which alternatives affect code legibility, seeing the bigger picture of what makes code more or less legible is challenging. Goal: We aim to find which formatting elements have...
Preprint
Full-text available
Language constructs inspired by functional programming have made their way into most mainstream programming languages. Many researchers and developers consider that these constructs lead to programs that are more concise, reusable, and easier to understand. However, few studies investigate the implications of using them in mainstream programming la...
Preprint
Reading code is an essential activity in software maintenance and evolution. Several studies with human subjects have investigated how different factors, such as the employed programming constructs and naming conventions, can impact code readability, i.e., what makes a program easier or harder to read and apprehend by developers, and code legibilit...
Chapter
In this chapter, we advocate that developers should leverage software diversity to make software systems more energy efficient. Our main goal is to show that non-specialists can build software that consumes less energy by alternating at development time between readily available, diversely designed pieces of software implemented by third parties. B...
Article
Full-text available
Context The development of solutions to improve battery life in Android smartphones and the energy efficiency of apps running on them is hindered by diversity. There are more than 24k Android smartphone models in the world. Moreover, there are multiple active operating system versions, and a myriad application usage profiles. Objective In such a h...
Article
Full-text available
Over the last years, increasing attention has been given to creating energy-efficient software systems. However, developers still lack the knowledge and the tools to support them in that task. In this work, we explore our vision that non-specialists can build software that consumes less energy by alternating diversely-designed pieces of software wi...
Conference Paper
Although Open Source Software (OSS) maintainers devote a significant proportion of their work to coding tasks, great maintainers must excel in many other activities beyond coding. Maintainers should care about fostering a community, helping new members to find their place, while also saying “no” to patches that although are well-coded and well-test...
Article
Full-text available
Context Code review is a widely used technique of systematic examination of code changes which aims at increasing software quality. Code reviews provide several benefits for the project, including finding bugs, knowledge transfer, and assurance of adherence to project guidelines and coding style. However, code reviews have a major cost: they can de...
Preprint
Full-text available
In the last few years, a growing body of research has proposed methods, techniques, and tools to support developers in the construction of software that consumes less energy. These solutions leverage diverse approaches such as version history mining, analytical models, identifying energy-efficient color schemes, and optimizing the packaging of HTTP...
Conference Paper
Complex event processing (CEP) and Reactive Languages (RLs) are examples of solutions for the so-called reactive applications. Such applications are designed to detect and react to changes or event occurrences as they happen in a timely fashion. Both CEP and RLs have been developed by different communities, yet some researchers agree that they shar...
Conference Paper
Full-text available
Over the last years, increasing attention has been given to creating energy-efficient software systems. However, developers still lack the knowledge and the tools to support them in that task. In this work, we explore our vision that energy consumption non-specialists can build software that consumes less energy by alternating, at development time,...
Article
Full-text available
Background: Recent work has studied diverse affecting factors on software energy efficiency. Objective: This paper attempts to shed light on the energy behavior of programs written in a lazy, purely functional programming language, Haskell. Methodology: We conducted two in-depth and complementary studies to analyze the energy efficiency of programs...
Article
Full-text available
Continuous Integration (CI) is a software development practice that is gaining increasing popularity along the last few years. However, we still miss a collection of experiences regarding how software developers perceive the idea of Continuous Integration, in terms of its fundamental concepts, the reasons that motivate the adoption of this practice...
Conference Paper
Swift is a new programming language developed by Apple as a replacement to Objective-C. It features a sophisticated error handling (EH) mechanism that provides the kind of separation of concerns afforded by exception handling mechanisms in other languages, while also including constructs to improve safety and maintainability. However, Swift also in...
Article
Full-text available
THE PREVALENCE AND ubiquity of mobile computing platforms, such as smartphones, tablets, smart watches, and smart glasses, have changed the way people use and interact with software. In particular, these platforms share a common yet challenging requirement: They are battery-driven. As users interact with them, they tend to be less available, since...
Conference Paper
Full-text available
FORKJOIN framework is a widely used parallel programming framework upon which both core concurrency libraries and real-world applications are built. Beneath its simple and user-friendly APIs, FORKJOIN is a sophisticated managed parallel runtime unfamiliar to many application programmers: the framework core is a work-stealing scheduler, handles fine...
Article
All the mainstream programming languages in widespread use for mobile app development provide error handling mechanisms to support the implementation of robust apps. Android apps, in particular, are usually written in the Java programming language. Java includes an exception handling mechanism that allows programs to signal the occurrence of errors...
Conference Paper
Continuous Integration (CI) prescribes that changes should be integrated into the main codebase as often as possible and that the system should be built frequently. To support CI, a number of software tools have been developed. However, little is known about the main reasons for build breakage and whether CI delivers its promise of early problem de...
Conference Paper
Previous work has shown that robustness-related issues like functional errors and app crashes rank among the most common causes for complaints about mobile phone apps. Since most Android applications are written in Java, exception handling is the main mechanism they employ to report and handle errors, similarly to standard Java applications. Thus,...
Conference Paper
Recent work has studied the effect that factors such as code obfuscation, refactorings and data types have on energy efficiency. In this paper, we attempt to shed light on the energy behavior of programs written in a lazy purely functional language, Haskell. We have conducted two empirical studies to analyze the energy efficiency of Haskell program...
Conference Paper
Energy consumption has become an increasingly important topic in software development, especially due to the ubiquity of mobile devices, and the choice of programming language can directly impact battery life. This paper presents a study on the issue of energy efficiency on the Android platform, comparing the performance and energy consumption of 3...
Book
This book constitutes the proceedings of the 20th Brazilian Symposium on Progamming Languages, SBLP 2016, held in Maringá, Brazil, in September 2016. The 12 papers presented in this volume were carefully reviewed and selected from 26 submissions. They deal with fundamental principles and innovations in the design and implementation of programming l...
Conference Paper
Full-text available
Concurrent programming is notably known as a hard discipline. Over the last few years, great strides have been made in improving concurrent programming abstractions, techniques, and tools to ease concurrent programming practice. However, little effort has been placed on assessing what are the real-world problems faced by developers when writing con...
Conference Paper
Deadlocks are a common type of concurrency bug. When a deadlock occurs, it is difficult to clearly determine whether there is an actual deadlock or if the application is slow or hanging due to a different reason. It is also difficult to establish the cause of the deadlock. In general, developers deal with deadlocks by using analysis tools, introduc...
Article
Full-text available
In both academia and industry, there is a strong belief that multicore technology will radically change the way software is built. However, little is known about the current state of use of concurrent programming constructs. In this work we present an empirical work aimed at studying the usage of concurrent programming constructs of 2227 real world...
Conference Paper
Full-text available
Over the last years, energy consumption has become a first-class citizen in software development practice. While energy-efficient solutions on lower-level layers of the software stack are well-established, there is convincing evidence that even better results can be achieved by encouraging practitioners to participate in the process. For instance,...
Conference Paper
Full-text available
Recent refactoring research introduced several innovations addressing diverse goals, such code extensibility, reusability, and testability. However, energy consumption , a critical property of any software system, remains unaddressed by refactoring research. In this paper, we provide an accounting of some of the recent and successful state-of-the-a...
Article
Most mainstream programming languages provide constructs to throw and to handle exceptions. However, several studies argue that exception handling code is usually of poor quality and that it is commonly neglected by developers. Moreover, it is said to be the least understood, documented, and tested part of the implementation of a system. Neverthele...
Article
A number of studies have evaluated the impact of modularizing the exception handling concern using aspect-oriented programming (AOP). Even though some of these studies have claimed that reuse through AOP is possible and advantageous in some cases, they have not focused specifically on reuse, often using the overall number of lines of code as a prox...
Article
Full-text available
Java programmers are faced with numerous choices in managing concurrent execution on multicore platforms. These choices often have different trade-offs (e.g., performance, scalability, and correctness guarantees). This paper analyzes an additional dimension, energy consumption. It presents an empirical study aiming to illuminate the relationship be...
Article
Full-text available
Over recent years, software developers have been evaluating the benefits of both Service-Oriented Architecture (SOA) and software fault tolerance techniques based on design diversity. This is achieved by creating fault-tolerant composite services that leverage functionally-equivalent services. Three major design issues need to be considered while b...
Conference Paper
Full-text available
A growing number of software solutions have been proposed to address application-level energy consumption problems in the last few years. However, little is known about how much software developers are concerned about energy consumption, what aspects of energy consumption they consider important, and what solutions they have in mind for improving e...
Conference Paper
A number of solutions use software fault tolerance techniques based on design diversity to create fault-tolerant composite services that leverage functionally equivalent services. Nevertheless, these solutions are not able to adapt themselves at runtime to cope with dynamic changes of user requirements and fluctuations in the quality of services (Q...
Conference Paper
Our study analyzed the performance and energy consumption of multicore applications, using a number of techniques to manage concurrent execution. We concluded that language constructs for concurrent execution can impact energy consumption. Nonetheless, the tradeoff between performance and energy consumption in multicore applications is not as obvio...
Conference Paper
We present a dynamic software product line to support fault-tolerant service compositions. Architectural variability is specified and resolved by Common Variability Language (CVL). CVL is a generic variability modeling language that enables the transformation of a product line model into a configured, new product model. At runtime, whenever it is n...
Conference Paper
Over recent years, software engineers have been evaluating the benefits of combining Software Product Line and Model-Driven Engineering, which is referred to as Model-Driven Product Line Engineering (MD-PLE), to achieve software architecture evolvability. In general terms, existing solutions for MD-PLE support high-level model refinement into lower...
Conference Paper
Several studies argue that exception handling code usually has poor quality and that it is commonly neglected by developers. Moreover, it is said to be the least understood, documented, and tested part of the implementation of a system. However, there are very few studies that attempt to understand developers' perceptions about exception handling,...
Article
Aspect-oriented programming is known as a technique for modularizing crosscutting concerns. However, constructs aimed to support crosscutting modularity might actually break class modularity. As a consequence, class developers face changeability, parallel development and comprehensibility problems, because they must be aware of aspects whenever the...
Conference Paper
The software systems have been exposed to constant changes in a short period of time. It requires high maintainable systems and makes maintainability one of the most important quality attributes. In this work we performed a statistical analysis of maintainability metrics in three mainstream open-source applications, Tomcat (webserver), Jedit (text...
Conference Paper
A high number of metrics have been used to measure Object-Oriented Software Maintainability (OOSM). However, there is no comprehensive and useful catalog showing which metrics are more appropriated for adoption in OOSM assessment in both, academic and industrial environments. In a previous work we performed a systematic mapping study to identify ma...
Conference Paper
Context: Over recent years, software developers have been evaluating the benefits of both Service-Oriented Architecture and software fault tolerance techniques based on design diversity by creating fault-tolerant composite services that leverage functionally equivalent services, or variant services. Three major design issues need to be considered w...
Article
Full-text available
Background: Aspect-Oriented Software Development (AOSD) is a paradigm that promotes advanced separation of concerns and modularity throughout the software development lifecycle, with a distinctive emphasis on modular structures that cut across traditional abstraction boundaries. In the last 15 years, research on AOSD has boosted around the world. T...
Conference Paper
The Java programming language allows developers to specify the exception interface of a method using the throws clause. This mechanism supports static checking that is coherent with a statically-typed language. However, it is known to have limitations. In particular, throws clauses hinder understandability and maintainability due to their scattered...
Conference Paper
In recent years, usage of multicore architectures has boosted the need for concurrency. Many researchers have pointed out Software Transactional Memory (STM) as an easy way to achieve it. This study presents a preliminary evaluation of Haskell's STM constructs against its lock-based alternative. Subjects which used STM committed significantly fewer...
Conference Paper
The software systems have been exposed to constant changes in a short period of time. It requires high maintainable systems and makes maintainability one of the most important quality attributes. In this work we performed a statistical analysis of maintainability metrics in three mainstream open-source applications, Tomcat (webserver), Jedit (text...
Conference Paper
A number of approaches based on design diversity moderate the communication between clients and functionally equivalent services, i.e., variant services, to tolerate software faults in service-oriented applications. Nevertheless, it is unclear whether variant services are actually diverse and fail on disjoint subsets of the input space. In a previo...
Conference Paper
Full-text available
Background: Despite the number of empirical studies that assess Aspect-Oriented Software Development (AOSD) techniques, more research is required to investigate, for example, how software maintainability is impacted when these techniques are employed. One way to minimize the effort and increase the reliability of results in further research is to s...
Conference Paper
Background: A number of approaches leverage design diversity to tolerate software design faults in service-oriented applications. The use of design diversity depends on the assumption that functionally equivalent services, i.e., variant services, rarely fail on the same input case. However, there are no directives to assess whether variant services...
Conference Paper
Full-text available
In this paper, we present the birth, growth, and maturation of Aspect-Oriented Software Development (AOSD) research over the last years, with emphasis on the Brazilian AOSD community and its research contributions. These research contributions are illustrated from different perspectives: (i) an overview of the research work developed by our communi...
Conference Paper
Full-text available
The lack of testing and a priori design of the exceptional behavior are causing many of the problems found in the use of exception handling. As a consequence, exceptions flow in unforeseen ways during the execution of a software system, having a negative impact on reliability. This paper presents an agile approach to test the exceptional behavior o...
Article
Many researchers believe that software transactional memory (STM) will play an important role in the transition to multicore systems. However, little effort has been placed on assessing whether STM delivers on its promises of avoiding common concurrent/parallel programming pitfalls. In this paper, we describe a controlled experiment aiming to evalu...
Article
Full-text available
We would like to know if Java developers are retrofitting applications to become concurrent and, to get better performance on multicore machines. Also, we would like to know what concurrent programming constructs they currently use. Evidence of how programmers write concurrent programs can help other programmers to be more efficient when using the...
Article
Design by Contract (DbC) is a technique for developing and improving functional software correctness through definition of "contracts" between client classes and their suppliers. Such contracts are enforced during runtime and if any of them is violated a runtime error should occur. Runtime assertions checkers (RACs) are a well-known technique that...
Conference Paper
Full-text available
Many of the problems found in the uses of exception handling are caused by the lack of testing and a priori design of the exceptional behavior. As a consequence, exceptions flow in unforeseen ways during the execution of a software system, causing a negative impact on reliability. This paper presents a new agile approach to test the exceptional beh...
Conference Paper
Full-text available
The Service Component Architecture (SCA) makes it possible to combine existing and new services based on a variety of technologies with components built using a component-based development approach. However, when asynchronous service compositions are executed, one or more errors can occur, possibly at the same time, affecting the dependability of t...
Conference Paper
We present ArchE Meter, a tool that supports developers in understanding how the implementation of an aspect-oriented system conforms to its intended layered software architecture. Based on the principles of layered software architectures, ArchE Meter indicates to what extent the implementation of a software system violates its layering structure i...
Article
Full-text available
Opportunistic computational grids use idle processor cycles from shared machines to enable the execution of long-running parallel applications. Besides computational power, these applications may also consume and generate large amounts of data, requiring an efficient data storage and management infrastructure. In this article, we present an integra...
Conference Paper
Full-text available
Software structuring techniques aim to make software systems easier to develop and maintain, increasing their quality. Aspect-Oriented Software Development (AOSD) and Software Architectural Styles are examples of such techniques. In spite of all the benefits of structuring techniques, both actual and intended, it is not always easy or even advantag...
Article
Full-text available
The InteGrade project is a multi-university effort to build a novel grid computing middleware based on the opportunistic use of resources belonging to user workstations. The InteGrade middleware currently enables the execution of sequential, bag-of-tasks, and parallel applications that follow the BSP or the MPI programming models.This article prese...
Conference Paper
Organizations which use grid computing have to deal with events such as a machine turned off or a failed component. Some of these events can completely break a grid. We propose a mechanism to maximize resource usage by monitoring grid middleware components and making them capable of recovering from failures.