The objective of this project is to provide a program analysis framework for critiquing API client code in three ways:
- Provide explanation for complex interactions of API elements,
- Provide recommendation for future use of the API,
- Provide criticism for improper use of the API.
To support an API with CriticAL, we need to build a knowledge base of API use rules for the API. The analysis framework associates API use rules to the relevant documentation. More specifically, our analysis is path-and-state-sensitive. The API client code is symbolically executed and the program states are checked against these specified API rules. Users will be presented with the documentation whenever the conditions in the rules are satisfied.
We hypothesize that over time, this process will iteratively guide programmers to evolve a better solution from API. Our initial formative study with a dozen students using the first prototype in a GUI design course indicates that the approach is useful and promising.
A short paper about CriticAL can be found here.
Software developers often fail to respect design intent due to either missing or ignored documentation of intent. SCL (Structural Constraint Language) helps capture and confirm aspects of design intent by using structural constraints on a program model extracted through static analysis. The original designer expresses design intent in terms of constraints on the program model using the SCL language, and the SCL conformance checking tool examines developer code to confirm that the code honors these constraints.
There are several goals for SCL. We want SCL to be as expressive as possible so that it can be used to specify a wide range of constraints. The SCL checker must be efficient, but we are willing to trade performance for stronger analysis. Finally, SCL must have a formal foundation so that on which a reliable checker can be built, and more importantly, users can predict and reason about its behavior.
Copy and Paste (CnP)
Programmers often copy and paste code so that they can reuse existing code to complete a similar task and/or save time. Many times, they modify the pasted code. The objective of the CnP project is to prototype a family of IDE features to track the copy-pasting relationship and facilitate the process of modifying pasted code.
One kind of common modifications to the newly pasted code is renaming all instances of an identifier, such as a variable name, consistently throughout the fragment. It can be tedious to make such modifications manually. Furthermore, when these modifications are done manually, undetected inconsistencies and errors can result in the code. For example, a single instance can be missed and mistakenly not renamed. CReN is a feature that automatically and consistently renames all occurrences of the same identifier when any one of them is being modified in the editor. CReN works on not only copy-pasted code fragments but also arbitrary code regions selected by programmers. Thus, CReN can be viewed as a generalized version of the renaming refactoring currently available in IDEs like Eclipse.
Better Code Completion (BCC)
BCC is a research prototype that is meant to improve one of the most commonly-used IDE features: Code Completion. While research efforts in this area so far have produced alternative approaches to improving Code Completion, little has been done to improve the existing infrastructure as we did.
BCC provides two more sorting mechanisms, type-based and use-count-based, for completion proposals in a statically-typed context (like Java). It also provides the ability to selectively remove proposals that are deemed certainly irrelevant in a particular context. Finally, BCC allows users to group APIs logically in the popup pane.
Equals Checker (EQ)
EQ is a static analysis tool for checking problems related to Object.equals() method in Java. It works in two layers:
- Low level error detection through data flow analysis
- High level semantic errors through model checking
The path based, inter-procedural analysis framework is built on top of SOOT which forms the basis for high-level model generation in Alloy. Using this framework the checker, detects programming errors such as NullPointerException, and ClassCastException and semantic problems related to equivalence relation (reflexivity, symmetry and transitivity) specified in the java.lang.Object. EQ is implemented as an Eclipse plugin and can be installed using update site.
EQ is hosted at sourceforge.
PRESS v2 (Program for Rate Estimation and Statistical Summaries)
PRESS v2 is a software tool that implements a set of domain-specific statistical methods for performance evaluation in biometric authentication. These methods are documented in a book that Dr. Michael E. Schuckers has recently published. PRESS v2 is implemented in Java and AWT/Swing to offer an easy-to-use user experience. PRESS v2 is funded by CITeR, a National Science Foundation (NSF) Industry/University Cooperative Research Center (I/UCRC).