- 选题背景和意义:
多核架构的快速发展提供了硬件并发能力,为此并发程序设计日益广泛。多线程技术提高了计算效率,并且对于并发性问题的解决更加适用。Java、C#和Ada等主流程序设计语言对并发程序提供了直接支持,C和C 语言也能通过一些多线程库间接提供支持,这都为并发程序设计提供了便利。
并发程序能同时执行多个线程,在给定输入下,由于线程调度、线程间通信以及同步等原因导致并发程序的执行具有不确定性,多次执行并发程序可能由于不同线程的交织而产生不同的结果,这使得并发程序的测试更加困难。目前,对并发程序的测试主要有两种方法:非确定性测试和确定性测试。非确定性测试是指并发程序在给定输入下执行多次,期望错误能够在至少一次程序执行中暴露出来。这种测试方法优点是测试过程不受控制,容易实施,但缺点是效率不高,很可能多次执行程序却得到相同的同步序列。确定性测试则是对程序执行过程进行人为地控制,迫使程序在给定输入下确定性地执行某个给定的同步序列。这种测试方法的优点是可以执行某些事先精心挑选的同步序列,但如何为并发程序挑选同步序列十分困难。
可达性测试是结合了非确定性测试以及确定性测试的一种新的测试方法,采用基于前缀的测试技术,先确定性执行程序到某个点,再让程序非确定性执行剩余部分,可高效地生成并发程序的全部可行同步序列。目前,可达性测试生成测试用例集的充分性主要通过变异测试(Mutation Testing)来进行评估。变异测试通过对原测试程序做很小的修改得到大量变体程序,然后在变体程序和原程序上执行测试用例集,如果二者的输出结果不同则认为该变体被测试用例杀死,也表示测试用例能够发现此类错误。
- 课题关键问题及难点:
1.可达性测试算法及工具使用
可达性测试算法首先非确定性执行并发程序搜集同步序列Q,对同步序列Q做竞争分析得到竞争变体, 即通过选取竞争集合中的发送事件,改变接收事件的发送方获得,然后对竞争变体执行基于前缀的测试,对剩余部分执行非确定性测试得到新的同步序列,对新的同步序列重复以上操作直到没有新的同步序列生成为止。
掌握可达性测试工具的使用,理解并发程序共享变量分析工具,从而生成变体程序进行测试。
难点在于:可达性测试方法的理解,竞争集的计算以及构造同步序列的竞争表来生成所有可行的竞争变体。可达性测试工具的理解和使用。
工具使用
2.实验与分析
对大规模并发程序生成变体程序,使用可达性测试工具测试变体程序并与其他工具进行比较。
以上是毕业论文文献综述,课题毕业论文、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。