13 research outputs found
A Systematic Review of the Literature of the Techniques to Perform Transformations in Software Engineering / Uma revisão sistemática da literatura das técnicas para realizar transformações na engenharia de software
Along with software evolution, developers may do repetitive edits. These edits can be identical or similar to different codebase locations, which may occur as developers add features, refactor, or fix a bug. Since some of these edits are not present in Integrated Development Environments (IDEs), they are often performed manually, which is time-consuming and error-prone. In order to help developers to apply repetitive edits, some techniques were proposed. In this work, we present a systematic review of the literature of the techniques to do transformations in software engineering. As a result, this systematic review returned 51 works ranging from the domains programming-by-examples, linked editing, API usage, bug fixing, complex refactoring, and complex transformations, which can be used to help tools' designer in the proposition of new approaches. Along with software evolution, developers may do repetitive edits. These edits can be identical or similar to different codebase locations, which may occur as developers add features, refactor, or fix a bug. Since some of these edits are not present in Integrated Development Environments (IDEs), they are often performed manually, which is time-consuming and error-prone. In order to help developers to apply repetitive edits, some techniques were proposed. In this work, we present a systematic review of the literature of the techniques to do transformations in software engineering. As a result, this systematic review returned 51 works ranging from the domains programming-by-examples, linked editing, API usage, bug fixing, complex refactoring, and complex transformations, which can be used to help tools' designer in the proposition of new approaches.
SyGuS-Comp 2016: Results and Analysis
Syntax-Guided Synthesis (SyGuS) is the computational problem of finding an
implementation f that meets both a semantic constraint given by a logical
formula in a background theory T, and a syntactic constraint given by
a grammar G, which specifies the allowed set of candidate implementations. Such
a synthesis problem can be formally defined in SyGuS-IF, a language that is
built on top of SMT-LIB.
The Syntax-Guided Synthesis Competition (SyGuS-Comp) is an effort to
facilitate, bring together and accelerate research and development of efficient
solvers for SyGuS by providing a platform for evaluating different synthesis
techniques on a comprehensive set of benchmarks. In this year's competition we
added a new track devoted to programming by examples. This track consisted of
two categories, one using the theory of bit-vectors and one using the theory of
strings. This paper presents and analyses the results of SyGuS-Comp'16.Comment: In Proceedings SYNT 2016, arXiv:1611.07178. arXiv admin note: text
overlap with arXiv:1602.0117
Deuce: A Lightweight User Interface for Structured Editing
We present a structure-aware code editor, called Deuce, that is equipped with
direct manipulation capabilities for invoking automated program
transformations. Compared to traditional refactoring environments, Deuce
employs a direct manipulation interface that is tightly integrated within a
text-based editing workflow. In particular, Deuce draws (i) clickable widgets
atop the source code that allow the user to structurally select the
unstructured text for subexpressions and other relevant features, and (ii) a
lightweight, interactive menu of potential transformations based on the current
selections. We implement and evaluate our design with mostly standard
transformations in the context of a small functional programming language. A
controlled user study with 21 participants demonstrates that structural
selection is preferred to a more traditional text-selection interface and may
be faster overall once users gain experience with the tool. These results
accord with Deuce's aim to provide human-friendly structural interactions on
top of familiar text-based editing.Comment: ICSE 2018 Paper + Supplementary Appendice
Sketch-n-Sketch: Output-Directed Programming for SVG
For creative tasks, programmers face a choice: Use a GUI and sacrifice
flexibility, or write code and sacrifice ergonomics?
To obtain both flexibility and ease of use, a number of systems have explored
a workflow that we call output-directed programming. In this paradigm, direct
manipulation of the program's graphical output corresponds to writing code in a
general-purpose programming language, and edits not possible with the mouse can
still be enacted through ordinary text edits to the program. Such capabilities
provide hope for integrating graphical user interfaces into what are currently
text-centric programming environments.
To further advance this vision, we present a variety of new output-directed
techniques that extend the expressive power of Sketch-n-Sketch, an
output-directed programming system for creating programs that generate vector
graphics. To enable output-directed interaction at more stages of program
construction, we expose intermediate execution products for manipulation and we
present a mechanism for contextual drawing. Looking forward to output-directed
programming beyond vector graphics, we also offer generic refactorings through
the GUI, and our techniques employ a domain-agnostic provenance tracing scheme.
To demonstrate the improved expressiveness, we implement a dozen new
parametric designs in Sketch-n-Sketch without text-based edits. Among these is
the first demonstration of building a recursive function in an output-directed
programming setting.Comment: UIST 2019 Paper + Appendi
Automated Refactoring in Software Automation Platforms
Software Automation Platforms (SAPs) enable faster development and reduce the need
to use code to construct applications. SAPs provide abstraction and automation, result-
ing in a low-entry barrier for users with less programming skills to become proficient
developers. An unfortunate consequence of using SAPs is the production of code with a
higher technical debt since such developers are less familiar with the software develop-
ment best practices. Hence, SAPs should aim to produce a simpler software construction
and evolution pipeline beyond providing a rapid software development environment.
One simple example of such high technical debt is the Unlimited Records anti-pattern,
which occurs whenever queries are unbounded, i.e. the maximum number of records to be
fetched is not explicitly limited. Limiting the number of records retrieved may, in many
cases, improve the performance of applications by reducing screen-loading time, thus
making applications faster and more responsive, which is a top priority for developers. A
second example is the Duplicated Code anti-pattern that severely affects code readability
and maintainability, and can even be the cause of bug propagation. To overcome this
problem we will resort to automated refactoring as it accelerates the refactoring process
and provides provably correct modifications.
This dissertation aims to study and develop a solution for automated refactorings in
the context of OutSystems (an industry-leading SAP). This was carried out by implement-
ing automated techniques for automatically refactoring a set of selected anti-patterns in
OutSystems logic that are currently detected by the OutSystems technical debt monitor-
ing tool.As Plataformas de Automação de Software (PAS) habilitam os seus utilizadores a desen-
volver aplicações de forma mais rápida e reduzem a necessidade de escrever código. Estas
fornecem abstração e automação, o que auxilia utilizadores com menos formação técnica a
tornarem-se programadores proficientes. No entanto, a integração de programadores com
menos formação técnica também contribui para a produção de código com alta dívida
técnica, uma vez que os mesmos estão menos familiarizados com as melhores práticas
de desenvolvimento de software. Desta forma, as PAS devem ter como objetivo a cons-
trução e evolução de software de forma simples para além de fornecer um ambiente de
desenvolvimento de software rápido.
Um exemplo de alta dívida técnica é o anti-padrão Unlimited Records, que ocorre
sempre que o número máximo de registos a ser retornado por uma consulta à base de
dados não é explicitamente limitado. Limitar o número de registos devolvidos pode, em
muitos casos, melhorar o desempenho das aplicações, reduzindo o tempo que demora a
carregar o ecrã, tornando assim as aplicações mais rápidas e responsivas, sendo esta uma
das principais prioridades dos programadores. Um segundo exemplo é o anti-padrão
Código Duplicado que afeta gravemente a legibilidade e manutenção do código, e que
pode causar a propagação de erros. Para superar este problema, recorreremos à reestru-
turação automatizada, pois acelera o processo de reestruturação através de modificações
comprovadamente corretas.
O objetivo desta dissertação é estudar e desenvolver uma solução para reestruturação
automatizada no contexto da OutSystems (uma PAS líder neste setor). Tal foi realizado
através da implementação de técnicas automatizadas para reestruturar um conjunto de
anti-padrões que são atualmente detetados pela ferramenta de monitorização de dívida
técnica da OutSystems
Democratizing Self-Service Data Preparation through Example Guided Program Synthesis,
The majority of real-world data we can access today have one thing in common: they are not immediately usable in their original state. Trapped in a swamp of data usability issues like non-standard data formats and heterogeneous data sources, most data analysts and machine learning practitioners have to burden themselves with "data janitor" work, writing ad-hoc Python, PERL or SQL scripts, which is tedious and inefficient. It is estimated that data scientists or analysts typically spend 80% of their time in preparing data, a significant amount of human effort that can be redirected to better goals. In this dissertation, we accomplish this task by harnessing knowledge such as examples and other useful hints from the end user. We develop program synthesis techniques guided by heuristics and machine learning, which effectively make data preparation less painful and more efficient to perform by data users, particularly those with little to no programming experience.
Data transformation, also called data wrangling or data munging, is an important task in data preparation, seeking to convert data from one format to a different (often more structured) format. Our system Foofah shows that allowing end users to describe their desired transformation, through providing small input-output transformation examples, can significantly reduce the overall user effort. The underlying program synthesizer can often succeed in finding meaningful data transformation programs within a reasonably short amount of time. Our second system, CLX, demonstrates that sometimes the user does not even need to provide complete input-output examples, but only label ones that are desirable if they exist in the original dataset. The system is still capable of suggesting reasonable and explainable transformation operations to fix the non-standard data format issue in a dataset full of heterogeneous data with varied formats.
PRISM, our third system, targets a data preparation task of data integration, i.e., combining multiple relations to formulate a desired schema. PRISM allows the user to describe the target schema using not only high-resolution (precise) constraints of complete example data records in the target schema, but also (imprecise) constraints of varied resolutions, such as incomplete data record examples with missing values, value ranges, or multiple possible values in each element (cell), so as to require less familiarity of the database contents from the end user.PHDComputer Science & EngineeringUniversity of Michigan, Horace H. Rackham School of Graduate Studieshttp://deepblue.lib.umich.edu/bitstream/2027.42/163059/1/markjin_1.pd
FREQUENTLY REFACTORED CODE IDIOMS
It is important to refactor software source code from time to time to preserve its maintainability and understandability.
Despite this, software developers rarely dedicate time for refactoring due to deadline pressure or resource limitations.
To help developers take advantage of refactoring opportunities, researchers have been working towards automated refactoring recommendation systems for a long time.
However, these techniques suffer from low precision, as many of their recommendations are irrelevant to the developers.
As a result, most developers do not rely on these systems and prefer to perform refactoring based on their own experience and intuition.
To shed more light on the practice of refactoring, we investigate the characteristics of the code fragments that get refactored most frequently across software repositories.
Finding the most repeatedly refactored fragments can be very challenging due to the following factors:
i) Refactorings are highly influenced by the context of the code. Therefore, it is difficult to remove context-specific information and find similarities.
ii) Refactorings are usually more complex than simple code edits such as line additions or deletions. Therefore, basic source code matching techniques, such as token sequence matching do not produce good results.
iii) A higher level of abstraction is required to match refactored code fragments within projects of a different domain. At the same time, the structural detail of the code must be preserved to find accurate results.
In this study, we tried to overcome the above-mentioned challenges and explore several ways to compare refactored code from different contexts.
We transformed the refactored code to different source code representations and attempted to find non-trivial refactored code idioms, which cannot be identified using the standard code comparison techniques.
In this thesis, we are presenting the findings of our study, in which we examine the repetitiveness of refactorings on a large java codebase of 1,025 projects. We discuss how we analyze our dataset of 47,647 refactored code fragments using a combination of state-of-art code matching techniques. Finally, we report the most common refactoring actions and discuss the motivations behind those