1.一种基于测试用例优化的程序变异测试方法,其特征在于,所述方法包括:获取待测试的程序字节码;生成所述程序字节码的变异体;获取类型依赖图;所述类型依赖图包括类型顶点和测试用例顶点,以及顶点之间的有向边;所述有向边用于连接具有直接依赖关系的顶点;在获取类型依赖图之前,还包括:构建类型依赖图,具体包括:获取若干类型的程序字节码;确定每一类型程序字节码的常量池;根据所述常量池中的类型依赖关系,构建所述类型依赖图;计算所述类型依赖图中,所述变异体所属的类型顶点的传递闭包;传递闭包反映了类型之间直接和间接的依赖关系,用于分析变异体和测试用例的关联;计算传递闭包的过程如下:初始化一个边集合,用于存储新增的边,后续用于往类型依赖图中添加边;遍历类型依赖图中所有顶点,对于每个顶点,以每个顶点为源点,开始深度优先遍历,每次遍历到一个顶点,就往边集合里面新增源点到该顶点的边,边权为深度;最后将新增的边添加到类型依赖图中;根据所述传递闭包,确定与所述变异体有依赖关系的目标测试用例,具体包括:根据所述传递闭包确定所述传递闭包所经历的顶点;对所述传递闭包所经历的顶点与测试用例顶点集合取交集,得到与所述变异体有依赖关系的目标测试用例;调用各所述目标测试用例对所述变异体进行变异测试。
2.根据权利要求1所述的基于测试用例优化的程序变异测试方法,其特征在于,在确定与所述变异体有依赖关系的目标测试用例之后,还包括:根据所述类型依赖图,确定所述变异体所属的类型顶点到各目标测试用例顶点的路径上有向边的数量,得到各目标测试用例对应的权值;根据对应权值的大小确定各所述目标测试用例的调用顺序。
3.根据权利要求2所述的基于测试用例优化的程序变异测试方法,其特征在于,根据对应权值的大小确定各测试用例的调用顺序,具体包括:按照权值从小到大的排序来确定对应目标测试用例的先后调用顺序。
4.根据权利要求1所述的基于测试用例优化的程序变异测试方法,其特征在于,所述确定每一类型程序字节码的常量池,具体包括:采用静态代码分析工具确定所述每一类型程序字节码的常量池。
5.一种基于测试用例优化的程序变异测试系统,其特征在于,所述系统包括:字节码获取模块,用于获取待测试的程序字节码;变异体生成模块,用于生成所述程序字节码的变异体;类型依赖图构建模块用于:获取若干类型的程序字节码;确定每一类型程序字节码的常量池;根据所述常量池中的类型依赖关系,构建所述类型依赖图;类型依赖图获取模块,用于获取类型依赖图;所述类型依赖图包括类型顶点和测试用例顶点,以及顶点之间的有向边;所述有向边用于连接具有直接依赖关系的顶点;传递闭包计算模块,用于计算所述类型依赖图中,所述变异体所属的类型顶点的传递闭包;传递闭包反映了类型之间直接和间接的依赖关系,用于分析变异体和测试用例的关联;计算传递闭包的过程如下:初始化一个边集合,用于存储新增的边,后续用于往类型依赖图中添加边;遍历类型依赖图中所有顶点,对于每个顶点,以每个顶点为源点,开始深度优先遍历,每次遍历到一个顶点,就往边集合里面新增源点到该顶点的边,边权为深度;最后将新增的边添加到类型依赖图中;目标测试用例确定模块,用于根据所述传递闭包,确定与所述变异体有依赖关系的目标测试用例;所述目标测试用例确定模块包括:顶点确定单元,用于根据所述传递闭包确定所述传递闭包所经历的顶点;目标测试用例确定单元,用于对所述传递闭包所经历的顶点与测试用例顶点集合取交集,得到与所述变异体有依赖关系的目标测试用例;调用模块,用于调用各所述目标测试用例对所述变异体进行变异测试。
6.根据权利要求5所述的基于测试用例优化的程序变异测试系统,其特征在于,所述系统还包括调用顺序确定模块,所述调用顺序确定模块用于:根据所述类型依赖图,确定所述变异体所属的类型顶点到各目标测试用例顶点的路径上有向边的数量,得到各目标测试用例对应的权值;根据对应权值的大小确定各所述目标测试用例的调用顺序。