EDBT 2026 Demo / reviewers in the wild / expert
Andreas Zeller
dblp:z/AndreasZeller
· DBLP profile ↗
136ranked-venue papers
15as first author
33since 2021 · last 2026
0000-0003-4719-8803ORCID · verified
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 125 · 12 first-author · 32 since 2021Security and privacy · 5 · 1 since 2021Databases, data management, data science and information retrieval · 5Systems, architecture and hardware · 4 · 2 first-authorArtificial intelligence and machine learning · 3 · 1 first-author · 1 since 2021Human-computer interaction and ubiquitous computing · 1 · 1 first-authorTheory of computation · 1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2026 | Language-Based Software Testing
Andreas Zeller |
ICSOFT | 1 |
| 2026 | Constraint-Driven Fuzzing at Scale with FANDANGO
José Antonio Zamudio Amaya, Marius Smytzek, Alexander Liggesmeyer, Valentin Huber, Andreas Zeller |
ICST | 5 |
| 2026 | Combining Input Constraints with Execution Goals
Leon Bettscheider, Marius Smytzek, Andreas Zeller |
ICST | 3 |
| 2026 | Synthesizing Precise Protocol Specs from Natural Language for Effective Test Generation
Kuangxiangzi Liu, Alexander Liggesmeyer, Dhiman Chakraborty 0001, Andreas Zeller |
ICST | 4 |
| 2026 | Search-Based Generation of Complex Inputs with FANDANGO
José Antonio Zamudio Amaya, Marius Smytzek, Andreas Zeller |
SSBSE | 3 |
| 2026 | Learning Program Behavioral Models from Synthesized Input-Output PairsabstractWe introduce Modelizer —a novel framework that, given a black-box program, learns a model from its input/output behavior using neural machine translation algorithms. The resulting model mocks the original program: Given an input, the model predicts the output that would have been produced by the program. However, the model is also reversible —that is, the model can predict the input that would have produced a given output. Finally, the model is differentiable and can be efficiently restricted to predict only a certain aspect of the program behavior. Modelizer uses grammars to synthesize and inputs and unsupervised tokenizers to decompose the resulting outputs, allowing it to learn sequence-to-sequence associations between token streams. Other than input grammars, Modelizer only requires the ability to execute the program. The resulting models are small, requiring fewer than 6.3 million parameters for languages such as Markdown or HTML; and they are accurate, achieving up to 95.4% accuracy and a BLEU score of 0.98 with standard error of 0.04 in mocking real-world applications. As it learns from and predicts executions rather than code, Modelizer departs from the LLM-centric research trend, opening new opportunities for program-specific models that are fully tuned toward individual programs. Indeed, we foresee several applications of these models, especially as the output of the program can be any aspect of program behavior. Beyond mocking and predicting program behavior, the models can also synthesize inputs that are likely to produce a particular behavior, such as failures or coverage, thus assisting in program understanding and maintenance. Tural Mammadov, Dietrich Klakow, Alexander Koller, Andreas Zeller |
ACM Trans. Softw. Eng. Methodol. | 4 |
| 2025 | BASHIRI: Learning Failure Oracles from Execution FeaturesabstractProgram fixes must preserve passing tests while fixing failing ones. Validating these properties requires test oracles that distinguish passing from failing runs.We introduce BASHIRI, a tool that learns failure oracles from test suites with labeled outcomes using execution features. BASHIRI leverages execution-feature-driven debugging to collect program execution features and trains interpretable models as testing oracles. Our evaluation shows that BASHIRI predicts test outcomes with 95% accuracy, effectively identifying failing runs. BASHIRI is available as an open-source tool at https://github.com/smythi93/bashiriA demonstration video is available at https://youtu.be/D2mJkCtSXtM Marius Smytzek, Martin Eberlein, Tural Mammadov, Lars Grunske, Andreas Zeller |
ASE | 5 |
| 2025 | Finding Information Leaks with Information Flow FuzzingabstractWe present information flow fuzzing , an approach that guides fuzzers towards detecting information leaks — information that reaches a third party, but should not. The approach detects information flow by means of mutations , checking whether and how mutations to (secret) data affect output and execution: — First, the fuzzer uses information flow as a leak oracle. To this end, for each input, the fuzzer first runs the program regularly. Then, it mutates secret data such as a certificate or a password, and re-runs the program giving the original input. If the output changes, the fuzzer has revealed an information leak. — Second, the fuzzer uses information flow as guidance. The fuzzer not only maximizes coverage, but also changes in coverage and changes in data between the two runs. This increases the likelihood that a mutation will spread to the output. We have implemented a tool named flowfuzz that wraps around a C program under test to provide information flow based oracles and guidance, allowing for integration with all common fuzzers for C programs. Using a set of subjects representing common information leaks, we investigate (1) whether oracles based on information flow detect information leaks in our subjects; and (2) whether guidance based on information flow improves over standard coverage guidance. All data and tools are available for replication and reproduction. Bernd Gruner, Clemens-Alexander Brust, Andreas Zeller |
ACM Trans. Softw. Eng. Methodol. | 3 |
| 2025 | Finding Information Leaks with Information Flow Fuzzing - RCR ReportabstractThis is the Replicated Computational Results (RCR) report for our ACM TOSEM paper, “ Finding Information Leaks with Information Flow Fuzzing ,” in which we propose information flow fuzzing . This approach directs fuzzers toward detecting information leaks . We introduce a novel leak oracle and employ information flow as guidance for the fuzzer to identify information leaks effectively. As part of this RCR report, we provide a replication package that enables the complete replication of all our results and simplifies the reuse of our FLOWFUZZ fuzzer. Bernd Gruner, Clemens-Alexander Brust, Andreas Zeller |
ACM Trans. Softw. Eng. Methodol. | 3 |
| 2025 | A Retrospective on Mining Version Histories to Guide Software ChangesabstractTwenty years ago we published a paper titled “Mining Version Histories to Guide Software Changes” in the IEEETransactions of Software Engineering. The paper is considered to be one of the seminal papers of the mining software repositories (MSR) field. In this retrospective, we reflect on the original work, the field of mining software repositories and its community, and its impact on software engineering. Thomas Zimmermann 0001, Peter Weißgerber, Stephan Diehl 0001, Andreas Zeller |
IEEE Trans. Software Eng. | 4 |
| 2025 | Simplifying and Isolating Failure-Inducing Input: A Retrospective on Delta DebuggingabstractDelta Debugging is a technique to simplify and isolate failure-inducing changes. Its most popular application is onprogram inputs,where it reduces a failure-inducing input to a minimal input that still triggers the failure. This paper provides a retrospective on Delta Debugging, discussing its origins, applications, and impact. We also discuss the limitations of Delta Debugging and suggest directions for future research. Andreas Zeller, Ralf Hildebrandt |
IEEE Trans. Software Eng. | 1 |
| 2024 | A Generalized Approach for Solving Web Form ConstraintsabstractWhen creating automated tests for web applications, one major part is filling and submitting web forms. Filling out forms automatically is challenging, as form fields would typically be subject to specific constraints that prevent entry of invalid data. Modern test generators, such as the recently proposed Black Ostrich scanner, are already capable of identifying expected patterns for form values and solve them, using instance generators for regular expressions and/or string constraint solvers. String solvers, however, are limited to, well, strings. Björn Karthein, Cristian-Alexandru Staicu, Andreas Zeller |
ASE | 3 |
| 2024 | FixKit: A Program Repair Collection for PythonabstractIn recent years, automatic program repair has gained much attention in the research community. Generally, program repair approaches consider a faulty program and a test suite that captures the program's intended behavior. The goal is automatically generating a patch that corrects the fault by identifying the faulty code locations, suggesting a candidate fix, and validating it against the provided tests. However, most existing program repair tools focus on Java or C programs, while Python, one of the most popular programming languages, lacks approaches that work on it. Marius Smytzek, Martin Eberlein, Kai Werk, Lars Grunske, Andreas Zeller |
ASE | 5 |
| 2024 | Recommending and release planning of user-driven functionality deletion for mobile apps
Maleknaz Nayebi, Konstantin Kuznetsov 0001, Andreas Zeller, Günther Ruhe |
Requir. Eng. | 3 |
| 2024 | FormatFuzzer: Effective Fuzzing of Binary File FormatsabstractEffective fuzzing of programs that process structured binary inputs, such as multimedia files, is a challenging task, since those programs expect a very specific input format. Existing fuzzers, however, are mostly format-agnostic, which makes them versatile, but also ineffective when a specific format is required. We present FormatFuzzer , a generator for format-specific fuzzers . FormatFuzzer takes as input a binary template (a format specification used by the 010 Editor) and compiles it into C++ code that acts as parser, mutator, and highly efficient generator of inputs conforming to the rules of the language. The resulting format-specific fuzzer can be used as a standalone producer or mutator in black-box settings, where no guidance from the program is available. In addition, by providing mutable decision seeds, it can be easily integrated with arbitrary format-agnostic fuzzers such as AFL to make them format-aware. In our evaluation on complex formats such as MP4 or ZIP, FormatFuzzer showed to be a highly effective producer of valid inputs that also detected previously unknown memory errors in ffmpeg and timidity . Rafael Dutra, Rahul Gopinath, Andreas Zeller |
ACM Trans. Softw. Eng. Methodol. | 3 |
| 2023 | Fuzzing Embedded Systems using Debug InterfacesabstractFuzzing embedded systems is hard. Their key components – microcontrollers – are highly diverse and cannot be easily virtualized; their software may not be changed or instrumented. However, we observe that many, if not most, microcontrollers feature a debug interface through which a debug probe (typically controllable via GDB, the GNU debugger) can set a limited number of hardware breakpoints. Using these, we extract partial coverage feedback even for uninstrumented binary code; and thus enable effective fuzzing for embedded systems through a generic, widespread mechanism. In its evaluation on four different microcontroller boards, our prototypical implementation GDBFuzz quickly reaches high code coverage and detects known and new vulnerabilities. As it can be applied to any program and system that GDB can debug, GDBFuzz is one of the least demanding and most versatile coverage-guided fuzzers. Max Eisele, Daniel Ebert, Christopher Huth, Andreas Zeller |
ISSTA | 4 |
| 2023 | User Driven Functionality Deletion for Mobile AppsabstractEvolving software with an increasing number of features is harder to understand and thus harder to use. Software release planning has been concerned with planning these additions. Moreover, software of increasing size takes more effort to be maintained. In the domain of mobile apps, too much functionality can easily impact usability, maintainability, and resource consumption. Hence, it is important to understand the extent to which the law of continuous growth applies to mobile apps. Previous work showed that the deletion of functionality is common and sometimes driven by user reviews. However, it is unknown whether these deletions are visible or important to the app users. In this study, we surveyed 297 mobile app users to understand the significance of functionality deletion for them. Our results showed that for most users, the deletion of features corresponds with negative sentiments and change in usage and even churn. Motivated by these preliminary results, we propose Radiation to input user reviews and recommend if any functionality should be deleted from an app's User Interface (UI). We evaluate Radiation using historical data and surveying developers' opinions. From the analysis of 190,062 reviews from 115 randomly selected apps, we show that Radiation can recommend functionality deletion with an average F-Score of 74% and if sufficiently many negative user reviews suggest so. Maleknaz Nayebi, Konstantin Kuznetsov 0001, Andreas Zeller, Günther Ruhe |
RE | 3 |
| 2023 | Semantic DebuggingabstractWhy does my program fail? We present a novel and general technique to automatically determine failure causes and conditions, using logical properties over input elements: “The program fails if and only if int( ) > len( ) holds—that is, the given is larger than the length.” Our AVICENNA prototype uses modern techniques for inferring properties of passing and failing inputs and validating and refining hypotheses by having a constraint solver generate supporting test cases to obtain such diagnoses. As a result, AVICENNA produces crisp and expressive diagnoses even for complex failure conditions, considerably improving over the state of the art with diagnoses close to those of human experts. Martin Eberlein, Marius Smytzek, Dominic Steinhöfel, Lars Grunske, Andreas Zeller |
ESEC/SIGSOFT FSE | 5 |
| 2023 | Revisiting Neural Program Smoothing for FuzzingabstractTesting with randomly generated inputs (fuzzing) has gained significant traction due to its capacity to expose program vulnerabilities automatically. Fuzz testing campaigns generate large amounts of data, making them ideal for the application of machine learning (ML). Neural program smoothing, a specific family of ML-guided fuzzers, aims to use a neural network as a smooth approximation of the program target for new test case generation. Maria-Irina Nicolae, Max Eisele, Andreas Zeller |
ESEC/SIGSOFT FSE | 3 |
| 2023 | Systematic Assessment of Fuzzers using Mutation Analysis
Philipp Görz, Björn Mathis, Keno Hassler, Emre Güler, Thorsten Holz, Andreas Zeller, Rahul Gopinath |
USENIX Security Symposium | 6 |
| 2022 | Message from the ICSE 2022 Program Chairs
Daniela E. Damian, Andreas Zeller |
ICSE | 2 |
| 2022 | "Synthesizing input grammars": a replication studyabstractWhen producing test inputs for a program, test generators ("fuzzers") can greatly profit from grammars that formally describe the language of expected inputs. In recent years, researchers thus have studied means to recover input grammars from programs and their executions. The GLADE algorithm by Bastani et al., published at PLDI 2017, was the first black-box approach to claim context-free approximation of input specification for non-trivial languages such as XML, Lisp, URLs, and more. Bachir Bendrissou, Rahul Gopinath, Andreas Zeller |
PLDI | 3 |
| 2022 | CLIFuzzer: mining grammars for command-line invocationsabstractThe behavior of command-line utilities can be very much influenced by passing command-line options and arguments—configuration settings that enable, disable, or otherwise influence parts of the code to be executed. Hence, systematic testing of command-line utilities requires testing them with diverse configurations of supported command-line options. Abhilash Gupta, Rahul Gopinath, Andreas Zeller |
ESEC/SIGSOFT FSE | 3 |
| 2022 | SFLKit: a workbench for statistical fault localizationabstractStatistical fault localization aims at detecting execution features that correlate with failures, such as whether individual lines are part of the execution. We introduce SFLKit, an out-of-the-box workbench for statistical fault localization. The framework provides straightforward access to the fundamental concepts of statistical fault localization. It supports five predicate types, four coverage-inspired spectra, like lines, and 44 similarity coefficients, e.g., TARANTULA or OCHIAI, for statistical program analysis. Marius Smytzek, Andreas Zeller |
ESEC/SIGSOFT FSE | 2 |
| 2022 | Input invariantsabstractHow can we generate valid system inputs? Grammar-based fuzzers are highly efficient in producing syntactically valid system inputs. However, programs will often reject inputs that are semantically invalid. We introduce ISLa, a declarative specification language for context-sensitive properties of structured system inputs based on context-free grammars. With ISLa, it is possible to specify input constraints like "a variable has to be defined before it is used," "the 'file name' block must be 100 bytes long," or "the number of columns in all CSV rows must be identical." Dominic Steinhöfel, Andreas Zeller |
ESEC/SIGSOFT FSE | 2 |
| 2022 | Academic prototyping (invited tutorial)abstractMuch of our research requires building tools to evaluate and demonstrate new approaches. Yet, tool building can take large amounts of time and resources. And it brings risks: The original idea might not work; rendering all efforts futile. And after the student in charge has left, the tool becomes a maintenance problem. Andreas Zeller |
ESEC/SIGSOFT FSE | 1 |
| 2022 | IEEE International Conference on Software Testing, Verification and Validation (ICST 2020)abstractThis special issue contains articles which are extended versions of some of the best papers presented at the IEEE International Conference on Software Testing, Verification and Validation (ICST 2020). ICST is intended as a common forum for researchers, scientists, engineers and practitioners throughout the world to present their latest research findings, ideas, developments and applications in the area of Software Testing, Verification and Validation. The articles are ‘Fostering the Diversity of Exploratory Testing in Web Applications’, by Leveau et al., ‘RVPRIO: a Tool for Prioritizing Runtime Verification Violations’, by Cabral et al., and ‘Automated Black-Box Testing of Nominal and Error Scenarios in RESTful APIs’, by Corradini et al., covering diverse topics in software testing and verification. In the first article, the authors investigate exploratory testing, a form of software testing that leverages business expertise, in the context of web applications. They propose a new approach that monitors online interactions performed by testers to suggest new interactions, thus enabling deeper explorations of the applications. In the second article, the authors leverage machine learning to prioritise violations reported by runtime verification, leading to the discovery of previously unknown bugs in open-source projects. In the third article, the authors develop black-box testing techniques for RESTful APIs, a mainstream approach for web API design, leading to the discovery of new faults in already deployed web services. We would like to thank the authors for submitting their contributions and the reviewers for their excellent job. We would also like to thank Rob Hierons for kind guidance and great patience with this volume. Corina Pasareanu, Andreas Zeller |
Softw. Test. Verification Reliab. | 2 |
| 2022 | Inputs From HellabstractGrammarscan serve asproducersfor structured test inputs that are syntactically correct by construction. A probabilistic grammar assigns probabilities to individual productions, thus controlling the distribution of input elements. Using the grammars as input parsers, we show how tolearn input distributions from input samples,allowing to create inputs that aresimilarto the sample; byinvertingthe probabilities, we can create inputs that aredissimilarto the sample. This allows for threetest generation strategies: 1) “Common inputs”–by learning from common inputs, we can create inputs that aresimilarto the sample; this is useful for regression testing. 2) “Uncommon inputs”–learning from common inputs and inverting probabilities yields inputs that arestrongly dissimilarto the sample; this is useful for completing a test suite with “inputs from hell” that test uncommon features, yet are syntactically valid. 3) “Failure-inducing inputs”–learning from inputs that caused failures in the past gives us inputs that share similar features and thus also have ahigh chance of triggering bugs; this is useful for testing the completeness of fixes. Our evaluation on three common input formats (JSON, JavaScript, CSS) shows the effectiveness of these approaches. Results show that “common inputs” reproduced 96 percent of the methods induced by the samples. In contrast, for almost all subjects (95 percent), the “uncommon inputs” covered significantly different methods from the samples. Learning from failure-inducing samples reproduced all exceptions (100 percent) triggered by the failure-inducing samples and discovered new exceptions not found in any of the samples learned from. Ezekiel O. Soremekun, Esteban Pavese, Nikolas Havrikov, Lars Grunske, Andreas Zeller |
IEEE Trans. Software Eng. | 5 |
| 2021 | Input AlgebrasabstractGrammar-based test generators are highly efficient in producing syntactically valid test inputs, and give their user precise control over which test inputs should be generated. Adapting a grammar or a test generator towards a particular testing goal can be tedious, though. We introduce the concept of a grammar transformer, specializing a grammar towards inclusion or exclusion of specific patterns: "The phone number must not start with 011 or +1". To the best of our knowledge, ours is the first approach to allow for arbitrary Boolean combinations of patterns, giving testers unprecedented flexibility in creating targeted software tests. The resulting specialized grammars can be used with any grammar-based fuzzer for targeted test generation, but also as validators to check whether the given specialization is met or not, opening up additional usage scenarios. In our evaluation on real-world bugs, we show that specialized grammars are accurate both in producing and validating targeted inputs. Rahul Gopinath, Hamed Nemati, Andreas Zeller |
ICSE | 3 |
| 2021 | Restoring Execution Environments of Jupyter NotebooksabstractMore than ninety percent of published Jupyternotebooks do not state dependencies on external packages. This makes them non-executable and thus hinders reproducibility of scientific results. We present SnifferDog, an approach that1) collects the APIs of Python packages and versions, creating a database of APIs; 2) analyzes notebooks to determine candidates for required packages and versions; and 3) checks which packages are required to make the notebook executable(and ideally, reproduce its stored results). In its evaluation, we show thatSnifferDogprecisely restores execution environments for the largest majority of notebooks, making them immediately executable for end users. Jiawei Wang 0003, Li Li 0029, Andreas Zeller |
ICSE | 3 |
| 2021 | Frontmatter: mining Android user interfaces at scaleabstractWe introduce Frontmatter: the largest open-access dataset containing user interface models of about 160,000 Android apps. Frontmatter opens the door for comprehensive mining of mobile user interfaces, jumpstarting empirical research at a large scale, addressing questions such as "How many travel apps require registration?", "Which apps do not follow accessibility guidelines?", "Does the user interface correspond to the description?", and many more. The Frontmatter UI analysis tool and the Frontmatter dataset are available under an open-source license. Konstantin Kuznetsov 0001, Song Gao 0014, David N. Jansen, Lijun Zhang 0001, Andreas Zeller |
ESEC/SIGSOFT FSE | 6 |
| 2021 | When life gives you oranges: detecting and diagnosing intermittent job failures at MozillaabstractContinuous delivery of cloud systems requires constant running of jobs (build processes, tests, etc.). One issue that plagues this continuous integration (CI) process are intermittent failures - non-deterministic, false alarms that do not result from a bug in the software or job specification, but rather from issues in the underlying infrastructure. At Mozilla, such intermittent failures are called oranges as a reference to the color of the build status indicator. As such intermittent failures disrupt CI and lead to failures, they erode the developers' trust in the jobs. We present a novel approach that automatically classifies failing jobs to determine whether job execution failures arise from an actual software bug or were caused by flakiness in the job (e.g., test) or the underlying infrastructure. For this purpose, we train classification models using job telemetry data to diagnose failure patterns involving features such as runtime, cpu load, operating system version, or specific platform with high precision. In an evaluation on a set of Mozilla CI jobs, our approach achieves precision scores of 73%, on average, across all data sets with some test suites achieving precision scores good enough for fully automated classification (i.e., precision scores of up to 100%), and recall scores of 82% on average (up to 94%). Johannes Lampel, Sascha Just, Sven Apel, Andreas Zeller |
ESEC/SIGSOFT FSE | 4 |
| 2021 | Locating faults with program slicing: an empirical analysis
Ezekiel O. Soremekun, Lukas Kirschner, Marcel Böhme, Andreas Zeller |
Empir. Softw. Eng. | 4 |
| 2020 | Heaps'n leaks: how heap snapshots improve Android taint analysisabstractThe assessment of information flows is an essential part of analyzing Android apps, and is frequently supported by static taint analysis. Its precision, however, can suffer from the analysis not being able to precisely determine what elements a pointer can (and cannot) point to. Recent advances in static analysis suggest that incorporating dynamic heap snapshots, taken at one point at runtime, can significantly improve general static analysis. In this paper, we investigate to what extent this also holds for taint analysis, and how various design decisions, such as when and how many snapshots are collected during execution, and how exactly they are used, impact soundness and precision. We have extended FlowDroid to incorporate heap snapshots, yielding our prototype Heapster, and evaluated it on DroidMacroBench, a novel benchmark comprising real-world Android apps that we also make available as an artifact. The results show (1) the use of heap snapshots lowers analysis time and memory consumption while increasing precision; (2) a very good trade-off between precision and recall is achieved by a mixed mode in which the analysis falls back to static points-to relations for objects for which no dynamic data was recorded; and (3) while a single heap snapshot (ideally taken at the end of the execution) suffices to improve performance and precision, a better trade-off can be obtained by using multiple snapshots. Manuel Benz, Erik Krogh Kristensen, Linghui Luo, Nataniel P. Borges, Eric Bodden, Andreas Zeller |
ICSE | 6 |
| 2020 | Debugging inputsabstractWhen a program fails to process an input, it need not be the program code that is at fault. It can also be that the input data is faulty, for instance as result of data corruption. To get the data processed, one then has to debug the input data---that is, (1) identify which parts of the input data prevent processing, and (2) recover as much of the (valuable) input data as possible. In this paper, we present a general-purpose algorithm called ddmax that addresses these problems automatically. Through experiments, ddmax maximizes the subset of the input that can still be processed by the program, thus recovering and repairing as much data as possible; the difference between the original failing input and the "maximized" passing input includes all input fragments that could not be processed. To the best of our knowledge, ddmax is the first approach that fixes faults in the input data without requiring program analysis. In our evaluation, ddmax repaired about 69% of input files and recovered about 78% of data within one minute per input. Lukas Kirschner, Ezekiel O. Soremekun, Andreas Zeller |
ICSE | 3 |
| 2020 | Abstracting failure-inducing inputsabstractA program fails. Under which circumstances does the failure occur? Starting with a single failure-inducing input ("The input ((4)) fails") and an input grammar, the DDSET algorithm uses systematic tests to automatically generalize the input to an abstract failure-inducing input that contains both (concrete) terminal symbols and (abstract) nonterminal symbols from the grammar—for instance, "(( ))", which represents any expression in double parentheses. Such an abstract failure-inducing input can be used (1) as a debugging diagnostic, characterizing the circumstances under which a failure occurs ("The error occurs whenever an expression is enclosed in double parentheses"); (2) as a producer of additional failure-inducing tests to help design and validate fixes and repair candidates ("The inputs ((1)), ((3 * 4)), and many more also fail"). In its evaluation on real-world bugs in JavaScript, Clojure, Lua, and UNIX command line utilities, DDSET’s abstract failure-inducing inputs provided to-the-point diagnostics, and precise producers for further failure inducing inputs. Rahul Gopinath, Alexander Kampmann, Nikolas Havrikov, Ezekiel O. Soremekun, Andreas Zeller |
ISSTA | 5 |
| 2020 | Learning input tokens for effective fuzzingabstractModern fuzzing tools like AFL operate at a lexical level: They explore the input space of tested programs one byte after another. For inputs with complex syntactical properties, this is very inefficient, as keywords and other tokens have to be composed one character at a time. Fuzzers thus allow to specify dictionaries listing possible tokens the input can be composed from; such dictionaries speed up fuzzers dramatically. Also, fuzzers make use of dynamic tainting to track input tokens and infer values that are expected in the input validation phase. Unfortunately, such tokens are usually implicitly converted to program specific values which causes a loss of the taints attached to the input data in the lexical phase. In this paper, we present a technique to extend dynamic tainting to not only track explicit data flows but also taint implicitly converted data without suffering from taint explosion. This extension makes it possible to augment existing techniques and automatically infer a set of tokens and seed inputs for the input language of a program given nothing but the source code. Specifically targeting the lexical analysis of an input processor, our lFuzzer test generator systematically explores branches of the lexical analysis, producing a set of tokens that fully cover all decisions seen. The resulting set of tokens can be directly used as a dictionary for fuzzing. Along with the token extraction seed inputs are generated which give further fuzzing processes a head start. In our experiments, the lFuzzer-AFL combination achieves up to 17% more coverage on complex input formats like json, lisp, tinyC, and JavaScript compared to AFL. Björn Mathis, Rahul Gopinath, Andreas Zeller |
ISSTA | 3 |
| 2020 | Speeding up GUI Testing by On-Device Test GenerationabstractWhen generating GUI tests for Android apps, it typically is a separate test computer that generates interactions, which are then executed on an actual Android device. While this approach is efficient in the sense that apps and interactions execute quickly, the communication overhead between test computer and device slows down testing considerably. In this work, we present DD-2, a test generator for Android that tests other apps on the device using Android accessibility services. In our experiments, DD-2 has shown to be 3.2 times faster than its computer-device counterpart, while sharing the same source code. Nataniel P. Borges, Jenny Rau, Andreas Zeller |
ASE | 3 |
| 2020 | Assessing and Restoring Reproducibility of Jupyter NotebooksabstractJupyter notebooks---documents that contain live code, equations, visualizations, and narrative text---now are among the most popular means to compute, present, discuss and disseminate scientific findings. In principle, Jupyter notebooks should easily allow to reproduce and extend scientific computations and their findings; but in practice, this is not the case. The individual code cells in Jupyter notebooks can be executed in any order, with identifier usages preceding their definitions and results preceding their computations. In a sample of 936 published notebooks that would be executable in principle, we found that 73% of them would not be reproducible with straightforward approaches, requiring humans to infer (and often guess) the order in which the authors created the cells. Jiawei Wang 0003, Tzu-yang Kuo, Li Li 0029, Andreas Zeller |
ASE | 4 |
| 2020 | Automatically Granted Permissions in Android apps: An Empirical Study on their Prevalence and on the Potential Threats for PrivacyabstractDevelopers continuously update their Android apps to keep up with competitors in the market. Such constant updates do not bother end users, since by default the Android platform automatically pushes the most recent compatible release on the device, unless there are major changes in the list of requested permissions that users have to explicitly grant. The lack of explicit user's approval for each application update, however, may lead to significant risks for the end user, as the new release may include new subtle behaviors which may be privacy-invasive. The introduction of permission groups in the Android permission model makes this problem even worse: if a user gives a single permission within a group, the application can silently request further permissions in this group with each update---without having to ask the user. Paolo Calciati, Konstantin Kuznetsov 0001, Alessandra Gorla, Andreas Zeller |
MSR | 4 |
| 2020 | Mining input grammars from dynamic control flowabstractOne of the key properties of a program is its input specification. Having a formal input specification can be critical in fields such as vulnerability analysis, reverse engineering, software testing, clone detection, or refactoring. Unfortunately, accurate input specifications for typical programs are often unavailable or out of date. Rahul Gopinath, Björn Mathis, Andreas Zeller |
ESEC/SIGSOFT FSE | 3 |
| 2020 | When does my program do this? learning circumstances of software behaviorabstractA program fails. Under which circumstances does the failure occur? Our Alhazenapproach starts with a run that exhibits a particular behavior and automatically determines input features associated with the behavior in question: (1) We use a grammar to parse the input into individual elements. (2) We use a decision tree learner to observe and learn which input elements are associated with the behavior in question. (3) We use the grammar to generate additional inputs to further strengthen or refute hypotheses as learned associations. (4) By repeating steps 2 and 3, we obtain a theory that explains and predicts the given behavior. In our evaluation using inputs for find, grep, NetHack, and a JavaScript transpiler, the theories produced by Alhazen predict and produce failures with high accuracy and allow developers to focus on a small set of input features: “grep fails whenever the --fixed-strings option is used in conjunction with an empty search string.” Alexander Kampmann, Nikolas Havrikov, Ezekiel O. Soremekun, Andreas Zeller |
ESEC/SIGSOFT FSE | 4 |
| 2019 | Why Does this App Need this Data? Automatic Tightening of Resource AccessabstractOn mobile operating systems, apps may access resources that are not be needed for their primary functionality. Which are the resources an app actually needs for its core functionality? And what happens if we deny access to other resources? Using a test generator for user interaction, we systematically explore app behavior under varied resource constraints and determine the impact of access restrictions, yielding a minimal set of required privileges for each app and functionality. In our proof of concept on Android apps, our TIARA prototype could block up to 69% of resource accesses while retaining all previously explored functionality. Nataniel P. Borges, Andreas Zeller |
ICST | 2 |
| 2019 | Learning user interface element interactionsabstractWhen generating tests for graphical user interfaces, one central problem is to identify how individual UI elements can be interacted with—clicking, long- or right-clicking, swiping, dragging, typing, or more. We present an approach based on reinforcement learning that automatically learns which interactions can be used for which elements, and uses this information to guide test generation. We model the problem as an instance of the multi-armed bandit problem (MAB problem) from probability theory, and show how its traditional solutions work on test generation, with and without relying on previous knowledge. The resulting guidance yields higher coverage. In our evaluation, our approach shows improvements in statement coverage between 18% (when not using any previous knowledge) and 20% (when reusing previously generated models). Christian Degott, Nataniel P. Borges, Andreas Zeller |
ISSTA | 3 |
| 2019 | Systematically Covering Input StructureabstractGrammar-based testing uses a given grammar to produce syntactically valid inputs. To cover program features, it is necessary to also cover input features-say, all URL variants for a URL parser. Our k-path algorithm for grammar production systematically covers syntactic elements as well as their combinations. In our evaluation, we show that this results in a significantly higher code coverage than state of the art. Nikolas Havrikov, Andreas Zeller |
ASE | 2 |
| 2019 | Parser-directed fuzzingabstractTo be effective, software test generation needs to well cover the space of possible inputs. Traditional fuzzing generates large numbers of random inputs, which however are unlikely to contain keywords and other specific inputs of non-trivial input languages. Constraint-based test generation solves conditions of paths leading to uncovered code, but fails on programs with complex input conditions because of path explosion. In this paper, we present a test generation technique specifically directed at input parsers. We systematically produce inputs for the parser and track comparisons made; after every rejection, we satisfy the comparisons leading to rejection. This approach effectively covers the input space: Evaluated on five subjects, from CSV files to JavaScript, our pFuzzer prototype covers more tokens than both random-based and constraint-based approaches, while requiring no symbolic analysis and far fewer tests than random fuzzers. Björn Mathis, Rahul Gopinath, Michaël Mera, Alexander Kampmann, Matthias Höschele, Andreas Zeller |
PLDI | 6 |
| 2019 | AccessiLeaks: Investigating Privacy Leaks Exposed by the Android Accessibility ServiceabstractAbstract To support users with disabilities, Android provides the accessibility services, which implement means of navigating through an app. According to the Android developer’s guide: “Accessibility services should only be used to assist users with disabilities in using Android devices and apps”. However, developers are free to use this service without any restrictions, giving them critical privileges such as monitoring user input or screen content to capture sensitive information. In this paper, we show that simply enabling the accessibility service leaves 72 % of the top finance a nd 80 % of the top social media apps vulnerable to eavesdropping attacks, leaking sensitive information such as logins and passwords. A combination of several tools and recommendations could mitigate the privacy risks: We introduce an analysis technique that detects most of these issues automatically, e.g. in an app store. We also found that these issues can be automatically fixed in almost all cases; our fixes have b een accepted by 70 % of the surveyed developers. Finally, we designed a notification mechanism which would warn users against possible misuses of the accessibility services; 50 % of users would follow these notifications. Mohammad Naseri, Nataniel P. Borges, Andreas Zeller, Romain Rouvoy |
Proc. Priv. Enhancing Technol. | 3 |
| 2019 | Quantifying the Information Leakage in Cache Attacks via Symbolic ExecutionabstractCache attacks allow attackers to infer the properties of a secret execution by observing cache hits and misses. But how much information can actually leak through such attacks? For a given program, a cache model, and an input, our CHALICE framework leverages symbolic execution to compute the amount of information that can possibly leak through cache attacks. At the core of CHALICE is a novel approach to quantify information leakage that can highlight critical cache side-channel leakage on arbitrary binary code. In our evaluation on real-world programs from OpenSSL and Linux GDK libraries, CHALICE effectively quantifies information leakage: For an AES-128 implementation on Linux, for instance, CHALICE finds that a cache attack can leak as much as 127 out of 128 bits of the encryption key. Sudipta Chattopadhyay 0001, Moritz Beck 0002, Ahmed Rezine, Andreas Zeller |
ACM Trans. Embed. Comput. Syst. | 4 |
| 2018 | Practical Test Dependency DetectionabstractRegression tests should consistently produce the same outcome when executed against the same version of the system under test. Recent studies, however, show a different picture: in many cases simply changing the order in which tests execute is enough to produce different test outcomes. These studies also identify the presence of dependencies between tests as one likely cause of this behavior. Test dependencies affect the quality of tests and of the correlated development activities, like regression test selection, prioritization, and parallelization, which assume that tests are independent. Therefore, developers must promptly identify and resolve problematic test dependencies. This paper presents PRADET, a novel approach for detecting problematic dependencies that is both effective and efficient. PRADET uses a systematic, data-driven process to detect problematic test dependencies significantly faster and more precisely than prior work. PRADET scales to analyze large projects with thousands of tests that existing tools cannot analyze in reasonable amount of time, and found 27 previously unknown dependencies. Alessio Gambi, Jonathan Bell 0001, Andreas Zeller |
ICST | 3 |
| 2018 | Transferring Tests Across Web Applications
Andreas Rau 0001, Jenny Rau, Andreas Zeller |
ICWE | 3 |
| 2018 | DroidMate-2: a platform for Android test generationabstractAndroid applications (apps) represent an ever increasing portion of the software market. Automated test input generators are the state of the art for testing and security analysis. We introduce DroidMate-2 (DM-2), a platform to easily assist both developers and researchers to customize, develop and test new test generators. DM-2 can be used without app instrumentation or operating system modifications, as a test generator on real devices and emulators for app testing or regression testing. Additionally, it provides sensitive resource monitoring or blocking capabilities through a lightweight app instrumentation, out-of-thebox statement coverage measurement through a fully-fledged app instrumentation and native experiment reproducibility. In our experiments we compared DM-2 against DroidBot, a state-of-the-art test generator by measuring statement coverage. Our results show that DM-2 reached 96% of its peak coverage in less than 2/3 of the time needed by DroidBot, allowing for better and more efficient tests. On short runs (5 minutes) DM-2 outperformed DroidBot by 7% while in longer runs (1 hour) this difference increases to 8%. ACM DL Artifact: https://www.doi.org/10.1145/3264864 Nataniel P. Borges, Jenny Rau, Andreas Zeller |
ASE | 3 |
| 2018 | Anatomy of functionality deletion: an exploratory study on mobile appsabstractOne of Lehman's laws of software evolution is that the functionality of programs has to increase over time to maintain user satisfaction. In the domain of mobile apps, though, too much functionality can easily impact usability, resource consumption, and maintenance effort. Hence, does the law of continuous growth apply there? This paper shows that in mobile apps, deletion of functionality is actually common, challenging Lehman's law. We analyzed user driven requests for deletions which were found in 213,866 commits from 1,519 open source Android mobile apps from a total of 14,238 releases. We applied hybrid (open and closed) card sorting and created taxonomies for nature and causes of deletions. We found that functionality deletions are mostly motivated by unneeded functionality, poor user experience, and compatibility issues. We also performed a survey with 106 mobile app developers. We found that 78.3% of developers consider deletion of functionality to be equally or more important than the addition of new functionality. Developers confirmed that they plan for deletions. This implies the need to re-think the process of planning for the next release, overcoming the simplistic assumptions to exclusively look at adding functionality to maximize the value of upcoming releases. Our work is the first to study the phenomenon of functionality deletion and opens the door to a wider perspective on software evolution. Maleknaz Nayebi, Konstantin Kuznetsov 0001, Paul Chen, Andreas Zeller, Günther Ruhe |
MSR | 4 |
| 2017 | O!Snap: Cost-Efficient Testing in the CloudabstractPorting a testing environment to a cloud infrastructure is not straightforward. This paper presents O!Snap, an approach to generate test plans to cost-efficiently execute tests in the cloud. O!Snap automatically maximizes reuse of existing virtual machines, and interleaves the creation of updated test images with the execution of tests to minimize overall test execution time and/or cost. In an evaluation involving 2,600+ packages and 24,900+ test jobs of the Debian continuous integration environment, O!Snap reduces test setup time by up to 88% and test execution time by up to 43.3% without additional costs. Alessio Gambi, Alessandra Gorla, Andreas Zeller |
ICST | 3 |
| 2017 | CUT: automatic unit testing in the cloudabstractUnit tests can be significantly sped up by running them in parallel over distributed execution environments, such as the cloud. However, manually setting up such environments and configuring the testing frameworks to effectively use them is cumbersome and requires specialized expertise that developers might lack. Alessio Gambi, Sebastian Kappler, Johannes Lampel, Andreas Zeller |
ISSTA | 4 |
| 2017 | Detecting information flow by mutating input dataabstractAnalyzing information flow is central in assessing the security of applications. However, static and dynamic analyses of information flow are easily challenged by non-available or obscure code. We present a lightweight mutation-based analysis that systematically mutates dynamic values returned by sensitive sources to assess whether the mutation changes the values passed to sensitive sinks. If so, we found a flow between source and sink. In contrast to existing techniques, mutation-based flow analysis does not attempt to identify the specific path of the flow and is thus resilient to obfuscation. In its evaluation, our MUTAFLOW prototype for Android programs showed that mutation-based flow analysis is a lightweight yet effective complement to existing tools. Compared to the popular FlowDroid static analysis tool, MutaFlow requires less than 10% of source code lines but has similar accuracy; on 20 tested real-world apps, it is able to detect 75 flows that FlowDroid misses. Björn Mathis, Vitalii Avdiienko, Ezekiel O. Soremekun, Marcel Böhme, Andreas Zeller |
ASE | 5 |
| 2017 | Quantifying the information leak in cache attacks via symbolic executionabstractCache timing attacks allow attackers to infer the properties of a secret execution by observing cache hits and misses. But how much information can actually leak through such attacks? For a given program, a cache model, and an input, our CHALICE framework leverages symbolic execution to compute the amount of information that can possibly leak through cache attacks. At the core of CHALICE is a novel approach to quantify information leak that can highlight critical cache side-channel leaks on arbitrary binary code. In our evaluation on real-world programs from OpenSSL and Linux GDK libraries, CHALICE effectively quantifies information leaks: For an AES-128 implementation on Linux, for instance, CHALICE finds that a cache attack can leak as much as 127 out of 128 bits of the encryption key. Sudipta Chattopadhyay 0001, Moritz Beck 0002, Ahmed Rezine, Andreas Zeller |
MEMOCODE | 4 |
| 2017 | Where is the bug and how is it fixed? an experiment with practitionersabstractResearch has produced many approaches to automatically locate, explain, and repair software bugs. But do these approaches relate to the way practitioners actually locate, understand, and fix bugs? To help answer this question, we have collected a dataset named DBGBENCH --- the correct fault locations, bug diagnoses, and software patches of 27 real errors in open-source C projects that were consolidated from hundreds of debugging sessions of professional software engineers. Moreover, we shed light on the entire debugging process, from constructing a hypothesis to submitting a patch, and how debugging time, difficulty, and strategies vary across practitioners and types of errors. Most notably, DBGBENCH can serve as reality check for novel automated debugging and repair techniques. Marcel Böhme, Ezekiel O. Soremekun, Sudipta Chattopadhyay 0001, Emamurho Ugherughe, Andreas Zeller |
ESEC/SIGSOFT FSE | 5 |
| 2017 | Guest editorial: emerging areas in automated software engineering research
Tevfik Bultan, Andreas Zeller |
Autom. Softw. Eng. | 2 |
| 2016 | Thread-level speculation with kernel supportabstractRuntime systems for speculative parallelization can be substantially sped up by implementing them with kernel support. We describe a novel implementation of a thread-level speculation (TLS) system using virtual memory to isolate speculative state, implemented in a Linux kernel module. This design choice not only maximizes performance, but also allows to guarantee soundness in the presence of system calls, such as I/O. Its ability to maintain speedups even on programs with frequent mis-speculation, significantly extends its usability, for instance in speculative parallelization. We demonstrate the advantage of kernel-based TLS on a number of programs from the Cilk suite, where this approach is superior to the state of the art in each single case (7.28x on average). All systems described in this paper are made available as open source. Clemens Hammacher, Kevin Streit, Andreas Zeller, Sebastian Hack |
CC | 3 |
| 2016 | Challenges for functional testing of reconfigurable production systemsabstractThe increasing complexity of software in production systems leads to a growing relevance of testing. This trend will continue due to the flexibilization, and IT networking of production systems. This paper proposes a discussion about the requirements of future production systems which will be reconfigurable, decentralized controlled and will consist of autonomous components. From these predicted requirements, new challenges for functional testing are derived. To elucidate these challenges, three use cases illustrate when testing measures will be necessary within the operation phase of production systems. Andreas Zeller, Michael Weyrich |
ETFA | 1 |
| 2016 | Mining sandboxesabstractWe present sandbox mining, a technique to confine an application to resources accessed during automatic testing. Sandbox mining first explores software behavior by means of automatic test generation, and extracts the set of resources accessed during these tests. This set is then used as a sandbox, blocking access to resources not used during testing. The mined sandbox thus protects against behavior changes such as the activation of latent malware, infections, targeted attacks, or malicious updates. Konrad Jamrozik, Philipp von Styp-Rekowsky, Andreas Zeller |
ICSE | 3 |
| 2016 | Mining input grammars from dynamic taintsabstractKnowing which part of a program processes which parts of an input can reveal the structure of the input as well as the structure of the program. In a URL http://www.example.com/path/ , for instance, the protocol http , the host www.example.com , and the path path would be handled by different functions and stored in different variables. Given a set of sample inputs, we use dynamic tainting to trace the data flow of each input character, and aggregate those input fragments that would be handled by the same function into lexical and syntactical entities. The result is a context-free grammar that reflects valid input structure. In its evaluation, our AUTOGRAM prototype automatically produced readable and structurally accurate grammars for inputs like URLs, spreadsheets or configuration files. The resulting grammars not only allow simple reverse engineering of input formats, but can also directly serve as input for test generators. Matthias Höschele, Andreas Zeller |
ASE | 2 |
| 2016 | The impact of tangled code changes on defect prediction models
Kim Herzig, Sascha Just, Andreas Zeller |
Empir. Softw. Eng. | 3 |
| 2016 | The Truth, The Whole Truth, and Nothing But the Truth: A Pragmatic Guide to Assessing Empirical Evaluations
Steve Blackburn, Amer Diwan, Matthias Hauswirth, Peter F. Sweeney, José Nelson Amaral, Tim Brecht, Lubomír Bulej, Cliff Click, Lieven Eeckhout, Sebastian Fischmeister, Daniel Frampton, Laurie J. Hendren, Michael Hind, Antony L. Hosking, Richard E. Jones, Tomas Kalibera, Nathan Keynes, Nathaniel Nystrom, Andreas Zeller |
ACM Trans. Program. Lang. Syst. | 19 |
| 2015 | Test case selection for networked production systemsabstractThis paper provides a discussion on the coming technological changes in process automation of networked production systems, which will change the testing procedure. In the smart factory of the future there will be no possibility to reach a test coverage of 100%, assuming a flexible automation with continuous reconfiguration and dynamic changes during runtime. Consequently, large amounts of test cases and powerful algorithms for their prioritization are needed in order to certify the correct functionality of the production systems in the network. A concept is presented on how to analyze and prioritize the enormous amount of test cases resulting from the changes during runtime. The proposed approach for test case selection utilizes information of the product, the process and the status of the production machine for the prioritization and selection. Andreas Zeller, Michael Weyrich |
ETFA | 1 |
| 2015 | Mining Apps for Abnormal Usage of Sensitive DataabstractWhat is it that makes an app malicious? One important factor is that malicious apps treat sensitive data differently from benign apps. To capture such differences, we mined 2,866 benign Android applications for their data flow from sensitive sources, and compare these flows against those found in malicious apps. We find that (a) for every sensitive source, the data ends up in a small number of typical sinks; (b) these sinks differ considerably between benign and malicious apps; (c) these differences can be used to flag malicious apps due to their abnormal data flow; and (d) malicious apps can be identified by their abnormal data flow alone, without requiring known malware samples. In our evaluation, our MUDFLOW prototype correctly identified 86.4% of all novel malware, and 90.1% of novel malware leaking sensitive data. Vitalii Avdiienko, Konstantin Kuznetsov 0001, Alessandra Gorla, Andreas Zeller, Steven Arzt, Siegfried Rasthofer, Eric Bodden |
ICSE (1) | 4 |
| 2015 | Test complement exclusion: guarantees from dynamic analysisabstractModern test generation techniques allow to generate as many executions as needed, combined with dynamic analysis, they allow for understanding program behavior in situations where static analysis is challenged or impossible. However, all these dynamic techniques would still suffer from the incompleteness of testing: If some behavior has not been observed so far, there is no guarantee that it may not occur in the future. In this talk, I introduce a method called Test Complement Exclusion that combines test generation and sand boxing to provide such a guarantee. Test Complement Exclusion will have significant impact in the security domain, as it effectively detects and protects against unexpected changes of program behavior, however, guarantees would also strengthen findings in dynamic software comprehension. First experiments on real-world ANDROID programs demonstrate the feasibility of the approach. Andreas Zeller |
ICPC | 1 |
| 2015 | Generalized Task ParallelismabstractExisting approaches to automatic parallelization produce good results in specific domains. Yet, it is unclear how to integrate their individual strengths to match the demands and opportunities of complex software. This lack of integration has both practical reasons, as integrating those largely differing approaches into one compiler would impose an engineering hell, as well as theoretical reasons, as no joint cost model exists that would drive the choice between parallelization methods. By reducing the problem of generating parallel code from a program dependence graph to integer linear programming, generalized task parallelization integrates central aspects of existing parallelization approaches into a single unified framework. Implemented on top of LLVM, the framework seamlessly integrates enabling technologies such as speculation, privatization, and the realization of reductions. Evaluating our implementation on various C programs from different domains, we demonstrate the effectiveness and generality of generalized task parallelization. On a quad-core machine with hyperthreading we achieve speedups of up to 4.6 ×. Kevin Streit, Johannes Doerfert, Clemens Hammacher, Andreas Zeller, Sebastian Hack |
ACM Trans. Archit. Code Optim. | 4 |
| 2015 | Inferring Loop Invariants by Mutation, Dynamic Analysis, and Static CheckingabstractVerifiers that can prove programs correct against their full functional specification require, for programs with loops, additional annotations in the form of loop invariants-properties that hold for every iteration of a loop. We show that significant loop invariant candidates can be generated by systematically mutating postconditions; then, dynamic checking (based on automatically generated tests) weeds out invalid candidates, and static checking selects provably valid ones. We present a framework that automatically applies these techniques to support a program prover, paving the way for fully automatic verification without manually written loop invariants: Applied to 28 methods (including 39 different loops) from various java.util classes (occasionally modified to avoid using Java features not fully supported by the static checker), our DYNAMATE prototype automatically discharged 97 percent of all proof obligations, resulting in automatic complete correctness proofs of 25 out of the 28 methods-outperforming several state-of-the-art tools for fully automatic verification. Juan P. Galeotti, Carlo A. Furia, Eva May, Gordon Fraser 0001, Andreas Zeller |
IEEE Trans. Software Eng. | 5 |
| 2015 | Mining Workflow Models from Web ApplicationsabstractModern business applications predominantly rely on web technology, enabling software vendors to efficiently provide them as a service, removing some of the complexity of the traditional release and update process. While this facilitates shorter, more efficient and frequent release cycles, it requires continuous testing. Having insight into application behavior through explicit models can largely support development, testing and maintenance. Model-based testing allows efficient test creation based on a description of the states the application can be in and the transitions between these states. As specifying behavior models that are precise enough to be executable by a test automation tool is a hard task, an alternative is to extract them from running applications. However, mining such models is a challenge, in particular because one needs to know when two states are equivalent, as well as how to reach that state. We present Process Crawler (ProCrawl), a tool to mine behavior models from web applications that support multi-user workflows. ProCrawl incrementally learns a model by generating program runs and observing the application behavior through the user interface. In our evaluation on several real-world web applications, ProCrawl extracted models that concisely describe the implemented workflows and can be directly used for model-based testing. Matthias Schur, Andreas Roth 0001, Andreas Zeller |
IEEE Trans. Software Eng. | 3 |
| 2014 | Checking app behavior against app descriptionsabstractHow do we know a program does what it claims to do? After clustering Android apps by their description topics, we identify outliers in each cluster with respect to their API usage. A "weather" app that sends messages thus becomes an anomaly; likewise, a "messaging" app would typically not be expected to access the current location. Applied on a set of 22,500+ Android applications, our CHABADA prototype identified several anomalies; additionally, it flagged 56% of novel malware as such, without requiring any known malware patterns. Alessandra Gorla, Ilaria Tavecchia, Florian Gross, Andreas Zeller |
ICSE | 4 |
| 2014 | ProCrawl: mining test models from multi-user web applicationsabstractToday's web applications demand very high release cycles--and consequently, frequent tests. Automating these tests typically requires a behavior model: A description of the states the application can be in, the transitions between these states, and the expected results. Furthermore one needs scripts to make the abstract actions (transitions) in the model executable. However, specifying such behavior models and writing the necessary scripts manually is a hard task. We present ProCrawl (Process Crawler), a tool that automatically mines (extended) finite-state machines from (multi-user) web applications and generates executable test scripts. ProCrawl explores the behavior of the application by systematically generating program runs and observing changes on the application's user interface. The resulting models can be directly used for effective model-based testing, in particular regression testing. Matthias Schur, Andreas Roth 0001, Andreas Zeller |
ISSTA | 3 |
| 2014 | XMLMate: evolutionary XML test generationabstractGenerating system inputs satisfying complex constraints is still a challenge for modern test generators. We present XMLMATE, a search-based test generator specially aimed at XML-based systems. XMLMATE leverages program structure, existing XML schemas, and XML inputs to generate, mutate, recombine, and evolve valid XML inputs. Over a set of seven XML-based systems, XMLMATE detected 31 new unique failures in production code, all triggered by system inputs and thus true alarms. Nikolas Havrikov, Matthias Höschele, Juan P. Galeotti, Andreas Zeller |
SIGSOFT FSE | 4 |
| 2014 | Automated Fixing of Programs with ContractsabstractThis 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 percent 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. Yu Pei 0001, Carlo A. Furia, Martín Nordio, Yi Wei 0001, Bertrand Meyer 0001, Andreas Zeller |
IEEE Trans. Software Eng. | 6 |
| 2013 | It's not a bug, it's a feature: how misclassification impacts bug predictionabstractIn a manual examination of more than 7,000 issue reports from the bug databases of five open-source projects, we found 33.8% of all bug reports to be misclassified - that is, rather than referring to a code fix, they resulted in a new feature, an update to documentation, or an internal refactoring. This misclassification introduces bias in bug prediction models, confusing bugs and features: On average, 39% of files marked as defective actually never had a bug. We discuss the impact of this misclassification on earlier studies and recommend manual data validation for future studies. Kim Herzig, Sascha Just, Andreas Zeller |
ICSE | 3 |
| 2013 | Reconstructing Core DumpsabstractWhen a software failure occurs in the field, it is often difficult to reproduce. Guided by a memory dump at the moment of failure (a “core dump”), our RECORE test case generator searches for a series of events that precisely reconstruct the failure from primitive data. Applied on seven non-trivial Java bugs, RECORE reconstructs the exact failure in five cases without any runtime overhead in production code. Jeremias Rößler, Andreas Zeller, Gordon Fraser 0001, Cristian Zamfir, George Candea |
ICST | 2 |
| 2013 | Predicting defects using change genealogiesabstractWhen analyzing version histories, researchers traditionally focused on single events: e.g. the change that causes a bug, the fix that resolves an issue. Sometimes however, there are indirect effects that count: Changing a module may lead to plenty of follow-up modifications in other places, making the initial change having an impact on those later changes. To this end, we group changes into change genealogies, graphs of changes reflecting their mutual dependencies and influences and develop new metrics to capture the spatial and temporal influence of changes. In this paper, we show that change genealogies offer good classification models when identifying defective source files: With a median precision of 73% and a median recall of 76%, change genealogy defect prediction models not only show better classification accuracies as models based on code complexity, but can also outperform classification models based on code dependency network metrics. Kim Herzig, Sascha Just, Andreas Rau 0001, Andreas Zeller |
ISSRE | 4 |
| 2013 | The impact of tangled code changesabstractWhen interacting with version control systems, developers often commit unrelated or loosely related code changes in a single transaction. When analyzing the version history, such tangled changes will make all changes to all modules appear related, possibly compromising the resulting analyses through noise and bias. In an investigation of five open-source Java projects, we found up to 15% of all bug fixes to consist of multiple tangled changes. Using a multi-predictor approach to untangle changes, we show that on average at least 16.6% of all source files are incorrectly associated with bug reports. We recommend better change organization to limit the impact of tangled changes. Kim Herzig, Andreas Zeller |
MSR | 2 |
| 2013 | Mining behavior models from enterprise web applicationsabstractToday's enterprise web applications demand very high release cycles---and consequently, frequent tests. Automating these tests typically requires a behavior model: A description of the states the application can be in, the transitions between these states, and the expected results. Furthermore one needs scripts to make the abstract actions (transitions) in the model executable. As specifying such behavior models and writing the necessary scripts manually is a hard task, a possible alternative could be to extract them from existing applications. However, mining such models can be a challenge, in particular because one needs to know when two states are equivalent, as well as how to reach that state. We present ProCrawl (PROcess CRAWLer), a generic approach to mine behavior models from (multi-user) enterprise web applications. ProCrawl observes the behavior of the application through its user interface, generates and executes tests to explore unobserved behavior. In our evaluation of three non-trivial web applications (an open-source shop system, an SAP product compliance application, and an open-source conference manager), ProCrawl produces models that precisely abstract application behavior and which can be directly used for effective model-based regression testing. Matthias Schur, Andreas Roth 0001, Andreas Zeller |
ESEC/SIGSOFT FSE | 3 |
| 2013 | Covering and Uncovering Equivalent MutantsabstractSUMMARY Mutation testing measures the adequacy of a test suite by seeding artificial defects (mutations) into a program. If a test suite fails to detect a mutation, it may also fail to detect real defects—and hence should be improved. However, there are also mutations that keep the program semantics unchanged and thus cannot be detected by any test suite. Such equivalent mutants must be weeded outmanually, which is a tedious task. In this paper, we examine whetherchanges in coveragecan be used to detect non‐equivalent mutants: If a mutant changes the coverage of a run, it is more likely to be non‐equivalent. In a sample of 140 manually classified mutations of seven Java programs with 5000 to 100 000 lines of code, we found that (i) the problem is serious and widespread—about 45% of all undetected mutants turned out to be equivalent; (ii) manual classification takes time—about 15 min per mutation; (iii) coverage is a simple, efficient and effective means to identify equivalent mutants—with a classification precision of 75% and a recall of 56%; and (iv) coverage as an equivalence detector is superior to the state of the art, in particular violations of dynamic invariants. Our detectors have been released as part of the open‐source JAVALANCHE framework; the data set is publicly available for replication and extension of experiments. Copyright © 2012 John Wiley & Sons, Ltd. David Schuler, Andreas Zeller |
Softw. Test. Verification Reliab. | 2 |
| 2013 | Checked coverage: an indicator for oracle qualityabstractSUMMARY A known problem of traditional coverage metrics is that they do not assessoracle quality—that is, whether the computation result is actually checked against expectations. In this paper, we introduce the concept ofchecked coverage—the dynamic slice of covered statements that actually influence an oracle. Our experiments on seven open‐source projects show that checked coverage is a sure indicator for oracle quality and even more sensitive than mutation testing. Copyright © 2013 John Wiley & Sons, Ltd. David Schuler, Andreas Zeller |
Softw. Test. Verification Reliab. | 2 |
| 2013 | Where Should We Fix This Bug? A Two-Phase Recommendation ModelabstractTo support developers in debugging and locating bugs, we propose a two-phase prediction model that uses bug reports' contents to suggest the files likely to be fixed. In the first phase, our model checks whether the given bug report contains sufficient information for prediction. If so, the model proceeds to predict files to be fixed, based on the content of the bug report. In other words, our two-phase model "speaks up" only if it is confident of making a suggestion for the given bug report; otherwise, it remains silent. In the evaluation on the Mozilla "Firefox" and "Core" packages, the two-phase model was able to make predictions for almost half of all bug reports; on average, 70 percent of these predictions pointed to the correct files. In addition, we compared the two-phase model with three other prediction models: the Usual Suspects, the one-phase model, and BugScout. The two-phase model manifests the best prediction performance. Dongsun Kim 0001, Yida Tao, Sunghun Kim 0001, Andreas Zeller |
IEEE Trans. Software Eng. | 4 |
| 2012 | Sambamba: A Runtime System for Online Adaptive Parallelization
Kevin Streit, Clemens Hammacher, Andreas Zeller, Sebastian Hack |
CC | 3 |
| 2012 | EXSYST: Search-based GUI testingabstractTest generation tools commonly aim to cover structural artefacts of software, such as either the source code or the user interface. However, focusing only on source code can lead to unrealistic or irrelevant test cases, while only exploring a user interface often misses much of the underlying program behavior. Our EXSYST prototype takes a new approach by exploring user interfaces while aiming to maximize code coverage, thus combining the best of both worlds. Experiments show that such an approach can achieve high code coverage matching and exceeding the code coverage of traditional unit-based test generators; yet, by construction every test case is realistic and relevant, and every detected failure can be shown to be caused by a real sequence of input events. Florian Gross, Gordon Fraser 0001, Andreas Zeller |
ICSE | 3 |
| 2012 | Search-based system testing: high coverage, no false alarmsabstractModern test case generation techniques can automatically achieve high code coverage. If they operate on the unit level, they run the risk of generating inputs infeasible in reality, which, when causing failures, are painful to identify and eliminate. Running a unit test generator on five open source Java programs, we found that all of the 181 reported failures were false failures—that is, indicating a problem in the generated test case rather than the program. By generating test cases at the GUI level, our EXSYST prototype can avoid such false alarms by construction. In our evaluation, it achieves higher coverage than search-based test generators at the unit level; yet, every failure can be shown to be caused by a real sequence of input events. Whenever a system interface is available, we recommend considering search-based system testing as an alternative to avoid false failures. Florian Gross, Gordon Fraser 0001, Andreas Zeller |
ISSTA | 3 |
| 2012 | Isolating failure causes through test case generationabstractManual debugging is driven by experiments—test runs that narrow down failure causes by systematically confirming or excluding individual factors. The BUGEX approach leverages test case generation to systematically isolate such causes from a single failing test run—causes such as properties of execution states or branches taken that correlate with the failure. Identifying these causes allows for deriving conclusions as: “The failure occurs whenever the daylight savings time starts at midnight local time.” In our evaluation, a prototype of BUGEX precisely pinpointed important failure explaining facts for six out of seven real-life bugs. Jeremias Rößler, Gordon Fraser 0001, Andreas Zeller, Alessandro Orso |
ISSTA | 3 |
| 2012 | Fuzzing with Code Fragments
Christian Holler, Kim Herzig, Andreas Zeller |
USENIX Security Symposium | 3 |
| 2012 | Automatically Generating Test Cases for Specification MiningabstractDynamic specification mining observes program executions to infer models of normal program behavior. What makes us believe that we have seen sufficiently many executions? The TAUTOKO (“Tautoko” is the Mãori word for “enhance, enrich.”) typestate miner generates test cases that cover previously unobserved behavior, systematically extending the execution space, and enriching the specification. To our knowledge, this is the first combination of systematic test case generation and typestate mining-a combination with clear benefits: On a sample of 800 defects seeded into six Java subjects, a static typestate verifier fed with enriched models would report significantly more true positives and significantly fewer false positives than the initial models. Valentin Dallmeier, Nikolai Knopp, Christoph Mallon, Gordon Fraser 0001, Sebastian Hack, Andreas Zeller |
IEEE Trans. Software Eng. | 6 |
| 2012 | Mutation-Driven Generation of Unit Tests and OraclesabstractTo assess the quality of test suites, mutation analysis seeds artificial defects (mutations) into programs; a nondetected mutation indicates a weakness in the test suite. We present an automated approach to generate unit tests that detect these mutations for object-oriented classes. This has two advantages: First, the resulting test suite is optimized toward finding defects modeled by mutation operators rather than covering code. Second, the state change caused by mutations induces oracles that precisely detect the mutants. Evaluated on 10 open source libraries, our μtest prototype generates test suites that find significantly more seeded defects than the original manually written test suites. Gordon Fraser 0001, Andreas Zeller |
IEEE Trans. Software Eng. | 2 |
| 2011 | Mining Evolution of Object Usage
Yana Momchilova Mileva, Andrzej Wasylkowski, Andreas Zeller |
ECOOP | 3 |
| 2011 | ICSE 2011 technical briefingsabstractThe better we meet the interest of our community, the better we can help bringing ourselves up-to-date with the latest and greatest in and around software engineering. To this purpose, ICSE 2011 for the first time featured technical briefings, an all-day venue for communicating the state of topics related to software engineering, thus providing an exchange of ideas as well as an introduction to the main conference itself. Gail C. Murphy, Andreas Zeller |
ICSE | 2 |
| 2011 | Exploiting Common Object Usage in Test Case GenerationabstractGenerated test cases are good at systematically exploring paths and conditions in software. However, generated test cases often do not make sense. We adapt test case generation to follow patterns of common object usage, as mined from code examples. Our experiments show that generated tests thus (a) reuse familiar usage patterns, making them easier to understand and (b) focus on common usage, thus respecting implicit preconditions and avoiding meaningless tests. Gordon Fraser 0001, Andreas Zeller |
ICST | 2 |
| 2011 | Assessing Oracle Quality with Checked CoverageabstractA known problem of traditional coverage metrics is that they do not assess oracle quality - that is, whether the computation result is actually checked against expectations. In this paper, we introduce the concept of checked coverage - the dynamic slice of covered statements that actually influence an oracle. Our experiments on seven open-source projects show that checked coverage is a sure indicator for oracle quality - and even more sensitive than mutation testing, its much more demanding alternative. David Schuler, Andreas Zeller |
ICST | 2 |
| 2011 | Mining Cause-Effect-Chains from Version HistoriesabstractSoftware reliability is heavily impacted by soft ware changes. How do these changes relate to each other? By analyzing the impacted method definitions and usages, we determine dependencies between changes, resulting in a change genealogy that captures how earlier changes enable and cause later ones. Model checking this genealogy reveals temporal process patterns that encode key features of the software process such as pending development activities: "Whenever class A is changed, its test case is later updated as well." Such patterns can be validated automatically: In an evaluation of four open source histories, our prototype would recommend pending activities with a precision of 60-72%. Kim Herzig, Andreas Zeller |
ISSRE | 2 |
| 2011 | Minimizing reproduction of software failuresabstractA program fails. What now? Taking a single failing run, we record and minimize the interaction between objects to the set of calls relevant for the failure. The result is a minimal unit test that faithfully reproduces the failure at will: "Out of these 14,628 calls, only 2 are required". In a study of 17 real-life bugs, our JINSI prototype reduced the search space to 13.7% of the dynamic slice or 0.22% of the source code, with only 1--12 calls left to examine. Martin Burger 0002, Andreas Zeller |
ISSTA | 2 |
| 2011 | Generating parameterized unit testsabstractState-of-the art techniques for automated test generation focus on generating executions that cover program behavior. As they do not generate oracles, it is up to the developer to figure out what a test does and how to check the correctness of the observed behavior. In this paper, we present an approach to generate parameterized unit tests—unit tests containing symbolic pre- and postconditions char-acterizing test input and test result. Starting from concrete inputs and results, we use test generation and mutation to systematically generalize pre- and postconditions while simplifying the compu-tation steps. Evaluated on five open source libraries, the generat-ed parameterized unit tests are (a) more expressive, characterizing general rather than concrete behavior; (b) need fewer computation steps, making them easier to understand; and (c) achieve a higher coverage than regular unit tests. Gordon Fraser 0001, Andreas Zeller |
ISSTA | 2 |
| 2011 | Assessing modularity via usage changesabstractGood program design strives towards modularity, that is, limiting the effects of changes to the code. We assess the modularity of software modules by mining change histories: The more a change to a module implementation changes its usage in client code, the lower its modularity. In an early analysis of four different releases of open-source projects, we found that changes can differ greatly in their impact on client code, and that such impact helps in assessing modularity. Yana Momchilova Mileva, Andreas Zeller |
PASTE | 2 |
| 2011 | Search-Based Program Analysis
Andreas Zeller |
SSBSE | 1 |
| 2011 | Mining temporal specifications from object usage
Andrzej Wasylkowski, Andreas Zeller |
Autom. Softw. Eng. | 2 |
| 2011 | Which Crashes Should I Fix First?: Predicting Top Crashes at an Early Stage to Prioritize Debugging EffortsabstractMany popular software systems automatically report failures back to the vendors, allowing developers to focus on the most pressing problems. However, it takes a certain period of time to assess which failures occur most frequently. In an empirical investigation of the Firefox and Thunderbird crash report databases, we found that only 10 to 20 crashes account for the large majority of crash reports; predicting these “top crashes” thus could dramatically increase software quality. By training a machine learner on the features of top crashes of past releases, we can effectively predict the top crashes well before a new release. This allows for quick resolution of the most important crashes, leading to improved user experience and better allocation of maintenance efforts. Dongsun Kim 0001, Sunghun Kim 0001, Andreas Zeller, Shing-Chi Cheung, Sooyong Park |
IEEE Trans. Software Eng. | 4 |
| 2010 | Emerging Faculty Symposium 2010abstractThe challenge and prospect of becoming a new teaching faculty member at a research university is one that most people accept with enthusiasm and energy, but also with some trepidation: • How do I get a position? • How do I get to develop and publish strong research results? • How will I be able to balance the many aspects of work as well as my personal life? • What is my academic path to tenure and beyond? Hausi A. Müller, Andreas Zeller |
ICSE (2) | 2 |
| 2010 | (Un-)Covering Equivalent MutantsabstractMutation testing measures the adequacy of a test suite by seeding artificial defects (mutations) into a program. If a test suite fails to detect a mutation, it may also fail to detect real defects-and hence should be improved. However, there also are mutations which keep the program semantics unchanged and thus cannot be detected by any test suite. Such equivalent mutants must be weeded out manually, which is a tedious task. In this paper, we examine whether changes in coverage can be used to detect non-equivalent mutants: If a mutant changes the coverage of a run, it is more likely to be non-equivalent. In a sample of 140 manually classified mutations of seven Java programs with 5,000 to 100,000 lines of code, we found that: (a) the problem is serious and widespread-about 45% of all undetected mutants turned out to be equivalent; (b) manual classification takes time-about 15 minutes per mutation; (c) coverage is a simple, efficient, and effective means to identify equivalent mutants-with a classification precision of 75% and a recall of 56%; and (d) coverage as an equivalence detector is superior to the state of the art, in particular violations of dynamic invariants. Our detectors have been released as part of the open source JAVALANCHE framework; the data set is publicly available for replication and extension of experiments. David Schuler, Andreas Zeller |
ICST | 2 |
| 2010 | Change Bursts as Defect PredictorsabstractIn software development, every change induces a risk. What happens if code changes again and again in some period of time? In an empirical study on Windows Vista, we found that the features of such change bursts have the highest predictive power for defect-prone components. With precision and recall values well above 90%, change bursts significantly improve upon earlier predictors such as complexity metrics, code churn, or organizational structure. As they only rely on version history and a controlled change process, change bursts are straight-forward to detect and deploy. Nachiappan Nagappan, Andreas Zeller, Thomas Zimmermann 0001, Kim Herzig, Brendan Murphy |
ISSRE | 2 |
| 2010 | Generating test cases for specification miningabstractDynamic specification mining observes program executions to infer models of normal program behavior. What makes us believe that we have seen sufficiently many executions? The TAUTOKO 1 typestate miner generates test cases that cover previously unobserved behavior, systematically extending the execution space and enriching the specification. To our knowledge, this is the first combination of systematic test case generation and specification mining–a combination with clear benefits: On a sample of 800 defects seeded into six Java subjects, a static typestate verifier fed with enriched models would report significantly more true positives, and significantly less false positives than the initial models. Valentin Dallmeier, Nikolai Knopp, Christoph Mallon, Sebastian Hack, Andreas Zeller |
ISSTA | 5 |
| 2010 | Mutation-driven generation of unit tests and oraclesabstractTo assess the quality of test suites, mutation analysis seeds artificial defects (mutations) into programs; a non-detected mutation indicates a weakness in the test suite. We present an automated approach to generate unit tests that detect these mutations for object-oriented classes. This has two advantages: First, the resulting test suite is optimized towards finding defects rather than covering code. Second, the state change caused by mutations induces oracles that precisely detect the mutants. Evaluated on two open source libraries, our muTest prototype generates test suites that find significantly more seeded defects than the original manually written test suites. Gordon Fraser 0001, Andreas Zeller |
ISSTA | 2 |
| 2010 | Learning from 6, 000 projects: lightweight cross-project anomaly detectionabstractReal production code contains lots of knowledge - on the domain, on the architecture, and on the environment. How can we leverage this knowledge in new projects? Using a novel lightweight source code parser, we have mined more than 6,000 open source Linux projects (totaling 200,000,000 lines of code) to obtain 16,000,000 temporal properties reflecting normal interface usage. New projects can be checked against these rules to detect anomalies - that is, code that deviates from the wisdom of the crowds. In a sample of 20 projects, ~25% of the top-ranked anomalies uncovered actual code smells or defects. Natalie Gruska, Andrzej Wasylkowski, Andreas Zeller |
ISSTA | 3 |
| 2010 | Automated fixing of programs with contractsabstractIn program debugging, finding a failing run is only the first step; what about correcting the fault? Can we automate the second task as well as the first? The AutoFix-E tool automatically generates and validates fixes for software faults. The key insights behind AutoFix-E are to rely on contracts present in the software to ensure that the proposed fixes are semantically sound, and on state diagrams using an abstract notion of state based on the boolean queries of a class. Out of 42 faults found by an automatic testing tool in two widely used Eiffel libraries, AutoFix-E proposes successful fixes for 16 faults. Submitting some of these faults to experts shows that several of the proposed fixes are identical or close to fixes proposed by humans. Yi Wei 0001, Yu Pei 0001, Carlo A. Furia, Lucas Serpa Silva, Stefan Buchholz, Bertrand Meyer 0001, Andreas Zeller |
ISSTA | 7 |
| 2010 | Learning from 6, 000 Projects: Mining Models in the LargeabstractModels - abstract and simple descriptions of some artifact - are the backbone of all software engineering activities. While writing models is hard, existing code can serve as a source for abstract descriptions of how software behaves. To infer correct usage, code analysis needs usage examples, though, the more, the better. We have built a lightweight parser that efficiently extracts API usage models from source code - models that can then be used to detect anomalies. Applied on the 200 million lines of code of the Gen too Linux distribution, we would extract more than 15 million API constraints, encoding and abstracting the "wisdom of Linux code". Andreas Zeller |
SCAM | 1 |
| 2010 | Introduction: The Best Papers of ISSTAabstractWe present the best papers of the International Symposium on Software Testing and Analysis (ISSTA) 2008. Barbara G. Ryder, Andreas Zeller |
IEEE Trans. Software Eng. | 2 |
| 2009 | Efficient mutation testing by checking invariant violationsabstractMutation testing measures the adequacy of a test suite by seeding artificial defects (mutations) into a program. If a mutation is not detected by the test suite, this usually means that the test suite is not adequate. However, it may also be that the mutant keeps the program's semantics unchanged-and thus cannot be detected by any test. Such equivalent mutants have to be eliminated manually, which is tedious. David Schuler, Valentin Dallmeier, Andreas Zeller |
ISSTA | 3 |
| 2009 | Generating Fixes from Object Behavior AnomaliesabstractAdvances in recent years have made it possible in some cases to locate a bug (the source of a failure) automatically. But debugging is also about correcting bugs. Can tools do this automatically? The results reported in this paper, from the new PACHIKA tool, suggest that such a goal may be reachable. PACHIKA leverages differences in program behavior to generate program fixes directly. It automatically summarizes executions to object behavior models, determines differences between passing and failing runs, generates possible fixes, and assesses them via the regression test suite. Evaluated on the ASPECTJ bug history, PACHIKA generates a valid fix for 3 out of 18 crashing bugs; each fix pinpoints the bug location and passes the ASPECTJ test suite. Valentin Dallmeier, Andreas Zeller, Bertrand Meyer 0001 |
ASE | 2 |
| 2009 | Mining Temporal Specifications from Object UsageabstractA caller must satisfy the callee's precondition--that is, reach a state in which the callee may be called. Preconditions describe the state that needs to be reached, but not how to reach it. We combine static analysis with model checking to mine Computation Tree Logic (CTL) formulas that describe the operations a parameter goes through: "In parseProperties (String xml), the parameter xml normally stems from getProperties()." Such operational preconditions can be learned from program code, and the code can be checked for their violations. Applied to AspectJ, our Tikanga prototype found 189 violations of operational preconditions, uncovering 9 unique defects and 36 unique code smells-with 44% true positives in the 50 top-ranked violations. Andrzej Wasylkowski, Andreas Zeller |
ASE | 2 |
| 2009 | Mining the Jazz repository: Challenges and opportunitiesabstractBy integrating various development and collaboration tools into one single platform, the Jazz environment offers several opportunities for software repository miners. In particular, Jazz offers full traceability from the initial requirements via work packages and work assignments to the final changes and tests; all these features can be easily accessed and leveraged for better prediction and recommendation systems. In this paper, we share our initial experiences from mining the Jazz repository. We also give a short overview of the retrieved data sets and discuss possible problems of the Jazz repository and the platform itself. Kim Herzig, Andreas Zeller |
MSR | 2 |
| 2009 | Localizing Bugs in Program Executions with Graphical ModelsabstractWe devise a graphical model that supports the process of debugging software by guiding developers to code that is likely to contain defects. The model is trained using execution traces of passing test runs; it reflects the distribution over transitional patterns of code positions. Given a failing test case, the model determines the least likely transitional pattern in the execution trace. The model is designed such that Bayesian inference has a closed-form solution. We evaluate the Bernoulli graph model on data of the software projects AspectJ and Rhino. Laura Dietz, Valentin Dallmeier, Andreas Zeller, Tobias Scheffer |
NIPS | 3 |
| 2009 | Javalanche: efficient mutation testing for JavaabstractTo assess the quality of a test suite, one can use mutation testing - seeding artificial defects (mutations) into the program and checking whether the test suite finds them. Javalanche is an open source framework for mutation testing Java programs with a special focus on automation, efficiency, and effectiveness. In particular, Javalanche assesses the impact of individual mutations to effectively weed out equivalent mutants; it has been demonstrated to work on programs with up to 100,000 lines of code. David Schuler, Andreas Zeller |
ESEC/SIGSOFT FSE | 2 |
| 2009 | Debugging debugging: acm sigsoft impact paper award keynoteabstractImagine some program and a number of changes. If none of these changes is applied ("yesterday"), the program works. If all changes are applied ("today"), the program does not work. Which change is responsible for the failure? This is how the abstract of the paper "Yesterday, my program worked. Today, it does not. Why?" started; a paper which, originally published at ESEC/FSE 1999 [12], introduced the concept of delta debugging, one of the most popular automated debugging techniques. This year, this paper receives the ACM SIGSOFT Impact Paper Award, recognizing its influence in the past ten years. In my keynote, I review the state of debugging then and now, share how it can be hard to be simple, what programmers really need, and what research should do (and should not do) to explore these needs and cater to them. Andreas Zeller |
ESEC/SIGSOFT FSE | 1 |
| 2008 | Predicting Software Metrics at Design Time
Wolfgang Holz, Rahul Premraj, Thomas Zimmermann 0001, Andreas Zeller |
PROFES | 4 |
| 2007 | Predicting vulnerable software componentsabstractWhere do most vulnerabilities occur in software? Our Vulture tool automatically mines existing vulnerability databases and version archives to map past vulnerabilities to components. The resulting ranking of the most vulnerable components is a perfect base for further investigations on what makes components vulnerable. Stephan Neuhaus, Thomas Zimmermann 0001, Christian Holler, Andreas Zeller |
CCS | 4 |
| 2007 | Predicting Faults from Cached HistoryabstractWe analyze the version history of 7 software systems to predict the most fault prone entities and files. The basic assumption is that faults do not occur in isolation, but rather in bursts of several related faults. Therefore, we cache locations that are likely to have faults: starting from the location of a known (fixed) fault, we cache the location itself, any locations changed together with the fault, recently added locations, and recently changed locations. By consulting the cache at the moment a fault is fixed, a developer can detect likely fault-prone locations. This is useful for prioritizing verification and validation resources on the most fault prone files or entities. In our evaluation of seven open source projects with more than 200,000 revisions, the cache selects 10% of the source code files; these files account for 73%-95% of faults - a significant advance beyond the state of the art. Sunghun Kim 0001, Thomas Zimmermann 0001, E. James Whitehead Jr., Andreas Zeller |
ICSE | 4 |
| 2007 | Efficient unit test case minimizationabstractRandomized unit test cases can be very effective in detecting defects. In practice, however, failing test cases often comprise long sequences of method calls that are tiresome to reproduce and debug. We present a combination of static slicing and delta debugging that automatically minimizes the sequence of failure-inducing method calls. In a case study on the EiffelBase library, the strategy minimizes failing unit test cases on average by 96%. Andreas Leitner, Manuel Oriol, Andreas Zeller, Ilinca Ciupa, Bertrand Meyer 0001 |
ASE | 3 |
| 2007 | Detecting object usage anomaliesabstractInteracting with objects often requires following a protocol—for instance, a specific sequence of method calls. These protocols are not always documented, and violations can lead to subtle problems. Our approach takes code examples to automatically infer legal sequences of method calls. The resulting patterns can then be used to detect anomalies such as “Before calling next(), one normally calls hasNext()”. To our knowledge, this is the first fully automatic defect detection approach that learns and checks method call sequences. Our JADET prototype has detected yet undiscovered defects and code smells in five popular open-source programs, including two new defects in ASPECTJ. Andrzej Wasylkowski, Andreas Zeller, Christian Lindig |
ESEC/SIGSOFT FSE | 2 |
| 2006 | Mining metrics to predict component failuresabstractWhat is it that makes software fail? In an empirical study of the post-release defect history of five Microsoft software systems, we found that failure-prone software entities are statistically correlated with code complexity measures. However, there is no single set of complexity metrics that could act as a universally best defect predictor. Using principal component analysis on the code metrics, we built regression models that accurately predict the likelihood of post-release defects for new entities. The approach can easily be generalized to arbitrary projects; in particular, predictors obtained from one project can also be significant for new, similar projects. Nachiappan Nagappan, Thomas Ball 0001, Andreas Zeller |
ICSE | 3 |
| 2006 | Isolating Intrusions by Automatic Experiments
Stephan Neuhaus, Andreas Zeller |
NDSS | 2 |
| 2005 | When Abstraction Fails
Andreas Zeller |
CC | 1 |
| 2005 | Lightweight Defect Localization for Java
Valentin Dallmeier, Christian Lindig, Andreas Zeller |
ECOOP | 3 |
| 2005 | Locating causes of program failuresabstractWhich is the defect that causes a software failure? By comparing the program states of a failing and a passing run, we can identify the state differences that cause the failure. However, these state differences can occur all over the program run. Therefore, we focus in space on those variables and values that are relevant for the failure, and in time on those moments where cause transitions occur---moments where new relevant variables begin being failure causes: "Initially, variable argc was 3; therefore, at shell_sort(), variable [2] was 0, and therefore, the program failed." In our evaluation, cause transitions locate the failure-inducing defect twice as well as the best methods known so far. Holger Cleve, Andreas Zeller |
ICSE | 2 |
| 2005 | HATARI: raising risk awarenessabstractAs a software system evolves, programmers make changes which sometimes lead to problems. The risk of later problems significantly depends on the location of the change. Which are the locations where changes impose the greatest risk? Our HATARI prototype relates a version history (such as CVS) to a bug database (such as BUGZILLA) to detect those locations where changes have been risky in the past. HATARI makes this risk visible for developers by annotating source code with color bars. Furthermore, HATARI provides views to browse through the most risky locations and to analyze the risk history of a particular location. Jacek Sliwerski, Thomas Zimmermann 0001, Andreas Zeller |
ESEC/SIGSOFT FSE | 3 |
| 2005 | Mining Version Histories to Guide Software ChangesabstractWe apply data mining to version histories in order to guide programmers along related changes: "Programmers who changed these functions also changed...." Given a set of existing changes, the mined association rules 1) suggest and predict likely further changes, 2) show up item coupling that is undetectable by program analysis, and 3) can prevent errors due to incomplete changes. After an initial change, our ROSE prototype can correctly predict further locations to be changed; the best predictive power is obtained for changes to existing software. In our evaluation based on the history of eight popular open source projects, ROSE's topmost three suggestions contained a correct location with a likelihood of more than 70 percent. Thomas Zimmermann 0001, Peter Weißgerber, Stephan Diehl 0001, Andreas Zeller |
IEEE Trans. Software Eng. | 4 |
| 2004 | Mining Version Histories to Guide Software ChangesabstractWe apply data mining to version histories in order to guide programmers along related changes: "Programmers who changed these functions also changed. . . ". Given a set of existing changes, such rules (a) suggest and predict likely further changes, (b) show up item coupling that is indetectable by program analysis, and (c) prevent errors due to incomplete changes. After an initial change, our ROSE prototype can correctly predict 26% of further files to be changed - and 15% of the precise functions or variables. The topmost three suggestions contain a correct location with a likelihood of 64%. Thomas Zimmermann 0001, Peter Weißgerber, Stephan Diehl 0001, Andreas Zeller |
ICSE | 4 |
| 2002 | Isolating failure-inducing thread schedulesabstractConsider a multi-threaded application that occasionally fails due to non-determinism. Using the DEJAVU capture/replay tool, it is possible to record the thread schedule and replay the application in a deterministic way. By systematically narrowing down the difference between a thread schedule that makes the program pass and another schedule that makes the program fail, the Delta Debugging approach can pinpoint the error location automatically---namely, the location(s) where a thread switch causes the program to fail. In a case study, Delta Debugging isolated the failure-inducing schedule difference from 3.8 billion differences in only 50 tests. Jong-Deok Choi, Andreas Zeller |
ISSTA | 2 |
| 2002 | Isolating cause-effect chains from computer programsabstractConsider the execution of a failing program as a sequence of program states. Each state induces the following state, up to the failure. Which variables and values of a program state are relevant for the failure? We show how the Delta Debugging algorithm isolates the relevant variables and values by systematically narrowing the state difference between a passing run and a failing run---by assessing the outcome of altered executions to determine wether a change in the program state makes a difference in the test outcome. Applying Delta Debugging to multiple states of the program automatically reveals the cause-effect chain of the failure---that is, the variables and values that caused the failure.In a case study, our prototype implementation successfully isolated the cause-effect chain for a failure of the GNU C compiler: "Initially, the C program to be compiled contained an addition of 1.0; this caused an addition operator in the intermediate RTL representation; this caused a cycle in the RTL tree---and this caused the compiler to crash." Andreas Zeller |
SIGSOFT FSE | 1 |
| 2002 | Simplifying and Isolating Failure-Inducing InputabstractGiven some test case, a program fails. Which circumstances of the test case are responsible for the particular failure? The delta debugging algorithm generalizes and simplifies the failing test case to a minimal test case that still produces the failure. It also isolates the difference between a passing and a failing test case. In a case study, the Mozilla Web browser crashed after 95 user actions. Our prototype implementation automatically simplified the input to three relevant user actions. Likewise, it simplified 896 lines of HTML to the single line that caused the failure. The case study required 139 automated test runs or 35 minutes on a 500 MHz PC. Andreas Zeller, Ralf Hildebrandt |
IEEE Trans. Software Eng. | 1 |
| 2000 | Simplifying failure-inducing inputabstractGiven some test case, a program fails. Which part of the test case is responsible for the particular failure? We show how our delta debugging algorithm generalizes and simplifies some failing input to a minimal test case that produces the failure. In a case study, the Mozilla web browser crashed after 95 user actions. Our prototype implementation automatically simplified the input to 3 relevant user actions. Likewise, it simplified 896 lines of HTML to the single line that caused the failure. The case study required 139 automated test runs, or 35 minutes on a 500 MHz PC. Categories and Subject Descriptors D.2.5 [Software Engineering]: Testing and Debugging---debug- ging aids, diagnostics, testing tools, tracing General Terms Automated debugging, combinatorial testing 1. INTRODUCTION Often people who encounter a bug spend a lot of time investigating which changes to the input file will make the bug go away and which changes will not affect it. --- Richard Stallman, Using and Port... Ralf Hildebrandt, Andreas Zeller |
ISSTA | 2 |
| 2000 | Making students read and review codeabstractThe Praktomat system allows students to read, review, and assess each other's programs in order to improve quality and style. After a successful submission, the student can retrieve and review a program of some fellow student selected by Praktomat. After the review is complete, the student may obtain reviews and re-submit improved versions of his program. The reviewing process is independent of grading; the risk of plagiarism is narrowed by personalized assignments and automatic testing of submitted programs. In a survey, more than two thirds of the students affirmed that reading each other's programs improved their program quality; this is also confirmed by statistical data. 1 Introduction How do we teach people how to write programs? By letting them write programs, of course. But how do we teach people how to write good programs? As instructors, we can easily assess the functionality by testing programs. We can also assess the readability by scrutinizing the code. But wouldn't it b... Andreas Zeller |
ITiCSE | 1 |
| 1997 | Unified Versioning Through Feature LogicabstractSoftware configuration management (SCM) suffers from tight coupling between SCM version-ing models and the imposed SCM processes. In order to adapt SCM tools to SCM processes, rather than vice versa, we propose a unified versioning model, the version set model . Version sets denote versions, components, and configurations by feature terms , that is, Boolean terms over ( feature : value )-attributions. Through feature logic , we deduce consistency of abstract configurations as well as features of derived components and describe how features propagate in the SCM process; using feature implications , we integrate change-oriented and version-oriented SCM models. We have implemented the version set model in an SCM system called ICE, for Incremental Configuration Environment . ICE is based on a featured file system (FFS) , where version sets are accessed as virtual files and directories. Using the well-known C preprocessor (CPP) representation, users can view and edit multiple versions simultaneously, while only the differences between versions are stored. It turns out that all major SCM models can be realized and integrated efficiently on top of the FFS, demonstrating the flexible and unifying nature of the version set model. Andreas Zeller, Gregor Snelting |
ACM Trans. Softw. Eng. Methodol. | 1 |
| 1995 | A Unified Version Model for Configuration Managementabstractarticle A unified version model for configuration management Share on Author: Andreas Zeller Technische Universität Braunschweig, Abteilung Softwaretechnologie, Gauβstr. 17, D-38092 Braunschweig/Germany Technische Universität Braunschweig, Abteilung Softwaretechnologie, Gauβstr. 17, D-38092 Braunschweig/GermanyView Profile Authors Info & Claims ACM SIGSOFT Software Engineering NotesVolume 20Issue 4Oct. 1995 pp 151–160https://doi.org/10.1145/222132.222151Online:01 October 1995Publication History 19citation704DownloadsMetricsTotal Citations19Total Downloads704Last 12 Months3Last 6 weeks0 Get Citation AlertsNew Citation Alert added!This alert has been successfully added and will be sent to:You will be notified whenever a record that you have chosen has been cited.To manage your alert preferences, click on the button below.Manage my AlertsNew Citation Alert!Please log in to your account Save to BinderSave to BinderCreate a New BinderNameCancelCreateExport CitationPublisher SiteGet Access Andreas Zeller |
SIGSOFT FSE | 1 |