1、5.7 面向对象的软件测试OOOO的系统与使用功能模型开发的系统之间的差别:的系统与使用功能模型开发的系统之间的差别:对象作为一个单独的组件一般要比一个功能模块大对象作为一个单独的组件一般要比一个功能模块大由对象到子系统的集成通常是松散耦合的,系统中由对象到子系统的集成通常是松散耦合的,系统中 没有一个明显的没有一个明显的“顶层顶层”如果对象被复用,测试者就无法进入组件内部分析如果对象被复用,测试者就无法进入组件内部分析 其代码其代码 测试策略和测试战术的测试策略和测试战术的改变改变白盒测试方法需要扩展到更大粒度的对象上白盒测试方法需要扩展到更大粒度的对象上集成测试采用黑盒测试集成测试采用黑盒
2、测试面向对象系统的测试可分为四个层次面向对象系统的测试可分为四个层次测试与对象关联的单个操作测试与对象关联的单个操作测试单个对象类测试单个对象类测试对象集群测试对象集群测试面向对象系统测试面向对象系统 5.7.1 5.7.1 对象类的测试对象类的测试用白盒的覆盖测试方法保证所有程序中的语句至用白盒的覆盖测试方法保证所有程序中的语句至少执行一遍,所有的程序路径都要执行到。少执行一遍,所有的程序路径都要执行到。应包括:应包括:对象中所有操作被单独隔离测试对象中所有操作被单独隔离测试对象所有属性的设置和访问的测试对象所有属性的设置和访问的测试对象的所有可能状态的测试。对象的所有可能状态的测试。所有能
3、引起状态改变的事件都要模拟到。所有能引起状态改变的事件都要模拟到。相当于传统的单元测试,相当于传统的单元测试,单元概念单元概念的变化的变化 封装的类或对象作为最小封装的类或对象作为最小 的可测试单位的可测试单位测试单个类的方法(1 1)随机测试随机测试例例:银行系统的银行系统的account(帐户帐户)类有下列操作:类有下列操作:open(打开打开)setup(建立建立)deposit(存款存款)withdraw(取款取款)balance(余额余额)summarize(清单清单)creditLimit(透支限额透支限额)close(关闭关闭)系统对系统对操作的限制:操作的限制:必须在应用其它操
4、作之前先打开帐户必须在应用其它操作之前先打开帐户,在完成了在完成了 全部操作之后才能关闭帐户全部操作之后才能关闭帐户;在限制在限制下还是下还是存在存在操操作的许作的许多排列多排列一个一个account类实例的最小行为历史包括下列操作类实例的最小行为历史包括下列操作:open.setup.deposit.withdraw.close account类的最小测试序列类的最小测试序列大量的其它行为可能在下面序列中发生大量的其它行为可能在下面序列中发生:open.setup.deposit.deposit|withdraw|balance|summarize|creditLimit n.withdra
5、w.close 一系列不同的操作序列可以随机地产生一系列不同的操作序列可以随机地产生,例如例如:测试用例测试用例r1:open.setup.deposit.deposit.balance.summarize.creditLimit.withdraw.close 测试用例测试用例r2:open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close 这些和其它的随机顺序测试被进行这些和其它的随机顺序测试被进行,以测试不以测试不同的类实例的生存历史同的类实例的生存历史.测试单个类的方法(2 2)划分测试划分测试(parti
6、tion testing)与测试传统软件时采用的等价类划分方法类似与测试传统软件时采用的等价类划分方法类似.划分类别的方法划分类别的方法:基于状态的划分基于状态的划分基于属性的划分基于属性的划分基于功能的划分基于功能的划分基于状态的划分 根据类操作根据类操作来划分类操作来划分类操作.例:银行系统的例:银行系统的account(帐户帐户)类类 状态操作包括状态操作包括:deposit(存款存款)withdraw(取款取款)非状态操作包括非状态操作包括:balance(余额余额)summarize(清单清单)creditLimit(透支限额透支限额)测试用例测试用例p1(测试改变状态的操作测试改变
7、状态的操作):open.setup.deposit.deposit.withdraw.close 测试用例测试用例p2(测试不改变状态的操作测试不改变状态的操作,在最小测试序列中在最小测试序列中 的操作除外的操作除外):open.setup.deposit.summarize.creditLimit.withdraw.close基于属性的划分 根据类操作根据类操作来划分类操作来划分类操作.例:例:account类可根据类可根据balance属性来把操作属性来把操作 定义划分为三个类别定义划分为三个类别:使用使用balance的操作的操作 修改修改balance的操作的操作 不使用也不修改不使用
8、也不修改balance的操作的操作 为上述每个类别设计测试序列为上述每个类别设计测试序列基于功能的划分 根据类操作所根据类操作所来划分类操作来划分类操作.例例:account类中的操作按功能可划分为四个类别类中的操作按功能可划分为四个类别:初始化操作初始化操作(open,setup)计算操作计算操作(deposit,withdraw)查询操作查询操作(balance,summarize,creditLimit)终止操作终止操作(close)为上述每个类别设计测试序列为上述每个类别设计测试序列 set upacctaccount类的状态转换图类的状态转换图emptyacctdeadacctset
9、up Aaccentbalance creditacctInfoclosedeposit(initial)depositwithdrawworkingacctopenwithdrawal(final)nonworkingacct测试单个类的方法(3 3)基于状态的测试)基于状态的测试测试单个类的方法(4 4)基于故障的测试基于故障的测试(fault_based testing)与测试传统软件时采用的错误推测法类似与测试传统软件时采用的错误推测法类似.5.7.25.7.2 对象对象的集成测试的集成测试 OO软件没有层次的控制结构软件没有层次的控制结构,传统的自顶向传统的自顶向下和自底向上的集成策
10、略没有意义下和自底向上的集成策略没有意义.OO软件的两种集成策略软件的两种集成策略:基于使用的测试基于使用的测试(用例或基于场景的测试用例或基于场景的测试)基于线程的测试基于线程的测试(thread-based testing)集成响应系统的一个输入或事件所需的一组类集成响应系统的一个输入或事件所需的一组类,每个每个线程被个体地集成和测试线程被个体地集成和测试,通过回归测试保证没有副作用通过回归测试保证没有副作用产生产生;对象交互测试对象交互测试 ATMBank银行系统的类协作图银行系统的类协作图ATMUserInterfaceAccountCashierverifyAcctverifyPIN
11、verifyPolicywithdrawReqdepositReqacctInfoReqcardInsertedpassworddepositwithdrawaccentStatusterminatevalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntopenAcctinitialDepositauthorizeCarddeuthorizec
12、loseAcct OO集成测试方法(1 1)多个类)多个类测试测试 Kirani,S.and W.T.Tsai,在在“Specification and Verification of Object-Oriented Programs”中建议了下面的步骤序列以中建议了下面的步骤序列以生成多个类随机测试用例生成多个类随机测试用例:1.1.对对,使用类操作列表来生成一系列随机测使用类操作列表来生成一系列随机测试序列试序列,这些操作发送这些操作发送给服务器类给服务器类;2.2.对生成的每个消息对生成的每个消息,确定在确定在和对应的操作和对应的操作;3.3.对服务器对象中的每个操作对服务器对象中的每个
13、操作(已经被来自客户对象的已经被来自客户对象的消息调用消息调用),),确定确定;4.4.对每个消息对每个消息,确定确定,并把这些操作并把这些操作结合进测试序列中结合进测试序列中.ATMBank银行系统的类协作图银行系统的类协作图ATMUserInterfaceAccountCashierverifyAcctverifyPINverifyPolicywithdrawReqdepositReqacctInfoReqvalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseopenAcctinitialDepositauthor
14、izeCarddeuthorizecloseAcctValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntcardInsertedpassworddepositwithdrawaccentStatusterminate银行系统中Bank类和ATM类的操作序列:verifyAcct verifyPIN verifyPolicy withdrawReq|depositReq|acctInfoReqn对对BankBank类的随机测试用例可能是类的随机测试用例可能是:测试用例测试
15、用例r3:r3:verifyAcct verifyPIN depositReq为了考虑测试中涉及的协作者为了考虑测试中涉及的协作者,需要考虑与测试用例需要考虑与测试用例r3r3中中每个操作相关联的消息每个操作相关联的消息:BankBank必须和必须和ValidationInfo协作以执行协作以执行depositReq、verifyAcct和和verifyPINBankBank还必须和还必须和Account协作以执行协作以执行deposit因此因此,测试这些协作的新的测试用例是测试这些协作的新的测试用例是:测试用例测试用例r4:r4:verifyAcctBank validAcctValidat
16、ionInfo verifyPINBank validPINValidationInfo depositReq depositAccount OO集成测试方法(2 2)从动态模型导出)从动态模型导出测试用例测试用例 设计的测试用例应达到完全的状态覆盖设计的测试用例应达到完全的状态覆盖,即操作即操作序列应导致序列应导致account类的变迁穿越所有允许的状态类的变迁穿越所有允许的状态:测试用例测试用例s s1 1:openopensetupAccent deposit(initial)withdraw(final)close(最小测试序列最小测试序列)向最小序列中加入附加的测试序列向最小序列中加
17、入附加的测试序列,例如例如:测试用例测试用例s s2 2:openopensetupAccent deposit(initial)deposit balance credit withdraw(final)close测试用例测试用例s s3 3:openopensetupAccent deposit(initial)deposit withdraw accntInfo withdraw(final)close 导出更多的测试用例以保证该类的所有行为都被适当地导出更多的测试用例以保证该类的所有行为都被适当地测试测试 5.7.35.7.3 OO系统系统的确认测试的确认测试在确认和系统测试层次在确认
18、和系统测试层次,类连接的细节消失类连接的细节消失.和传统的确认测试一样和传统的确认测试一样,OO软件的确认关注软件的确认关注 用户可见的动作和用户可识别的系统输出用户可见的动作和用户可识别的系统输出.为辅助确认测试的导出为辅助确认测试的导出,应利用分析模型中的应利用分析模型中的 用例图提供的场景来提高交互需求中发现错误用例图提供的场景来提高交互需求中发现错误 的可能性的可能性5.8 5.8 自动测试和测试工具自动测试和测试工具自动化和工具的好处自动化和工具的好处速度速度效率效率准确度和精确度准确度和精确度坚持不懈坚持不懈5.8.1 5.8.1 测试工具测试工具静态分析工具静态分析工具动态测试工
19、具动态测试工具测试数据自动生成工具测试数据自动生成工具集成化测试环境集成化测试环境非侵入式工具非侵入式工具侵入式工具侵入式工具测试工作台(下游CASE工具)源代码源代码被测试被测试的程序的程序测试数据测试数据规约规约预测器预测器测试管理器测试管理器测试预估测试预估模拟器模拟器文件比较器文件比较器报告生成器报告生成器动态分析器动态分析器测试结果测试结果测试结测试结果报告果报告执行报告执行报告测试数据生成器测试数据生成器查看器和监视器1#计算机软件正在测试2#计算机软件正在测试3#计算机查看测试工具通信线路监听线路通信分析器可以查看两个系统之间传输的原始数据(非侵入非侵入)(输入测试用例)(输入测
20、试用例)(确认产生的通信数据)(确认产生的通信数据)(检查相应结果)(检查相应结果)驱动程序普通系统配置 测试驱动配置测试驱动配置(在此计算机上编写(在此计算机上编写 简单的程序自动产简单的程序自动产 生相应的击键和鼠生相应的击键和鼠 标移动来测试软件)标移动来测试软件)键盘电缆鼠标电缆一台计算机可以作为驱动程序测试工具取代被测试系统的键盘和鼠标从外部计算机发从外部计算机发送击键鼠标的移送击键鼠标的移动信息动信息,被测试被测试软件不被侵入软件不被侵入,如果测试软件时如果测试软件时在同一系统中执在同一系统中执行驱动程序行驱动程序,它它就会侵入系统就会侵入系统,这种测试情况可这种测试情况可能无法接
21、受能无法接受管道和仿真器普通系统配置测试存根配置一台计算机可以充当管道,代替打印机,能够对测试输出进行更有效的分析运行管道软件来运行管道软件来代替打印机,对代替打印机,对打印数据进行阅打印数据进行阅读和解释读和解释 其它工具类型:施压工具和增负工施压工具和增负工具具干扰发生器和噪声发生干扰发生器和噪声发生器器分析工具分析工具测试工具产品实例 JUnit:Java单元测试工具单元测试工具 CppUnit:C+单元测试工具单元测试工具 Dunit:Delphi的终极测试工具的终极测试工具5.8.2 5.8.2 测试测试自动化测试测试自动化 另一类软件测试工具另一类软件测试工具,可以自动执行测试用可
22、以自动执行测试用例、查找软件缺陷、分析并记录测试结果。例、查找软件缺陷、分析并记录测试结果。随机测试随机测试:猴子测试员猴子测试员只要不停电只要不停电,偶尔能够得到香蕉偶尔能够得到香蕉,猴子就会永远猴子就会永远测试测试下去下去一个想法一个想法:“如果让如果让一百万只猴一百万只猴子在一百万子在一百万只键盘上敲只键盘上敲一百万年一百万年,它们最终就它们最终就可能写出莎可能写出莎士比亚话剧士比亚话剧等巨著等巨著”.猴子的进步笨猴子笨猴子:一点也不懂测试软件一点也不懂测试软件,只是随机地单击或按键只是随机地单击或按键,直至发生两件事情之一直至发生两件事情之一:完成循环或系统崩溃完成循环或系统崩溃.不太
23、笨的猴子不太笨的猴子:具有崩溃辨认能力具有崩溃辨认能力,能够重新启动系统开始测试能够重新启动系统开始测试聪明猴子聪明猴子:能够从它的笨兄弟那里获得随机测试的结果能够从它的笨兄弟那里获得随机测试的结果,增加了对环境的认知能力增加了对环境的认知能力,有目的地敲键盘有目的地敲键盘,不仅限于查找崩溃缺陷不仅限于查找崩溃缺陷,同时查看数据同时查看数据,检查检查 操作结果操作结果,找出与预期结果的差别找出与预期结果的差别自动化测试工具实例 美国国际软件自动化(美国国际软件自动化(ISA)公司)公司的的Panorama for C/C+,j、Java和和VB产品,自动化功能包括:产品,自动化功能包括:软件结
24、构分析与逻辑框图的自动化软件结构分析与逻辑框图的自动化软件静态分析软件静态分析数据分析数据分析复杂性分析与分析结果列表的自动化复杂性分析与分析结果列表的自动化软件质量分析软件质量分析动态性能分析动态性能分析软件代码分支或条件覆盖率分析软件代码分支或条件覆盖率分析软件测试用例有效性分析与测试用例最小集的自动选取软件测试用例有效性分析与测试用例最小集的自动选取软件界面手工操作过程的自动记录与自动再执行软件界面手工操作过程的自动记录与自动再执行 (Playback)5.9 5.9 测试中的可靠性分析测试中的可靠性分析 开发过程中,利用测试的统计数据来开发过程中,利用测试的统计数据来估算软件的可靠性,
25、以控制软件的质量。估算软件的可靠性,以控制软件的质量。推测错误的产生频度推测错误的产生频度推测残留在程序中的错误数推测残留在程序中的错误数评价测试的精确度和覆盖率评价测试的精确度和覆盖率推测错误的产生频度推测错误的产生频度(推测错误产生的时间间隔推测错误产生的时间间隔)1 1K(EK(ET T/I IT T-E-Ec c(t)(t)/I IT T)方法方法:估算平均故障时间估算平均故障时间(MTTF估算公式估算公式)MTTFMTTF K K:经验常数经验常数ETET:程序中原有的残留错误数程序中原有的残留错误数ITIT:程序长度程序长度t t:测试时间测试时间 EcEc(t)(t):在在0-t
26、0-t期间内发现的错误总数期间内发现的错误总数1 1=当故障率为独立于时间的常量当故障率为独立于时间的常量:推测残留在程序中的错误数推测残留在程序中的错误数错误植入模型错误植入模型 MillsMills将将播种模型播种模型用于程序中残留错误的估算用于程序中残留错误的估算,称称错误植入模型错误植入模型播种模型:播种模型:N N:程序中原有残留的错误数程序中原有残留的错误数 NtNt:新植入的错误数:新植入的错误数 n:n:测试发现的原有错误数测试发现的原有错误数 ntnt:测试发现的植入错误数测试发现的植入错误数N NN Nn nn nt tt tN NN Nn nn nt t=t tHyman
27、对错误植入模型的改进E ET T:程序中原有的残留错误数程序中原有的残留错误数E E1 1:1 1号测试员在某一时间内发现的错误数号测试员在某一时间内发现的错误数E E2 2:2 2号测试员在同一时间内发现的错误数号测试员在同一时间内发现的错误数E E0 0:两位测试员共同发现的错误数两位测试员共同发现的错误数E EE EE E1 10 0=2 2E ET TE E1 1E E2 2/E/E0 0E ET T第六章第六章 软件进化软件进化遗留系统遗留系统软件变更策略软件变更策略软件软件维护维护体系结构进化体系结构进化软件再工程软件再工程配置管理配置管理6.1 6.1 遗留系统遗留系统更换遗留系
28、统是有风险的业务策略,因为更换遗留系统是有风险的业务策略,因为:遗留系统几乎没有完整的描述遗留系统几乎没有完整的描述业务过程与遗留系统的操作方式紧密相关业务过程与遗留系统的操作方式紧密相关重要的业务规则隐藏在软件内部重要的业务规则隐藏在软件内部开发新软件有风险开发新软件有风险继续使用遗留系统,进行变更费用更高,因为继续使用遗留系统,进行变更费用更高,因为:系统是由不同团对实现的,程序设计风格不一致系统是由不同团对实现的,程序设计风格不一致系统使用过时的语言编写系统使用过时的语言编写系统文档不充分、过时系统文档不充分、过时经多年维护,系统结构已破坏经多年维护,系统结构已破坏系统进行过优化,不可读
29、系统进行过优化,不可读系统数据过时、不完整系统数据过时、不完整遗留系统评估遗留系统评估 对遗留系统做现实的评估,做出适当的抉择:对遗留系统做现实的评估,做出适当的抉择:彻底抛弃系统彻底抛弃系统继续维护系统继续维护系统采用某种方式转换系统以改善其可维护性采用某种方式转换系统以改善其可维护性以一个新的系统代替该系统以一个新的系统代替该系统6.2 6.2 软件维护软件维护 四类维护活动:四类维护活动:改正性维护改正性维护适应性维护适应性维护扩充与扩充与完善性维护完善性维护预防性维护预防性维护各种各种维护所占比例维护所占比例:其它维护其它维护 5%5%适应性适应性维维 护护 25%25%改正性改正性维
30、维 护护 20%20%扩充与扩充与完完善性维护善性维护 50%50%改正性维护占全部维护量的比率已从改正性维护占全部维护量的比率已从8080年代初年代初的的20%20%大幅度下降大幅度下降,90,90年代初一些公司的产品年代初一些公司的产品差错率已接近于零差错率已接近于零6.2.16.2.1软件维护的特点软件维护的特点MP+Ke e=(c c-d d)M M :维护工作总工作量维护工作总工作量P P:生产性工作量生产性工作量K K :经验常数经验常数c c:复杂度复杂度d d:对该软件熟悉程度的度量对该软件熟悉程度的度量维护的成本维护的成本维护中的典型问题(1)(1)难以跟踪软件版本的进化过程
31、难以跟踪软件版本的进化过程,软件的变化未在文档中反映出来软件的变化未在文档中反映出来.(2)(2)难以跟踪软件的创建过程难以跟踪软件的创建过程.(3)(3)难以读懂他人程序难以读懂他人程序.(4)(4)无文档或不全无文档或不全.(5)(5)软件人员流动性大软件人员流动性大.(6)(6)设计时未考虑修改需要设计时未考虑修改需要,修改困难修改困难.(7)(7)维护工作无吸引力维护工作无吸引力,缺乏成就感缺乏成就感.6.2.2软件的维护任务 修改修改负责人负责人维护申请维护申请系统监督员系统监督员配置管理员配置管理员维维护机构护机构维护人员维护人员维护管理员维护管理员保存维护记录维护过程中作应记录的
32、数据维护过程中作应记录的数据程序标识程序标识源程序语句数目源程序语句数目机器代码指令条数机器代码指令条数.以收集的数据为基础构造维护数据库以收集的数据为基础构造维护数据库,供维护评价使用供维护评价使用.6.2.3 软件维护的实施修改源程序的三个步骤修改源程序的三个步骤分析和理解程序分析和理解程序修改程序修改程序重新验证程序重新验证程序修改程序的副作用修改代码的副作用修改代码的副作用修改数据的副作用修改数据的副作用修改文档的副作用修改文档的副作用重新验证程序静态确认静态确认计算机确认计算机确认维护后的验收维护后的验收 从维护角度所需的测试种类:从维护角度所需的测试种类:(1)(1)对修改事务的测
33、试对修改事务的测试(2)(2)对修改程序的测试对修改程序的测试(3)(3)操作过程的测试操作过程的测试(4)(4)应用系统运行过程的测试应用系统运行过程的测试(5)(5)使用过程的测试使用过程的测试(6)(6)系统系统各各部分间接口的测试部分间接口的测试(7)(7)与系统软件与系统软件接接口的测试口的测试(8)(8)安全性测试安全性测试(9)(9)后备后备/恢复过程测试恢复过程测试 6.2.4 软件可维护性 软件可维护性的定义软件可维护性的定义:软件可维护性是指纠正软件系统出现软件可维护性是指纠正软件系统出现的错误和缺陷,以及为满足新的要求进行的错误和缺陷,以及为满足新的要求进行修改、扩充或压
34、缩的容易程度。修改、扩充或压缩的容易程度。衡量软件质量的几个主要质量特性:衡量软件质量的几个主要质量特性:可维护性可维护性可使用性可使用性可靠性可靠性 可维护性的度量可维护性的度量 各类维护中的侧重点各类维护中的侧重点改正性维护改正性维护适应性维护适应性维护完善性维护完善性维护可理解性可理解性 可测试性可测试性 可修改性可修改性 可靠性可靠性 可移植性可移植性 可使用性可使用性 效效 率率 度度量量程程序序可可维维护护性性的的7 7个个特特性性6.2.5 提高可维护性的方法 建立明确的软件质量目标和优先级建立明确的软件质量目标和优先级 使用提高软件质量的技术和工具使用提高软件质量的技术和工具
35、进行明确的质量保证审查进行明确的质量保证审查 选择可维护的程序设计语言选择可维护的程序设计语言 改进程序的文档改进程序的文档 开发软件时考虑到维护开发软件时考虑到维护6.2.4 预防性维护 开发和维护者不应等待用户的维护申开发和维护者不应等待用户的维护申请请,可先选择以下类型程序作为预防性维可先选择以下类型程序作为预防性维护对象护对象:预计若干年内将继续使用的程序预计若干年内将继续使用的程序当今正成功使用的程序当今正成功使用的程序最近的将来要进行大修改和完善的程序最近的将来要进行大修改和完善的程序6.36.3软件再工程软件再工程(Software Reengineering)Software
36、Reengineering)6 6.3.1.3.1 什么是软件再工程什么是软件再工程 软件再工程是一类软件工程活动软件再工程是一类软件工程活动,是一个是一个工程过程工程过程,它将它将逆向工程逆向工程、重构重构和和正向工程正向工程组组合起来合起来,将现存系统重新构造为新的形式。将现存系统重新构造为新的形式。软件再工程比其它系统进化方法具有的绝对优势软件再工程比其它系统进化方法具有的绝对优势减少减少软件演化风险软件演化风险降低成本降低成本 软件再工程过程模型软件再工程过程模型代码重构代码重构数据重构数据重构正向工程正向工程库存目录分析库存目录分析文档重构文档重构逆向工程逆向工程再工程过程示意图再工
37、程过程示意图 需求需求新需求新需求设计设计设计设计代码代码代码代码正正向向工工程程反反向向工工程程(重构)(重构)(重构)(重构)(重构)(重构)再工程方法再工程方法 增长的成本增长的成本自动源代自动源代码转换码转换自动结构重构自动结构重构辅之以手工改变辅之以手工改变结构重构加上结构重构加上体系结构改变体系结构改变自动的程序自动的程序结构重构结构重构程序和数据程序和数据结构重构结构重构程序转换过程程序转换过程 识别源代识别源代码的差异码的差异将要再工程将要再工程的系统的系统设计转换设计转换器指令器指令自动转换代码自动转换代码经过再工程经过再工程的系统的系统手动转换代码手动转换代码将要再工程将要
38、再工程的系统的系统逆向工程逆向工程(反反向向工程工程reverse engineering)reverse engineering)设计的设计的恢复过程恢复过程非结构化、无文档非结构化、无文档的源代码或目标代码的源代码或目标代码软件的文档软件的文档从现有软件恢复设计信息从现有软件恢复设计信息(有用的维护信息有用的维护信息)逆向工程过程逆向工程过程 将要再工程将要再工程的系统的系统自动分析自动分析手工加注释手工加注释系统系统信息库信息库文档生成文档生成数据数据结构图结构图程序程序结构图结构图可追溯可追溯矩阵矩阵逆向工程恢复信息的级别:(1)(1)实现级实现级:程序的抽象语法程序的抽象语法 树、符
39、号表等信息树、符号表等信息(2)(2)结构级结构级:反映程序反映程序分量之间分量之间 相互依赖相互依赖关系关系的信的信 息,息,如调用图、结如调用图、结 构图等构图等.(3)(3)功能级功能级:反映程序段功能和反映程序段功能和 段间关系的信息段间关系的信息(4)(4)领域级领域级:反映程序分量与应反映程序分量与应 用领域概念间对应用领域概念间对应 关系的信息关系的信息抽抽象象级级别别低低高高信息的抽象信息的抽象级别越高级别越高,它与代码距它与代码距离越远离越远,通通过逆向工程过逆向工程恢复的难度恢复的难度越大越大,自动自动工具支持的工具支持的可能性变小可能性变小逆向工程源程序源程序目标代码目标
40、代码反汇编、反编译反汇编、反编译程序分析技术程序分析技术:程序结构分析工具程序结构分析工具 程序功能分析工具程序功能分析工具 源程序源程序概要设计概要设计详细设计详细设计概要设计概要设计需求分析需求分析 数据重构(数据再工程)数据重构(数据再工程)修改遗留系统的程序时必须同时修改数据修改遗留系统的程序时必须同时修改数据 数据退化数据退化程序内固有的限制程序内固有的限制体系结构进化体系结构进化 数据再工程的方法数据再工程的方法方法方法描述描述数据清理数据清理 分析对数据记录和值以改善其质量,通常不需变更程序分析对数据记录和值以改善其质量,通常不需变更程序数据扩展数据扩展 数据和相关程序被再工程数据和相关程序被再工程数据迁移数据迁移 数据被转移到一个先进的数据库管理系统之上数据被转移到一个先进的数据库管理系统之上 数据再工程过程数据再工程过程 将要再工程的程序将要再工程的程序数据分析数据分析实体名修改实体名修改直接量替换直接量替换对数据定义对数据定义重新安排重新安排文档生成文档生成修改过的数据修改过的数据数据重新格式化数据重新格式化默认值转换默认值转换验证规则修改验证规则修改变更汇总表变更汇总表数据分析数据分析阶段阶段1阶段阶段2阶段阶段3