Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data.

Alex Gyori

dblp:129/8214 · DBLP profile ↗
← Back
12ranked-venue papers
6as first author
0since 2021 · last 2018
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 12 · 6 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
8 papers
Software testing · 56% Software maintenance and evolution · 19% Program analysis · 10%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Cloud and datacenter computing · 50% Distributed systems · 50%

Topics — the 20 heaviest of 21, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Software testing
regression testing
0.732018
Evaluating test-suite reduction in real software evolution · ISSTA 2018
Comparing and combining test-suite reduction and regression test selection · ESEC/SIGSOFT FSE 2015
Balancing trade-offs in test-suite reduction · SIGSOFT FSE 2014
Software testing › regression testing
test suite reduction
0.732018
Evaluating test-suite reduction in real software evolution · ISSTA 2018
Comparing and combining test-suite reduction and regression test selection · ESEC/SIGSOFT FSE 2015
Balancing trade-offs in test-suite reduction · SIGSOFT FSE 2014
Software maintenance and evolution › refactoring
automated refactoring
0.322013
Crossing the gap from imperative to functional programming through refactoring · ESEC/SIGSOFT FSE 2013
LAMBDAFICATOR: from imperative to functional programming through automated refactoring · ICSE 2013
Programming languages and type systems
functional programming
0.322013
Crossing the gap from imperative to functional programming through refactoring · ESEC/SIGSOFT FSE 2013
LAMBDAFICATOR: from imperative to functional programming through automated refactoring · ICSE 2013
Software maintenance and evolution
refactoring
0.322013
Crossing the gap from imperative to functional programming through refactoring · ESEC/SIGSOFT FSE 2013
LAMBDAFICATOR: from imperative to functional programming through automated refactoring · ICSE 2013
Software testing › test suite evaluation
test effectiveness evaluation
0.312018
Evaluating test-suite reduction in real software evolution · ISSTA 2018
Cloud and datacenter computing › datacenter operations
datacenter reliability
0.312018
Maelstrom: Mitigating Datacenter-level Disasters by Draining Interdependent Traffic Safely and Efficiently · OSDI 2018
Distributed systems
fault tolerance
0.312018
Maelstrom: Mitigating Datacenter-level Disasters by Draining Interdependent Traffic Safely and Efficiently · OSDI 2018
Software maintenance and evolution
change impact analysis
0.312017
Refining interprocedural change-impact analysis using equivalence relations · ISSTA 2017
Program analysis › static analysis
interprocedural analysis
0.312017
Refining interprocedural change-impact analysis using equivalence relations · ISSTA 2017
Program analysis
static analysis
0.312017
Refining interprocedural change-impact analysis using equivalence relations · ISSTA 2017
Debugging and program repair
fault localization
0.212016
NonDex: a tool for detecting and debugging wrong assumptions on Java API specifications · SIGSOFT FSE 2016
Software testing
test execution
0.212016
NonDex: a tool for detecting and debugging wrong assumptions on Java API specifications · SIGSOFT FSE 2016
Software testing › regression testing
regression test selection
0.212015
Comparing and combining test-suite reduction and regression test selection · ESEC/SIGSOFT FSE 2015
Software testing
test dependency detection
0.212015
Reliable testing: detecting state-polluting tests to prevent test dependency · ISSTA 2015
Software testing › flaky test
test reliability
0.212015
Reliable testing: detecting state-polluting tests to prevent test dependency · ISSTA 2015
Programming languages and type systems
lambda expressions
0.212013
LAMBDAFICATOR: from imperative to functional programming through automated refactoring · ICSE 2013
Software maintenance and evolution
software evolution
0.112018
Evaluating test-suite reduction in real software evolution · ISSTA 2018
Software testing
mutation testing
0.112014
Balancing trade-offs in test-suite reduction · SIGSOFT FSE 2014
Compilers and program optimization
program transformation
0.012013
LAMBDAFICATOR: from imperative to functional programming through automated refactoring · ICSE 2013

Methods — techniques the papers use, named apart from their topics

