论文部分内容阅读
近年来随着计算机软件行业的飞速发展,计算机软件系统日益复杂,软件质量问题已经严重限制了计算机技术的发展。软件测试是保证软件质量和可靠性的主要手段,这对于航空航天、自动驾驶、医疗等领域中使用的安全关键软件系统尤为重要。这些系统需要极高的可靠性,只要发生故障就可能会导致灾难性的后果。因此人们制定了软件认证标准,对安全关键系统提出了一系列严格的要求,在软件测试时必须予以考虑。例如在航空软件认证标准中有一条要求仅适用于安全关键系统,即用于测试这些系统的测试用例必须满足修订的条件/判定覆盖(MC/DC)准则。MC/DC准则是一种比较严格的代码覆盖准则,旨在证明判定中涉及的所有条件都可以独立地影响判定的结果。目前,测试人员普遍采用手工方法设计测试数据。但是手工生成测试数据的效率低下、容易出错,导致测试成本昂贵,很难保证软件质量。动态符号执行技术能够针对被测程序自动生成测试用例,该技术降低了由手工测试而产生的高额成本,大幅提高了测试效率,近年来被广泛使用。但是,现有的动态符号执行技术以分支覆盖为目标进行测试生成,因此不能生成满足MC/DC准则的测试用例。为了解决这个问题,本文提出了一种基于代码转换的测试用例生成方法,以优化现有的使用动态符号执行技术的测试生成过程,使其能够生成满足MC/DC准则的测试用例。本方法对待测程序的源代码进行分析,针对判定表达式生成条件约束,并通过代码转换的方式将条件约束添加到程序代码中。在使用动态符号执行技术进行测试用例生成时,这些条件约束会指导符号执行技术探索特定的路径,最终生成满足MC/DC准则的测试用例。本文基于Clang编译器设计并实现了一个代码转换工具,自动完成上述工作,并将该工具与动态符号执行工具KLEE相结合,生成满足MC/DC准则的测试用例。本文将该方法应用于14个小型程序和12个Coreutils程序。实验结果表明,本方法能有效提高测试用例的MC/DC覆盖率。对于小型程序,应用本文方法生成的测试用例MC/DC覆盖率可以达到100%;对于Coreutils程序,与未应用本方法相比,应用本文方法生成的测试用例MC/DC覆盖率平均提高了14.66%,达到98.01%。