软件测试项目式学习二(认识软件测试及软件测试分类与案例分析)

简介: 软件测试项目式学习二(认识软件测试及软件测试分类与案例分析)

前言

本文分为以下内容:

  1. 认识软件缺陷及定义
  2. 软件缺陷的发现与处理
  3. 软件测试定义及常用类型
  4. 软件测试的分类
  5. 软件测试经典测试案例题——纸杯测试

一、认识软件缺陷及定义

bug与Debug:

”bug”术语的发明,因为格蕾丝·霍波(Grace Murray Hopper,是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。)她公布过早期电子计算机的一个故障原因,通常错误地归功于她。这个版本的故事源自下面这段话:“在1946年,当霍波退役后后,她加入哈佛大学的计算机实验室,继续研究马克II型和马克III型计算机的工作。操作员在追踪马克II型的错误时发现继电器中有一只飞蛾,遂有bug术语。这个bug被仔细移除,并被贴在日志本上。这带来的第一个bug,就是我们今日所说的错误(error)或程序中的故障(glitch)。”——百度百科

”Debug“意为程序除错,就是解决程序错误,也叫做调试。

软件缺陷的定义:

软件缺陷通常被称为bug,即计算机软件或程序中存在的运行错误、功能缺陷等。

软件缺陷分为:代码缺陷和功能(界面)缺陷。

IEEE对软件缺陷的定义(IEEE729(1983)):从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;

从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。

很多的bug都是在使用过程中才被发下,说明软件缺陷具有隐藏性,但是随着产品开发工作的进行,缺陷会扩散成大缺陷。

二、软件缺陷的发现与处理

如何找缺陷呢?

软件测试营运而出,即输入输出数据,根据具体的测试用例进行测试,预期结果与实际结果进行比较,从而来寻找软件缺陷。

缺陷状态:

1、经典状态:打开(缺陷处于打开状态)——指定(缺陷报告验证后,将缺陷指派给相关的开发人员负责修复缺陷)——解决(开发人员修复缺陷,并在缺陷报告上简要说明解决的措施和步骤)——关闭(测试人员对已返回的缺陷报告进行检查,重新执行相关用例,确认缺陷已经修复)——重新打开(缺陷可能因为未考虑到的情况而再次出现)

2、常见状态:激活(缺陷打开与指定)——解决——关闭

软件缺陷的分类

软件缺陷有很多,根据不同的情况与角度,可以讲缺陷分为不同的种类。

软件缺陷严重程度:

严重(系统无法使用的bug)——很高(系统级错误的bug)——高(功能性错误的bug)——中(严重界面错误,但是不影响主功能,影响小)——低(界面、提示信息等其他文字类错误)

软件缺陷的优先级:

立即解决——高优先级——正常排队——低优先级

软件缺陷的测试种类:

界面类、功能类、性能类、安全性类、兼容性类。

软件缺陷的不同阶段:

需求分析阶段缺陷——架构阶段缺陷——设计阶段缺陷——编程阶段缺陷——测试阶段缺陷

软件缺陷不同标准划分一览图:

软件缺陷处理方式:

1、已修复:开发人员对修改了相关缺陷并在缺陷报告中说明了修复步骤,等待测试人员的验证,确保缺陷修复

2、暂缓:缺陷确定存在,因技术或时间原因暂时延缓修复

3、外部原因:因外部技术原因,开发人员无法修复缺陷

4、不修复:缺陷被用户发现的概率可以忽略不记,不值得耗费资源(时间、人力等)来修复。

5、重复缺陷:其他测试人员已提交的缺陷。

6、不可重现:根据缺陷报告无法触发该缺陷,也没有其他证据来证实该缺陷的存在。

7、符合设计:程序运行的情况是设计要求的预期情况。

软件缺陷处理流程图:

缺陷报告文档(以Excel表的形式提交)

下面以图书馆管理系统缺陷报告为例:

三、软件测试定义及常用类型

软件测试的定义

软件测试是由一个程序的行为在有限测试用例集合上,针对期望的行为的动态验证组成,测试用例是从通常的无限执行域中适当选取的。

常用的软件测试类型 

编写缺陷时需要注意:

  1. 每个缺陷有且只有一个编号,时缺陷的唯一标识
  2. 缺陷需要有步骤重现。
  3. 一个缺陷生成一份报告,报告要完整。

四、软件测试的分类

按照不同的测试角度有不同的测试方法、技术与名称。下面笔者将一一分类说明。

1、按照测试阶段分类

单元测试——冒烟测试——集成测试——系统测试——验收测试——回归测试——Alpha测试——Beta测试

具体说明如下图:

2、按照测试技术分类

黑盒测试

对应功能测试或数据驱动测试:适用于系统测试,基于需求和功能性的测试,在已知产品所应具有的功能的基础上进行检测每个功能是否能正常使用。

白盒测试

对应结构测试或逻辑驱动测试,适用于单元测试,基于覆盖全部代码、分支、路径、条件的测试。

灰盒测试

介于白盒和黑盒之间的测试,关注输入输出的正确性,同时也关注内部的表现

