Maintenance remains by far the most expensive phase of software products. One primary reason is because as a complex software system evolves, its implementation tends to diverge from the intended or documented design models. Such undesirable deviation makes the system hard to understand, modify, and maintain. This thesis presents a hybrid, tool-based approach for increasing confidence in a software system's faithfulness to its design commitments and rules. The approach closely integrates static analysis of structure and dynamic visualization, providing multiple code views and perspectives. I show that the hybrid technique helps monitor implementation evolution for conformance to a wide spectrum of design concerns, including performance, resource usage, design patterns, and cohesion and coupling heuristics. The task of design-implementation congruence assessment involves tracking the changing dynamics of frameworks, design patterns, architectural styles, and subsystems. Unfortunately, current programming tools are relatively oblivious to the rich architectural abstractions in a system. This thesis demonstrates that architecture-oriented visualization, the presentation of system statics and dynamics in terms of its architectural abstractions,
|
3620
|
Design Patterns. Elements of Reusable Object-Oriented Software
– Gamma, Helm, et al.
- 1998
|
|
1015
|
The C Programming Language
– Kernighan, Ritchie
|
|
762
|
Object-Oriented Analysis and Design with Applications (Benjamin Cummings
– Booch
- 1994
|
|
697
|
The Art of Metaobject Protocol
– Kiczales, Rivieres, et al.
- 1991
|
|
465
|
Designing Reusable Classes
– Johnson, Foote
- 1988
|
|
344
|
The Java Language Environment: A White Paper
– Gosling, McGilton
- 1996
|
|
329
|
Context-sensitive interprocedural points-to analysis in the presence of function pointers
– Enami, Ghiya, et al.
- 1994
|
|
319
|
Visualizing the performance of parallel programs
– Heath, Etheridge
- 1995
|
|
307
|
The design and implementation of hierarchical software systems with reusable components
– Batory, O’Malley
- 1992
|
|
218
|
Smalltalk 80: The Language
– Goldberg, Robson
- 1989
|
|
182
|
Documenting frameworks using patterns
– Johnson
- 2001
|
|
168
|
Zeus: A System for Algorithm Animation and Multiview Editing (Research Report No
– Brown
- 1992
|
|
145
|
Programming-in-the-Large Versus Programming-in-the-Small
– DeRemer, Kron
- 1975
|
|
133
|
Exploting style in architectural design environments
– Garlan, Allen, et al.
- 1994
|
|
124
|
The Unix Programming Environment
– Kernighan, Pike
- 1984
|
|
120
|
Patterns generate architectures
– Beck, Johnson
- 1994
|
|
115
|
Debugging heterogeneous distributed systems using event-based models of behavior
– Bates
- 1995
|
|
112
|
Assuring Good Style for Object-Oriented Programs
– Lieberherr, Holland
- 1989
|
|
105
|
Design recovery for maintenance and reuse
– Biggerstaff
- 1989
|
|
99
|
Exploring Algorithms Using Balsa II
– Brown
- 1988
|
|
93
|
LCLint: A tool for using specifications to check code
– Evans, Guttag, et al.
- 2004
|
|
83
|
Experiences designing and implementing Choices: an objectoriented system in C
– Campbell, Islam, et al.
- 1993
|
|
79
|
Computational Reflection in Class Based Object Oriented Languages
– Ferber
- 1989
|
|
76
|
The visualiztion of parallel systems: An overview
– Kraemer, Stasko
- 1993
|
|
68
|
The concept assignment problem in program understanding
– Biggerstaff, Mitbander, et al.
- 1993
|
|
63
|
Visualizing and querying software structures
– Consens, Mendelzon, et al.
- 1992
|
|
59
|
Implementing Remote Procedure Call
– Birrel, Nelson
- 1984
|
|
59
|
Interactive visualization of design patterns can help in framework understanding
– Lange, Nakamura
- 1995
|
|
57
|
Outline of the social system
– Parsons
- 1961
|
|
57
|
Implementing relational views of programs
– Linton
- 1984
|
|
51
|
Design reverse-engineering and automated design pattern detection in smalltalk
– Brown
- 1996
|
|
50
|
KnowledgeBased Program Analysis
– Harandi, Ning
- 1990
|
|
49
|
Dotplot: A program for exploring self-similarity in millions of lines of text and code
– Church, Helfman
- 1993
|
|
48
|
E cient call graph analysis
– Hall, Kennedy
- 1992
|
|
46
|
Intention-Based Diagnosis of Novice Programming Errors
– Johnson
- 1986
|
|
45
|
The C++ information abstractor
– Grass, Chen
- 1990
|
|
38
|
Design reuse and frameworks in the Smalltalk-80 system
– Deutsch
- 1989
|
|
36
|
Reflective Facilities in Smalltalk-80
– Foote, Johnson
- 1989
|
|
33
|
A Hygraph-based Query and Visualization System
– Consens, Mendelzon, et al.
- 1993
|
|
32
|
A framework for dynamic program analyzers
– Bruegge, Gottschalk, et al.
- 1993
|
|
32
|
Choices: an object-oriented multimedia operating system
– Campbell, Tan
- 1995
|
|
30
|
Constructing call multigraphs using dependence graphs
– Lakhotia
- 1993
|
|
28
|
Formal Verification of Ada Programs
– Guaspari, Marceau, et al.
- 1990
|
|
27
|
A program for identifying duplicated code
– Baker
- 1992
|
|
24
|
Reverse Engineering to the Architectural Level
– Harris, Reubenstein, et al.
- 1995
|
|
22
|
Research Directions in Software Architecture
– Garlan
- 1995
|
|
20
|
ET++ SwapsManager: Using object technology in the financial engineering domain
– Eggenschwiler, Gamma
- 1992
|
|
20
|
Automated program understanding by concept recognition
– Kozaczynski, Ning
- 1994
|
|
19
|
A logic-based approach to reverse engineering tools production
– Canfora, Cimitile, et al.
- 1992
|
|
17
|
Visualizing software systems
– Baker, Eick
- 1994
|