67 research outputs found
Hot Patching Hot Fixes: Reflection and Perspectives
With our reliance on software continuously increasing, it is of utmost importance that it be reliable. However,complete prevention of bugs in live systems is unfortunately
an impossible task due to time constraints, incomplete testing, and developers not having knowledge of the full stack. As a result, mitigating risks for systems in production through hot patching and hot fixing has become an integral part of software development. In this paper, we first give an overview of the terminology used in the literature for research on this topic. Subsequently, we build upon these findings and present our vision for an automated framework for predicting and mitigating critical software issues at runtime. Our framework combines hot patching and hot fixing research from multiple fields, in particular: software defect and vulnerability prediction,
automated test generation and repair, as well as runtime patching. We hope that our vision inspires research collaboration between the different communities
Improving responsiveness of Android activity navigation via genetic improvement
Responsiveness issues are one of the key reasons why mobile phone users abandon an app or leave bad reviews. In this work, we explore the use of Genetic Improvement to automatically refactor applications to reduce the time taken to move between and within Android activities, without affecting their functionality. This particular Android responsiveness issue has not previously been tackled before. With its application directly to source code, our approach can be used to complement previous work, which modifies the operating system, or focuses on detection of specific coding patterns. We present a fully automated technique for finding improvements to this responsiveness, which does not require the use of an Android device or emulator. We apply our approach to 7 real-world open source applications and find improvements of up to 30% in navigation response time
MAGPIE: Machine Automated General Performance Improvement via Evolution of Software
Performance is one of the most important qualities of software. Several
techniques have thus been proposed to improve it, such as program
transformations, optimisation of software parameters, or compiler flags. Many
automated software improvement approaches use similar search strategies to
explore the space of possible improvements, yet available tooling only focuses
on one approach at a time. This makes comparisons and exploration of
interactions of the various types of improvement impractical.
We propose MAGPIE, a unified software improvement framework. It provides a
common edit sequence based representation that isolates the search process from
the specific improvement technique, enabling a much simplified synergistic
workflow. We provide a case study using a basic local search to compare
compiler optimisation, algorithm configuration, and genetic improvement. We
chose running time as our efficiency measure and evaluated our approach on four
real-world software, written in C, C++, and Java.
Our results show that, used independently, all techniques find significant
running time improvements: up to 25% for compiler optimisation, 97% for
algorithm configuration, and 61% for evolving source code using genetic
improvement. We also show that up to 10% further increase in performance can be
obtained with partial combinations of the variants found by the different
techniques. Furthermore, the common representation also enables simultaneous
exploration of all techniques, providing a competitive alternative to using
each technique individually.Comment: 19 page
Multi-Objective Improvement of Android Applications
Non-functional properties, such as runtime or memory use, are important to
mobile app users and developers, as they affect user experience. Previous work
on automated improvement of non-functional properties in mobile apps failed to
address the inherent trade-offs between such properties. We propose a practical
approach and the first open-source tool, GIDroid (2023), for multi-objective
automated improvement of Android apps. In particular, we use Genetic
improvement, a search-based technique that navigates the space of software
variants to find improved software. We use a simulation-based testing framework
to greatly improve the speed of search. GIDroid contains three state-of-the-art
multi-objective algorithms, and two new mutation operators, which cache the
results of method calls. Genetic improvement relies on testing to validate
patches. Previous work showed that tests in open-source Android applications
are scarce. We thus wrote tests for 21 versions of 7 Android apps, creating a
new benchmark for performance improvements. We used GIDroid to improve versions
of mobile apps where developers had previously found improvements to runtime,
memory, and bandwidth use. Our technique automatically re-discovers 64% of
existing improvements. We then applied our approach to current versions of
software in which there were no known improvements. We were able to improve
execution time by up to 35%, and memory use by up to 33% in these apps.Comment: 32 pages, 8 Figure
On Reducing Network Usage with Genetic Improvement
Mobile applications can be very network-intensive. Mobile phone
users are often on limited data plans, while network infrastructure
has limited capacity. There’s little work on optimizing network
usage of mobile applications. The most popular approach has been
prefetching and caching assets. However, past work has shown
that developers can improve the network usage of Android applications by making changes to Java source code. We built upon this
insight and investigated the effectiveness of automated, heuristic
application of software patches, a technique known as Genetic
Improvement (GI), to improve network usage. Genetic improvement has already shown effective at reducing the execution time
and memory usage of Android applications. We thus adapt our
existing GIDroid framework with a new mutation operator and
develop a new profiler to identify network-intensive methods to
target. Unfortunately, our approach is unable to find improvements.
We conjecture this is due to the fact source code changes affecting
network might be rare in the large patch search space. We thus
advocate use of more intelligent search strategies in future work
Software Improvement with Gin: A Case Study
We provide a case study for the usage of Gin, a genetic improvement toolbox for Java. In particular, we implemented a simple GP search and targeted two software optimisation properties: runtime and repair. We ran our search algorithm on Gson, a Java library for converting Java objects to JSON and vice-versa. We report on runtime improvements and fixes found. We provide all the new code and data on the dedicated website: https://github.com/justynapt/ssbseChallenge2019
Reinforcement Learning for Mutation Operator Selection in Automated Program Repair
Automated program repair techniques aim to aid software developers with the
challenging task of fixing bugs. In heuristic-based program repair, a search
space of program variants is created by applying mutation operations on the
source code to find potential patches for bugs. Most commonly, every selection
of a mutation operator during search is performed uniformly at random. The
inefficiency of this critical step in the search creates many variants that do
not compile or break intended functionality, wasting considerable resources as
a result. In this paper, we address this issue and propose a reinforcement
learning-based approach to optimise the selection of mutation operators in
heuristic-based program repair. Our solution is programming language,
granularity-level, and search strategy agnostic and allows for easy
augmentation into existing heuristic-based repair tools. We conduct extensive
experimentation on four operator selection techniques, two reward types, two
credit assignment strategies, two integration methods, and three sets of
mutation operators using 22,300 independent repair attempts. We evaluate our
approach on 353 real-world bugs from the Defects4J benchmark. Results show that
the epsilon-greedy multi-armed bandit algorithm with average credit assignment
is best for mutation operator selection. Our approach exhibits a 17.3%
improvement upon the baseline, by generating patches for 9 additional bugs for
a total of 61 patched bugs in the Defects4J benchmark
Evaluation of genetic improvement tools for improvement of non-functional properties of software
Genetic improvement (GI) improves both functional properties of software, such as bug repair, and non-functional properties, such as execution time, energy consumption, or source code size. There are studies summarising and comparing GI tools for improving functional properties of software; however there is no such study for improvement of its non-functional properties using GI. Therefore, this research aims to survey and report on the existing GI tools for improvement of non-functional properties of software. We conducted a literature review of available GI tools, and ran multiple experiments on the found open-source tools to examine their usability. We applied a cross-testing strategy to check whether the available tools can work on different programs.
Overall, we found 63 GI papers that use a GI tool to improve nonfunctional properties of software, within which 31 are accompanied with open-source code. We were able to successfully run eight GI tools, and found that ultimately only two ---Gin and PyGGI--- can be readily applied to new general software
- …