- Software Testing and Debugging Techniques
- Software Engineering Research
- Logic, programming, and type systems
- Formal Methods in Verification
- Software Reliability and Analysis Research
- Software System Performance and Reliability
- Security and Verification in Computing
- Service-Oriented Architecture and Web Services
- Parallel Computing and Optimization Techniques
- Advanced Data Storage Technologies
- Advanced Software Engineering Methodologies
- Cloud Computing and Resource Management
- Advanced Malware Detection Techniques
- Distributed systems and fault tolerance
- Network Packet Processing and Optimization
- Network Security and Intrusion Detection
- Software-Defined Networks and 5G
- Scientific Computing and Data Management
- Web Data Mining and Analysis
- Web Application Security Vulnerabilities
- Nuclear reactor physics and engineering
- Computational and Text Analysis Methods
- Embedded Systems Design Techniques
- Model-Driven Software Engineering Techniques
- Petri Nets in System Modeling
Indian Institute of Science Bangalore
2013-2023
IBM Research - India
2007
IBM (United States)
2006-2007
University of Wisconsin–Madison
1999-2004
Replication is often used in many distributed systems to provide a higher level of performance, reliability and availability. Lazy replica update protocols, which propagate updates replicas through independent transactions after the original transaction commits, have become popular with database vendors due their superior performance characteristics. However, if lazy protocols are indiscriminately, they can result non-serializable executions. In this paper, we propose two new that guarantee...
Procedure extraction is an important program transformation that can be used to make programs easier understand and maintain, facilitate code reuse, convert "monolithic" modular or object-oriented code. involves the following steps:
Legacy code can often be made more understandable and maintainable by extracting out selected sets of statements to form procedures replacing the extracted with procedure calls. Sets that are noncontiguous and/or include non-local jumps (caused go-tos, breaks, continues, etc.) difficult extract, usually cause previous automatic-extraction algorithms fail or produce poor results. The chief contributions this paper a semantics-preserving algorithm for "difficult" statements, study compares...
Replication is often used in many distributed systems to provide a higher level of performance, reliability and availability. Lazy replica update protocols, which propagate updates replicas through independent transactions after the original transaction commits, have become popular with database vendors due their superior performance characteristics. However, if lazy protocols are indiscriminately, they can result non-serializable executions. In this paper, we propose two new that guarantee...
Null dereferences are a bane of programming in languages such as Java. In this paper we propose sound, demand-driven, inter-procedurally context-sensitive dataflow analysis technique to verify given dereference safe or potentially unsafe. Our uses an abstract lattice formulas find pre-condition at the entry program that null-dereference can occur only if initial state satisfies pre-condition. We use simplified domain formulas, abstracting out integer arithmetic, well unbounded access paths...
Two-player games are a fruitful way to represent and reason about several important synthesis tasks. These tasks include controller (where one asks for given plant such that the controlled satisfies temporal specification), program repair (setting values of variables avoid exceptions), synchronization (adding lock/unlock statements in multi-threaded programs satisfy safety assertions). In all these applications, solution directly corresponds winning strategy players induced game. turn,...
This paper presents an algorithm for reverse engineering semantically sound object-oriented data models from programs written in weakly-typed languages like COBOL. Our inference is based on a novel form of guarded transitive dependence, and improves upon prior semantics-based model algorithms by producing simpler, easier to understand, models, inferring them more efficiently.
We present an algorithm for reverse engineering object-oriented (OO) data models from programs written in weakly-typed languages like Cobol. These models, similar to UML class diagrams, can facilitate a variety of program maintenance and migration activities. Our is based on semantic analysis the program's code, we provide bisimulation-based formalization what it means OO model be correct program.
Web applications are difficult to analyze using code-based tools because data-flow and control-flow through the application occurs via both server-side code client-side pages. Client-side pages typically specified in a scripting language that is different from main language; moreover, generated dynamically scripts. To address these issues we propose static-analysis approach automatically constructs ``model'' of each page given application. A model fragment same as code, which faithfully...
Greybox fuzzing is an automated test-input generation technique that aims to uncover program errors by searching for bug-inducing inputs using a fitness-guided search process. Existing approaches are primarily coverage-based. That is, they regard test input covers new region of code as being fit be retained. However, vulnerability at location may not get exhibited in every execution happens visit this location; only certain executions lead the expose vulnerability. In paper, we introduce...
Creation of large numbers co-existing long-lived isomorphic objects increases the memory footprint applications significantly. In this paper we propose a dynamic-analysis based approach that detects allocation sites create objects, estimates quantitatively savings to be obtained by sharing created at these sites, and also checks whether certain necessary conditions for safely employing object hold. We have implemented our as tool, conducted experiments on several real-life Java benchmarks....
Null dereferences are a bane of programming in languages such as Java. In this paper we propose sound, demand-driven, inter-procedurally context-sensitive dataflow analysis technique to verify given dereference safe or potentially unsafe. Our uses an abstract lattice formulas find pre-condition at the entry program that null-dereference can occur only if initial state satisfies pre-condition. We use simplified domain formulas, abstracting out integer arithmetic, well unbounded access paths...
Object sensitivity analysis is a well-known form of context-sensitive points-to analysis. This parameterized by bound on the names symbolic objects associated with each allocation site. In this paper, we propose novel approach based object that takes as input set client queries, and tries to answer them using an initial round inexpensive uses low object-name length at all sites. For queries are answered unsatisfactorily, then pin points "bad" facts, which ones responsible for imprecision. It...
A number of companies are trying to migrate large monolithic software systems Service Oriented Architectures. common approach do this is first identify and describe desired services (i.e., create a model), then locate portions code within the existing system that implement described services. In paper we detailed case study undertook match model an open-source business application. We systematic methodology used, results exercise, as well several observations throw light on nature problem....
Transaction processing is a key constituent of the IT workload commercial enterprises (e.g., banks, insurance companies). Even today, in many large enterprises, transaction done by legacy "batch" applications, which run offline and process accumulated transactions. Developers acknowledge presence multiple loosely coupled pieces functionality within individual applications. Identifying such (which we call "services") desirable for maintenance evolution these This hard problem, grapple with,...
Legacy applications can be difficult and time-consuming to understand update due the lack of modern abstraction mechanisms in legacy languages, as well gradual deterioration code repeated maintenance activities. We present an approach for reverse engineering process model abstractions from code. Such a provide quick initial understanding application, useful starting point further program exploration. Our takes input user specification interesting events, creates representation (i.e., model)...
Programs that process data reside in files are widely used varied domains, such as banking, healthcare, and web-traffic analysis. Precise static analysis of these programs the context software verification transformation tasks is a challenging problem. Our key insight file-processing can be made more useful if knowledge input file formats available to We propose generic framework able perform any given underlying abstract interpretation on program, while restricting attention program paths...
Context sensitive inter-procedural dataflow analysis is a precise approach for static of programs. It very expensive in its full form. We propose prefix approximation context analysis, wherein the stack used to tag facts. Our technique, which contrast with suffix that has been widely literature, designed be more scalable when applied programs modular structure. describe an instantiation our technique setting classical call-strings analysis. analyzed several large enterprise using...