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. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Aditya Kanade 0001

dblp:61/2636-1 · DBLP profile ↗
← Back
33ranked-venue papers
6as first author
4since 2021 · last 2025
—ORCID · conflict

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

Software engineering, systems software and programming languages · 19 · 5 first-author · 1 since 2021Artificial intelligence and machine learning · 9 · 1 first-author · 3 since 2021Theory of computation · 6 · 1 first-authorGraphics, computer vision, multimedia, augmented reality and games · 4 · 1 since 2021Databases, data management, data science and information retrieval · 2Applied, interdisciplinary, general and emerging computing · 2Human-computer interaction and ubiquitous computing · 1

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
18 papers
Debugging and program repair · 32% Program synthesis and code generation · 21% Concurrent programming · 18%
Network and information security
1 paper
Security and privacy of machine learning · 100%
Artificial intelligence
3 papers
Language models and text generation · 59% Transfer learning and domain adaptation · 22% Efficient and distributed learning · 19%

Topics — the 30 heaviest of 44, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program synthesis and code generation
code generation with language models
1.322023
Grace: Language Models Meet Code Edits · ESEC/SIGSOFT FSE 2023
Monitor-Guided Decoding of Code LMs with Static Analysis of Repository Context · NeurIPS 2023
Debugging and program repair
automated program repair
1.242019
Neural Program Repair by Jointly Learning to Localize and Repair · ICLR (Poster) 2019
Deep Reinforcement Learning for Syntactic Error Repair in Student Programs · AAAI 2019
DeepFix: Fixing Common C Language Errors by Deep Learning · AAAI 2017
Debugging and program repair
fault localization
1.242019
Neural Attribution for Semantic Bug-Localization in Student Programs · NeurIPS 2019
Deep Reinforcement Learning for Syntactic Error Repair in Student Programs · AAAI 2019
DeepFix: Fixing Common C Language Errors by Deep Learning · AAAI 2017
Program analysis
static analysis
0.922023
Monitor-Guided Decoding of Code LMs with Static Analysis of Repository Context · NeurIPS 2023
Static deadlock detection for asynchronous C# programs · PLDI 2017
Program synthesis and code generation › DSL-based synthesis
spreadsheet formula generation
0.812024
FLAME: A Small Language Model for Spreadsheet Formulas · AAAI 2024
Debugging and program repair › automated program repair
neural program repair
0.722019
Neural Program Repair by Jointly Learning to Localize and Repair · ICLR (Poster) 2019
DeepFix: Fixing Common C Language Errors by Deep Learning · AAAI 2017
Program analysis
dynamic analysis
0.532016
P3: partitioned path profiling · ESEC/SIGSOFT FSE 2015
Race detection for Android applications · PLDI 2014
Efficient race detection in the presence of programmatic event loops · ISSTA 2016
Concurrent programming
concurrency bugs
0.522017
Static deadlock detection for asynchronous C# programs · PLDI 2017
Race detection for Android applications · PLDI 2014
Concurrent programming › concurrency bug detection
data race detection
0.422016
Efficient race detection in the presence of programmatic event loops · ISSTA 2016
Race detection for Android applications · PLDI 2014
Natural language and speech › Language models and text generation
pre-trained language model
0.412020
Learning and Evaluating Contextual Embedding of Source Code · ICML 2020
Security and privacy of machine learning
adversarial attack
0.412020
ActiveThief: Model Extraction Using Active Learning and Unannotated Public Data · AAAI 2020
Security and privacy of machine learning
model stealing
0.412020
ActiveThief: Model Extraction Using Active Learning and Unannotated Public Data · AAAI 2020
Security and privacy of machine learning › adversarial attack
transferable adversarial attack
0.412020
ActiveThief: Model Extraction Using Active Learning and Unannotated Public Data · AAAI 2020
Program analysis
code representation learning
0.412020
Learning and Evaluating Contextual Embedding of Source Code · ICML 2020
Empirical software engineering
mining software repositories
0.412020
Learning and Evaluating Contextual Embedding of Source Code · ICML 2020
Computing education › programming education
automated feedback
0.412019
Neural Attribution for Semantic Bug-Localization in Student Programs · NeurIPS 2019
Compilers and program optimization › parsing
syntax error recovery
0.412019
Deep Reinforcement Learning for Syntactic Error Repair in Student Programs · AAAI 2019
Concurrent programming
concurrency analysis
0.312017
Efficient computation of happens-before relation for event-driven programs · ISSTA 2017
Concurrent programming
deadlock detection
0.312017
Static deadlock detection for asynchronous C# programs · PLDI 2017
Concurrent programming › memory models
happens-before relation
0.312017
Efficient computation of happens-before relation for event-driven programs · ISSTA 2017
Natural language and speech › Language models and text generation
code language models
0.312025
NextCoder: Robust Adaptation of Code LMs to Diverse Code Edits · ICML 2025
Machine learning › Transfer learning and domain adaptation
model adaptation
0.312025
NextCoder: Robust Adaptation of Code LMs to Diverse Code Edits · ICML 2025
Concurrent programming
concurrency bug detection
0.212016
Efficient race detection in the presence of programmatic event loops · ISSTA 2016
Machine learning › Efficient and distributed learning › model compression › lightweight neural network
small language models
0.212024
FLAME: A Small Language Model for Spreadsheet Formulas · AAAI 2024
Program analysis › dynamic analysis › profiling
path profiling
0.212015
P3: partitioned path profiling · ESEC/SIGSOFT FSE 2015
Software maintenance and evolution › software reengineering › software modernization › software migration
API migration
0.212014
Mining Unit Tests for Discovery and Migration of Math APIs · ACM Trans. Softw. Eng. Methodol. 2014
Software testing › test generation
automated test generation
0.112010
Representation dependence testing using program inversion · SIGSOFT FSE 2010
Compilers and program optimization › program transformation
program inversion
0.112010
Representation dependence testing using program inversion · SIGSOFT FSE 2010
Electronic design automation › hardware verification and test
hardware verification
0.112009
Generating and Analyzing Symbolic Traces of Simulink/Stateflow Models · CAV 2009
Embedded and real-time systems
model-based design
0.112009
Generating and Analyzing Symbolic Traces of Simulink/Stateflow Models · CAV 2009

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

