Title: Nija Shi
1Reverse Engineering of Design Patterns in Java
Source Code
Ron Olsson olsson_at_cs.ucdavis.edu
- Nija Shi
- shini_at_cs.ucdavis.edu
Department of Computer Science University of
California, Davis
2Outline
- Introduction
- Current Approaches
- A Motivating Example
- Reclassification of the GoF patterns
- Our Initial Prototype PINOT
- Results
- Future Work
3Design Patterns
- What are they?
- A design pattern offers guidelines on when, how,
and why an implementation can be created to solve
a general problem in a particular context. - What are they not?
- Reusable libraries, a framework
4The Singleton Pattern
- Intent Ensure a class has only one instance and
provide a global - point of access to it.
- Example
- public class Singleton
-
- private static Singleton INSTANCE null
- private Singleton()
- public static Singleton getInstance()
-
- if (INSTANCE null)
- INSTANCE new Singleton()
- return INSTANCE
-
-
5Design Patterns
- The Gang of Four (GoF) Patterns
- Based on use, design patterns are categorized
into - Creational Patterns
- Focus on how objects get created
- Structural Patterns
- Focus on the ways to decouple classes by role
- Behavioral Patterns
- Focus on separating object responsibilities based
on polymorphism and delegation
6Design Pattern Examples
7Reverse Engineering
- Why Reverse Engineering?
- Legacy code
- Program understanding
- Source code upgrade/migration
- Insufficient documentation
- Current program understanding tools
- Debugging tools
- Program analysis tools
- CSCOPE, SourceNavigator, SourceInsight, etc.
- Improve current program understanding tools
- Bring program understanding to the design level
8Reverse Engineering Design Patterns
Singleton
Composite
layoutMgr 1
AbstractFactory
1
Strategy
Bridge
9Representative Current Approaches
10Current Approaches
- Can be grouped as the following
- Targeting structural aspects
- Targeting behavioral aspects
11Targeting Structural Aspects
- Method
- Extract structural relationships (inter-class
analysis) - For a pattern, check for certain structural
properties - Drawback
- Relies only on structural relationships, which
are not the only distinction between patterns
12Targeting Behavioral Aspects
- Method
- Narrow down search space
- using inter-class relationships
- Verify behavior in method bodies
- Dynamic analysis
- Machine learning
- Static program analysis
13Targeting Behavioral Aspects
- Drawback
- Dynamic analysis
- Requires good data coverage
- Verifies program behavior but does not verify the
intent - Complicates the task for detecting patterns that
involve concurrency - Machine learning
- Most patterns have concrete definitions, thus
does not solve the fundamental problem.
14A Motivating Example
public class Singleton private static
Singleton instance private Singleton()
public static Singleton getInstance()
- Detecting the
- Singleton Pattern
- As detected by FUJABA
- Common search criteria
- private Singleton()
- private static Singleton instance
- public static Singleton getInstance()
- Problem
- No behavioral analysis on getInstance()
- Solution?
if (instance NULL) instance new
Singleton() return instance
instance new Singleton() return instance
return new Singleton()
15GoF Patterns Reclassified
16Language-provided Patterns
- Patterns provided in the language or library
- The Iterator Pattern
- Provides a way to access the elements of an
aggregate object sequentially without exposing
its underlying representation - In Java
- Enumeration since Java 1.0
- Iterator since Java.1.2
- The for-each loop since Java 1.5
- The Prototype Pattern
- Specify the kinds of objects to create using a
prototypical instance, and create new objects
based on this prototype - In Java
- The clone() method in java.lang.Object
- Pattern Detection
- Recognizing variants in legacy code
17Structure-driven Patterns
- Patterns that are driven by software
architecture. - Can be identified by inter-class relationships
- The Template Method, Composite, Decorator,
Bridge, Adapter, Proxy, Facade Patterns - Inter-class Relationships
- Accessibility
- Declaration
- Inheritance
- Delegation
- Aggregation
- Method invocation
18Behavior-driven Patterns
- Patterns that are driven by system behavior.
- Can be detected using inter-class and program
analyses. - The Singleton, Abstract Factory, Factory Method,
Flyweight, CoR, Visitor, Observer, Mediator,
Strategy, and State patterns. - Program analysis techniques
- Program slicing
- Data-flow analysis
- Call trace analysis
19Domain-specific Patterns
- Patterns applied in a domain-specific context
- The Interpreter Pattern
- Given a language, define a representation for
its grammar along with an interpreter that uses
the representation to interpret sentences in the
language - Commonly based on the Composite and Visitor
patterns - The Command Pattern
- Encapsulate a request as an object, thereby
letting you parameterize clients with different
requests, queue or log requests, and support
undoable operations - A use of combining the Bridge and Composite
patterns to separate user interface and actual
command execution. The Memento pattern is also
used to store a history of executed commands - Pattern Detection
- Requires domain-specific knowledge
20Generic Concepts
- Patterns that are generic concepts
- The Builder Pattern
- Separate the construction of a complex object
from its representation so that the same
construction can create different representation - System bootstrapping pattern, object creation is
not necessary - The Memento Pattern
- Without violating encapsulation, capture and
externalize an objects internal state so that
the object can be restored to this state later - Implementation of memo pool and representation of
states are not specifically defined. - Pattern detection
- Lack implementation trace
21Recognizing the Singleton Pattern
- Structural aspect
- private Singleton()
- private static Singleton instance
- public static Singleton getInstance()
- Behavioral aspect
- Analyze the behavior in getInstance()
- Check if lazy-instantiation is used
- Check if instance is returned
- Slice the method body for instance and analyze
the sliced program
recall
22Recognizing the Singleton Pattern
public class SingleSpoon private
SingleSpoon() private static SingleSpoon
theSpoon public static SingleSpoon
getTheSpoon() if (theSpoon null)
theSpoon new SingleSpoon() return
theSpoon
control-flow graph
23Pattern INference and recOvery Tool
- PINOT
- A fully automated pattern detection tool
- Designed to be faster and more accurate
- How PINOT works
Pattern Instances
Source Code
Text
Pattern Instances
view
XMI
editors
U
M
L
24Implementation Alternatives
- Program analysis tools
- Extract basic information of the source code
- Class, method, and variable declarations
- Class inheritance
- Method invocations, call trace
- Variable refers-to and refers-by relationships
- Parsers
- Extract the abstract syntax tree (AST)
- Compilers
- Extract the AST and provide related symbol tables
and built-in functions operating on the AST
25Pattern INference and recOvery Tool
- Implementation Overview
- A modification of Jikes (open source C Java
compiler) - Analysis using Jikes abstract syntax tree (AST)
and symbol tables - Identifying Structure-driven patterns
- Considers Java language constructs
- Considers commonly used Java utility classes
java.util.Collection and java.util.Iterator - Identifying Behavior-driven patterns
- Applies data-flow analysis, inter-procedural
analysis, alias analysis - PINOT considers related patterns
- Speed up the process of pattern recognition
- E.g., Strategy and State Patterns, CoR and
Decorator, etc.
26Yes. The tool provides recognition for the
pattern and correctly identifies it.
No. The tool provides recognition for the
pattern but fails to identify it.
Blank. The tool does not provide recognition for
the pattern.
27Benchmarks
- Java AWT (GUI toolkit)
- javac (Sun Java Compiler)
- JHotDraw (GUI framework)
- Apache Ant (Build tool)
- Swing (Java Swing library)
- ArgoUML (UML editor tool)
28More Results
29Future Work
- Investigate other domain-specific patterns
- High performance computing (HPC) patterns
- Real-time patterns
- Security patterns
- Extend usability of PINOT
- Formalize pattern definitions
- Visualizing detection results
30PINOT Eclipse
31Conclusion
- Reverse engineering design patterns
- Reclassifying the GoF patterns for
reverse-engineering - About PINOT
- Future work