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

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

前言

本文分为以下内容:

  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小时,观察其渗漏情况(时间和程度)。

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

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

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

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

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

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

总结

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

目录
相关文章
|
8天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
50 8
|
17天前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
15天前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
28 1
|
22天前
|
测试技术 UED 开发者
软件测试的艺术与科学:探索有效的测试策略
在软件开发的宇宙中,测试是一颗璀璨的星辰,它不仅保障着产品的质量,也指引着项目的方向。本文将带你穿梭于测试的银河系,从基础的单元测试到复杂的集成测试,再到全面的系统测试,我们将一探究竟。你会发现,每一个测试阶段都是一次对代码深度和广度的挑战,也是一次对开发者耐心和智慧的考验。准备好了吗?让我们开始这段探索之旅,看看如何通过精心设计的测试案例来确保我们的软件能够在现实世界中稳健运行。
|
13天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
14天前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
38 4
|
14天前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
27 4
|
15天前
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
在软件开发的世界中,测试是确保产品质量的关键环节。本文将深入探讨自动化测试框架的重要性和实现方法,旨在为读者揭示如何通过自动化测试提升软件测试效率和准确性。我们将从测试的基本概念出发,逐步引导读者了解自动化测试框架的设计和实施过程,以及如何选择合适的工具来支持测试活动。文章不仅提供理论知识,还将分享实用的代码示例,帮助读者将理论应用于实践。无论你是测试新手还是经验丰富的开发者,这篇文章都将为你打开一扇通往更高效、更可靠软件测试的大门。
18 1
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
智能化软件测试:AI驱动的自动化测试策略与实践####
本文深入探讨了人工智能(AI)在软件测试领域的创新应用,通过分析AI技术如何优化测试流程、提升测试效率及质量,阐述了智能化软件测试的核心价值。文章首先概述了传统软件测试面临的挑战,随后详细介绍了AI驱动的自动化测试工具与框架,包括自然语言处理(NLP)、机器学习(ML)算法在缺陷预测、测试用例生成及自动化回归测试中的应用实例。最后,文章展望了智能化软件测试的未来发展趋势,强调了持续学习与适应能力对于保持测试策略有效性的重要性。 ####
|
21天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
27 6