- 浏览: 219537 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
Wangwei86609:
非常好的规则引擎框架,支持决策树和多线程运行规则https:/ ...
规则引擎 -
hzxlb910:
真详细,收藏哈
maven setting.xml配置说明 -
东方胜:
[b][/b]
脚本语言 Tcl -
345161974:
hyw520110 写道345161974 写道这个Visua ...
Visual Tcl Binary 完整版(完美中文支持) -
hyw520110:
345161974 写道这个Visual Tcl Binary ...
Visual Tcl Binary 完整版(完美中文支持)
并行程序是指控制计算机系统中两个或多个分别包含一系列指令序列的操作同时执行的程序,是对处理机上多个操作、或者任务同时执行的一种“规划”。处理机在运行并行程序时将同时工作于同一程序的不同方面,同时控制和运行分别包含一系列指令的两个或多个操作。并行程序设计的主要目的是节省大型和复杂问题的解决时间。
并行程序设计技术的发展已有 20 多年的历史了,高性能并行计算机系统正在进入越来越多的应用领域。但是与硬件的发展相比,并行软件的发展则显得有些滞后,影响了硬件效率的发挥,限制了并行机系统的广泛应用,因此并行程序的开发与研究也越来越多深入到现在软件的开发过程中。相比较串行程序的开发,当前并行程序的开发与研究存在很多的困难,其中主要是因为缺乏有效的并行程序设计方法和工具,使得编写正确并行程序、理解并行程序的行为、调试和优化并行程序的性能都很困难。
单元测试是对程序代码单元进行函数级的测试,是完成对最小软件设计单元的验证工作。
单元测试贯穿于软件开发的整个过程中,对于保证软件质量的重要性不言而喻。作为一种白盒测试,单元测试很多时候是与开发同时进行的。关于单元测试的工具也很多,其中包含著名的 xUnit 系列。本文将涉及到的多线程单元测试工具就是从 Java 单元测试工具 JUnit 中扩展而来的。
对于 Java 来说,JUnit 是备受开发人员喜爱的单元测试工具。它甚至还影响了其他语言的测试框架。这点,我们从繁多的 xUnit 框架就可以看出来。随着多核时代的到来,开发人员将需要进行越来越多的并行程序测试。得益于 JUnit 的可扩展性,我们可以使用 Annotation 让 JUnit 更好地支持并行测试。
得益于 JUnit 良好的可扩展性,扩展 JUnit 实现多线程单元测试这里主要是通过生成实现多线程测试过程中所需 Annotation 的定义并实现运行自定义测试逻辑来实现的。
关于扩展 JUnit 实现多线程单元测试,我们在另一篇文章《扩展 JUnit 测试并行程序》里有专门的介绍,请参见 参考资源,下面我们将主要针对这一扩展说明如何在集成开发环境中创建和运行测试用例。
在使用集成开发环境创建多线程的测试用例之前,首先需要在环境中安装扩展 JUnit 的插件,在本文中我们主要介绍名为 Unit Test for Multi-Thread 的扩展 JUnit 在集成开发环境 Eclipse 下的安装与使用。
Unit Test for Multi-Thread 是 IBM 多核软件开发工具 Multicore SDK 下开发的一款用于并行开发中构建多线程测试用例以此来对代码进行单元测试的插件,其是伴随 Multicore SDK 一起发布的,我们可以通过 eclipse 插件安装的方式来安装它。需要注意的是 Unit Test for Multi-Thread 目前仅支持 Eclipse3.5.x ,其安装过程简述如下:
首先运行开发工具 Eclipse3.5.x,在打开界面上点击‘Help’>‘Install New Software...’>‘Add... ’,然后会跳出一个‘Add Site’对话框,在其上面的‘Location’文本框里添加将要安装插件的地址:http://awwebx04.alphaworks.ibm.com/ettktechnologies/updates,点击‘OK’,等待加载,选择‘Multicore SDK’下的‘Unit Test for Multi-Thread’,点击‘Next’进行安装即可。
下面将介绍在集成开发环境 Eclipse 中创建多线程测试用例的过程,首先需要安装上文提到的 Eclipse 插件 Unit Test For Multi-Thread。
具体将分为下面三个步骤来介绍:测试环境配置、测试用例生成向导、测试用例的运行和结果收集。
Unit Test for Multi-Thread 安装好之后,还需要一些简单的配置才能使用,具体步骤可以通过 Eclipse 环境里对项目的 Build Path 下添加 add libraries 设置完成,具体如下所示:
第一步 : 添加 JUnit 到项目 Build Path 中,使用版本为 JUnit 4.5 以上
图 1:右键单击项目,在 Build Path 菜单下选择 Add Libraries
图 2:选择 JUnit,单击 Next 进入下一页面
图 3:选定 JUnit4,单击完成
第二步:类似地,添加 Unit Test for Multi-Thread library 到项目 Build Path 中
图 4: 选定 Unit Test for Multi-Thread,单击 Next 完成添加过程
图 5:配置完成后的页面
Unit Test for Multi-Thread 为用户提供了测试用例生成向导,通过此向导,用户可以很方便地构建自己的多线程测试用例,具体使用过程如下:
1. 在 Eclipse 中,选择 File -> New -> Others,选定图中所示:Unit Test for Multi-Thread, 双击进入下一个界面
2. 将你需要测试的程序类名填入对应位置,图中例子类名是 demo.CoverageDemo。点击 next,进入下一界面
3. 在 Methods List 栏目下面选择需要进行单元测试的方法;Threaded 栏目下面确定是否使用多线程的方式进行测试,选中为生成多线程,不选则为生成单线程测试用例;在标题为 Thread Numbers for launching the Threaded methods 的文本框中可以设置测试将使用的线程数目列表,图中所示,该单元测试会分别用 1、2、4、8、16、32 和 64 个线程执行需要并行测试的方法。
Unit Test for Multi-Thread 将根据设置向导自动生成测试用例的完整代码框架,用户可根据被测试代码直接在此框架下添加所需测试的内容,以此提高编写测试用例的效率。
package test; import static org.junit.Assert.*; import org.amino.util.msdk.unit.Parallelized; import org.amino.util.msdk.unit.annotation.CheckFor; import org.amino.util.msdk.unit.annotation.InitFor; import org.amino.util.msdk.unit.annotation.ParallelSetting; import org.amino.util.msdk.unit.annotation.Threaded; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.runner.RunWith; @RunWith(Parallelized.class) @ParallelSetting(threadNumber = { 1, 2, 4, 8, 16, 32, 64 }) public class TestUnitExtensionSample1 { @BeforeClass public static void setUpBeforeClass() throws Exception {} @AfterClass public static void tearDownAfterClass() throws Exception {} @Before public void setUp() throws Exception {} @After public void tearDown() throws Exception {} @InitFor("testAdd") public void initfortestAdd(int threadNum){} @CheckFor("testAdd") public void checkfortestAdd(int threadNum){} @Threaded public void testAdd(int rank, int threadNum){ } } |
以上测试用例代码中各个 Annotation 的详细说明可以参考 这里。
Unit Test For Multi-Thread 从 JUnit 扩展而来,保留了 JUnit 运行和结果显示的方式,其运行方式和结果显示如下所示:
图 9:运行 Unit Test For Multi-Thread
和运行标准 JUnit 一样,运行 Unit Test for Multi-Thread 很简单,
测试通过时将会以绿色标识,
图 11:测试结果存存在 Errors 或 Failures
测试没有完全通过时将会以红色警告提示,
并生成错误或失败报告给出,整体风格和标准 JUnit 一致,但是其具备独有的生成多线程的测试用例和单元测试的内容,对于熟悉 JUnit 的用户来说使用此来进行并行程序的单元测试将会很方便。
随着多核处理器成为主流,并发程序越来越多的要求运用到软件开发和研究中,开发人员不可避免地需要开发和测试并行程序,本文介绍了一种在集成开发环境 Eclipse 中,创建符合用户要求的多线程单元测试用例的过程,这样开发者可以只关心测试本身的逻辑和结果,而不用去了解测试用例并行执行的琐碎细节,从而大大减少开发人员手工创建线程和同步来进行测试的繁琐工作,提高开发效率。
<!-- CMA ID: 494090 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-article-6.0-beta.xsl -->
本文中结果显示形式示例时用到的 Java 程序代码 | testMultiThread.zip | 10 KB | HTTP |
学习
-
如何安装 Unit Test for Multi-Thread。
- 阅读 developerWorks 文章:“扩展 JUnit 实现多线程单元测试”。
- 从 alphaWorks 上下载“多线程正确性分析工具”以检查程序中潜在的 deadlock 和 data race 错误。
- 从 SourceForge 下载文中 JUnit 并行测试扩展 的完整代码。
- 使用来自 IBM Haifa 实验的“ConTest”能更快的测试出并行相关的 Bug。
-
p-unit:开源单元测试和性能测试框架。
-
技术书店:浏览关于这些和其他技术主题的图书。
-
developerWorks Java 技术专区:数百篇关于 Java 编程各个方面的文章。
讨论
- 加入 developerWorks 社区。
- 查看 developerWorks 博客 的最新信息。
发表评论
-
pushlet
2012-05-31 14:56 1170基于pushlet的文件监控系统的研究与实现 http ... -
@Transactional spring 配置事务
2012-04-25 11:15 2091@Transactional spring 配置事 ... -
Spring的组件自动扫描机制
2012-04-09 17:47 0Spring将所有的bean都纳入到IOC中创建、管理和维护。 ... -
struts&rest
2012-04-03 00:11 794深入浅出REST http://www.infoq. ... -
文件转码
2011-11-16 09:55 2006工程项目太多,各工程或各文件编码不统一时,可运行本工具类,把工 ... -
安装和使用SpringIDE-------III
2011-07-29 10:40 8402. 编写类文件 · ... -
安装和使用SpringIDE-------II
2011-07-29 10:39 683显示图表,如图: 发表于 @ 2006 ... -
安装和使用SpringIDE
2011-07-29 10:36 1129这篇文章谈谈如何安装与使用SpringIDE。作为辅助Sp ... -
使用AJDT简化AspectJ开发
2011-07-29 10:05 1037面向方面编程(AOP)可用来解决当今的 许多 应用需求 ... -
利用Apache的CLI来处理命令行
2011-05-16 17:02 981CLI是Jakarta Commons中的一个子类。如果你仅仅 ... -
CGlib简单介绍
2011-04-28 08:37 845CGlib概述:cglib(Code Generation L ... -
Java ClassLoader
2011-04-25 18:24 1004当Java编译器编译好.class ... -
Template模式与Strategy模式
2011-04-20 16:23 672template method模式和stra ... -
Ibatis读写CLOB数据
2011-03-21 14:21 1042转载:http://www.iteye.com/topic/7 ... -
Cairngorm3中文简介
2011-03-18 22:07 1023官方原文地址:http://opensource.adobe. ... -
ibator改造之返回数据库注释和数据库分页
2010-12-23 17:24 2227转载:http://www.iteye.com ... -
quatrz 任务监控管理 (2)
2010-10-28 23:28 1444在《Quartz 任务监控管理 (1)》http://www. ... -
Quartz任务监控管理 (1)
2010-10-28 23:27 1298转载:http://sundoctor.iteye.com/b ... -
Quartz 在 Spring 中如何动态配置时间
2010-10-28 23:25 1683转载: http://sundoctor.iteye.com ... -
使用org.apache.commons.net.ftp包开发FTP客户端,实现进度汇报,实现断点续传,中文支持
2010-10-28 21:09 1024使用org.apache.commons.net.ftp包开发 ...
相关推荐
在编程领域,多线程是一种常见的技术,它...总之,多线程测试是确保软件在并发环境中正确、高效运行的关键步骤。通过深入理解C#的多线程机制,并利用各种测试工具和方法,开发者可以构建出强大且可靠的多线程应用程序。
10. 多线程测试:NUnit支持多线程测试,可以并发运行测试,提高测试效率。 在Visual Studio中,可以安装NUnit扩展来方便地集成和运行NUnit测试。VS的测试探索器窗口会列出所有测试,并提供运行、调试和筛选测试的...
#### 十、多线程程序的测试和调试 - **并发测试**:并发测试是为了验证程序在多线程环境下的行为是否符合预期。这通常涉及到模拟不同的并发场景。 - **死锁检测**:检测并避免程序中的死锁情况是非常重要的,因为...
我们将深入探讨LabVIEW如何利用AMC(Advanced Modular Control)框架来实现多线程编程,以及如何在LabVIEW 2017 32位环境中通过VIPM(VI Package Manager)进行相关组件的安装和使用。 AMC框架是LabVIEW社区中创建...
在Android开发中,多线程断点续传技术是一种提高应用程序性能和用户体验的重要手段,尤其在处理大文件下载时...通过理解和实践以上知识点,开发者可以构建出稳定、高效且用户体验良好的Android多线程断点续传下载功能。
6. **并发测试**:使用`@Test.concurrent`(来自Junit Jupiter)或第三方库,可以进行并发测试,检验代码在多线程环境下的正确性。 综上所述,Junit作为一个强大的单元测试工具,不仅覆盖了基础的断言和异常测试,...
2. **测试套件**:用户可以组织多个测试为一个测试套件,方便管理和运行一组相关的测试。 3. **测试框架集成**:nUnit可以轻松地与IDE(如Visual Studio)或其他构建工具(如NAnt或MSBuild)集成,实现自动化测试。...
在描述中提到,这个实例已经被测试过其稳定性,这意味着它可能包含了错误处理、同步机制以及资源管理,这些都是确保多线程系统可靠运行的关键要素。 在实现多线程时,开发者需要考虑以下几个关键知识点: 1. **...
在编程领域,多线程技术是提升程序执行效率和用户体验的重要手段。BMDThread是一款专为简化多线程编程设计的控件,尤其适用于那些需要处理大量并发任务或者希望提高程序响应速度的应用。这款控件以其稳定性和易用性...
总之,MFC提供的多线程支持使得开发者能够在Windows平台上轻松地构建多任务应用程序。理解和掌握MFC中的线程管理,对于提升软件性能、优化用户体验以及解决复杂并发问题具有重要意义。通过实践和学习,我们可以更好...
Go语言的并发模型基于goroutine和channel,非常适合构建高效的多线程爬虫,能够轻松处理大量并发请求,同时保持代码简洁易读。 二、dcrawl的特点 1. **多线程**:dcrawl利用Go的并发特性实现多线程爬取,可以同时...
4. **测试和调试**:多线程程序的测试尤为重要,因为并发错误往往很难捕捉。 ##### 2.3 线程基本程序结构 一个典型的多线程程序通常包括以下几个部分: - **初始化线程**:使用`pthread_create()`函数创建新线程。 ...
【多线程DNS测试仪】是一款专为网络诊断和性能评估设计的应用程序,它扩展了Charles Putney的DNS测试工具,引入了多线程技术,从而提高了查询速度和效率。这款工具特别适用于需要同时处理大量DNS请求的场景,如网络...
通过多线程,服务器可以避免因为一个长时间运行的任务阻塞其他客户端的响应,从而提升整体性能和用户体验。 2. **中文支持**:在INDY10中,通信过程中显示中文字符时,不会出现乱码问题。这得益于其对Unicode编码的...
该项目是基于Python编程语言和PySide6库构建的,旨在创建一个高效的、多线程的艺术二维码生成器。PySide6是Qt库的一个Python绑定,提供了丰富的图形用户界面(GUI)功能,支持跨平台开发。在本项目中,它被用于设计...
5. `test.pbt`:可能是测试项目的工程文件,包含了关于如何构建和运行测试应用的信息。 6. `test.pbw`:PowerBuilder工作区文件,定义了项目中的各种源文件和库之间的关系,帮助开发者管理和组织他们的代码。 总的...
- **单元测试与集成测试**:编写针对线程安全性的单元测试和集成测试,确保线程能够正确地协同工作。 #### 十、总结 通过上述内容的学习,我们可以了解到Java线程不仅可以提高程序的执行效率,还能改善用户体验。...