EDBT 2026 Demo / reviewers in the wild / expert
Adrian Nistor
dblp:45/7056
· DBLP profile ↗
8ranked-venue papers
8as first author
0since 2021 · last 2015
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 5 · 5 first-authorSystems, architecture and hardware · 3 · 3 first-authorDatabases, data management, data science and information retrieval · 1 · 1 first-author
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
6 papers |
Debugging and program repair · 37% Concurrent programming · 28% Software testing · 28% | |
| Computer architecture, parallel and distributed computing, and storage systems
2 papers |
Processor architecture and microarchitecture · 100% |
Topics — the 13 heaviest of 15, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Debugging and program repair
fault localization |
0.2 | 1 | 2014 | SunCat: helping developers understand and predict performance problems in smartphone applications · ISSTA 2014 |
Software testing
performance testing |
0.2 | 1 | 2014 | SunCat: helping developers understand and predict performance problems in smartphone applications · ISSTA 2014 |
Debugging and program repair › performance debugging
performance bug detection |
0.2 | 1 | 2013 | Toddler: detecting performance problems via similar memory-access patterns · ICSE 2013 |
Software testing
test generation |
0.1 | 1 | 2012 | Ballerina: Automatic generation and clustering of efficient random unit tests for multithreaded code · ICSE 2012 |
Concurrent programming
determinism |
0.1 | 1 | 2010 | InstantCheck: Checking the Determinism of Parallel Programs Using On-the-Fly Incremental Hashing · MICRO 2010 |
Concurrent programming › concurrency bugs
data races |
0.1 | 1 | 2009 | Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009 |
Concurrent programming › concurrency bug detection
data race detection |
0.1 | 1 | 2009 | Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009 |
Software testing
systematic testing |
0.1 | 1 | 2009 | Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009 |
Concurrent programming › concurrency bugs
thread interleaving |
0.1 | 1 | 2009 | Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009 |
Program analysis
static analysis |
0.1 | 1 | 2015 | CARAMEL: Detecting and Fixing Performance Problems That Have Non-Intrusive Fixes · ICSE (1) 2015 |
Program analysis
dynamic analysis |
0.0 | 1 | 2013 | Toddler: detecting performance problems via similar memory-access patterns · ICSE 2013 |
Concurrent programming
concurrency bug detection |
0.0 | 1 | 2012 | Ballerina: Automatic generation and clustering of efficient random unit tests for multithreaded code · ICSE 2012 |
Processor architecture and microarchitecture › debugging support
race detection hardware |
0.0 | 1 | 2009 | Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009 |
Methods — techniques the papers use, named apart from their topics
profiling · 0.4static analysis · 0.2on-the-fly incremental hashing · 0.2memory-state hashing · 0.2hardware support · 0.2memory access pattern analysis · 0.2random test generation · 0.1clustering · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2015 | CARAMEL: Detecting and Fixing Performance Problems That Have Non-Intrusive FixesabstractPerformance bugs are programming errors that slow down program execution. While existing techniques can detect various types of performance bugs, a crucial and practical aspect of performance bugs has not received the attention it deserves: how likely are developers to fix a performance bug? In practice, fixing a performance bug can have both benefits and drawbacks, and developers fix a performance bug only when the benefits outweigh the drawbacks. Unfortunately, for many performance bugs, the benefits and drawbacks are difficult to assess accurately. This paper presents CARAMEL, a novel static technique that detects and fixes performance bugs that have non-intrusive fixes likely to be adopted by developers. Each performance bug detected by CARAMEL is associated with a loop and a condition. When the condition becomes true during the loop execution, all the remaining computation performed by the loop is wasted. Developers typically fix such performance bugs because these bugs waste computation in loops and have non-intrusive fixes: when some condition becomes true dynamically, just break out of the loop. Given a program, CARAMEL detects such bugs statically and gives developers a potential source-level fix for each bug. We evaluate CARAMEL on real-world applications, including 11 popular Java applications (e.g., Groovy, Log4J, Lucene, Struts, Tomcat, etc) and 4 widely used C/C++ applications (Chromium, GCC, Mozilla, and My SQL). CARAMEL finds 61 new performance bugs in the Java applications and 89 new performance bugs in the C/C++ applications. Based on our bug reports, developers so far have fixed 51 and 65 performance bugs in the Java and C/C++ applications, respectively. Most of the remaining bugs are still under consideration by developers. Adrian Nistor, Po-Chun Chang, Cosmin Radoi, Shan Lu 0001 |
ICSE (1) | 1 |
| 2014 | SunCat: helping developers understand and predict performance problems in smartphone applicationsabstractThe number of smartphones shipped in 2014 will be four times larger than the number of PCs. Compared to PCs, smartphones have limited computing resources, and smartphone applications are more prone to performance problems. Traditionally, developers use profilers to detect performance problems by running applications with relatively large inputs. Unfortunately, for smartphone applications, the developer cannot easily control the input, because smartphone applications interact heavily with the environment. Adrian Nistor, Lenin Ravindranath |
ISSTA | 1 |
| 2013 | Toddler: detecting performance problems via similar memory-access patternsabstractPerformance bugs are programming errors that create significant performance degradation. While developers often use automated oracles for detecting functional bugs, detecting performance bugs usually requires time-consuming, manual analysis of execution profiles. The human effort for performance analysis limits the number of performance tests analyzed and enables performance bugs to easily escape to production. Unfortunately, while profilers can successfully localize slow executing code, profilers cannot be effectively used as automated oracles. This paper presents Toddler, a novel automated oracle for performance bugs, which enables testing for performance bugs to use the well established and automated process of testing for functional bugs. Toddler reports code loops whose computation has repetitive and partially similar memory-access patterns across loop iterations. Such repetitive work is likely unnecessary and can be done faster. We implement Toddler for Java and evaluate it on 9 popular Java codebases. Our experiments with 11 previously known, real-world performance bugs show that Toddler finds these bugs with a higher accuracy than the standard Java profiler. Using Toddler, we also found 42 new bugs in six Java projects: Ant, Google Core Libraries, JUnit, Apache Collections, JDK, and JFreeChart. Based on our bug reports, developers so far fixed 10 bugs and confirmed 6 more as real bugs. Adrian Nistor, Linhai Song, Darko Marinov, Shan Lu 0001 |
ICSE | 1 |
| 2013 | Discovering, reporting, and fixing performance bugsabstractSoftware performance is critical for how users perceive the quality of software products. Performance bugs - programming errors that cause significant performance degradation - lead to poor user experience and low system throughput. Designing effective techniques to address performance bugs requires a deep understanding of how performance bugs are discovered, reported, and fixed. In this paper, we study how performance bugs are discovered, reported to developers, and fixed by developers, and compare the results with those for non-performance bugs. We study performance and non-performance bugs from three popular code bases: Eclipse JDT, Eclipse SWT, and Mozilla. First, we find little evidence that fixing performance bugs has a higher chance to introduce new functional bugs than fixing non-performance bugs, which implies that developers may not need to be over-concerned about fixing performance bugs. Second, although fixing performance bugs is about as error-prone as fixing nonperformance bugs, fixing performance bugs is more difficult than fixing non-performance bugs, indicating that developers need better tool support for fixing performance bugs and testing performance bug patches. Third, unlike many non-performance bugs, a large percentage of performance bugs are discovered through code reasoning, not through users observing the negative effects of the bugs (e.g., performance degradation) or through profiling. The result suggests that techniques to help developers reason about performance, better test oracles, and better profiling techniques are needed for discovering performance bugs. Adrian Nistor, Lin Tan 0001 |
MSR | 1 |
| 2012 | Ballerina: Automatic generation and clustering of efficient random unit tests for multithreaded codeabstractTesting multithreaded code is hard and expensive. A multithreaded unit test creates two or more threads, each executing one or more methods on shared objects of the class under test. Such unit tests can be generated at random, but basic random generation produces tests that are either slow or do not trigger concurrency bugs. Worse, such tests have many false alarms, which require human effort to filter out. We present Ballerina, a novel technique for automated random generation of efficient multithreaded tests that effectively trigger concurrency bugs. Ballerina makes tests efficient by having only two threads, each executing a single, randomly selected method. Ballerina increases chances that such simple parallel code finds bugs by appending it to more complex, randomly generated sequential code. We also propose a clustering technique to reduce the manual effort in inspecting failures of automatically generated multithreaded tests. We evaluate Ballerina on 14 real-world bugs from six popular codebases: Groovy, JDK, JFreeChart, Apache Log4j, Apache Lucene, and Apache Pool. The experiments show that tests generated by Ballerina find bugs on average 2×-10× faster than basic random generation, and our clustering technique reduces the number of inspected failures on average 4×-8×. Using Ballerina, we found three previously unknown bugs, two of which were already confirmed and fixed. Adrian Nistor, Qingzhou Luo, Michael Pradel, Thomas R. Gross, Darko Marinov |
ICSE | 1 |
| 2010 | InstantCheck: Checking the Determinism of Parallel Programs Using On-the-Fly Incremental HashingabstractDeveloping multithreaded programs in shared-memory systems is difficult. One key reason is the nondeterminism of thread interaction, which may result in one code input producing different outputs in different runs. Unfortunately, enforcing determinism by construction typically comes at a performance, hardware, or programmability cost. An alternative is to check during testing whether code is deterministic. This paper presents Instant Check, a novel technique that checks determinism with a very small runtime overhead while requiring only a minor hardware extension. During code testing, Instant-Check can check whether the code under test ends up in a deterministic state in various runs. The idea is to compute a 64-bit hash of the memory state and compare the hashes of different test runs that have the same input. If two runs have different hashes, Instant-Check reports state nondeterminism. For efficient operation, Instant Checkuses on-the-fly incremental hashing in hardware. The hash is kept in a per-core 64-bit register, which trivially supports virtualization, migration, and context switching. We use Instant Check to understand the determinism properties of 17 popular applications, including Sphinx3, PBZip2, PARSEC, and SPLASH-2. Instant Check incurs a negligible average runtime overhead of 0.3% over native testing runs. We also show how using Instant Check programmers can find bugs and discuss other applications of fast memory-state hashing. While using Instant Check, we found a real bug in the widely used PARSEC benchmark. Adrian Nistor, Darko Marinov, Josep Torrellas |
MICRO | 1 |
| 2009 | Light64: lightweight hardware support for data race detection during systematic testing of parallel programsabstractDeveloping and testing parallel code is hard. Even for one given input, a parallel program can have many possible different thread interleavings, which are hard for the programmer to foresee and for a testing tool to cover using stress or random testing. For this reason, a recent trend is to use Systematic Testing, which methodically explores different thread interleavings, while checking for various bugs. Data races are common bugs but, unfortunately, checking for races is often skipped in systematic testers because it introduces substantial runtime overhead if done purely in software. Recently, several techniques for race detection in hardware have been proposed, but they still require significant hardware support. Adrian Nistor, Darko Marinov, Josep Torrellas |
MICRO | 1 |
| 2009 | Optimizing the parallel computation of linear recurrences using compact matrix representations
Adrian Nistor, Wei-Ngan Chin, Tiow Seng Tan, Nicolae Tapus |
J. Parallel Distributed Comput. | 1 |