This Article 
 Bibliographic References 
 Add to: 
Software Reflexion Models: Bridging the Gap between Design and Implementation
April 2001 (vol. 27 no. 4)
pp. 364-380

Abstract—The artifacts constituting a software system often drift apart over time. We have developed the software reflexion model technique to help engineers perform various software engineering tasks by exploiting—rather than removing—the drift between design and implementation. More specifically, the technique helps an engineer compare artifacts by summarizing where one artifact (such as a design) is consistent with and inconsistent with another artifact (such as source). The technique can be applied to help a software engineer evolve a structural mental model of a system to the point that it is “good-enough” to be used for reasoning about a task at hand. The software reflexion model technique has been applied to support a variety of tasks, including design conformance, change assessment, and an experimental reengineering of the million-lines-of-code Microsoft Excel product. In this paper, we provide a formal characterization of the reflexion model technique, discuss practical aspects of the approach, relate experiences of applying the approach and tools, and place the technique into the context of related work.

[1] A.V. Aho, B.W. Kernighan, and P.J. Weinberger, “Awk—A Pattern Scanning and Processing Language,” Software—Practice and Experience, vol. 9, no. 4, pp. 267–280, 1979.
[2] D.G. Bobrow, L.G. Demichiel, R.P. Gabriel, S.E. Keene, and G. Kiczales, “Common Lisp Object System Specification,” Lisp and Symbolic Computation, vol. 1, no. 3/4, pp. 245–394, 1989, also appears as X3J13 Document 88-002R.
[3] S. Burson, G. Kotik, and L. Markosian, "A Program Transformation Approach to Automating Software Re-engineering," Proc. COMPSAC '90, pp. 314-322, 1990.
[4] G. Booch, Object Oriented Design with Applications, Benjamin/Cummings Publishing Company, Inc., Redwood City, Calif., 1991.
[5] B. Bershad, S. Savage, P. Pardyak, E. Sirer, M. Fiuczynski, D. Becker, C. Chambers, and S. Eggers, “Extensibility, Safety and Performance in the SPIN Operating System,” Proc. Symp. Operating Systems Principles, pp. 267–284, 1995.
[6] E.J. Chikofsky and J.H. Cross II, "Reverse Engineering and Design Recovery: A Taxonomy," IEEE Software, Vol. 7, No. 1, Jan./Feb. 1990, pp. 13-17.
[7] L. Cardelli, J. Donahue, M. Jordan, B. Kalsow, and G. Nelson, “The Modula-3 Type System,” Proc. Conf. Record 16th Ann. ACM Symp. Principles of Programming Languages, pp. 202–212, 1989.
[8] R.F. Crew, “Astlog: A Language for Examining Abstract Syntax Trees,” Proc. USENIX Conf. Domain-Specific Languages, Oct. 1997.
[9] P. Devanbu et al., “LaSSIE: A Knowledge‐Based Software Information System,” Comm. ACM, May 1991, pp. 34‐49.
[10] W.G. Griswold and D. Notkin, “Architectural Tradeoffs for a Meaning-Preserving Program Restructuring Tool,” IEEE Trans. Software Eng., vol. 21, no. 4, pp. 275–287, Apr. 1995.
[11] Reference Manual for the Ada Programming Language. United States Government Printing Office, 1983, MIL STD 1815A.
[12] W.E. Howden and B. Wieand, “QDA—A Method for Systematic Informal Program Analysis,” IEEE Trans. Software Eng., vol. 20, no. 6, pp. 445–462, June 1994.
[13] D. Jackson, “Aspect: Detecting Bugs with Abstract Dependences,” Trans. Software Eng. and Methodology, vol. 4, no. 2, pp. 109–145, Apr. 1995.
[14] D. Jackson and D.A. Ladd, “Semantic Diff: A Tool for Summarizing the Effects of Modifications,” Int'l Conf. Software Maintenance, 1994.
[15] B.W. Kernighan and D.M. Ritchie, The C Programming Language.Englewood Cliffs, N.J.: Prentice Hall, 1978.
[16] A. Lakhotia, “A Unified Framework for Expressing Software Subsystem Classification Techniques,” J. Systems and Software, 1996.
[17] B. Meyer, Eiffel: The Language, Prentice Hall, Upper Saddle River, N.J., 1992.
[18] H.A. Müller and K. Klashinsky, “A System for Programming-in-the-Large,” Proc. 10th Int'l Conf. Software Eng., pp. 80–86, Apr. 1988.
[19] G.C. Murphy and D. Notkin, “Lightweight Lexical Source Model Extraction,” ACM Trans. Programming Languages and Systems, vol. 5, no. 3, pp. 262–292, July 1996.
[20] G.C. Murphy and D. Notkin, “Reengineering with Reflexion Models: A Case Study,” Computer, vol. 30, no. 8, pp. 29–36, Aug. 1997.
[21] G.C. Murphy, D. Notkin, W.G. Griswold, and E.S-C. Lan, “An Empirical Study of Static Call Graph Extractors,” ACM Trans. Software Eng. and Methodology, vol. 7, no. 2, pp. 158–191, 1998.
[22] G.C. Murphy, “Lightweight Structural Summarization as an Aid to Software Evolutionm,” PhD thesis, Univ. of Washington, July 1996.
[23] S.B. Ornburn and S. Rugaber, “Reverse Engineering: Resolving Conflicts Between Expected and Actual Software Designs,” Proc. IEEE Conf. Software Maintenance, pp. 32–40, Nov. 1992.
[24] H.L. Ossher, “A New Program Structuring Mechanism Based on Layered Graphs,” PhD thesis, Stanford Univ., Dec. 1984.
[25] J. Ousterhout, Tcl and the Tk Toolkit, Addison Wesley Longman, Reading, Mass., 1994.
[26] D.A. Penny, “The Software Landscape: A Visual Formalism for Programming-in-the-Large,” PhD thesis, Univ. of Toronto, Toronto, Canada, 1993.
[27] A. Quilici, “A Memory-Based Approach to Recognizing Programming Plans,” Comm. ACM, vol. 37, no. 5, pp. 84–93, 1994.
[28] S.P. Reiss, "Connecting Tools Using Message Passing in the Field Environment," IEEE Software, vol. 7, no. 4, pp. 57-66, July 1990.
[29] S. Reiss, The Field Programming Environment: A Friendly Integrated Environment for Learning and Development, Kluwer Academic Publishers, Dordrecht, The Netherlands, 1995.
[30] C. Rich and R. Waters, The Programmer's Apprentice. ACM Press, 1990.
[31] B.C. Smith, "Reflection and Semantics in Lisp," Proc. 14th Ann. ACM Symp. Principles of Programming Languages, pp. 23-35, Jan. 1984.
[32] J.M. Spivey, The Z Notation, second ed. Prentice Hall, 1992.
[33] M. Sefika, A. Sane, and R.H. Campbell, “Monitoring Compliance of a Software System with Its High-Level Design Models,” Proc. Int'l Conf. Software Eng., pp. 387–396, 1996.
[34] B. Stroustrup, C++ Programming Language. Addison-Wesley, 1986.
[35] K.J. Sullivan, "Mediators: Easing the Design and Evolution of Integrated Systems," PhD dissertation, Dept. of Computer Science, Univ. of Washington, Aug. 1994.
[36] L. Wall, Programming Perl. O'Reilly&Associates, 1990.
[37] K. Wong, S. Tilley, H. Muller, and M. Storye, "Structural Redocumentation: A Case Study," IEEE Software, pp. 46-54, Jan. 1995.
[38] A. Yeh, D. Harris, and M. Chase, "Manipulating Recovered Software Architecture Views," Proc. 19th Int'l Conf. Software Eng., pp. 184-194,Boston: ACM Press, May 1997.
[39] R.K. Yin, Case Study Research. Beverly Hills, Calif.: Sage Publications, 1984.

Index Terms:
Reverse engineering, program understanding, software structure, program representation, model differencing.
Gail C. Murphy, David Notkin, Kevin J. Sullivan, "Software Reflexion Models: Bridging the Gap between Design and Implementation," IEEE Transactions on Software Engineering, vol. 27, no. 4, pp. 364-380, April 2001, doi:10.1109/32.917525
Usage of this product signifies your acceptance of the Terms of Use.