A method for Fortran programs reverse engineering using algebraic specifications
When maintenance is neglected within program development, it is usually done in an empirical way and this leads to program deterioration. To cover up this problem in the legacy systems framework, a broader approach can be followed which first involves reverse engineering. Reverse engineering generates abstract descriptions of a program from its source. These descriptions are used to generate the improved program source (inconsistencies removal, optimization of the source code, updating the documentation), and to assist maintenance tasks.
We present here a reverse engineering method which systematically leads to structural and functional descriptions of a Fortran program using algebraic specifications. We emphasize the problems arisen by the Fortran programming language and by some kind of computing styles (few possibilities for type construction, bad use of global variables, errors within the source code, etc). It is important to notice that this process also leads to the detection of code defaults : it is thus possible to remove them before the code generation following the reverse engineering.
Keywordsreverse engineering algebraic specification maintenance typing legacy systems
Unable to display preview. Download preview PDF.
- 1.A. Audette. Etude de l'applicabilité des spécifications algébriques à un logiciel existant dans le domaine de la CFAO. Master's thesis of Ecole Polytechnique de Montréal, Canada, 1994. (Supervised by C. Choppy).Google Scholar
- 2.S. Cherki and C. Choppy. Une méthode de rétroingénierie de programmes Fortran utilisqnt les specifications algébriques. LRI and IRIN Research report, 1997.Google Scholar
- 3.E.J. Chikofsky and J.H. Cross. Reverse Engineering and Design Recovery: A Taxonomy. IEEE Software: Maintenance, Reverse Engineering and Design Recovery, 7(1):13–17, 1990.Google Scholar
- 4.H. Ehrig and B. Mahr. Fundamentals of Algebraic Specification 1-Equations and Initial semantics. EATCS Monographs on Theoretical Computer Science, Springer Verlag, 1985.Google Scholar
- 5.H. Ehrig and B. Mahr. Fundamentals of Algebraic Specification 2-Module specification and constraints. EATCS Monographs on Theoretical Computer Science, Springer Verlag, 1990.Google Scholar
- 6.K.B. Gallagher and J.R. Lyle. Using program slicing in software maintenance. IEEE Transactions on Software Engineering, 17(8):751–761, 1991.Google Scholar
- 7.J.-F. Girard, R. Koschke, and G. Schied. Comparison of abstract data type and abstract state encapsulation detection techniques for architectural understanding. In Fourth Working Conference on Reverse Engineering, pages 66–75. IEEE Computer Society, 1997.Google Scholar
- 8.M.T. Harandi and J.Q. Ning. Knowledge-Based Program Analysis. IEEE Software Maintenance, Reverse Engineering and Design Recovery, 7(1):74–81, 1990.Google Scholar
- 9.D.R. Harris, H.B. Reubenstein, and A.S. Yeh. Reverse Engineering to the Architectural Level. In 17th International Conference on Software Engineering, Seattle, Washington, USA. ACM, 1995.Google Scholar
- 10.M. Munro. Maintenance is not a soft option. Computer Weekly, pages 28–29, 1989.Google Scholar
- 11.C.L. Ong and W.T. Tsai. Class and object extraction from imperative code. Journal of Object-Oriented Programming, 6(1):58–68, 1993.Google Scholar
- 12.W.M. Osborne and E.J. Chikofsky. Fitting pieces to the maintenance puzzle. IEEE Software: Maintenance, Reverse Engineering and Design Recovery, 7(1):11–12, 1990.Google Scholar
- 13.C. Rich and L.M. Wills. Recognizing a Program's Design: A Graph-Parsing Approach. IEEE Software: Maintenance, Reverse Engineering and Design Recovery, 7(1):82–89, 1990.Google Scholar
- 14.A. van Deursen, S. Woods, and A. Quilici. Program plan recognition for year 2000 tools. In Fourth Working Conference on Reverse Engineering, pages 124–133. IEEE Computer Society, 1997.Google Scholar
- 15.M. Ward. Abstracting a Specification from Code. Journal of Software Maintenance Research and Practice, 5:101–122, 1993.Google Scholar
- 16.M. Ward. Reverse Engineering through Formal Transformation: Knuths 'Polynomial Addition' Algorithm. The Computer Journal, 37(9):795–813, 1994.Google Scholar
- 17.M. Weiser. Program slicing. IEEE Transactions on Software Engineering, SE10(4):352–357, 1984.Google Scholar
- 18.A.S. Yeh, D.R. Harris, and H.B. Reubenstein. Recovering Abstract Data Types and Object Instances from a Conventional Procedural Language. In 2nd Working Conference on Reverse Engineering, Toronto. IEEE, 1995.Google Scholar