功能测试中遇到不可重现软件缺陷的解决策略

简介:

测试人 员提交软件缺陷报告后,最不希望看到的这些缺陷被开发人员忽略,尽管你坚信这一定是软件缺陷,而罪魁祸首就是这些缺陷不可重现!一旦出现这样的情况,测试 人员会很被动,开发人员也会对测试人员有意见。这就使得关系本来就不怎么融洽的测试人员和开发人员之间的关系更加紧张;对于整个时间紧凑的项目来说,无异 于是火上浇油。为了减少这种尴尬情况的出现,非常有必要分析一下软件缺陷不能重现的原因。

  1. 测试环境不一致

  从广义上来说,保证或影响软件的任何因素都是环境,例如,系统的构造版本、应用服务器的类型和版本、浏览器的语音和版本等。

  以下就是我们会遇见的错误:某个B/S(Web应用)架构的系统软件运行于IE8上,出现了JS(Java Script)脚本错误导致页面浏览异常的软件缺陷,把IE8降级到IE6或7后,此软件缺陷就自动消失了。

  2. 测试配置不一致

  程序运行都是基于一定的配置条件下进行的,包括被测系统参数设置、基础数据完整性、业务流程完整性等,比如,我们曾经在某数据库产品测试过程中,由于在安装界面中选择了非默认路径进行安装,结果导致该数据库物理备份会恢复功能出错,而对方在核对缺陷时按照默认路径进行了安装,因此缺陷总是无法重现。

  3. 内存泄露

  某些系统长期运行后出现速度慢的原因是开发人员未养成回收内存的习惯。这类错误在短期内不会出现,但当系统长期运行时就会出现,并且由此会引发一系列的问题。

  4. 数据接口不匹配

  一般只有在查看源代码后才能发现。某些类型的数据会被系统自动转换,有些数据被截断或被强制转换成另外一种数据类型时,会出现一些潜在的错误。

  基于以上测试过程中出现的软件缺陷不能重现的原因,我们提出如下一些解决策略,以更好地从源头上减少不可重现软件缺陷的出现。

  1. 测试环境配置充分细致

  测试人员在测试前,严格核对系统的运行环境配置要求,并充分考虑系统在线运行后的环境变化,做好测试环境配置的全面规划,注意细节。另外可以使用Ghost对硬件或某个分区进行镜像备份。

  2. 捕获系统日志,分析异常信息

  测试人员应养成记录系统错误日志的习惯,保留系统在出错时的真实状态。比如将IE浏览器高级选项设置为“显示每个脚本错误的通知”。

  3. 监测系统状态,异常及时告警

  在实施系统测试过程中,我们必须充分关注系统运行状态的变化,一旦系统运行状态发生较大的波动,势必会对后期的业务执行带来较大的影响。因此,系统运行监测的一个重要内容是需要及时反馈系统运行异常,并提供异常报告。

  4. 测试数据翔实,易于追溯

  测试数据是软件测试的 核心,很多情况下,测试人员为了缩短测试周期,在实际测试前并没有充分编写足够的测试数据,也没有记录这些测试数据的执行顺序和运行轨迹,一旦程序在某个 节点出现问题,我们无法判断其产生的过程和引起这个缺陷的具体测试数据,对我们进一步分析软件缺陷产生的原因会造成一些不必要的障碍。

  正是基于此我们强调在软件测试开始前,我们必须制定完整的测试用例,辅以详细的测试数据,并明确测试数据的操作步骤和每一步的预期结果,这样,一旦软件出现问题,我们可以很快进行重现和定位。

附录1:常用正交表

