Since the 1980s, software maintenance started to attract attention. Some progress has been made in using formal methods on software maintenance, especially on reverse engineering. This paper attempts to summarise some major advances in this area over the last one and a half decades. Firstly, we introduce program transformation techniques for software development and review the techniques used for software maintenance. We then describe a method for reverse engineering and reusing COBOL programs using program transformations. Finally, we suggest a future investigation direction for this work.