随着实用软件的规模不断增加,其逻辑复杂性也相应的增加,工业界现有的(以人工为主的)软件测试方法很难确保测试的完备性。自动化测试技术成为软件测试的重要研究方向。在一些软件测试场景中,往往会出现部分模块的内部结构对于测试者不可见的情况。灰盒测试是将黑盒测试与白盒测试相结合的测试技术,能够有效地处理这种情况。本项目将研究一种新颖的灰盒测试技术。我们采用组合测试的方法将软件的部分模块抽象成简单的桩模块。进一步,采用基于路径的分析测试方法分析软件的代码,即可获得符合测试标准的测试用例,或者自动检测程序或者规范中的错误。这种测试方法具有较高的精度和自动化程度,同时又能处理较大规模的软件。本项目计划完成一个原型工具,并以Web服务软件作为一个应用场景来验证提出的灰盒测试技术的有效性。项目的成功实施将提出新的自动化测试技术或者显著地改进现有的测试方法。
Test Generation;Gray-box testing;Combinatorial Testing;Path Analysis Techniques;Constraint Processing
软件测试是一种重要的软件质量保证方法。其中测试用例的自动生成是其中的关键问题。灰盒测试方法集成了白盒和黑盒测试中的技术,能够有效地测试真实程序。本项目研究了这一领域中的若干技术,包括黑盒测试中的组合测试方法,用于测试程序规范的基于EFSM测试,针对程序代码的自动化测试数据生成技术,以及一些相关问题。这些技术的主要技术路线是采用精确的方法分析从软件规范、程序代码的和测试需求中抽取出来的约束。项目针对一些具体问题,提出了高效率的算法,并实现了相应的原型工具。这些具体问题包括,从复杂的测试需求中产生组合测试用例,并对组合测试集进行优化;从EFSM模型和程序代码中找到一组可行的测试路径,并且满足给定的测试准则;面向SMT约束的最优化问题;采用半监督文本分类的自动错误分派;以及代码静态分析中的内存模型。