Improving program understanding by unfolding layers of interacting patterns

Reverse engineering of legacy systems is a cumbersome task. Some of its aspects can be automated reasonably well, others are better not touched or require the intervention of a human expert. In an attempt to improve our rearchitecturing methodology, COREM, we found that various patterns, software developers use or have to use when developing systems, can serve to support the program understanding part of the reverse engineering process. We depart from the widely accepted hypothesis that software developed by experts is not a mere sequence of relatively primitive statements, but rather the result of a set of interacting, time and situation specific problem, design, and language patterns. To support these considerations, the paper shows how different language paradigms influence the actual code even with a simple problem. The extension of these ideas to interacting high level design patterns is motivated.

[1]  Glenford J. Myers,et al.  Art of Software Testing , 1979 .

[2]  Bill Curtis,et al.  Modern Coding Practices and Programmer Performance , 1979, Computer.

[3]  Harlan D. Mills,et al.  Understanding and Documenting Programs , 1982, IEEE Transactions on Software Engineering.

[4]  Kate Ehrlich,et al.  Empirical Studies of Programming Knowledge , 1984, IEEE Transactions on Software Engineering.

[5]  Nancy Pennington,et al.  Comprehension strategies in programming , 1987 .

[6]  Jack C. Wileden,et al.  A Model of Visibility Control , 1988, IEEE Trans. Software Eng..

[7]  Aniello Cimitile,et al.  A reverse engineering methodology to reconstruct hierarchical data flow diagrams for software maintenance , 1989, Proceedings. Conference on Software Maintenance - 1989.

[8]  Spencer Rugaber,et al.  Recognizing design decisions in programs , 1990, IEEE Software.

[9]  Raymonde Guindon Designing the design process: exploiting opportunistic thoughts , 1990 .

[10]  Jim Q. Ning,et al.  Knowledge-based program analysis , 1990, IEEE Software.

[11]  Linda M. Wills,et al.  Recognizing a program's design: a graph-parsing approach , 1990, IEEE Software.

[12]  Peter Coad,et al.  Object-oriented patterns , 1992, CACM.

[13]  Gill Smith,et al.  Object-oriented analysis , 1988, WADAS '88.

[14]  Bharat G. Mitbander,et al.  The concept assignment problem in program understanding , 1993, Proceedings of 1993 15th International Conference on Software Engineering.

[15]  Genny Tortora,et al.  An integrated and interactive reverse engineering environment for existing software comprehension , 1993, [1993] IEEE Second Workshop on Program Comprehension.

[16]  Ivar Jacobson,et al.  Object-oriented software engineering - a use case driven approach , 1993, TOOLS.

[17]  Ted J. Biggerstaff,et al.  The concept assignment problem in program understanding , 1993, [1993] Proceedings Working Conference on Reverse Engineering.

[18]  Harald C. Gall,et al.  Program transformation to enhance the reuse potential of procedural software , 1994, SAC '94.

[19]  Anneliese Amschler Andrews,et al.  Dynamic code cognition behaviors for large scale code , 1994, Proceedings 1994 IEEE 3rd Workshop on Program Comprehension- WPC '94.

[20]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[21]  Vaclav Rajlich,et al.  Layered explanations of software: a methodology for program comprehension , 1994, Proceedings 1994 IEEE 3rd Workshop on Program Comprehension- WPC '94.

[22]  Anneliese Amschler Andrews,et al.  Comprehension processes during large scale maintenance , 1994, Proceedings of 16th International Conference on Software Engineering.

[23]  Harald C. Gall,et al.  COREM — Objektorientiertes Reverse Engineering , 1995 .

[24]  Roland Mittermeir,et al.  Using Domain Knowledge to Improve Reverse Engineering , 1996, Int. J. Softw. Eng. Knowl. Eng..

[25]  Vairam Arunachalam,et al.  Cognitive processes in program comprehension: An empirical analysis in the Context of software reengineering , 1996, J. Syst. Softw..