Software maintenance is an important activity during a software development lifecycle.One of the most important tasks is to detect the faults in the program,including run-time errors,logic errors of functionality,and performance issues etc.and to fix them through patches.However,it is not only time-costly but also error-prone.A program patch,aiming to fix bugs,may introduce new bugs,when the existing regression test suite for a program may not cover the program completely.The existing regression testing techniques usually focus on several fields as follows:test cases augmentation,code change impact analysis,multi-version program analysis and patch verification.The goal of the thesis is to expose divergences between two versions of a program.There are two issues in most of existing works in this direction as follows:1)They separately analyze the code of both versions to obtain their behavioral information and further expose their divergences;2)They focus only on divergences in control flow without considering data flow.Based on the fact that two versions of a program share a large amount of common code and only a small number of different code,a united and split execution model(USE for short)is proposed to expose both control and data divergences between two versions.First,this study designs and implements a tool called IRDiff to identify the differences between two versions of a program,the output of the tool is a unified program which consists of common code and different code of two versions.Second,the model is implemented in a tool(also named USE)to expose divergences by analyzing the unified program in a same symbolic execution engine.Third,evaluation results on three benchmarks(SIR?Moddiff and CoReBench)show that USE can efficiently expose control and data divergences between two versions,and be used to classify patches. |