java 多线程测试_java多线程——并发测试

这是多线程系列第六篇,其他请关注以下:

编写并发程序时候,可以采取和串行程序相同的编程方式。唯一的难点在于,并发程序存在不确定性,这种不确定性会令程序出错的地方远比串行程序多,出现的方式也没有固定规则。这对程序的应用会造成一些困难,那么如何在测试中,尽可能的暴露出这些问题,并且了解其性能瓶颈,这也是对开发者带来新的挑战。

本篇基于多线程知识,梳理一些多线程测试需要掌握的方法和原则,以期望可能的在开发阶段,就暴露出并发程序的安全性和性能问题,为多线程能够高效安全的运行提供帮助。

本篇主要包含以下内容:

1. 并发测试分类

2. 正确性测试

3. 安全性测试

4. 性能测试

并发测试分类

测试流程

并发测试和串行测试有相同的部分,比如都需要线测试其在串行情况下的正确性,这个是保证后续测试的基础,当然了,正确性测试和我们的串行测试方没有什么不同,都是在保证其程序在单线程情况下执行和串行执行有相同的结果,这个我们不再陈述。

一般的并发测试,我们按照以下流程来进行。

1543391

6ebf609852cfc7aa5f1c9371c7a64b24.png

分类

并发测试大致可以分为两类:安全性测试与活跃性测试。

安全性测试我们可以定义为“不发生任何错误的行为”,也可以理解为保持一致性。比如i++操作,但单线程情况下,循环20次,i=20,可是在多线程情况下,如果总共循环20次,结果不为20,那么这个结果就是错误的,说明出现了错误的线程安全问题。我们在测试这种问题的时候,必须要增加一个”test point”保证其原子性同时又不影响程序的正确性。以此为判断条件执行测试代码,关于“test point”如何做,我们后续再讨论。

活跃性测试定义为“某个良好的行为终究会发生”,也可以为理解为程序运行有必然的结果,不会出现因某个方法阻塞,而运行缓慢,或者是发生了线程死锁,导致一直等待的状态等。

与活跃性测试相关的是性能测试。主要有以下几个方面进行衡量:吞吐量,响应性,可伸缩性。

吞吐量:一组并发任务中已完成任务所占的比例。或者说是一定时间内完成任务的数量。

响应性:请求从发出到完成之间的时间

可伸缩性:在增加更多资源(CPU,IO,内存),吞吐量的提升情况。

安全性测试

安全性测试,如前面所说是“不发生任何错误的行为”,也是要对其数据竞争可能引发的错误进行测试。这也是我们需要找到一个功能中并发的的“test point”,并对其额外的构造一些测试。而且这些测试最好不需要任何同步机制。

我们通过一个例子来进行说明。

比如ArrayBlockingQueue,我们知道这个class是采用一个有界的阻塞队列来实现的生产-消费模式的。如果对其测试并发问题的,重要的就是对put和take方法进行测试,一种有效的方法就是检查被放入队列中和出队列中的各个元素是否相等。如果出现数据安全性的问题,那么必然入队列的值和出队列的值没有发生对应,结果也不尽相同。比如多线程情况下,我们把所有入列元素和出列元素的校检和进行比较,如果二者相等,那么表明测试成功。

为了保证其能够测试到所有要点&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值