简介:随着多核处理器成为主流,开发并行程序随之成为一种必然要求。但是我们都知道并行程序存 在着很大的不确定性,这使得开发和测试并行程序有一定的难度,因此对于并行程序的单元测试变得尤为 重要。但是,创建多线程的单元测试并不容易,测试需要考虑测试线程间的同步,数据共享等。针对 Java 并行程序的测试,结合扩展 JUnit 的多线程测试工具,本文介绍了一种在集成开发环境中,创建符 合用户要求的多线程单元测试用例的完整过程,使得用户只用关心测试本身的逻辑和结果,而不用去了解 测试用例并行执行的琐碎细节,从而将大大方便并行程序员运行并行测试用例,提高并行程序的开发效率 和质量。
背景
并行程序
并行程序是指控制计算机系统中两个或多个分别包含一系列指令序列的操作同时执行的程序,是对处 理机上多个操作、或者任务同时执行的一种“规划”。处理机在运行并行程序时将同时工作于同一程序的 不同方面,同时控制和运行分别包含一系列指令的两个或多个操作。并行程序设计的主要目的是节省大型 和复杂问题的解决时间。
并行程序设计技术的发展已有 20 多年的历史了,高性能并行计算机系统正在进入越来越多的应用领 域。但是与硬件的发展相比,并行软件的发展则显得有些滞后,影响了硬件效率的发挥,限制了并行机系 统的广泛应用,因此并行程序的开发与研究也越来越多深入到现在软件的开发过程中。相比较串行程序的 开发,当前并行程序的开发与研究存在很多的困难,其中主要是因为缺乏有效的并行程序设计方法和工具 ,使得编写正确并行程序、理解并行程序的行为、调试和优化并行程序的性能都很困难。
单元测试
单元测试是对程序代码单元进行函数级的测试,是完成对最小软件设计单元的验证工作。
单元测试贯穿于软件开发的整个过程中,对于保证软件质量的重要性不言而喻。作为一种白盒测试, 单元测试很多时候是与开发同时进行的。关于单元测试的工具也很多,其中包含著名的 xUnit 系列。本 文将涉及到的多线程单元测试工具就是从 Java 单元测试工具 JUnit 中扩展而来的。
扩展 JUnit 实现多线程单元测试
对于 Java 来说,JUnit 是备受开发人员喜爱的单元测试工具。它甚至还影响了其他语言的测试框架 。这点,我们从繁多的 xUnit 框架就可以看出来。随着多核时代的到来,开发人员将需要进行越来越多 的并行程序测试。得益于 JUnit 的可扩展性,我们可以使用 Annotation 让 JUnit 更好地支持并行测试 。
得益于 JUnit 良好的可扩展性,扩展 JUnit 实现多线程单元测试这里主要是通过生成实现多线程测 试过程中所需 Annotation 的定义并实现运行自定义测试逻辑来实现的。
关于扩展 JUnit 实现多线程单元测试,我们在另一篇文章《扩展 JUnit 测试并行程序》里有专门的 介绍,下面我们将主要针对这一扩展说明如何在集成开发环境中创建和运行测试用例。