EDBT 2026 Demo / reviewers in the wild / expert
Filip Niksic
dblp:125/2180
· DBLP profile ↗
13ranked-venue papers
0as first author
3since 2021 · last 2022
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 9 · 1 since 2021Theory of computation · 4Systems, architecture and hardware · 2 · 1 since 2021Databases, data management, data science and information retrieval · 1 · 1 since 2021
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
9 papers |
Software testing · 42% Concurrent programming · 23% Programming languages and type systems · 12% | |
| Computer architecture, parallel and distributed computing, and storage systems
6 papers |
Distributed systems · 56% Parallel and multicore computing · 30% Electronic design automation · 14% | |
| Databases, data mining, and information retrieval
3 papers |
Data stream processing · 100% | |
| Theoretical computer science
2 papers |
Automata and formal languages · 65% Automated reasoning and model checking · 35% |
Topics — the 25 heaviest of 27, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Software testing › system testing
distributed system testing |
0.8 | 2 | 2020 | Testing consensus implementations using communication closure · Proc. ACM Program. Lang. 2020 Randomized testing of distributed systems with probabilistic guarantees · Proc. ACM Program. Lang. 2018 |
Distributed systems
distributed system testing |
0.7 | 2 | 2018 | Randomized testing of distributed systems with probabilistic guarantees · Proc. ACM Program. Lang. 2018 Why is random testing effective for partition tolerance bugs? · Proc. ACM Program. Lang. 2018 |
Data stream processing › stream processing systems
stateful stream processing |
0.6 | 1 | 2022 | Stream processing with dependency-guided synchronization · PPoPP 2022 |
Parallel and multicore computing
parallel programming models |
0.6 | 1 | 2022 | Stream processing with dependency-guided synchronization · PPoPP 2022 |
Debugging and program repair
fault localization |
0.5 | 1 | 2021 | Reducing Time-To-Fix For Fuzzer Bugs · ASE 2021 |
Software testing
fuzzing |
0.5 | 1 | 2021 | Reducing Time-To-Fix For Fuzzer Bugs · ASE 2021 |
Software testing
differential testing |
0.4 | 1 | 2020 | DiffStream: differential output testing for stream processing programs · Proc. ACM Program. Lang. 2020 |
Distributed systems
consensus |
0.4 | 1 | 2020 | Testing consensus implementations using communication closure · Proc. ACM Program. Lang. 2020 |
Software testing
test coverage |
0.4 | 2 | 2018 | Why is random testing effective for partition tolerance bugs? · Proc. ACM Program. Lang. 2018 Hitting Families of Schedules for Asynchronous Programs · CAV (2) 2016 |
Concurrent programming
concurrent data structures |
0.4 | 1 | 2019 | Checking linearizability using hitting families · PPoPP 2019 |
Concurrent programming › atomicity
linearizability |
0.4 | 1 | 2019 | Checking linearizability using hitting families · PPoPP 2019 |
Program verification › concurrent program verification
linearizability verification |
0.4 | 1 | 2019 | Checking linearizability using hitting families · PPoPP 2019 |
Automata and formal languages › petri nets
coverability |
0.4 | 2 | 2014 | An SMT-Based Approach to Coverability Analysis · CAV 2014 Incremental, Inductive Coverability · CAV 2013 |
Concurrent programming
concurrency bug detection |
0.3 | 1 | 2018 | Randomized testing of distributed systems with probabilistic guarantees · Proc. ACM Program. Lang. 2018 |
Software testing
random testing |
0.3 | 1 | 2018 | Randomized testing of distributed systems with probabilistic guarantees · Proc. ACM Program. Lang. 2018 |
Electronic design automation › hardware verification and test
random testing |
0.3 | 1 | 2018 | Why is random testing effective for partition tolerance bugs? · Proc. ACM Program. Lang. 2018 |
Concurrent programming › concurrency models › asynchronous programming
asynchronous programs |
0.2 | 1 | 2016 | Hitting Families of Schedules for Asynchronous Programs · CAV (2) 2016 |
Programming languages and type systems › programming environment
live programming |
0.2 | 1 | 2015 | StriSynth: Synthesis for Live Programming · ICSE (2) 2015 |
Program synthesis and code generation
programming by example |
0.2 | 1 | 2015 | StriSynth: Synthesis for Live Programming · ICSE (2) 2015 |
Program synthesis and code generation › programming by example
string transformation synthesis |
0.2 | 1 | 2015 | StriSynth: Synthesis for Live Programming · ICSE (2) 2015 |
Automated reasoning and model checking
satisfiability modulo theories |
0.2 | 1 | 2014 | An SMT-Based Approach to Coverability Analysis · CAV 2014 |
Parallel and multicore computing › parallel computing
parallel implementation |
0.1 | 1 | 2021 | Synchronization Schemas · PODS 2021 |
Distributed systems
stream processing |
0.1 | 1 | 2020 | DiffStream: differential output testing for stream processing programs · Proc. ACM Program. Lang. 2020 |
Distributed systems
fault tolerance |
0.1 | 1 | 2018 | Why is random testing effective for partition tolerance bugs? · Proc. ACM Program. Lang. 2018 |
Empirical software engineering
end-user programming |
0.1 | 1 | 2015 | StriSynth: Synthesis for Live Programming · ICSE (2) 2015 |
Methods — techniques the papers use, named apart from their topics
series-parallel stream transformers · 1.5domain-specific language · 1.5combinatorial analysis · 1.3online equivalence checking · 1.3synchronization plans · 1.1partial order · 1.1randomized testing · 0.9lossy synchronous execution · 0.9failure bounds · 0.9fuzzing · 0.5automated bisection · 0.5combinatorial search · 0.4empirical study · 0.3SMT solving · 0.2inductive reasoning · 0.2
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2022 | Stream processing with dependency-guided synchronizationabstractReal-time data processing applications with low latency requirements have led to the increasing popularity of stream processing systems. While such systems offer convenient APIs that can be used to achieve data parallelism automatically, they offer limited support for computations that require synchronization between parallel nodes. In this paper, we propose dependency-guided synchronization (DGS), an alternative programming model for stateful streaming computations with complex synchronization requirements. In the proposed model, the input is viewed as partially ordered, and the program consists of a set of parallelization constructs which are applied to decompose the partial order and process events independently. Our programming model maps to an execution model called synchronization plans which supports synchronization between parallel nodes. Our evaluation shows that APIs offered by two widely used systems---Flink and Timely Dataflow---cannot suitably expose parallelism in some representative applications. In contrast, DGS enables implementations with scalable performance, the resulting synchronization plans offer throughput improvements when implemented manually in existing systems, and the programming overhead is small compared to writing sequential code. Konstantinos Kallas, Filip Niksic, Caleb Stanford, Rajeev Alur |
PPoPP | 2 |
| 2021 | Reducing Time-To-Fix For Fuzzer BugsabstractAt Google, fuzzing C/C++ libraries has discovered tens of thousands of security and robustness bugs. However, these bugs are often reported much after they were introduced. Developers are provided only with fault-inducing test inputs and replication instructions that highlight a crash, but additional debugging information may be needed to localize the cause of the bug. Hence, developers need to spend substantial time debugging the code and identifying commits that introduced the bug. In this paper, we discuss our experience with automating a fuzzing-enabled bisection that pinpoints the commit in which the crash first manifests itself. This ultimately reduces the time critical bugs stay open in our code base. We report on our experience over the past year, which shows that developers fix bugs on average 2.23 times faster when aided by this automated analysis. Rui Abreu 0001, Franjo Ivancic, Filip Niksic, Hadi Ravanbakhsh, Ramesh Viswanathan |
ASE | 3 |
| 2021 | Synchronization SchemasabstractWe present a type-theoretic framework for data stream processing for real-time decision making, where the desired computation involves a mix of sequential computation, such as smoothing and detection of peaks and surges, and naturally parallel computation, such as relational operations, key-based partitioning, and map-reduce. Our framework unifies sequential (ordered) and relational (unordered) data models. In particular, we define synchronization schemas as types, and series-parallel streams (SPS) as objects of these types. A synchronization schema imposes a hierarchical structure over relational types that succinctly captures ordering and synchronization requirements among different kinds of data items. Series-parallel streams naturally model objects such as relations, sequences, sequences of relations, sets of streams indexed by key values, time-based and event-based windows, and more complex structures obtained by nesting of these. We introduce series-parallel stream transformers (SPST) as a domain-specific language for modular specification of deterministic transformations over such streams. SPSTs provably specify only monotonic transformations allowing streamability, have a modular structure that can be exploited for correct parallel implementation, and are composable allowing specification of complex queries as a pipeline of transformations. Rajeev Alur, Phillip Hilliard, Zachary G. Ives, Konstantinos Kallas, Konstantinos Mamouras, Filip Niksic, Caleb Stanford, Val Tannen, Anton Xue |
PODS | 6 |
| 2020 | Testing consensus implementations using communication closureabstractLarge scale production distributed systems are difficult to design and test. Correctness must be ensured when processes run asynchronously, at arbitrary rates relative to each other, and in the presence of failures, e.g., process crashes or message losses. These conditions create a huge space of executions that is difficult to explore in a principled way. Current testing techniques focus on systematic or randomized exploration of all executions of an implementation while treating the implemented algorithms as black boxes. On the other hand, proofs of correctness of many of the underlying algorithms often exploit semantic properties that reduce reasoning about correctness to a subset of behaviors. For example, the communication-closure property, used in many proofs of distributed consensus algorithms, shows that every asynchronous execution of the algorithm is equivalent to a lossy synchronous execution, thus reducing the burden of proof to only that subset. In a lossy synchronous execution, processes execute in lock-step rounds, and messages are either received in the same round or lost forever—such executions form a small subset of all asynchronous ones. We formulate the communication-closure hypothesis , which states that bugs in implementations of distributed consensus algorithms will already manifest in lossy synchronous executions and present a testing algorithm based on this hypothesis. We prioritize the search space based on a bound on the number of failures in the execution and the rate at which these failures are recovered. We show that a random testing algorithm based on sampling lossy synchronous executions can empirically find a number of bugs—including previously unknown ones—in production distributed systems such as Zookeeper, Cassandra, and Ratis, and also produce more understandable bug traces. Cezara Dragoi, Constantin Enea, Burcu Kulahcioglu Ozkan, Rupak Majumdar, Filip Niksic |
Proc. ACM Program. Lang. | 5 |
| 2020 | DiffStream: differential output testing for stream processing programsabstractHigh performance architectures for processing distributed data streams, such as Flink, Spark Streaming, and Storm, are increasingly deployed in emerging data-driven computing systems. Exploiting the parallelism afforded by such platforms, while preserving the semantics of the desired computation, is prone to errors, and motivates the development of tools for specification, testing, and verification. We focus on the problem of differential output testing for distributed stream processing systems, that is, checking whether two implementations produce equivalent output streams in response to a given input stream. The notion of equivalence allows reordering of logically independent data items, and the main technical contribution of the paper is an optimal online algorithm for checking this equivalence. Our testing framework is implemented as a library called DiffStream in Flink. We present four case studies to illustrate how our framework can be used to (1) correctly identify bugs in a set of benchmark MapReduce programs, (2) facilitate the development of difficult-to-parallelize high performance applications, and (3) monitor an application for a long period of time with minimal performance overhead. Konstantinos Kallas, Filip Niksic, Caleb Stanford, Rajeev Alur |
Proc. ACM Program. Lang. | 2 |
| 2019 | Checking linearizability using hitting familiesabstractLinearizability is a key correctness property for concurrent data types. Linearizability requires that the behavior of concurrently invoked operations of the data type be equivalent to the behavior in an execution where each operation takes effect at an instantaneous point of time between its invocation and return. Given an execution trace of operations, the problem of verifying its linearizability is NP-complete, and current exhaustive search tools scale poorly. Burcu Kulahcioglu Ozkan, Rupak Majumdar, Filip Niksic |
PPoPP | 3 |
| 2018 | Why is random testing effective for partition tolerance bugs?abstractRandom testing has proven to be an effective way to catch bugs in distributed systems in the presence of network partition faults. This is surprising, as the space of potentially faulty executions is enormous, and the bugs depend on a subtle interplay between sequences of operations and faults. We provide a theoretical justification of the effectiveness of random testing in this context. First, we show a general construction, using the probabilistic method from combinatorics, that shows that whenever a random test covers a fixed coverage goal with sufficiently high probability, a small randomly-chosen set of tests achieves full coverage with high probability. In particular, we show that our construction can give test sets exponentially smaller than systematic enumeration. Second, based on an empirical study of many bugs found by random testing in production distributed systems, we introduce notions of test coverage relating to network partition faults which are effective in finding bugs. Finally, we show using combinatorial arguments that for these notions of test coverage we introduce, we can find a lower bound on the probability that a random test covers a given goal. Our general construction then explains why random testing tools achieve good coverage---and hence, find bugs---quickly. While we formulate our results in terms of network partition faults, our construction provides a step towards rigorous analysis of random testing algorithms, and can be applicable in other scenarios. Rupak Majumdar, Filip Niksic |
Proc. ACM Program. Lang. | 2 |
| 2018 | Randomized testing of distributed systems with probabilistic guaranteesabstractSeveral recently proposed randomized testing tools for concurrent and distributed systems come with theoretical guarantees on their success. The key to these guarantees is a notion of bug depth—the minimum length of a sequence of events sufficient to expose the bug—and a characterization of d -hitting families of schedules—a set of schedules guaranteed to cover every bug of given depth d . Previous results show that in certain cases the size of a d -hitting family can be significantly smaller than the total number of possible schedules. However, these results either assume shared-memory multithreading, or that the underlying partial ordering of events is known statically and has special structure. These assumptions are not met by distributed message-passing applications. In this paper, we present a randomized scheduling algorithm for testing distributed systems. In contrast to previous approaches, our algorithm works for arbitrary partially ordered sets of events revealed online as the program is being executed. We show that for partial orders of width at most w and size at most n (both statically unknown), our algorithm is guaranteed to sample from at most w 2 n d −1 schedules, for every fixed bug depth d . Thus, our algorithm discovers a bug of depth d with probability at least 1 / ( w 2 n d −1 ). As a special case, our algorithm recovers a previous randomized testing algorithm for multithreaded programs. Our algorithm is simple to implement, but the correctness arguments depend on difficult combinatorial results about online dimension and online chain partitioning of partially ordered sets. We have implemented our algorithm in a randomized testing tool for distributed message-passing programs. We show that our algorithm can find bugs in distributed systems such as Zookeeper and Cassandra, and empirically outperforms naive random exploration while providing theoretical guarantees. Burcu Kulahcioglu Ozkan, Rupak Majumdar, Filip Niksic, Mitra Tabaei Befrouei, Georg Weissenbacher |
Proc. ACM Program. Lang. | 3 |
| 2016 | Hitting Families of Schedules for Asynchronous Programs
Dmitry Chistikov 0001, Rupak Majumdar, Filip Niksic |
CAV (2) | 3 |
| 2015 | Rely/Guarantee Reasoning for Asynchronous ProgramsabstractAsynchronous programming has become ubiquitous in smartphone and web application development, as well as in the development of server-side and system applications. Many of the uses of asynchrony can be modeled by extending programming languages with asynchronous procedure calls - procedures not executed immediately, but stored and selected for execution at a later point by a non-deterministic scheduler. Asynchronous calls induce a flow of control that is difficult to reason about, which in turn makes formal verification of asynchronous programs challenging. In response, we take a rely/guarantee approach: Each asynchronous procedure is verified separately with respect to its rely and guarantee predicates; the correctness of the whole program then follows from the natural conditions the rely/guarantee predicates have to satisfy. In this way, the verification of asynchronous programs is modularly decomposed into the more usual verification of sequential programs with synchronous calls. For the sequential program verification we use Hoare-style deductive reasoning, which we demonstrate on several simplified examples. These examples were inspired from programs written in C using the popular Libevent library; they are manually annotated and verified within the state-of-the-art Frama-C platform. Ivan Gavran, Filip Niksic, Aditya Kanade 0001, Rupak Majumdar, Viktor Vafeiadis |
CONCUR | 2 |
| 2015 | StriSynth: Synthesis for Live ProgrammingabstractMotivated by applications in automating repetitive file manipulations, we present a tool called StriSynth, which allows end-users to perform transformations over data using examples. Based on provided examples, our tool automaticallygenerates scripts for non-trivial file manipulations. Although the current focus of StriSynth are file manipulations, it implements a more general string transformation framework. This framework builds on and further extends the functionality of Flash Fill -- a Microsoft Excel extension for string transformations. An accompanying video to this paper is available at the following website http://youtu.be/kkDZphqIdFM. Sumit Gulwani, Mikaël Mayer, Filip Niksic, Ruzica Piskac |
ICSE (2) | 3 |
| 2014 | An SMT-Based Approach to Coverability Analysis
Javier Esparza, Ruslán Ledesma-Garza, Rupak Majumdar, Klara J. Meyer, Filip Niksic |
CAV | 5 |
| 2013 | Incremental, Inductive Coverability
Johannes Kloos, Rupak Majumdar, Filip Niksic, Ruzica Piskac |
CAV | 3 |