逆向工程与重构工程是目前预防性维护采用的主要技术。所谓软件的逆向工程就是分析已有的程序,寻求比源代码更高级的抽象表现形式。一般认为,凡是在软件生命周期内将软件某种形式的描述转换成更为抽象形式的活动都可称为逆向工程。逆向工程导出的信息可以分为如下 4 个抽象层次。
实现级:包括程序的抽象语法树、符号表等信息。
结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图等。
功能级:包括反映程序段功能及程序段之间关系的信息。
领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息。
显然,上述信息的抽象级别越高,它与代码的距离就越远,通过逆向工程恢复的难度亦越大,而自动工具支持的可能性相对变小,要求人参与判断和推理的工作增多。