软件缺陷的定义
软件缺陷,常常又被叫做Bug,从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病
等各种问题;从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。
格蕾丝·赫柏(GraceMurrayHopper),是一位为美国海军工作的电脑专家,也是最早将人类语言
融入到电脑程序的人之一。而代表电脑程序出错的“bug”这名字,正是由赫柏所取的。1947年9月9
日,赫柏对HarvardMarkII设置好17000个继电器进行编程后,技术人员正在进行整机运行时,它突然
停止了工作。于是他们爬上去找原因,发现这台巨大的计算机内部一组继电器的触点之间有一只飞蛾,这
显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。所以在报告中,赫柏用胶条贴上飞
蛾,并把“bug”来表示“一个在电脑程序里的错误”,“Bug”这个说法一直沿用到今天。
软件缺陷的种类划分
按照软件缺陷的产生原因,可以将其划分为不同的缺陷类别:
功能不正常
简单地说就是所应提供的功能,在使用上并不符合产品设计规格说明书中规定的要求,或是根本无法
使用。这个错误常常会发生在测试过程的初期和中期,有许多在设计规格说明书中规定的功能无法运行,
或是运行结果达不到预期设计。最明显的例子就是在用户接口上所提供的选项及动作,使用者操作后毫无
反应。
软件在使用上感觉不方便
只要是不知如何使用或难以使用的软件,在产品设计上一定是出了问题。所谓好用的软件,就是使用
上尽量方便,使用户易于操作。如微软推出的软件,在用户接口及使用操作上确实是下了一番功夫。有许
多软件公司推出的软件产品,在彼此的接口上完全不同,这样其实只会增加使用者的学习难度,另一方面
也凸显了这些软件公司的集成能力不足。
3、软件的结构未做良好规划
这里主要指软件是以自顶向下方式开发,还是以自底向上方式开发。如果是以自顶向下的结构或方法
开发的软件,在功能的规划及组织上比较完整,相反以自底向上的组合式方法开发处的软件则功能较为分
散,容易出现缺陷。
提供的功能不充分
这个问题与功能不正常不同,这里指的是软件提供的功能在运作上正常,但对于使用者而言却不完整。
即使软件的功能运作结果符合设计规格的要求,系统测试人员在测试结果的判断上,也必须从使用者的角
度进行思考,这就是所谓的“从用户体验出发”。
与软件操作者的互动不良
一个好的软件必须与操作者之间可以实现正常互动。在操作者使用软件的过程中,软件必须很好地响
应。例如在浏览网页时,如果操作者在某一网页填写信息,但是输入的信息不足或有误。当点击“确定”
按钮后,网页此时提示操作者输入信息有误,却并未指出错误的哪里,操作者只好回到上一页重新填写,
或直接放弃离开。这个问题就是典型的在软件对操作互动方面未做完整的设计。
使用性能不佳
被测软件功能正常,但使用性能不佳,这也是一个问题。此类缺陷通常是由于开发人员采用了错误的
解决方案,或使用了不恰当的算法导致的,在实际测试中有很多缺陷都是因为采用了错误的解决方法,需
要加以注意!
为做好错误处理
软件除了避免出错之外,还要做好错误处理,许多软件之所以会产生错误,就是因为程序本身对于错
误和异常处理的缺失。例如被测软件读取外部的信息文件并已做了一些分类整理,但刚好所读取的外部信
息文件内容已被损毁。当程序读取这个损毁的信息文件时,程序发现问题,此时操作系统不知该如何处理
这个情况,为保护系统自身只好中断程序。由此可见设立错误和异常处理机制的重要性!
边界错误
缓冲区溢出问题在这几年已成为网络攻击的常用方式,而这个缺陷就属于边界错误的一种。简单来说,
程序本身无法处理超越边界所导致的错误。而这个问题,除了编程语言所提供的函数有问题之外,很多情
况下是由于开发人员在声明变量或使用边界范围时不小心引起的。
计算错误
只要是计算机程序,就必定包括数学计算。软件之所以会出现计算错误,大部分出错的原因是由
于采用了错误的数学运算工时或未将累加器初始化为0.
使用一段时间所产生的错误
这类问题是程序开始运行正常,但运行一段时间后却出现了故障。最典型的例子就是数据库的查
找功能。某些软件在刚开始使用时,所提供的信息查找功能运作良好,但在使用一段时间后发现,进行信
息查找所需的时间越来越长。经分析查明,程序采用的信息查找方式是顺序查找,随着数据库信息的增加,
查找时间自然会变长。这就需要改变解决方案了!
控制流程的错误
控制流程的好坏,在于开发人员对软件开发的态度及程序设计是否严谨。软件在状态间的转变是
否合理,要依据业务流程进行控制。例如,用软件安装程序解释这类问题最方便直观。用户在进行软件安
装时,输入用户名和一些信息后,软件就直接进行了安装,未提示用户变更安装路径、目的地等。这就是
软件控制流程不完整导致的错误问题。
在大数据量压力下所产生的错误
程序在处于大数据量状态下运行出现问题,就属于这类软件错误。大数据量压力测试对于Server
级的软件是必须进行的一项测试,因为服务器级的软件对稳定性的要求远比其它软件要高。通常连续的大
数据量压力测试是必须实施的,如让程序处理超过10万笔数据信息,再来观察程序运行的结果。
在不同硬件环境下产生的错误
这类问题的产生与硬件环境的不同相关。如果软件与硬件设备有直接关系,这样的问题就是数量
相当多。例如有些软件在特殊品牌的服务器上运行就会出错,这是由于不同的Server内部硬件了不同的处
理机制。
版本控制不良导致的错误
出现这样的问题属于项目管理的疏忽,当然测试人员未能尽忠职守也是原因之一。例如一个软件
被反映有安全上的漏洞,后来软件公司也很快将修复版本提供给用户。但在一年后他们推出新版本时,却
忘记将这个已解决的bug-fix加入到新版本中。所以对用户来说,原本的问题已经解决了,但想不到新版本
升级之后,问题又出现了。这就是由于版本控制问题,导致不同基线的merge出现误差,使得产品质量也
出现了偏差。
软件文档的错误
最后这类缺陷是软件文档错误。这里所提及的错误,除了软件所附带的使用手册、说明文档及其
它相关的软件文档内容错误之外,还包括软件使用接口上的错误文字和错误用语、产品需求设计PD、UISpec
等的错误。错误的软件文档内容除了降低产品质量外,最主要的问题是会误导用户!
软件缺陷的属性
按照严重程度分:
一般分为5个等级:
系统崩溃,严重,一般,次要,建议
按优先级分:
修正优先级:高,中,低
Bug定级示例
1级,系统崩溃
定义:严重阻碍测试和开发工作
对应优先级:最高
具体可分为:
1.功能完全没有实现
2.应用闪退/崩溃无法运行
3.应用必现安全模式,无法运行
4.其他导致功能无法测试的问题
2级,至关重要
定义:非阻碍用例执行的严重问题
对应优先级:高
具体可分为:
1.简单操作应用闪退/崩溃,卡死
2.数据丢失
3.严重影响系统,自身功能无法运行
4.严重数值计算错误
5.数据库损坏或无法保存配置
6.安全性问题(包括数据加密等)
3级,主要
定义:功能存在缺陷,但不影响应用和系统的稳定性
对应优先级:中
具体可分为:
1.内存泄露(长时间不用的对象需要被回收,不被回收占内存)
2.功能实现逻辑覆盖不全面
3.非必现,但复现概率超过50%的闪退/崩溃和安全模式
4级,一般
定义:对应用熟悉度高才能感知到的问题,对应用基本功能实现无影响
对应优先级:中
具体可分为:
1.轻微数值计算错误
2.功能实现有误,与产品文档不完全贴切
3.用户简单操作,即可明显感知的UI问题
5级,较小
定义:界面,性能缺陷
对应优先级:低
具体可分为:
1.操作界面错误(提示显示规则,刷新规则是否与文档一致)
2.边界条件显示错误
3.提示信息和界面效果展示错误(包括未给出信息、信息提示错误等)
4.复现率低于5%的闪退/崩溃和安全模式
5.插件兼容和性能未优化问题
6.非正常操作导致UI显示异常
6级,建议
定义:对于产品的意见或者建议
对应优先级:低
具体可分为:
1.对于产品设计方面的意见和建议
2.对于产品界面优化方面的意见和建议
3.对于产品需要优化增强用户体验方面的意见和建议