I joined IBM in 2006, after many years in academia. I received my Ph.D. from the Weizmann Institute of Science, where my thesis topic was dynamic logics for probabilistic programs. I then spent four years at MIT's Artificial Intelligence Laboratory, in the Programmer's Apprentice project, where I was a major participant in the development of the Cake knowledge-representation and reasoning system, and in projects using Cake for intelligent debugging and requirements acquisition. On returning to Israel, I continued my research on automated software engineering, applying AI techniques to solve real problems in software development. Example projects include:
- SIP, a system for intelligent debugging of reactive systems. The execution of the system, expressed as a statechart, is simulated in the Cake reasoning system, enabling SIP to answer "why," "why not," and "what if" questions about the observed behavior.
- A DBA assistant that recommends indexes for relational databases in order to optimize the performance of the most important queries.
- Bogart, a reengineering tool that performs high-quality translation of assembly language programs into portable C. Among other things, Bogart can discover data types and routine interfaces, and recognize control structures. Bogart has been successfully used on large real-scale code, and was used commercially for large Y2K projects involving assembly-language programs.
- Midas, a tool that reengineers database programs originally written for network databases to use embedded SQL. Midas analyzes loops around database access operations to discover filters, aggregative operations, and joins, and folds those into the queries. The result is a shorter program, with more operations performed by the relational DBMS, allowing it to optimize its performance. Midas technology is at the basis of a commercial tool that has been used in the conversion of large-scale programs.
- Jose, a design-by-contract tool for Java using aspect-oriented programming; Crepe, a refactoring tool for Java that refactors contracts together with the code; and Discern, which computes preconditions for legacy Java code.
- StatRec, a tool that extracts statecharts from procedural code.
- In a different domain, Mario, a system that makes automatic decisions about camera behavior when converting from text screenplays into 3D animation. The decisions are based on cinematic principles, using a knowledge-based approach. Mario uses the Cake reasoning system to explore the solution space.
In my consulting jobs, I have performed a range of activities, including writing project proposals, specifications, and design documents, performing design and code reviews, and evaluating investment proposals. Notable implementation projects I was responsible for include a local security system for PCs, a smartcard operating system, and various implementations of cryptographic algorithms in several assembly languages, portable C, and Java.
At IBM Research I led the Painless project, whose goal was to build a coherent set of tools for deep program analysis, including program understanding and program transformation, for various types of legacy systems.
As part of this project, we developed the IBM Fine Slicing Technology, which allows programmers and automated tools to compute program slices with precisely defined boundaries, by ignoring some data and control dependences. The resulting fine slice is executable and extractable. Our Extract Computation refactoring can extact fine slices into separate procedures or methods, removing whatever code is possible from the original location, and adding a call to the extracted code. Among other things, Extract Computation can be used to extract non-contiguous pieces of code, and split loops, including the creation of intermediate data structures to pass information between two or more incarnactions of the loop structure. Our paper "Fine Slicing: Theory and Applications for Computation Extraction," 15th International Conference on Fundamental Approaches to Software Engineering (FASE) 2012, received the EASST award for Best Software Science Paper at ETAPS 2012.
We also developed an auto-fix capability for security vulnerabilities in Java, especially for cases that require code motion, and an Extract Paragraph refactoring for Cobol.
More recently, I have been working on tools for Systems Engineering, including hybrid simulation, flexible queries, requirement formalization, and cognitive diagnosis for major appliances.