Edward Aftandilian

dblp:98/5242 · DBLP profile ↗
← Back
8ranked-venue papers
3as first author
0since 2021 · last 2019
—ORCID · none

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

Software engineering, systems software and programming languages · 8 · 3 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
7 papers
Software maintenance and evolution · 27% Debugging and program repair · 19% Program analysis · 17%

Topics — the 17 heaviest of 18, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Debugging and program repair
automated program repair
0.412019
DeepDelta: learning to repair compilation errors · ESEC/SIGSOFT FSE 2019
Compilers and program optimization
code generation
0.412019
DeepDelta: learning to repair compilation errors · ESEC/SIGSOFT FSE 2019
Debugging and program repair › automated program repair
compilation error repair
0.412019
DeepDelta: learning to repair compilation errors · ESEC/SIGSOFT FSE 2019
Software maintenance and evolution
refactoring
0.412019
Type migration in ultra-large-scale codebases · ICSE 2019
Software maintenance and evolution › refactoring
type migration
0.412019
Type migration in ultra-large-scale codebases · ICSE 2019
Software testing
fault detection
0.312017
Detecting argument selection defects · Proc. ACM Program. Lang. 2017
Program analysis
static analysis
0.312017
Detecting argument selection defects · Proc. ACM Program. Lang. 2017
Program analysis
dynamic analysis
0.222011
Asynchronous assertions · OOPSLA 2011
What can the GC compute efficiently?: a language for heap assertions at GC time · OOPSLA 2010
Runtime systems and virtual machines
garbage collection
0.222010
What can the GC compute efficiently?: a language for heap assertions at GC time · OOPSLA 2010
GC assertions: using the garbage collector to check heap properties · PLDI 2009
Software maintenance and evolution › build systems
build failure analysis
0.212014
Programmers' build errors: a case study (at google) · ICSE 2014
Empirical software engineering
mining software repositories
0.212014
Programmers' build errors: a case study (at google) · ICSE 2014
Program verification › dynamic verification › runtime verification
assertion checking
0.112011
Asynchronous assertions · OOPSLA 2011
Concurrent programming
concurrency bugs
0.112011
Asynchronous assertions · OOPSLA 2011
Software maintenance and evolution
software ecosystems
0.112019
Type migration in ultra-large-scale codebases · ICSE 2019
Program analysis
error detection
0.112009
GC assertions: using the garbage collector to check heap properties · PLDI 2009
Requirements engineering and software design › interface design
API design
0.112017
Detecting argument selection defects · Proc. ACM Program. Lang. 2017
Program analysis › static analysis
bug detection
0.012011
Asynchronous assertions · OOPSLA 2011

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

