65,030 research outputs found
Automated Fixing of Programs with Contracts
This paper describes AutoFix, an automatic debugging technique that can fix
faults in general-purpose software. To provide high-quality fix suggestions and
to enable automation of the whole debugging process, AutoFix relies on the
presence of simple specification elements in the form of contracts (such as
pre- and postconditions). Using contracts enhances the precision of dynamic
analysis techniques for fault detection and localization, and for validating
fixes. The only required user input to the AutoFix supporting tool is then a
faulty program annotated with contracts; the tool produces a collection of
validated fixes for the fault ranked according to an estimate of their
suitability.
In an extensive experimental evaluation, we applied AutoFix to over 200
faults in four code bases of different maturity and quality (of implementation
and of contracts). AutoFix successfully fixed 42% of the faults, producing, in
the majority of cases, corrections of quality comparable to those competent
programmers would write; the used computational resources were modest, with an
average time per fix below 20 minutes on commodity hardware. These figures
compare favorably to the state of the art in automated program fixing, and
demonstrate that the AutoFix approach is successfully applicable to reduce the
debugging burden in real-world scenarios.Comment: Minor changes after proofreadin
Student Success + Design Thinking
Students struggle for a variety of reasons. School systems are complex areas to navigate, and often times, school success is defined by how well a student can navigate the cultural and societal landscape of a school or university. Makerspaces are well-equipped to work with this population as experiential learning relies on the experiences and knowledge acquired through fixing and making. This offers leadership opportunities for at-risk and at-promise students. By working with these students to help them design library services, and makerspaces, they can improve services for everyone.
Design thinking workshops empower these students to generate new ways that the university can develop pathways to their success. Through research and targeted workshops, the presenters have used a variety of methods to help these students succeed. The results are long-lasting relationships, a strong community, and fewer students failing or dropping out
Automatic Software Repair: a Bibliography
This article presents a survey on automatic software repair. Automatic
software repair consists of automatically finding a solution to software bugs
without human intervention. This article considers all kinds of repairs. First,
it discusses behavioral repair where test suites, contracts, models, and
crashing inputs are taken as oracle. Second, it discusses state repair, also
known as runtime repair or runtime recovery, with techniques such as checkpoint
and restart, reconfiguration, and invariant restoration. The uniqueness of this
article is that it spans the research communities that contribute to this body
of knowledge: software engineering, dependability, operating systems,
programming languages, and security. It provides a novel and structured
overview of the diversity of bug oracles and repair operators used in the
literature
Learning likely invariants to explain why a program fails
Debugging is difficult. Recent studies show that automatic bug localization
techniques have limited usefulness. One of the reasons is that programmers
typically have to understand why the program fails before fixing it. In this
work, we aim to help programmers understand a bug by automatically generating
likely invariants which are violated in the failed tests. Given a program with
an initial assertion and at least one test case failing the assertion, we first
generate random test cases, identify potential bug locations through bug
localization, and then generate program state mutation based on active learning
techniques to identify a predicate "explaining" the cause of the bug. The
predicate is a classifier for the passed test cases and failed test cases. Our
main contribution is the application of invariant learning for bug explanation,
as well as a novel approach to overcome the problem of lack of test cases in
practice. We apply our method to real-world bugs and show the generated
invariants are often correlated to the actual bug fixes.Comment: 10 page
Identifying Patch Correctness in Test-Based Program Repair
Test-based automatic program repair has attracted a lot of attention in
recent years. However, the test suites in practice are often too weak to
guarantee correctness and existing approaches often generate a large number of
incorrect patches.
To reduce the number of incorrect patches generated, we propose a novel
approach that heuristically determines the correctness of the generated
patches. The core idea is to exploit the behavior similarity of test case
executions. The passing tests on original and patched programs are likely to
behave similarly while the failing tests on original and patched programs are
likely to behave differently. Also, if two tests exhibit similar runtime
behavior, the two tests are likely to have the same test results. Based on
these observations, we generate new test inputs to enhance the test suites and
use their behavior similarity to determine patch correctness.
Our approach is evaluated on a dataset consisting of 139 patches generated
from existing program repair systems including jGenProg, Nopol, jKali, ACS and
HDRepair. Our approach successfully prevented 56.3\% of the incorrect patches
to be generated, without blocking any correct patches.Comment: ICSE 201
- …