fault seeding · 0.3empirical study · 0.3program dependence analysis · 0.3equivalence relations · 0.3test execution · 0.2random exploration · 0.2heap access path analysis · 0.2empirical comparison · 0.2dynamic analysis · 0.2empirical evaluation · 0.2
YearPublicationVenuePosition
2018 Evaluating Regression Test Selection Opportunities in a Very Large Open-Source Ecosystem
abstract
Regression testing in very large software ecosystems is notoriously costly, requiring computational resources that even large corporations struggle to cope with. Very large ecosystems contain thousands of rapidly evolving, interconnected projects where client projects transitively depend on library projects. Regression test selection (RTS) reduces regression testing costs by rerunning only tests whose pass/fail behavior may flip after code changes. For single projects, researchers showed that class-level RTS is more effective than lower method-or statement-level RTS. Meanwhile, several very large ecosystems in industry, e.g., at Facebook, Google, and Microsoft, perform project-level RTS, rerunning tests in a changed library and in all its transitive clients. However, there was no previous study of the comparative benefits of class-level and project-level RTS in such ecosystems. We evaluate RTS opportunities in the MAVEN Central open-source ecosystem. There, some popular libraries have up to 924589 clients; in turn, clients can depend on up to 11190 libraries. We sampled 408 popular projects and found that 202 (almost half) cannot update to latest library versions without breaking compilation or tests. If developers want to detect these breakages earlier, they need to run very many tests. We compared four variants of class-level RTS with project-level RTS in MAVEN Central. The results showed that class-level RTS may be an order of magnitude less costly than project-level RTS in very large ecosystems. Specifically, various class-level RTS variants select, on average, 7.8%-17.4% of tests selected by project-level RTS.
Alex Gyori, Owolabi Legunsen, Farah Hariri, Darko Marinov
ISSRE1
2018 Evaluating test-suite reduction in real software evolution
abstract
Test-suite reduction (TSR) speeds up regression testing by removing redundant tests from the test suite, thus running fewer tests in the future builds. To decide whether to use TSR or not, a developer needs some way to predict how well the reduced test suite will detect real faults in the future compared to the original test suite. Prior research evaluated the cost of TSR using only program versions with seeded faults, but such evaluations do not explicitly predict the effectiveness of the reduced test suite in future builds.
August Shi, Alex Gyori, Suleman Mahmood, Peiyuan Zhao, Darko Marinov
ISSTA2
2018 Maelstrom: Mitigating Datacenter-level Disasters by Draining Interdependent Traffic Safely and Efficiently
Kaushik Veeraraghavan, Justin Meza, Scott Michelson, Sankaralingam Panneerselvam, Alex Gyori, Sonia Margulis, Daniel Obenshain, Shruti Padmanabha, Ashish Shah, Yee Jiun Song, Tianyin Xu
OSDI5
2017 Efficient Incrementalized Runtime Checking of Linear Measures on Lists
abstract
We present mechanisms to specify and efficiently check, at runtime, assertions that express structural properties and aggregate measures of dynamically manipulated linkedlist data structures. Checking assertions involving the structure, disjointness, and aggregation measures on lists and list segments typically requires linear or quadratic time in the size of the heap. Our main contribution is an incrementalization instrumentation that tracks properties of data structures dynamically as the program executes and leads to orders of magnitude speedup in assertion checking in many scenarios. Our incrementalization incurs a constant overhead on updates to list structures but enables checking assertions in constant time, independent of the size of the heap. We define a general class of functions on lists, called linear measures, which are amenable to our incrementalization technique. We demonstrate the effectiveness of our technique by showing orders of magnitude speedup in two scenarios: one scenario stemming from assertions at the level of APIs of list-manipulating libraries and the other scenario stemming from providing dynamic detection of security attacks caused by malicious rootkits.
Alex Gyori, Pranav Garg 0001, Edgar Pek, P. Madhusudan
ICST1
2017 Refining interprocedural change-impact analysis using equivalence relations
abstract
Change-impact analysis (CIA) is the task of determining the set of program elements impacted by a program change. Precise CIA has great potential to avoid expensive testing and code reviews for (parts of) changes that are refactorings (semantics-preserving). However most statement-level CIA techniques suffer from imprecision as they do not incorporate the semantics of the change.
Alex Gyori, Shuvendu K. Lahiri, Nimrod Partush
ISSTA1
2016 Detecting Assumptions on Deterministic Implementations of Non-deterministic Specifications
abstract
Some commonly used methods have nondeterministicspecifications, e.g., iterating through a set canreturn the elements in any order. However, non-deterministicspecifications typically have deterministic implementations, e.g.,iterating through two sets constructed in the same way mayreturn their elements in the same order. We use the termADINS code to refer to code that Assumes a DeterministicImplementation of a method with a Non-deterministic Specification. Such ADINS code can behave unexpectedly whenthe implementation changes, even if the specification remainsthe same. Further, ADINS code can lead to flaky tests -- teststhat pass or fail seemingly non-deterministically. We present a simple technique, called NONDEX, for detectingflaky tests due to ADINS code. We implemented NONDEX forJava: we found 31 methods with non-deterministic specificationsin the Java Standard Library, manually built non-deterministicmodels for these methods, and used a modified Java VirtualMachine to explore various non-deterministic choices. We evaluatedNONDEX on 195 open-source projects from GitHub and 72student submissions from a programming homework assignment.NONDEX detected 60 flaky tests in 21 open-source projects and110 flaky tests in 34 student submissions.
August Shi, Alex Gyori, Owolabi Legunsen, Darko Marinov
ICST2
2016 NonDex: a tool for detecting and debugging wrong assumptions on Java API specifications
abstract
We present NonDex, a tool for detecting and debugging wrong assumptions on Java APIs. Some APIs have underdetermined specifications to allow implementations to achieve different goals, e.g., to optimize performance. When clients of such APIs assume stronger-than-specified guarantees, the resulting client code can fail. For example, HashSet’s iteration order is underdetermined, and code assuming some implementation-specific iteration order can fail. NonDex helps to proactively detect and debug such wrong assumptions. NonDex performs detection by randomly exploring different behaviors of underdetermined APIs during test execution. When a test fails during exploration, NonDex searches for the invocation instance of the API that caused the failure. NonDex is open source, well-integrated with Maven, and also runs from the command line. During our experiments with the NonDex Maven plugin, we detected 21 new bugs in eight Java projects from GitHub, and, using the debugging feature of NonDex, we identified the underlying wrong assumptions for these 21 new bugs and 54 previously detected bugs. We opened 13 pull requests; developers already accepted 12, and one project changed the continuous-integration configuration to run NonDex on every push. The demo video is at: https://youtu.be/h3a9ONkC59c
Alex Gyori, Ben Lambeth, August Shi, Owolabi Legunsen, Darko Marinov
SIGSOFT FSE1
2015 Reliable testing: detecting state-polluting tests to prevent test dependency
abstract
Writing reliable test suites for large object-oriented systems is complex and time consuming. One common cause of unreliable test suites are test dependencies that can cause tests to fail unexpectedly, not exposing bugs in the code under test but in the test code itself. Prior research has shown that the main reason for test dependencies is the ``pollution'' of state shared across tests. We propose a technique, called , for finding tests that pollute the shared state. In a nutshell, finds tests that modify some location on the heap shared across tests or on the file system; a subsequent test could fail if it assumes the shared location to have the initial value before the state was modified. To aid in inspecting the pollutions, provides an access path through the heap that leads to the polluted value or the name of the file that was modified. We implemented a prototype tool for Java and evaluated it on NumOfProjects projects, with a total of NumOfTests tests. Diaper reported PollutingTests , and our inspection found that NumOfTPsSpace of those are relevant pollutions that can easily affect other tests.
Alex Gyori, August Shi, Farah Hariri, Darko Marinov
ISSTA1
2015 Comparing and combining test-suite reduction and regression test selection
abstract
Regression testing is widely used to check that changes made to software do not break existing functionality, but regression test suites grow, and running them fully can become costly. Researchers have proposed test-suite reduction and regression test selection as two approaches to reduce this cost by not running some of the tests from the test suite. However, previous research has not empirically evaluated how the two approaches compare to each other, and how well a combination of these approaches performs. We present the first extensive study that compares test-suite reduction and regression test selection approaches individually, and also evaluates a combination of the two approaches. We also propose a new criterion to measure the quality of tests with respect to software changes. Our experiments on 4,793 commits from 17 open-source projects show that regression test selection runs on average fewer tests (by 40.15pp) than test-suite reduction. However, test-suite reduction can have a high loss in fault-detection capability with respect to the changes, whereas a (safe) regression test selection has no loss. The experiments also show that a combination of the two approaches runs even fewer tests (on average 5.34pp) than regression test selection, but these tests still have a loss in fault-detection capability with respect to the changes.
August Shi, Tifany Yung, Alex Gyori, Darko Marinov
ESEC/SIGSOFT FSE3
2014 Balancing trade-offs in test-suite reduction
abstract
Regression testing is an important activity but can get expensive for large test suites. Test-suite reduction speeds up regression testing by identifying and removing redundant tests based on a given set of requirements. Traditional research on test-suite reduction is rather diverse but most commonly shares three properties: (1) requirements are defined by a coverage criterion such as statement coverage; (2) the reduced test suite has to satisfy all the requirements as the original test suite; and (3) the quality of the reduced test suites is measured on the software version on which the reduction is performed. These properties make it hard for test engineers to decide how to use reduced test suites. We address all three properties of traditional test-suite reduction: (1) we evaluate test-suite reduction with requirements defined by killed mutants; (2) we evaluate inadequate reduction that does not require reduced test suites to satisfy all the requirements; and (3) we propose evolution-aware metrics that evaluate the quality of the reduced test suites across multiple software versions. Our evaluations allow a more thorough exploration of trade-offs in test-suite reduction, and our evolution-aware metrics show how the quality of reduced test suites can change after the version where the reduction is performed. We compare the trade-offs among various reductions on 18 projects with a total of 261,235 tests over 3,590 commits and a cumulative history spanning 35 years of development. Our results help test engineers make a more informed decision about balancing size, coverage, and fault-detection loss of reduced test suites.
August Shi, Alex Gyori, Milos Gligoric 0001, Andrey Zaytsev, Darko Marinov
SIGSOFT FSE2
2013 LAMBDAFICATOR: from imperative to functional programming through automated refactoring
abstract
Java 8 introduces two functional features: lambda expressions and functional operations like map or filter that apply a lambda expression over the elements of a Collection. Refactoring existing code to use these new features enables explicit but unobtrusive parallelism and makes the code more succinct. However, refactoring is tedious (it requires changing many lines of code) and error-prone (the programmer must reason about the control-flow, data-flow, and side-effects). Fortunately, these refactorings can be automated. We present LambdaFicator, a tool which automates two refactorings. The first refactoring converts anonymous inner classes to lambda expressions. The second refactoring converts for loops that iterate over Collections to functional operations that use lambda expressions. In 9 open-source projects we have applied these two refactorings 1263 and 1595 times, respectively. The results show that LambdaFicator is useful. A video highlighting the main features can be found at: http://www.youtube.com/watch?v=EIyAflgHVpU.
Lyle Franklin, Alex Gyori, Jan Lahoda, Danny Dig
ICSE2
2013 Crossing the gap from imperative to functional programming through refactoring
abstract
Java 8 introduces two functional features: lambda expressions and functional operations like map or filter that apply a lambda expression over the elements of a Collection. Refactoring existing code to use these new features enables explicit but unobtrusive parallelism and makes the code more succinct. However, refactoring is tedious: it requires changing many lines of code. It is also error-prone: the programmer must reason about the control-, data-flow, and side-effects. Fortunately, refactorings can be automated. We designed and implemented LambdaFicator, a tool which automates two refactorings. The first refactoring converts anonymous inner classes to lambda expressions. The second refactoring converts for loops that iterate over Collections to functional operations that use lambda expressions. Using 9 open-source projects, we have applied these two refactorings 1263 and 1709 times, respectively. The results show that LambdaFicator is useful: (i) it is widely applicable, (ii) it reduces the code bloat, (iii) it increases programmer productivity, and (iv) it is accurate.
Alex Gyori, Lyle Franklin, Danny Dig, Jan Lahoda
ESEC/SIGSOFT FSE1