单选题 逆向工程导出的信息可以分为4个抽象层次,其中______可以抽象出程序的抽象语法树、符号表等信息;______可以抽象出反映程序段功能及程序段之间关系的信息。

单选题 A.实现级 B.结构级
C.功能级 D.领域级
【正确答案】 A
【答案解析】
单选题 A.实现级 B.结构级
C.功能级 D.领域级
【正确答案】 C
【答案解析】[解析] 逆向工程与重构工程是目前预防性维护采用的主要技术。逆向工程术语源于硬件制造业,相互竞争的公司为了了解对方设计和制造工艺的机密,在得不到设计和制造说明书的情况下,通过拆卸实物获取信息。软件的逆向工程也基本类似,不过通常“解剖”的不仅是竞争对手的程序,而且包括本公司多年前的产品,此时得不到设计“机密”的主要障碍是缺乏文档。因此,所谓软件的逆向工程就是分析已有的程序,寻求比源代码更高级的抽象表现形式。一般认为,凡是在软件生命周期内将软件某种形式的描述转换成更为抽象形式的活动都可称为逆向工程。与之相关的概念是:重构(restructuring),指在同一抽象级别上转换系统描述形式;设计恢复(design recovery),指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计的信息(不一定是原设计);重构工程(re-engineering),也称修复和改造工程,它是在逆向工程所获信息的基础上修改或重构已有的系统,产生系统的一个新版本。
①恢复信息的级别
逆向工程导出的信息可分为如下4个抽象层次:
·实现级:包括程序的抽象语法树、符号表等信息;
·结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图等;
·功能级:包括反映程序段功能及程序段之间关系的信息;
·领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息。
显然,上述信息的抽象级别越高,它与代码的距离就越远,通过逆向工程恢复的难度亦越大,而自动工具支持的可能性相对变小,要求人员参与判断和推理的工作增多。
②恢复信息的方法
在逆向工程中用于恢复信息的方法有四类。第一类为用户指导下的搜索与变换(user-directed search and transformation)。此类方法用于导出实现级和结构级信息。它要求维护人员在数据库系统的支持下,运用询问语言,针对源代码或与之相近的表示形式,指定待查找的句型(pattem),根据搜索结果分析出所需信息或进行特殊变换。
第二类方法为变换式方法(transformational approaches),除领域级外所有抽象级别上的信息都可用此类方法推导。变换式方法又细分为不需要维护人员过多干涉的自动分析法(如静态分析和调用图、控制流图生成等)和基于特定库的用户指导变换法两类。变换方法自动化程度越高,得到的设计信息越粗略,因为任何深层次的分析不可避免地要借助人的智力。一般借助变换法得到程序的某种中间表示形式,通过进一步使用其他工具将已获粗略的设计信息细化为完整、一致的软件设计。
第三类方法是基于领域知识的(domain knowledge-based),主要用于恢复功能级和领域级信息。领域知识一般用规则库表示,用已确定或假定的领域概念与代码之间的对应关系推导进一步的假设,最后导出程序的功能。显然该类方法的不确定性最大,因此目前成熟的工具和原型系统还很少见。
最后一类方法称为铅板恢复(cliche recogrition)法,这类方法仅适用于推导实现级和结构级信息。这些方法用于识别程序设计“铅板”或公共结构,“铅板”既可为一个简单算法(如两变量互换值),亦可为相对复杂的成分(如冒泡分类)。因铅板与程序之间可能存在多种匹配形式,所以此类方法还包含大量的推理与决策。各类方法采用的输入形式、搜索策略和推理策略不尽相同。后两类方法又称为基于知识的方法。
尽管每个软件组织可能有数百万行代码可供重构,但由于缺乏时机和支持工具或者因为经济上得不偿失,往往只有那些决定或移植、或重新设计、或为重用而需验证正确性的程序才被选择实施逆向工程。