In my research, my collaborators and I implemented several research tools and demonstrated them during formal research tool demonstrations at various conferences listed below. All these tools include contributions by my collaborators, including my own Ph.D. advisor, Jonathan Aldrich, as well as my own advisees.
My advisees learn to write program analysis tools that use Abstract Syntax Tree (AST) visitors or dataflow analysis frameworks, and deal with many common issues to program analysis writers, like handling library code, persisting results, and producing meaningful error messages. We also learn in great detail various APIs such as the Eclipse Java AST, Eclipse plugin development, etc.
The following research tools are Eclipse plug-ins and written in Java. They are available, upon request, for research evaluation or use. The tools are listed in reverse chronological order.
ArchDoc: the Eclipse Runtime Perspective
with Andrew Giang
- ArchSummary: compute Most Important Classes MICs, Most Important Methods of a Class C MIMs(C), Most Important Classes Related to a Class MIRCs(C), and Most Important Classes Behind an Interface MCBIs(C), based on information from the abstract runtime structure;
- ArchDoc: an Eclipse perspective that queries information from the abstract runtime structure and presents it to developers in several Eclipse views; breaks up the previously monolithic OOG viewer into multiple Eclipse views and introduces several novel views.
- ArchDoc was formally demonstrated: Giang A. and Abi-Antoun M. Finding the Missing Eclipse Perspective: the Runtime Perspective. In ACM Conference on Systems, Programming, Languages and Applications: Software for Humanity (SPLASH). Tool Demonstration. 2013. [Slides]
with Andrew Giang, Sumukhi Chandrashekar
- Java component: Java framework that supports defining metrics: each metric is a separate class, and generates two sets of CSV files: a set of detailed files for human consumption and a set of terse files that are used as input to a number of R scripts;
- R component: the R scripts load the various CSV files, compute statistics, generate LaTex tables with numbers and generate various plots.
Scoria: Security Constraints On RuntIme
with Radu Vanciu (lead)
- SecOOG: a lightweight wrapper for an OOG extracted by ScoriaX, with a Java API, on which to set security properties, write queries and execute constraints to find security vulnerabilities;
- Packaged in a way that the constraints can be written as JUnit tests.
- ScoriaX and Scoria were formally demonstrated: Vanciu R. and Abi-Antoun M. Finding Architectural Flaws in Android Apps Is Easy. In ACM Conference on Systems, Programming, Languages and Applications: Software for Humanity (SPLASH). Tool Demonstration. 2013. [Slides]
ScoriaX: Static Extraction Analysis
with Radu Vanciu (lead)
- ScoriaX: static analysis to extract different types of communication on a hierarchical abstract object graph: data flow, control flow, and creation, in addition to points-to edges;
- Uses the Crystal static analysis framework and transfer functions.
with Radu Vanciu, Andrew Giang
- MiniAST: a simplified Abstract Syntax Tree (AST) model, independent from the Eclipse AST, to maintain traceability between the OOG and the code and enable writing constraints that query information from the code structure;
- ArchTrace: component to trace from the a MiniAST node to the corresponding Eclipse AST node and lines of code in Eclipse;
- ArchLib: generate Java code skeletons to add annotations to the signatures of library classes.
Tools for Ownership Annotations, Ownership Object Graphs (OOGs)
with Radu Vanciu, Zeyad Hailat
- OOG Metrics: compute metrics on the extracted Ownership Object Graph (OOG);
- Annotation Metrics: compute metrics on the Ownership Domain annotations added to the code;
- ArchDefault: propagate initial annotations based on a user-specified map.
with Jeff Barnes
- A re-implementation of an architectural-level security analysis that follows the STRIDE model using the Acme Architecture Description Language (ADL), by defining a set of component types, connector types, and predicates;
- The main advantages of using an ADL are having a declarative language and the relative ease of extensibility. The main drawback is requiring developers to learn a different language.
- [Link to additional material]
ArchDomJ, ArchCheckJ: annotation system and typechecker
- ArchDomJ: a re-implementation of the ownership domains type system (AliasJava) by Aldrich et al., using Java 1.5 annotations and the Eclipse infrastructure. This implementation also contains additional features such as checking domain links, support for annotating external library code using XML files (AliasXML), among others.
- Requirements: Eclipse
- Initially demonstrated at OOPSLA'06: Abi-Antoun, M. and Aldrich, J. Bringing Ownership Domains to Mainstream Java. OOPSLA Companion, 2006.
- Also demonstrated at ECOOP'07: Abi-Antoun, M. and Aldrich, J. Eclipse Plug-ins for Statically Checking and Visualizing Ownership Domain Annotations, ECOOP Companion, 2007.
ArchRecJ: hierarchical object graph extractor
- ArchRecJ: extracts a hierarchical object graph from Java code with ownership domain annotations.
- The tool uses the annotations to control abstraction by ownership hierarchy, and allows the user to optionally abstract objects in a domain by their types.
- Requirements: Eclipse, ArchDomJ
- Initially demonstrated at OOPSLA'06: Abi-Antoun, M. and Aldrich, J. A Static Analysis for Extracting Runtime Views from Annotated Object-Oriented Code. OOPSLA Companion, 2006.
- Updated version of the tool demonstrated at OOPSLA'08: Abi-Antoun, M. and Aldrich, J. Tool Support for the Static Extraction of Sound Hierarchical Representations of Runtime Object Graphs. OOPSLA Companion, 2008.
ArchConf: architectural conformance checker
The conformance checking tool suite supports the extract-abstract-check methodology:
- ArchRecJ: extract a hierarchical object graph from annotated code;
- ArchCog: abstract an extracted object graph and represent it as a Component-and-Connector architecture (C&C view) in the Acme Architecture Description Language;
- ArchConf: check and display conformance between the built and the designed runtime architectures;
- CodeTraceJ: trace each conformance finding to the corresponding locations in the code;
- Requirements: Eclipse, AcmeStudio, ArchDomJ
- Initially demonstrated at OOPSLA'08: Abi-Antoun, M. and Aldrich, J. Tool Support for Statically Checking the Structural Conformance of an Object-Oriented System to its Runtime Architecture. OOPSLA Companion, 2008.
A walkthrough using the conformance tools is available here.
ArchSynch: architectural synchronizer
- ArchSynch: a tool for differencing and merging two architectural specifications in Acme using structural comparison.
- Collaborators: Nagi Nahas (on the tree-to-tree correction algorithm), David Garlan and Bradley Schmerl (on Acme and Acme Studio)
- Requirements: Eclipse and AcmeStudio
- Demonstrated at ASE'06: Abi-Antoun, M., Aldrich, J., Nahas, N., Schmerl, B. and Garlan, D. Differencing and Merging of Architectural Views. In Proceedings of the 21st IEEE International Conference on Automated Software Engineering (ASE'06), pp. 47–58, 2006. [Aphyds Demo (AVI)][Aphyds Demo (MOV)][Duke's Bank Demo (AVI)][Duke's Bank Demo (MOV)] [DOI]
ArchJ2Acme: Acme and ArchJava synchronizer
- ArchJ2Acme: extract a built architecture from an ArchJava implementation and incrementally synchronize with a designed architecture in Acme.
- Requirements: Eclipse and AcmeStudio
- Initially demonstrated at ICSE'05: Abi-Antoun, M., Aldrich, J., Garlan, D., Schmerl, S., Nahas, N., and Tseng, T. Modeling and Implementing Software Architecture with Acme and ArchJava. ICSE, 2005.
Acme2ArchJ: code generator from Acme to ArchJava
- Acme2ArchJ: generate ArchJava skeleton code from a specification in the Acme Architecture Description Language.
- Collaborators: Tony Tseng
- Requirements: Eclipse and AcmeStudio, an Eclipse plug-in for architectural modeling using Acme
- Initially demonstrated at OOPSLA'04: Aldrich, J., Garlan, D., Schmerl, B., and Tseng, T. Modeling and Implementing Software Architecture with Acme and ArchJava. OOPSLA Companion, 2004.