前言
本文分为以下内容:
- 认识软件缺陷及定义
- 软件缺陷的发现与处理
- 软件测试定义及常用类型
- 软件测试的分类
- 软件测试经典测试案例题——纸杯测试
一、认识软件缺陷及定义
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、按照测试阶段分类
单元测试——冒烟测试——集成测试——系统测试——验收测试——回归测试——Alpha测试——Beta测试
具体说明如下图:
2、按照测试技术分类
黑盒测试
对应功能测试或数据驱动测试:适用于系统测试,基于需求和功能性的测试,在已知产品所应具有的功能的基础上进行检测每个功能是否能正常使用。
白盒测试
对应结构测试或逻辑驱动测试,适用于单元测试,基于覆盖全部代码、分支、路径、条件的测试。
灰盒测试
介于白盒和黑盒之间的测试,关注输入输出的正确性,同时也关注内部的表现
功能测试
测试软件的功能是否满足客户的需求,包括准确性、易用性、适合性、互操作性等
性能测试
关注对软件的时间资源、空间资源的占用要求上,也是最原始的性能需求。包括执行效率、资源占用、稳定性、可靠性、安全性,兼容性、可扩展性等。
3、按照被测软件的角度划分
静态测试:不利于计算机运行待测程序而应用其他手段实现测试目的,如代码审核,主要是通过人工查找的方法进行。
动态测试:通过运行被测试软件来达到目的,借助开发软件帮助提示软件存在的问题。
4、按照测试方式划分
人工测试:通过测试人员人为的设计开发测试数据,并逐步带入软件中完成测试工作。
自动化测试:利用专门的测试软件或者借助脚本等模拟操作过程,完成测试任务。
5、按照测试类型分类
界面类测试:验证软件界面是否符合客户需求,包括界面布局是否美观、按钮是否齐全等。
安全性测试:测试软件在没有授权的内部或外部用户的攻击或恶意破坏时如何进行处理,是否能保证软件与数据的安全。
文档测试:以需求分析、软件设计、用户手册、安装手册为主,主要验证文档说明与实际软件之间是否存在差异。
五、软件测试经典测试案例题——纸杯测试
“纸杯测试”是微软公司给软件测试者面试的经典测试案例,用于考察面试者对软件测试的理解与掌握程度。
测试项目:纸杯。
需求测试:查看纸杯说明书是否完整。
界面测试:观察纸杯外观,测试表面是否光滑、手感是否舒适。
功能测试:用纸杯装水,观察是否漏水。安全测试:纸杯是否有毒或细菌。
可靠性测试:从不同高度摔下来,观察纸杯的损坏程度。
易用性测试:用纸杯盛放开水是否烫手,纸杯是否易滑、是否方便饮用。
兼容性测试:用纸杯分别盛放水、酒精、饮料、汽油等,观察是否有渗漏现象。
可移植性测试:将纸杯放在温度、湿度等不同的环境中,查看纸杯是否还能正常使用。
可维护性:将纸杯揉捏变形,看其是否能恢复。
压力测试:用一根针扎在纸杯上不断增加力量,记录多大压强时针能穿透纸杯。
疲劳测试:用纸杯分别盛放水、汽油放置24小时,观察其渗漏情况(时间和程度)。
跌落测试:纸杯(加包装)从高处落下,查看可造成破损的高度。
震动测试:纸杯(加包装)六面震动,评估它是否能应对恶劣的公路/铁路/航空运输等。
测试数据:编写具体测试数据,其中可能会用到场景法、等价类划分法、边界值分析法等测试方法。
期望输出:期望输出需要查阅国际标准及用户的使用需求。
用户文档:使用手册是否对纸杯的用法、使用条件、限制条件等有详细描述。
说明书测试:查看纸杯说明书的正确性、准确性及完整性。
总结
软件测试,是软件生命周期的重要一环,软件缺陷尽早发现,可以使损失尽量降低。纸杯测试案例,使我们对软件测试有了整体的感知以及对测试流程有了大概的了解。下一篇会对软件测试原则与基本流程进行了解并介绍常见的软件测试模型以及黑盒测试的具体测试用例。