功能测试

测试软件的功能是否满足客户的需求,包括准确性、易用性、适合性、互操作性等

性能测试

关注对软件的时间资源、空间资源的占用要求上,也是最原始的性能需求。包括执行效率、资源占用、稳定性、可靠性、安全性,兼容性、可扩展性等。

3、按照被测软件的角度划分

静态测试:不利于计算机运行待测程序而应用其他手段实现测试目的,如代码审核,主要是通过人工查找的方法进行。

动态测试:通过运行被测试软件来达到目的,借助开发软件帮助提示软件存在的问题。

4、按照测试方式划分

人工测试:通过测试人员人为的设计开发测试数据,并逐步带入软件中完成测试工作。

自动化测试:利用专门的测试软件或者借助脚本等模拟操作过程,完成测试任务。

5、按照测试类型分类

界面类测试:验证软件界面是否符合客户需求,包括界面布局是否美观、按钮是否齐全等。

安全性测试:测试软件在没有授权的内部或外部用户的攻击或恶意破坏时如何进行处理,是否能保证软件与数据的安全。

文档测试:以需求分析、软件设计、用户手册、安装手册为主,主要验证文档说明与实际软件之间是否存在差异。

五、软件测试经典测试案例题——纸杯测试

“纸杯测试”是微软公司给软件测试者面试的经典测试案例,用于考察面试者对软件测试的理解与掌握程度。

测试项目:纸杯。

需求测试:查看纸杯说明书是否完整。

界面测试:观察纸杯外观,测试表面是否光滑、手感是否舒适。

功能测试:用纸杯装水,观察是否漏水。安全测试:纸杯是否有毒或细菌。

可靠性测试:从不同高度摔下来,观察纸杯的损坏程度。

易用性测试:用纸杯盛放开水是否烫手,纸杯是否易滑、是否方便饮用。

兼容性测试:用纸杯分别盛放水、酒精、饮料、汽油等,观察是否有渗漏现象。

可移植性测试:将纸杯放在温度、湿度等不同的环境中,查看纸杯是否还能正常使用。

可维护性:将纸杯揉捏变形,看其是否能恢复。

压力测试:用一根针扎在纸杯上不断增加力量,记录多大压强时针能穿透纸杯。

疲劳测试:用纸杯分别盛放水、汽油放置24小时,观察其渗漏情况(时间和程度)。

跌落测试:纸杯(加包装)从高处落下,查看可造成破损的高度。

震动测试:纸杯(加包装)六面震动,评估它是否能应对恶劣的公路/铁路/航空运输等。

测试数据:编写具体测试数据,其中可能会用到场景法、等价类划分法、边界值分析法等测试方法。

期望输出:期望输出需要查阅国际标准及用户的使用需求。

用户文档:使用手册是否对纸杯的用法、使用条件、限制条件等有详细描述。

说明书测试:查看纸杯说明书的正确性、准确性及完整性。

总结

软件测试,是软件生命周期的重要一环,软件缺陷尽早发现,可以使损失尽量降低。纸杯测试案例,使我们对软件测试有了整体的感知以及对测试流程有了大概的了解。下一篇会对软件测试原则与基本流程进行了解并介绍常见的软件测试模型以及黑盒测试的具体测试用例。

目录
相关文章
|
2天前
|
测试技术 数据安全/隐私保护 UED
软件测试的艺术:从错误中学习,提升用户体验
在数字化时代,软件已成为我们生活不可或缺的一部分。然而,软件的错误或缺陷往往会导致用户体验的下降,甚至引发严重的后果。因此,软件测试的重要性不言而喻。本文将探讨软件测试的核心价值,如何通过有效的测试策略和工具,从错误中学习,持续优化产品质量,提升用户体验。
8 2
|
4天前
|
人工智能 算法 测试技术
软件测试中的人工智能:提升测试效率与质量
随着软件开发的快速发展,传统的手工测试方法已经无法满足现代软件项目的需求。本文探讨了人工智能在软件测试中的应用,如何通过自动化测试、智能缺陷分析和测试用例生成等技术,提高测试效率和质量。我们将详细介绍这些技术的原理和实际应用,并讨论其带来的优势和挑战。
|
2天前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
13 1
|
4天前
|
测试技术 持续交付 Android开发
软件测试中的自动化测试策略与实践
本文深入探讨了软件测试中自动化测试的策略与实践,阐述了自动化测试的重要性、适用场景及常见工具。通过对自动化测试框架的搭建、脚本编写、持续集成等方面的详细分析,揭示了如何有效提升软件测试的效率和质量。同时,本文还指出了自动化测试在实际应用中可能面临的挑战,并提出了相应的解决方案。无论是对于初学者还是资深测试工程师,本文都提供了宝贵的参考和启示。
|
15天前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
74 7
Jmeter实现WebSocket协议的接口测试方法
|
15天前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
75 3
快速上手|HTTP 接口功能自动化测试
|
15天前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
28 5
|
1月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
1月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
1月前
|
SQL Java 测试技术
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决