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
Publications

Publications by HASLab

2015

Towards a Catalog of Usability Smells

Authors
Almeida, D; Campos, JC; Saraiva, J; Silva, JC;

Publication
30TH ANNUAL ACM SYMPOSIUM ON APPLIED COMPUTING, VOLS I AND II

Abstract
This paper presents a catalog of smells in the context of interactive applications. These so-called usability smells are indicators of poor design on an application's user interface, with the potential to hinder not only its usability but also its maintenance and evolution. To eliminate such usability smells we discuss a set of program/usability refactorings. In order to validate the presented usability smells catalog, and the associated refactorings, we present a preliminary empirical study with software developers in the context of a real open source hospital management application. Moreover, a tool that computes graphical user interface behavior models, giving the applications' source code, is used to automatically detect usability smells at the model level.

2015

Towards the Design and Implementation of Aspect-Oriented Programming for Spreadsheets

Authors
Maia, P; Mendes, J; Cunha, J; Rebêlo, H; Saraiva, J;

Publication
SEMS@ICSE

Abstract
A spreadsheet usually starts as a simple and singleuser software artifact, but, as frequent as in other software systems, quickly evolves into a complex system developed by many actors. Often, different users work on different aspects of the same spreadsheet: while a secretary may be only involved in adding plain data to the spreadsheet, an accountant may define new business rules, while an engineer may need to adapt the spreadsheet content so it can be used by other software systems. Unfortunately, spreadsheet systems do not offer modular mechanisms, and as a consequence, some of the previous tasks may be defined by adding intrusive "code" to the spreadsheet. In this paper we go through the design and implementation of an aspect-oriented language for spreadsheets so that users can work on different aspects of a spreadsheet in a modular way. For example, aspects can be defined in order to introduce new business rules to an existing spreadsheet, or to manipulate the spreadsheet data to be ported to another system. Aspects are defined as aspect-oriented program specifications that are dynamically woven into the underlying spreadsheet by an aspect weaver. In this aspect-oriented style of spreadsheet development, different users develop, or reuse, aspects without adding intrusive code to the original spreadsheet. Such code is added/executed by the spreadsheet weaving mechanism proposed in this paper.

2015

Zipper-Based Modular and Deforested Computations

Authors
Martins, P; Fernandes, JP; Saraiva, J;

Publication
CENTRAL EUROPEAN FUNCTIONAL PROGRAMMING SCHOOL, CEFP 2013

Abstract
In this paper we present a methodology to implement multiple traversal algorithms in a functional programming setting. The implementations we obtain s of highly modular and intermediate structure free programs, that rely on the concept of functional zippers to navigate on data structures. Even though our methodology is developed and presented under Haskell, a lazy functional language, we do not make essential use of laziness. This is an essential difference with respect to other attribute grammar embeddings. This also means that an approach similar to ours can be followed in a strict functional setting such as Ocaml, for example. In the paper, our technique is applied to a significant number of problems that are well-known to the functional programming community, demonstrating its practical interest.

2015

Establishing Energy Consumption Plans for Green Star-Queries in Data Warehousing Systems

Authors
Belo, O; Gonçalves, R; Saraiva, J;

Publication
2015 IEEE INTERNATIONAL CONFERENCE ON DATA SCIENCE AND DATA INTENSIVE SYSTEMS

Abstract
During the last few years many initiatives were taken away in response to high levels of energy consumption verified in data centers. We all know that this is a critical issue nowadays. Many studies carried out raised a lot of concerns about the energy demands of data centers, discussing solutions to reduce it effectively without affecting their day-by-day operation. In this work we made a small contribution to help that. We studied in a data warehousing system how could be possible to establish an energy consumption plan for a star-query. With these plans, we can establish in each phase of a star-query execution the energy consumed by all the elementary tasks that were executed to satisfy it. With this purpose in mind, and motivated by the usual methods and heuristics used on query execution optimization, we designed and developed a method to estimate the energy consumption of each element (operator) integrated in the execution plan of a query at compile time. With it, we also build up the corresponding energy consumption used on executing the star-query, taking into consideration the characteristics of the computational platforms used for.

2015

BiYacc: Roll Your Parser and Reflective Printer into One

Authors
Zhu, Z; Ko, HS; Martins, P; Saraiva, J; Hu, Z;

Publication
Bx@STAF

Abstract
Language designers usually need to implement parsers and printers. Despite being two related programs, in practice they are designed and implemented separately. This approach has an obvious disadvantage: as a language evolves, both its parser and printer need to be separately revised and kept synchronised. Such tasks are routine but complicated and error-prone. To facilitate these tasks, we propose a language called BiYacc, whose programs denote both a parser and a printer. In essence, BiYacc is a domain-specific language for writing putback-based bidirectional transformations - the printer is a putback transformation, and the parser is the corresponding get transformation. The pairs of parsers and printers generated by BiYacc are thus always guaranteed to satisfy the usual round-trip properties. The highlight that distinguishes this reflective printer from others is that the printer - being a putback transformation - accepts not only an abstract syntax tree but also a string, and produces an updated string consistent with the given abstract syntax tree. We can thus make use of the additional input string, with mechanisms such as simultaneous pattern matching on the view and the source, to provide users with full control over the printing-strategies.

2015

Watch Out for that Tree! A Tutorial on Shortcut Deforestation

Authors
Fernandes, JP; Cunha, J; Saraiva, J; Pardo, A;

Publication
CEFP

Abstract
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.

  • 138
  • 261