论文部分内容阅读
并发程序的测试一直是软件测试中的关注点。所谓并发程序是指两个或多个进程(或线程)协同完成一个任务。每个进程是一个序列程序执行一串语句。进程间的交流是通过信息传递来完成。然而由于与生俱来的不确定性(使用了不确定性语句,过程的进程速度难以预知),并发程序的测试有很大难度。
软件测试过程包括测试用例生成和测试用例运行。鉴于测试用例生成在测试中占有主要作用,本文主要考虑测试用例的生成。用于生成测试用例的方法可分为两种:随机测试(RandomTesting)和分域测试(PartitionTesting)。随机测试不能保证满足标准,并且不能覆盖所有的元素。分域测试现有很多方法,这些方法以覆盖所有语句,控制流,数据流或关键路径为目标。考虑到分域测试各方法的特点,从整体来说可归结为基于路径的方法和基于状态的方法。基于路径的测试首先选取测试路径,然后沿着测试路径对输入空间进行分解,但是这样的方法没有按程序语义进行,容易产生不可行路径。基于状态的测试主要以状态机或变迁系统作为产生测试数据的模型,状态空间会随着过程数增加而指数增长,很容易导致状态爆炸问题。
为了克服以上两种方法带来的缺点并且保持原有的优点,本文提出了一种形式化方法,用于对基于流的序列程序和并发程序产生测试用例。我们首先定义条件和循环覆盖准则,然后通过条件演算(conditioncalculation)对序列程序产生测试用例,最后根据定义的交互信息覆盖准则,在并发程序产生测试用例过程中将这些序列程序测试用例合并产生同步序列(SYN-sequence)。该方法是一种精确的系统的测试程序的方法。由于所产生的测试用例都是沿着程序语义进行,所以与现有的一些方法相比,该方法避免了隐含的不可行路径。另外,通过对算法复杂度的分析也表明了该方法不会产生状态爆炸。