论文部分内容阅读
在软件生命周期过程中,软件测试是保证软件质量的关键环节之一。随着并行分布式系统和网络技术的不断发展,并行程序得到广泛应用。并行程序包含多个并发运行的线程,多个线程一起工作来完成某项任务,多线程的运用提高了计算效率,但并行程序运行过程和运行状态的不确定性给并行测试带来新的挑战。一方面需要调整、改进传统的并行测试策略和方法;另一方面探索出适应并行程序特征的测试方法和技术也尤为必要。并行程序测试分为不确定性测试、确定性测试、可达性测试和Concolic测试。不确定性测试是并行程序在相同输入条件下重复运行多次并检验每次运行的结果,属不可控测试。基于延迟的不确定性测试方法是在程序的特殊指令前设置延迟指令以保证特殊指令在程序下一次执行中被运行,该方法用于选择延迟点的图没有体现并行程序的运行过程,所选择的延迟点较多且没有提出测试算法。通过运用并行控制流程图(CCFG)选择延迟点和提出相应的测试算法,改进了现有的基于延迟的不确定性测试,新方法增强了不确定性测试的可控性,进一步提高了不确定性测试的实用性。可达性测试和concolic测试运用强先发生于关系(SHB)选择测试同步串,存在测试同步串数量过多而无法穷尽的问题。研究支持保持读取结果性的稍强先发生于关系(LSHB),提出了既能找出并行程序所有的读出结果,保证一定测试充分性,又能减少测试同步串数量的方法,新方法对测试同步串按照‘写-读’对集合进行等价类划分,从而达到约减测试同步串数量的目的。T-way可达性测试将t-way组合测试用于可达性测试,需要分析并记录并行程序每个发送项和接收项的控制结构和竞争组,这在实际测试中难以实现,从而降低整个测试的可操作性。通过运用向量时钟确定竞争接收项的运行次序,并按照横向和纵向增长规则生成测试竞争表,提出了基于向量时钟的并行程序可靠组合测试策略,新策略无需分析和记录每个发送项和接收项的控制结构和竞争组,并保证了每个竞争接收项的发送项的改变均被覆盖,减少了可达性测试的测试同步串数量和运行错误同步串的次数,进一步提高了可达性测试的性能。可达性测试在给定输入条件下能生成并测试并行程序的所有偏序同步串,从而穷尽在该输入条件下并行程序的所有运行过程。可达性测试存在无法找出并行程序不可达点和不可达边以及测试同步串数量过大而无法穷尽的难点。针对可达性测试难点的根本原因,将全同步对覆盖标准、全点覆盖标准和全边覆盖标准用于可达性测试,提出了基于三种覆盖标准的可达性测试方法,并对三种方法进行分析比较。通过实验分析得出基于全点、全边覆盖标准的可达性测试能分别找出并行程序所有不可达点、不可达边,基于三种覆盖标准的可达性测试在保证一定测试效果的基础上进一步提高了可达性测试的性能。Concolic测试是一种针对Java的实用性较高的并行程序测试方法,它能运行程序所有的可达状态且能检测所有可能的数据竞争和死锁状态。Concolic测试解决了可达性测试未涉及的选择测试输入条件的问题,但存在存贮信息量过大和运行相同同步串多次的问题。研究并行Java程序动态切片方法,提出了基于并行Java程序动态切片的concolic测试方法,新方法在保证concolic测试原有优点的基础上,大量减少存贮信息,并保证不运行相同同步串两次或两次以上。通过实验分析,证实了所提出的方法具有存贮信息量少、运行效率高等优点。