neural machine translation · 0.4mapreduce · 0.4deep neural network · 0.4AST diff · 0.4statistical threshold tuning · 0.3identifier name analysis · 0.3empirical study · 0.2build log analysis · 0.2snapshot consistency · 0.1checking threads · 0.1
YearPublicationVenuePosition
2019 Type migration in ultra-large-scale codebases
abstract
Type migration is a refactoring activity in which an existing type is replaced with another one throughout the source code. Manually performing type migration is tedious as programmers need to find all instances of the type to be migrated, along with its dependencies that propagate over assignment operations, method hierarchies, and subtypes. Existing automated approaches for type migration are not adequate for ultra-large-codebases - they perform an intensive whole-program analysis that does not scale. If we could represent the type structure of the program as graphs, then we could employ a MAPREDUCE parallel and distributed process that scales to hundreds of millions of LOC. We implemented this approach as an IDE-independent tool called T2R, which integrates with most build systems. We evaluated T2R's accuracy, usefulness and scalability on seven open source projects and one proprietary codebase of 300M LOC. T2R generated 130 type migration patches, of which the original developers accepted 98%.
Ameya Ketkar, Ali Mesbah 0001, Davood Mazinanian, Danny Dig, Edward Aftandilian
ICSE5
2019 DeepDelta: learning to repair compilation errors
abstract
Programmers spend a substantial amount of time manually repairing code that does not compile. We observe that the repairs for any particular error class typically follow a pattern and are highly mechanical. We propose a novel approach that automatically learns these patterns with a deep neural network and suggests program repairs for the most costly classes of build-time compilation failures. We describe how we collect all build errors and the human-authored, in-progress code changes that cause those failing builds to transition to successful builds at Google. We generate an AST diff from the textual code changes and transform it into a domain-specific language called Delta that encodes the change that must be made to make the code compile. We then feed the compiler diagnostic information (as source) and the Delta changes that resolved the diagnostic (as target) into a Neural Machine Translation network for training. For the two most prevalent and costly classes of Java compilation errors, namely missing symbols and mismatched method signatures, our system called DeepDelta, generates the correct repair changes for 19,314 out of 38,788 (50%) of unseen compilation errors. The correct changes are in the top three suggested fixes 86% of the time on average.
Ali Mesbah 0001, Andrew C. Rice, Emily Johnston, Nick Glorioso, Edward Aftandilian
ESEC/SIGSOFT FSE5
2017 Detecting argument selection defects
abstract
Identifier names are often used by developers to convey additional information about the meaning of a program over and above the semantics of the programming language itself. We present an algorithm that uses this information to detect argument selection defects, in which the programmer has chosen the wrong argument to a method call in Java programs. We evaluate our algorithm at Google on 200 million lines of internal code and 10 million lines of predominantly open-source external code and find defects even in large, mature projects such as OpenJDK, ASM, and the MySQL JDBC. The precision and recall of the algorithm vary depending on a sensitivity threshold. Higher thresholds increase precision, giving a true positive rate of 85%, reporting 459 true positives and 78 false positives. Lower thresholds increase recall but lower the true positive rate, reporting 2,060 true positives and 1,207 false positives. We show that this is an order of magnitude improvement on previous approaches. By analyzing the defects found, we are able to quantify best practice advice for API design and show that the probability of an argument selection defect increases markedly when methods have more than five arguments.
Andrew C. Rice, Edward Aftandilian, Ciera Jaspan, Emily Johnston, Michael Pradel, Yulissa Arroyo-Paredes
Proc. ACM Program. Lang.2
2014 Programmers' build errors: a case study (at google)
abstract
Building is an integral part of the software development process. However, little is known about the compiler errors that occur in this process. In this paper, we present an empirical study of 26.6 million builds produced during a period of nine months by thousands of developers. We describe the workflow through which those builds are generated, and we analyze failure frequency, compiler error types, and resolution efforts to fix those compiler errors. The results provide insights on how a large organization build process works, and pinpoints errors for which further developer support would be most effective.
Hyunmin Seo, Caitlin Sadowski, Sebastian G. Elbaum, Edward Aftandilian, Robert W. Bowdidge
ICSE4
2012 Building Useful Program Analysis Tools Using an Extensible Java Compiler
abstract
Large software companies need customized tools to manage their source code. These tools are often built in an ad-hoc fashion, using brittle technologies such as regular expressions and home-grown parsers. Changes in the language cause the tools to break. More importantly, these ad-hoc tools often do not support uncommon-but-valid code code patterns. We report our experiences building source-code analysis tools at Google on top of a third-party, open-source, extensible compiler. We describe three tools in use on our Java code base. The first, Strict Java Dependencies, enforces our dependency policy in order to reduce JAR file sizes and testing load. The second, error-prone, adds new error checks to the compilation process and automates repair of those errors at a whole-code base scale. The third, Thindex, reduces the indexing burden for a Java IDE so that it can support Google-sized projects.
Edward Aftandilian, Raluca Sauciuc, Siddharth Priya, Sundaresan Krishnan
SCAM1
2011 Asynchronous assertions
abstract
Assertions are a familiar and widely used bug detection technique. Traditional assertion checking, however, is performed synchronously, imposing its full cost on the runtime of the program. As a result, many useful kinds of checks, such as data structure invariants and heap analyses, are impractical because they lead to extreme slowdowns. We present a solution that decouples assertion evaluation from program execution: assertions are checked asynchronously by separate checking threads while the program continues to execute. Our technique guarantees that asynchronous evaluation always produces the same result as synchronous evaluation, even if the program concurrently modifies the program state. The checking threads evaluate each assertion on a consistent snapshot of the program state as it existed at the moment the assertion started.
Edward Aftandilian, Samuel Z. Guyer, Martin T. Vechev, Eran Yahav
OOPSLA1
2010 What can the GC compute efficiently?: a language for heap assertions at GC time
abstract
We present the DeAL language for heap assertions that are efficiently evaluated during garbage collection time. DeAL is a rich, declarative, logic-based language whose programs are guaranteed to be executable with good whole-heap locality, i.e., within a single traversal over every live object on the heap and a finite neighborhood around each object. As a result, evaluating DeAL programs incurs negligible cost: for simple assertion checking at each garbage collection, the end-to-end execution slowdown is below 2%. DeAL is integrated into Java as a VM extension and we demonstrate its efficiency and expressiveness with several applications and properties from the past literature.
Christoph Reichenbach, Neil Immerman, Yannis Smaragdakis, Edward Aftandilian, Samuel Z. Guyer
OOPSLA4
2009 GC assertions: using the garbage collector to check heap properties
abstract
This paper introduces GC assertions, a system interface that programmers can use to check for errors, such as data structure invariant violations, and to diagnose performance problems, such as memory leaks. GC assertions are checked by the garbage collector, which is in a unique position to gather information and answer questions about the lifetime and connectivity of objects in the heap. By piggybacking on existing garbage collector computations, our system is able to check heap properties with very low overhead -- around 3% of total execution time -- low enough for use in a deployed setting.
Edward Aftandilian, Samuel Z. Guyer
PLDI1