(1)L4(23

列号
1
2
3
试验号
1
1
1
1
2
1
2
2
3
2
1
2
4
2
2
1

(2)L8(27)

列号
1
2
3
4
5
6
7
试验号
1
1
1
1
1
1
1
1
2
1
1
1
2
2
2
2
3
1
2
2
1
1
2
2
4
1
2
2
2
2
1
1
5
2
1
2
1
2
1
2
6
2
1
2
2
1
2
1
7
2
2
1
1
2
2
1
8
2
2
1
2
1
1
2

(3)L12(211)

列号
1
2
3
4
5
6
7
8
9
10
11
试验号
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
2
2
2
2
2
2
3
1
1
2
2
2
1
1
1
2
2
2
4
1
2
1
2
2
1
2
2
1
1
2
5
1
2
2
1
2
2
1
2
1
2
1
6
1
2
2
2
1
2
2
1
2
1
1
7
2
1
2
2
1
1
2
2
1
2
1
8
2
1
2
1
2
2
2
1
1
1
2
9
2
1
1
2
2
2
1
2
2
1
1
10
2
2
2
1
1
1
1
2
2
1
2
11
2
2
1
2
1
2
1
1
1
2
2
12
2
2
1
1
2
1
2
1
2
2
1

 

(4)L9(34

列号
1
2
3
4
试验号
1
1
1
1
1
2
1
2
2
2
3
1
3
3
3
4
2
1
2
3
5
2
2
3
1
6
2
3
1
2
7
3
1
3
2
8
3
2
1
3
9
3
3
2
1

(5)L16(45

列号
1
2
3
4
5
试验号
1
1
1
1
1
1
2
1
2
2
2
2
3
1
3
3
3
3
4
1
4
4
4
4
5
2
1
2
3
4
6
2
2
1
4
3
7
2
3
4
1
2
8
2
4
3
2
1
9
3
1
3
4
2
10
3
2
4
3
1
11
3
3
1
2
4
12
3
4
2
1
3
13
4
1
4
2
3
14
4
2
3
1
4
15
4
3
2
4
1
16
4
4
1
3
2

(6)L25(56

列号
1
2
3
4
5
6
试验号
1
1
1
1
1
1
1
2
1
2
2
2
2
2
3
1
3
3
3
3
3
4
1
4
4
4
4
4
5
1
5
5
5
5
5
6
2
1
2
3
4
5
7
2
2
3
4
5
1
8
2
3
4
5
1
2
9
2
4
5
1
2
3
10
2
5
1
2
3
4
11
3
1
3
5
2
4
12
3
2
4
1
3
5
13
3
3
5
2
4
1
14
3
4
1
3
5
2
15
3
5
2
4
1
3
16
4
1
4
2
5
3
17
4
2
5
3
1
4
18
4
3
1
4
2
5
19
4
4
2
5
3
1
20
4
5
3
1
4
2
21
5
1
5
4
3
2
22
5
2
1
5
4
3
23
5
3
2
1
5
4
24
5
4
3
2
1
5
25
5
5
4
3
2
1

(7)L8(4×24

列号
1
2
3
4
5
实验号
1
1
1
1
1
1
2
1
2
2
2
2
3
2
1
1
2
2
4
2
2
2
1
1
5
3
1
2
1
2
6
3
2
1
2
1
7
4
1
2
2
1
8
4
2
1
1
2

(8)L12(3×24

列号
1
2
3
4
5
试验号
1
1
1
1
1
1
2
1
1
1
2
2
3
1
2
2
1
2
4
1
2
2
2
1
5
2
1
2
1
1
6
2
1
2
2
2
7
2
2
1
2
2
8
2
2
1
2
2
9
3
1
2
1
2
10
3
1
1
2
1
11
3
2
1
1
2
12
3
2
2
2
1

(9)L16(44×23

列号
1
2
3
4
5
6
7
试验号
1
1
1
1
1
1
1
1
2
1
2
2
2
1
2
2
3
1
3
3
3
2
1
2
4
1
4
4
4
2
2
1
5
2
1
2
3
2
2
1
6
2
2
1
4
2
1
2
7
2
3
4
1
1
2
2
8
2
4
3
2
1
1
1
9
3
1
3
4
1
2
2
10
3
2
4
3
1
1
1
11
3
3
1
2
2
2
1
12
3
4
2
1
2
1
2
13
4
1
4
2
2
1
2
14
4
2
3
1
2
2
1
15
4
3
2
4
1
1
1
16
4
4
1
3
1
2
2

 

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
6天前
|
设计模式 测试技术 持续交付
深入白盒测试:提升软件质量与性能的关键策略
【4月更文挑战第20天】 在软件开发的复杂世界中,确保产品的质量和性能始终是至关重要的任务。白盒测试,作为软件测试领域的重要分支,提供了对程序内部结构和逻辑的深入分析手段。本文将探讨如何通过有效的白盒测试策略来优化软件性能,减少缺陷,并最终提高用户满意度。通过剖析代码检查、单元测试、集成测试等白盒测试技术,我们将了解这些方法如何揭示潜在的问题点,并为改进提供方向。
|
1天前
|
存储 XML 监控
深入理解自动化测试中的数据驱动策略
【4月更文挑战第25天】 在软件测试领域,数据驱动测试(DDT)是一种高效的测试方法,它允许测试人员通过外部数据源来控制测试用例的执行。本文将探讨数据驱动测试的核心概念、实施步骤及其优势与局限性。通过具体案例分析,我们深入了解如何利用数据驱动策略提高测试覆盖率和效率,并讨论其在复杂测试场景中的应用。
|
1天前
|
测试技术 API Python
Appium控件交互策略:优化自动化测试效率的关键方法
该文介绍了如何使用Selenium与APP进行交互,包括点击、输入和状态判断等操作。例如,通过element.click()点击控件,element.send_keys()输入文本,以及element.is_displayed()检查元素是否可见。还展示了如何获取元素属性,如resource-id、text和class,并提供了Python代码示例来定位并操作APP元素,如滑动条的显示、可点击性检测及点击滑动条中心位置。在编写测试脚本时,应注意元素定位和状态验证以确保测试稳定性。
7 1
|
3天前
|
算法 测试技术
深入白盒测试:静态分析与动态覆盖的协同策略
【4月更文挑战第23天】 随着软件开发复杂性的增加,确保代码质量和功能正确性成为一项挑战。白盒测试作为软件测试的重要分支,它通过检查程序内部逻辑和结构来发现潜在缺陷。本文将探讨一种融合静态分析和动态覆盖技术的白盒测试方法,旨在提升测试效率和错误发现率。我们将首先概述这两种技术的基本原理,然后详细阐述如何将它们结合起来以实现互补优势,最后通过一个案例研究展示这种协同策略在实际中的运用效果。
|
3天前
|
算法 测试技术 持续交付
深入白盒测试:提升软件质量与效率的关键策略
【4月更文挑战第23天】 在软件开发的复杂多变的环境中,确保产品的质量和可靠性是至关重要的。白盒测试作为一种重要的软件测试方法,允许测试者通过检查内部结构、设计和编码来验证软件的功能性和正确性。本文将探讨白盒测试的关键概念、技术及其在提升软件测试效率和质量中的应用。我们将重点讨论如何借助白盒测试发现潜在缺陷、优化测试用例设计,并通过具体案例分析展示其在实际中的应用效果。
|
3天前
|
测试技术
深入白盒测试:提升软件结构透视能力
【4月更文挑战第23天】在软件测试的广阔天地中,白盒测试以其独特的内在逻辑和代码透视能力而显得尤为重要。它不仅仅是一个测试方法,更是一种确保软件质量和可靠性的重要手段。本文将深入探讨白盒测试的概念、方法和最佳实践,旨在为软件开发和测试人员提供一种系统的视角,以帮助他们更好地理解并应用白盒测试技术,进而提高软件产品的质量。
5 0
|
4天前
|
算法 Java 测试技术
深入解析白盒测试:提升软件质量与效率的关键
【4月更文挑战第22天】 在软件开发的复杂多变的世界中,保证代码质量和功能的正确性是至关重要的。白盒测试作为一种重要的软件测试方法,提供了一种透视软件内部逻辑结构的途径。本文将详细探讨白盒测试的概念、技术手段和实际应用,旨在帮助读者理解如何通过这种测试提高软件系统的稳定性和性能。文章还将讨论白盒测试中面临的挑战以及应对策略,以期为软件质量保证提供实用的指导。
12 2
|
Java 测试技术
Java 中的单元测试和集成测试策略
【4月更文挑战第19天】本文探讨了Java开发中的单元测试和集成测试。单元测试专注于单一类或方法的功能验证,使用测试框架如JUnit,强调独立性、高覆盖率和及时更新测试用例。集成测试则验证模块间交互,通过逐步集成或模拟对象来检测系统整体功能。两者相辅相成,确保软件质量和降低修复成本。
|
8天前
|
敏捷开发 Devops 测试技术
深入探索软件测试:保障质量的终极策略
【4月更文挑战第18天】在软件开发生命周期中,确保最终产品的质量至关重要,而软件测试则是达成这一目标的关键步骤。本文将探讨软件测试的多维度作用,包括其在不同开发阶段的应用、面临的挑战以及未来趋势。通过分析自动化测试工具的选择、测试用例设计的最佳实践和持续集成的重要性,文章为读者提供了一套全面的质量保证策略,旨在帮助团队提升测试效率并优化产品质量。
|
13天前
|
Web App开发 测试技术 网络安全

热门文章

最新文章