什么是软件测试中的线程测试?
什么是线程测试?
线程测试 是一种软件测试类型,用于验证特定任务(称为线程)的关键功能。它通常在软件开发的早期阶段进行。 集成测试 阶段。基于线程的测试是系统集成测试中采用的增量策略之一。因此,线程测试更恰当的描述是…… 线程交互测试.
这里的线程不仅仅是指操作系统线程。 软件工程 就术语而言,一个线程就是一个完整的业务交易——例如“客户下单”—— trac它会遍历所有与之交互的模块。线程测试会检查当模块连接在一起后,这条单一路径是否仍然能够正常工作。
下图展示了在组装整个系统之前,各个线程是如何作为一个子系统进行集成和运行的。
线程测试的类型
基于线程的测试分为两类,这种区别决定了测试数据和可能发现的缺陷。
- 单线程测试: 单线程测试一次只处理一个应用程序事务。由于只处理一个请求,因此响应行为是可预测的,而且测试易于编写脚本和重复执行。
- 多线程测试: 多线程测试是指同时运行多个活跃事务。针对同一服务会创建多个线程,以便在并发负载下观察响应速度和共享状态处理能力。
在单线程测试中顺利通过的事务在多线程运行中仍然可能失败,因为第二次运行会增加对相同记录、连接和内存的争用。
如何进行线程测试
该线程流程侧重于集成活动,而非完整的开发生命周期。在实践中,该方法的工作方式如下。
- 基于线程的测试是基于会话的测试的一种通用形式,其中会话是线程的一种形式,但线程不一定是会话。
- 线程或程序(小功能)作为子系统逐步集成和测试,然后在整个系统中执行。
- 从最基本的层面来说,它能让集成商更好地了解测试范围。
- 它不直接测试软件组件,而是要求集成商专注于在整个系统的上下文中测试逻辑执行路径。
由于工作单元是业务路径而非组件,线程测试自然而然地位于两者之间。 模块测试 并且充分 系统测试.
多线程测试技巧
多线程缺陷与时序密切相关,因此单次干净运行所能提供的信息非常有限。以下技巧可以提高发现这些缺陷的几率。
- 通过反复运行不同组合的应用程序来测试您的多线程程序。
- 通过同时运行程序的多个实例来测试您的多线程程序。
- 在不同的硬件型号上,以不同的压力水平和工作负载运行您的多线程程序。
- 使用代码检查,因为有些同步错误更容易阅读,但难以重现。
- 仅收集主线程以外的线程中发生的错误和故障。
螺纹测试中发现的常见缺陷
并发故障很少会通过清理堆栈来宣告自身。 trace. 以下类别涵盖了多线程运行所暴露的大部分问题,并且每个类别都有一个值得注意的独特症状。
- 比赛条件: 两个线程无序地读写同一个值,因此最终结果取决于哪个线程先完成。症状:某些运行结果正确,而另一些运行结果错误。
- 僵局: 两个线程各自持有对方所需的锁,导致双方都无法继续执行。症状:事务无限期挂起,而不是抛出错误。
- 资源争用: 线程会排队等待同一个连接、文件句柄或记录,导致吞吐量在达到硬件限制之前就崩溃了。
- 数据损坏: 部分写入的共享结构会将记录置于一种任何有效交易都无法产生的状态。
- 饥饿: 低优先级线程始终无法获得所需的资源,因此一个用户路径超时,而系统的其他部分看起来运行正常。
这些都需要将失败的运行过程记录在日志中,因为如果缺陷在五十次尝试中只出现一次,则无法通过其他方式提出。 缺陷管理流程.
线程测试、并发测试和集成测试
这三个术语含义重叠,在测试计划中经常混淆。下表根据其用途对它们进行了区分。
| 方面 | 线程测试 | 并发测试 | 整合测试 |
| 受测单元 | 跨模块的一次业务交易 | 多个用户或线程同时执行操作 | 两个或多个组件之间的接口 |
| 主要问题 | 这条关键路径是否能够端到端运行? | 同时访问时会出现什么问题? | 各个模块之间通信正常吗? |
| 典型阶段 | 早期集成测试 | 系统或性能测试 | 单元测试之后 |
| 针对的缺陷 | 执行路径断裂,交接环节缺失 | 僵局、竞争条件、锁争 | 接口不匹配,数据连接错误tracts |
| 关系 | 多线程变体与并发测试存在重叠 | 比线程测试的多线程部分范围更广 | 线程测试是其中的一种增量策略。 |
总之, 并发测试 线程测试考察的是并发访问对系统的影响,而线程测试则考察的是某个重要路径在集成后是否仍然有效。同时进行这两项测试的团队通常会先安排线程测试。
螺纹测试的优势
该技术因其诸多实际原因而在集成方案中占有一席之地。
- 关键业务路径会尽早得到验证,以便在整个系统组装完成之前发现交接环节出现问题。
- 集成商可以清晰地了解测试范围,因为测试单元是一个可识别的事务,而不是一个抽象的概念。tract分量边界。
- 在系统上下文中测试逻辑执行路径会暴露出原本孤立的故障。 组件测试 看不见。
- 多线程运行可以解决并发缺陷——死锁、竞态条件和资源冲突——否则这些缺陷就会影响生产环境。
- 增量集成可以保持调试范围较小,因为一次只添加一个线程。
- 结果直接影响到 回归测试因为传递的线程显然是回归测试套件的候选对象。
线程测试的缺点
- 对于多线程测试而言,最大的挑战是能够为单元测试编写可复现的测试用例。
- 为多线程代码编写单元测试是一项具有挑战性的任务。
- 多线程测试的测试标准与单线程测试有所不同。对于多线程测试,当代码在不同的硬件上运行时,内存大小、存储容量和时序问题等因素都会有所不同。
- 线程在所跨越的模块可用之前无法进行测试,因此调度取决于集成顺序。
- 间歇性故障很容易被当作环境噪音而忽略,因此,有条不紊的记录至关重要。