fine-tuning · 3.3transformer · 2.4synthetic data generation · 1.7sparse projection · 1.7noisy auto-encoding · 1.5masked span prediction · 1.5domain-specific tokenizer · 1.5static analysis · 0.7large language model · 0.7language model decoding · 0.7unannotated public data · 0.4pre-training · 0.4active learning · 0.4BiLSTM · 0.4BERT · 0.4tree convolutional neural network · 0.4neural prediction attribution · 0.4semi-supervised learning · 0.2
YearPublicationVenuePosition
2025 NextCoder: Robust Adaptation of Code LMs to Diverse Code Edits
abstract
Software engineering activities frequently involve edits to existing code. However, contemporary code language models (LMs) lack the ability to handle diverse types of code-edit requirements. In this work, we attempt to overcome this shortcoming through (1) a novel synthetic data generation pipeline and (2) a robust model adaptation algorithm. Starting with seed code examples and diverse editing criteria, our pipeline generates high-quality samples comprising original and modified code, along with natural language instructions in different styles and verbosity. Today’s code LMs come bundled with strong abilities, such as code generation and instruction following, which should not be lost due to fine-tuning. To ensure this, we propose a novel adaptation algorithm, SeleKT, that (a) leverages a dense gradient-based step to identify the weights that are most important for code editing, and (b) does a sparse projection onto the base model to avoid overfitting. Using our approach, we obtain a new series of models NextCoder (adapted from QwenCoder-2.5) that achieves strong results on five code-editing benchmarks, outperforming comparable size models and even several larger ones. We show the generality of our approach on two model families DeepSeekCoder and QwenCoder), compare against other fine-tuning approaches, and demonstrate robustness by showing retention of code generation and general problem-solving abilities post adaptation. We opensource the models, synthetic dataset, and implementation at https://aka.ms/nextcoder.
Tushar Aggarwal, Swayam Singh, Abhijeet Awasthi, Aditya Kanade 0001, Nagarajan Natarajan
ICML4
2024 FLAME: A Small Language Model for Spreadsheet Formulas
abstract
Spreadsheets are a vital tool for end-user data management. Using large language models for formula authoring assistance in these environments can be difficult, as these models are expensive to train and challenging to deploy due to their size (up to billions of parameters). We present FLAME, a transformer-based model trained exclusively on Excel formulas that leverages domain insights to achieve competitive performance while being substantially smaller (60M parameters) and training on two orders of magnitude less data. We curate a training dataset using sketch deduplication, introduce an Excel-specific formula tokenizer, and use domain-specific versions of masked span prediction and noisy auto-encoding as pre-training objectives. We evaluate FLAME on formula repair, formula completion, and similarity-based formula retrieval. FLAME can outperform much larger models, such as the Davinci (175B) and Cushman (12B) variants of Codex and CodeT5 (220M), in 10 of 14 evaluation settings for the repair and completion tasks. For formula retrieval, FLAME outperforms CodeT5, CodeBERT, and GraphCodeBERT.
Harshit Joshi, Abishai Ebenezer, José Cambronero, Sumit Gulwani, Aditya Kanade 0001, Vu Le 0002, Ivan Radicek, Gust Verbruggen
AAAI5
2023 Monitor-Guided Decoding of Code LMs with Static Analysis of Repository Context
abstract
Language models of code (LMs) work well when the surrounding code provides sufficient context. This is not true when it becomes necessary to use types, functionality or APIs defined elsewhere in the repository or a linked library, especially those not seen during training. LMs suffer from limited awareness of such global context and end up hallucinating. Integrated development environments (IDEs) assist developers in understanding repository context using static analysis. We extend this assistance, enjoyed by developers, to LMs. We propose monitor-guided decoding (MGD) where a monitor uses static analysis to guide the decoding. We construct a repository-level dataset PragmaticCode for method-completion in Java and evaluate MGD on it. On models of varying parameter scale, by monitoring for type-consistent object dereferences, MGD consistently improves compilation rates and agreement with ground truth. Further, LMs with fewer parameters, when augmented with MGD, can outperform larger LMs. With MGD, SantaCoder-1.1B achieves better compilation rate and next-identifier match than the much larger text-davinci-003 model. We also conduct a generalizability study to evaluate the ability of MGD to generalize to multiple programming languages (Java, C# and Rust), coding scenarios (e.g., correct number of arguments to method calls), and to enforce richer semantic constraints (e.g., stateful API protocols). Our data and implementation are available at https://github.com/microsoft/monitors4codegen.
Lakshya A. Agrawal, Aditya Kanade 0001, Navin Goyal, Shuvendu K. Lahiri, Sriram K. Rajamani
NeurIPS2
2023 Grace: Language Models Meet Code Edits
abstract
Developers spend a significant amount of time in editing code for a variety of reasons such as bug fixing or adding new features. Designing effective methods to predict code edits has been an active yet challenging area of research due to the diversity of code edits and the difficulty of capturing the developer intent. In this work, we address these challenges by endowing pre-trained large language models (LLMs) with the knowledge of relevant prior associated edits, which we call the Grace (Generation conditioned on Associated Code Edits) method. The generative capability of the LLMs helps address the diversity in code changes and conditioning code generation on prior edits helps capture the latent developer intent. We evaluate two well-known LLMs, codex and CodeT5, in zero-shot and fine-tuning settings respectively. In our experiments with two datasets, Grace boosts the performance of the LLMs significantly, enabling them to generate 29% and 54% more correctly edited code in top-1 suggestions relative to the current state-of-the-art symbolic and neural approaches, respectively.
Priyanshu Gupta, Avishree Khare, Yasharth Bajpai, Saikat Chakraborty 0001, Sumit Gulwani, Aditya Kanade 0001, Arjun Radhakrishna, Gustavo Soares, Ashish Tiwari 0001
ESEC/SIGSOFT FSE6
2020 ActiveThief: Model Extraction Using Active Learning and Unannotated Public Data
abstract
Machine learning models are increasingly being deployed in practice. Machine Learning as a Service (MLaaS) providers expose such models to queries by third-party developers through application programming interfaces (APIs). Prior work has developed model extraction attacks, in which an attacker extracts an approximation of an MLaaS model by making black-box queries to it. We design ActiveThief – a model extraction framework for deep neural networks that makes use of active learning techniques and unannotated public datasets to perform model extraction. It does not expect strong domain knowledge or access to annotated data on the part of the attacker. We demonstrate that (1) it is possible to use ActiveThief to extract deep classifiers trained on a variety of datasets from image and text domains, while querying the model with as few as 10-30% of samples from public datasets, (2) the resulting model exhibits a higher transferability success rate of adversarial examples than prior work, and (3) the attack evades detection by the state-of-the-art model extraction detection method, PRADA.
Soham Pal, Yash Gupta, Aditya Kanade 0001, Shirish K. Shevade, Vinod Ganapathy
AAAI4
2020 Learning and Evaluating Contextual Embedding of Source Code
abstract
Recent research has achieved impressive results on understanding and improving source code by building up on machine-learning techniques developed for natural languages. A significant advancement in natural-language understanding has come with the development of pre-trained contextual embeddings, such as BERT, which can be fine-tuned for downstream tasks with less labeled data and training budget, while achieving better accuracies. However, there is no attempt yet to obtain a high-quality contextual embedding of source code, and to evaluate it on multiple program-understanding tasks simultaneously; that is the gap that this paper aims to mitigate. Specifically, first, we curate a massive, deduplicated corpus of 7.4M Python files from GitHub, which we use to pre-train CuBERT, an open-sourced code-understanding BERT model; and, second, we create an open-sourced benchmark that comprises five classification tasks and one program-repair task, akin to code-understanding tasks proposed in the literature before. We fine-tune CuBERT on our benchmark tasks, and compare the resulting models to different variants of Word2Vec token embeddings, BiLSTM and Transformer models, as well as published state-of-the-art models, showing that CuBERT outperforms them all, even with shorter training, and with fewer labeled examples. Future work on source-code embedding can benefit from reusing our benchmark, and from comparing against CuBERT models as a strong baseline.
Aditya Kanade 0001, Petros Maniatis, Gogul Balakrishnan, Kensen Shi
ICML1
2019 Deep Reinforcement Learning for Syntactic Error Repair in Student Programs
abstract
Novice programmers often struggle with the formal syntax of programming languages. In the traditional classroom setting, they can make progress with the help of real time feedback from their instructors which is often impossible to get in the massive open online course (MOOC) setting. Syntactic error repair techniques have huge potential to assist them at scale. Towards this, we design a novel programming language correction framework amenable to reinforcement learning. The framework allows an agent to mimic human actions for text navigation and editing. We demonstrate that the agent can be trained through self-exploration directly from the raw input, that is, program text itself, without either supervision or any prior knowledge of the formal syntax of the programming language. We evaluate our technique on a publicly available dataset containing 6975 erroneous C programs with typographic errors, written by students during an introductory programming course. Our technique fixes 1699 (24.4%) programs completely and 1310 (18.8%) program partially, outperforming DeepFix, a state-of-the-art syntactic error repair technique, which uses a fully supervised neural machine translation approach.
Aditya Kanade 0001, Shirish K. Shevade
AAAI2
2019 Neural Program Repair by Jointly Learning to Localize and Repair
Marko Vasic, Aditya Kanade 0001, Petros Maniatis, David Bieber, Rishabh Singh
ICLR (Poster)2
2019 Neural Attribution for Semantic Bug-Localization in Student Programs
abstract
Providing feedback is an integral part of teaching. Most open online courses on programming make use of automated grading systems to support programming assignments and give real-time feedback. These systems usually rely on test results to quantify the programs' functional correctness. They return failing tests to the students as feedback. However, students may find it difficult to debug their programs if they receive no hints about where the bug is and how to fix it. In this work, we present NeuralBugLocator, a deep learning based technique, that can localize the bugs in a faulty program with respect to a failing test, without even running the program. At the heart of our technique is a novel tree convolutional neural network which is trained to predict whether a program passes or fails a given test. To localize the bugs, we analyze the trained network using a state-of-the-art neural prediction attribution technique and see which lines of the programs make it predict the test outcomes. Our experiments show that NeuralBugLocator is generally more accurate than two state-of-the-art program-spectrum based and one syntactic difference based bug-localization baselines.
Aditya Kanade 0001, Shirish K. Shevade
NeurIPS2
2018 Active Learning for Efficient Testing of Student Programs
Ishan Rastogi, Aditya Kanade 0001, Shirish K. Shevade
AIED (2)2
2017 DeepFix: Fixing Common C Language Errors by Deep Learning
abstract
The problem of automatically fixing programming errors is a very active research topic in software engineering. This is a challenging problem as fixing even a single error may require analysis of the entire program. In practice, a number of errors arise due to programmer's inexperience with the programming language or lack of attention to detail. We call these common programming errors. These are analogous to grammatical errors in natural languages. Compilers detect such errors, but their error messages are usually inaccurate. In this work, we present an end-to-end solution, called DeepFix, that can fix multiple such errors in a program without relying on any external tool to locate or fix them. At the heart of DeepFix is a multi-layered sequence-to-sequence neural network with attention which is trained to predict erroneous program locations along with the required correct statements. On a set of 6971 erroneous C programs written by students for 93 programming tasks, DeepFix could fix 1881 (27%) programs completely and 1338 (19%) programs partially.
Soham Pal, Aditya Kanade 0001, Shirish K. Shevade
AAAI3
2017 Efficient computation of happens-before relation for event-driven programs
abstract
An emerging style of programming is to use both threads and events to achieve better scalability. The improved scalability comes at the price of increased complexity, as both threads and events can follow non-deterministic schedules. The happens-before (HB) relation captures the space of possible schedules and forms the basis of various concurrency analyses. Improving efficiency of the HB computation can speed up these analyses.
Pallavi Maiya, Aditya Kanade 0001
ISSTA2
2017 Static deadlock detection for asynchronous C# programs
abstract
Asynchronous programming is a standard approach for designing responsive applications. Modern languages such as C# provide async/await primitives for the disciplined use of asynchrony. In spite of this, programs can deadlock because of incorrect use of blocking operations along with non-blocking (asynchronous) operations. While developers are aware of this problem, there is no automated technique to detect deadlocks in asynchronous programs.
Anirudh Santhiar, Aditya Kanade 0001
PLDI2
2016 Efficient race detection in the presence of programmatic event loops
abstract
An event loop is the basic scheduling mechanism for programs that respond to asynchronous events. In some frameworks, only the runtime can spin event loops, while in others, these can also be spun programmatically by event handlers. The latter provides more flexibility and helps improve responsiveness in cases where an event handler must wait for some input, for example, from the user or network. It can do so while spinning an event loop.
Anirudh Santhiar, Shalini Kaleeswaran, Aditya Kanade 0001
ISSTA3
2016 Asynchrony-aware static analysis of Android applications
abstract
Software applications developed for the Android platform are very popular. Due to this, static analysis of these applications has received a lot of attention recently. An Android application is essentially an asynchronous, event-driven program. The Android framework manages the state of the application by invoking callbacks, called lifecycle callbacks, in pre-defined orders. Unfortunately, the existing static analysis techniques treat the callbacks synchronously. Additionally, they do not model all possible orderings of lifecycle callbacks. These may result in unsound analysis results. In this work, we present a precise representation of control flow of Android applications called Android inter-component control flow graph (AICCFG). In this representation, the asynchronous nature of the callbacks is modeled accurately. Further, all interleavings of callbacks of different components of an Android application are modeled in AICCFG. We use this representation to design a typestate analysis of Android applications. Android applications use a rich set of resources such as camera and media player whose safe usage is governed by some state machines. Using the typestate analysis, we can verify whether an application uses a resource safely or not. We have implemented the construction of AICCFG and the typestate analysis in the Soot framework. We have also implemented a variant of typestate analysis which uses the unsound control flow model used commonly in the literature. To compare our AICCFG based analysis with this, we present a benchmark of Android applications called AsyncBench. It comprises applications that use various resources in both safe and unsafe manner. The experiments over this benchmark demonstrate the benefits of our more precise control flow model and the typestate analysis.
Ashish Mishra 0002, Aditya Kanade 0001, Y. N. Srikant
MEMOCODE2
2016 Semi-supervised verified feedback generation
abstract
Students have enthusiastically taken to online programming lessons and contests. Unfortunately, they tend to struggle due to lack of personalized feedback. There is an urgent need of program analysis and repair techniques capable of handling both the scale and variations in student submissions, while ensuring quality of feedback.
Shalini Kaleeswaran, Anirudh Santhiar, Aditya Kanade 0001, Sumit Gulwani
SIGSOFT FSE3
2016 Partial Order Reduction for Event-Driven Multi-threaded Programs
Pallavi Maiya, Aditya Kanade 0001, Rupak Majumdar
TACAS3
2015 Rely/Guarantee Reasoning for Asynchronous Programs
abstract
Asynchronous 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
CONCUR3
2015 P3: partitioned path profiling
abstract
Acyclic path profile is an abstraction of dynamic control flow paths of procedures and has been found to be useful in a wide spectrum of activities. Unfortunately, the runtime overhead of obtaining such a profile can be high, limiting its use in practice. In this paper, we present partitioned path profiling (P3) which runs K copies of the program in parallel, each with the same input but on a separate core, and collects the profile only for a subset of intra-procedural paths in each copy, thereby, distributing the overhead of profiling. P3 identifies “profitable” procedures and assigns disjoint subsets of paths of a profitable procedure to different copies for profiling. To obtain exact execution frequencies of a subset of paths, we design a new algorithm, called PSPP. All paths of an unprofitable procedure are assigned to the same copy. P3 uses the classic Ball-Larus algorithm for profiling unprofitable procedures. Further, P3 attempts to evenly distribute the profiling overhead across the copies. To the best of our knowledge, P3 is the first algorithm for parallel path profiling. We have applied P3 to profile several programs in the SPEC 2006 benchmark. Compared to sequential profiling, P3 substantially reduced the runtime overhead on these programs averaged across all benchmarks. The reduction was 23%, 43% and 56% on average for 2, 4 and 8 cores respectively. P3 also performed better than a coarse-grained approach that treats all procedures as unprofitable and distributes them across available cores. For 2 cores, the profiling overhead of P3 was on average 5% less compared to the coarse-grained approach across these programs. For 4 and 8 cores, it was respectively 18% and 25% less.
Mohammed Afraz, Diptikalyan Saha, Aditya Kanade 0001
ESEC/SIGSOFT FSE3
2015 Non-deterministic transducer models of retransmission protocols over noisy channels
Jay Thakkar, Aditya Kanade 0001
Inf. Process. Lett.2
2014 MintHint: automated synthesis of repair hints
abstract
Being able to automatically repair programs is at the same time a very compelling vision and an extremely challenging task. In this paper, we present MintHint, a novel technique for program repair that is a departure from most of today’s approaches. Instead of trying to fully automate program repair, which is often an unachievable goal, MintHint performs statistical correlation analysis to identify expressions that are likely to occur in the repaired code and generates, using pattern-matching based synthesis, repair hints from these expressions. Intuitively, these hints suggest how to rectify a faulty statement and help developers find a complete, actual repair.
Shalini Kaleeswaran, Varun Tulsian, Aditya Kanade 0001, Alessandro Orso
ICSE3
2014 MUX: algorithm selection for software model checkers
abstract
With the growing complexity of modern day software, software model checking has become a critical technology for ensuring correctness of software. As is true with any promising technology, there are a number of tools for software model checking. However, their respective performance trade-offs are difficult to characterize accurately – making it difficult for practitioners to select a suitable tool for the task at hand. This paper proposes a technique called MUX that addresses the problem of selecting the most suitable software model checker for a given input instance. MUX performs machine learning on a repository of software verification instances. The algorithm selector, synthesized through machine learning, uses structural features from an input instance, comprising a program-property pair, at runtime and determines which tool to use.
Varun Tulsian, Aditya Kanade 0001, Rahul Kumar 0002, Akash Lal, Aditya V. Nori
MSR2
2014 Race detection for Android applications
abstract
Programming environments for smartphones expose a concurrency model that combines multi-threading and asynchronous event-based dispatch. While this enables the development of efficient and feature-rich applications, unforeseen thread interleavings coupled with non-deterministic reorderings of asynchronous tasks can lead to subtle concurrency errors in the applications.
Pallavi Maiya, Aditya Kanade 0001, Rupak Majumdar
PLDI2
2014 Mining Unit Tests for Discovery and Migration of Math APIs
abstract
Today's programming languages are supported by powerful third-party APIs. For a given application domain, it is common to have many competing APIs that provide similar functionality. Programmer productivity therefore depends heavily on the programmer's ability to discover suitable APIs both during an initial coding phase, as well as during software maintenance. The aim of this work is to support the discovery and migration of math APIs. Math APIs are at the heart of many application domains ranging from machine learning to scientific computations. Our approach, called M ath F inder , combines executable specifications of mathematical computations with unit tests (operational specifications) of API methods. Given a math expression, M ath F inder synthesizes pseudo-code comprised of API methods to compute the expression by mining unit tests of the API methods. We present a sequential version of our unit test mining algorithm and also design a more scalable data-parallel version. We perform extensive evaluation of M ath F inder (1) for API discovery , where math algorithms are to be implemented from scratch and (2) for API migration , where client programs utilizing a math API are to be migrated to another API. We evaluated the precision and recall of M ath F inder on a diverse collection of math expressions, culled from algorithms used in a wide range of application areas such as control systems and structural dynamics. In a user study to evaluate the productivity gains obtained by using M ath F inder for API discovery, the programmers who used M ath F inder finished their programming tasks twice as fast as their counterparts who used the usual techniques like web and code search, IDE code completion, and manual inspection of library documentation. For the problem of API migration, as a case study, we used M ath F inder to migrate Weka, a popular machine learning library. Overall, our evaluation shows that M ath F inder is easy to use, provides highly precise results across several math APIs and application domains even with a small number of unit tests per method, and scales to large collections of unit tests.
Anirudh Santhiar, Omesh Pandita, Aditya Kanade 0001
ACM Trans. Softw. Eng. Methodol.3
2013 Discovering Math APIs by Mining Unit Tests
Anirudh Santhiar, Omesh Pandita, Aditya Kanade 0001
FASE3
2012 Static Analysis for Checking Data Format Compatibility of Programs
abstract
Large software systems are developed by composing multiple programs. If the programs manipulate and exchange complex data, such as network packets or files, it is essential to establish that they follow compatible data formats. Most of the complexity of data formats is associated with the headers. In this paper, we address compatibility of programs operating over headers of network packets, files, images, etc. As format specifications are rarely available, we infer the format associated with headers by a program as a set of guarded layouts. In terms of these formats, we define and check compatibility of (a) producer-consumer programs and (b) different versions of producer (or consumer) programs. A compatible producer-consumer pair is free of type mismatches and logical incompatibilities such as the consumer rejecting valid outputs generated by the producer. A backward compatible producer (resp. consumer) is guaranteed to be compatible with consumers (resp. producers) that were compatible with its older version. With our prototype tool, we identified 5 known bugs and 1 potential bug in (a) sender-receiver modules of Linux network drivers of 3 vendors and (b) different versions of a TIFF image library.
Pranavadatta Devaki, Aditya Kanade 0001
FSTTCS2
2010 Representation dependence testing using program inversion
abstract
The definition of a data structure may permit many different concrete representations of the same logical content. A (client) program that accepts such a data structure as input is said to have a representation dependence if its behavior differs for logically equivalent input values. In this paper, we present a methodology and tool for automated testing of clients of a data structure for representation dependence. In the proposed methodology, the developer expresses the logical equivalence by writing a normalization program f that maps each concrete representation to a canonical one. Our solution relies on automatically synthesizing the one-to-many inverse function of f: given an input value x, we can generate multiple test inputs logically equivalent to x by executing the inverse with the canonical value f(x) as input repeatedly. We present an inversion algorithm for restricted classes of normalization programs including programs mapping arrays to arrays in a typical iterative manner. We present a prototype implementation of the algorithm, and demonstrate how our methodology reveals bugs due to representation dependence in open source software such as Open Office and Picasa using the widely used image format TIFF. TIFF is a challenging case study for our approach.
Aditya Kanade 0001, Rajeev Alur, Sriram K. Rajamani, G. Ramalingam
SIGSOFT FSE1
2009 Generating and Analyzing Symbolic Traces of Simulink/Stateflow Models
Aditya Kanade 0001, Rajeev Alur, Franjo Ivancic, S. Ramesh 0002, Sriram Sankaranarayanan 0001, K. C. Shashidhar
CAV1
2009 Validation of GCC optimizers through trace generation
abstract
Abstract The translation validation approach involves establishing semantics preservation of individual compilations. In this paper, we present a novel framework for translation validation of optimizers. We identify a comprehensive set of primitive program transformations that are commonly used in many optimizations. For each primitive, we define soundness conditions that guarantee that the transformation is semantics preserving. This framework of transformations and soundness conditions is independent of any particular compiler implementation and is formalized in PVS. An optimizer is instrumented to generate the trace of an optimization run in terms of the predefined transformation primitives. The validation succeeds if (1) the trace conforms to the optimization and (2) the soundness conditions of the individual transformations in the trace are satisfied. The first step eliminates the need to trust the instrumentation. The soundness conditions are defined in a temporal logic and therefore the second step involves model checking. Thus the scheme is completely automatable. We have applied this approach to several intraprocedural optimizations of RTL intermediate code in GNU Compiler Collection (GCC) v4.1.0, namely, loop invariant code motion, partial redundancy elimination, lazy code motion, code hoisting, and copy and constant propagation for sample programs written in a subset of the C language. The validation does not require information about program analyses performed by GCC. Therefore even though the GCC code base is quite large and complex, instrumentation could be achieved easily. The framework requires an estimated 21 lines of instrumentation code and 140 lines of PVS specifications for every 1000 lines of the GCC code considered for validation. Copyright © 2009 John Wiley & Sons, Ltd.
Aditya Kanade 0001, Amitabha Sanyal, Uday P. Khedker
Softw. Pract. Exp.1
2008 Ranking Automata and Games for Prioritized Requirements
Rajeev Alur, Aditya Kanade 0001, Gera Weiss
CAV2
2008 Symbolic analysis for improving simulation coverage of Simulink/Stateflow models
abstract
Aimed at verifying safety properties and improving simula-tion coverage for hybrid systems models of embedded control software, we propose a technique that combines numerical simulation and symbolic methods for computing state-sets. We consider systems with linear dynamics described in the commercial modeling tool Simulink/Stateflow. Given an ini-tial state x, and a discrete-time simulation trajectory, our method computes a set of initial states that are guaranteed to be equivalent to x, where two initial states are consid-ered to be equivalent if the resulting simulation trajectories contain the same discrete components at each step of the simulation. We illustrate the benefits of our method on two case studies. One case study is a benchmark proposed in the literature for hybrid systems verification and another is a Simulink demo model from Mathworks.
Rajeev Alur, Aditya Kanade 0001, S. Ramesh 0002, K. C. Shashidhar
EMSOFT2
2006 A PVS Based Framework for Validating Compiler Optimizations
abstract
An optimization can be specified as sequential compositions of predefined transformation primitives. For each primitive, we can define soundness conditions which guarantee that the transformation is semantics preserving. An optimization of a program preserves semantics, if all applications of the primitives in the optimization satisfy their respective soundness conditions on the versions of the input program on which they are applied. This scheme does not directly check semantic equivalence of the input and the optimized programs and is therefore amenable to automation. Automating this scheme however requires a trusted framework for simulating transformation primitives and checking their soundness conditions. In this paper, we present the design of such a framework based on PVS. We have used it for specifying and validating several optimizations viz. common subexpression elimination, optimal code placement, lazy code motion, loop invariant code motion, full and partial dead code elimination, etc
Aditya Kanade 0001, Amitabha Sanyal, Uday P. Khedker
SEFM1
2005 Heterogeneous Fixed Points with Application to Points-To Analysis
Aditya Kanade 0001, Uday P. Khedker, Amitabha Sanyal
APLAS1