软件缺陷,通常又被称作 Bug,是指计算机或程序中存在的某种破坏正常运行能力的问题。在软件系统中,软件缺陷可以理解为系统所需要实现的某种功能的失效或违背。本文的目的是类比软件系统开发过程与校园生活的考试过程,分析软件系统的缺陷,分享软件系统缺陷的分类思路。
在《漫谈软件系统测试——通信节点识别》中,文章介绍了通过识别和拆分软件系统通信节点的方法去验证软件系统的正确性,实际上,验证软件系统正确性的这个过程也是发现软件系统缺陷的过程。在这个过程中,我们发现、记录和跟踪软件系统的Bug,直至系统Bug被修复。对于测试工程师来说,我们理解这是一个缺陷管理的过程。对于非测试人员来说,我们也可以将此过程类比为自己学生时代考试后建立自己试卷错题合集的过程。
一、数学考试 VS 软件系统开发
对于一场考试(以数学为例)来说,如图1-1所示,常见的相关干系人可以有出卷人、答卷人和阅卷人,而在软件系统的开发过程中,常见的相关干系人有产品经理、开发人员(前端开发/后端开发)和测试人员。
图1-1 考试干系人 VS 软件系统干系人
在考试前,出卷人需要把考纲要求转化为题目设计,而在软件系统启动前,产品经理需要把业务需求转化为软件系统需求。
在考试中,常见的考试内容可分为选择题、填空题和应用题,而在软件系统开发中,常见的工作内容可分为前端开发和后端开发。
在考试后,阅卷人需要对试卷进行批改和评分,而在软件系统开发完成后,测试人员需要对软件系统的质量进行验证和评估。
二、考试问题 VS 系统Bug
场景一:在考试中,有时候会出现出题人出了错误题目的情况,导致答卷人解不出答案,对应到软件系统开发中,也会出现产品经理提出了不合理或者错误的需求,导致系统无法满足用户需求。
场景二:在考试中,有时候我们虽然理解题目了,但是我们使用了不恰当的方法去解题,也有可能得到错误的答案,对应到软件系统的开发中,我们在软件系统的设计过程作使用了不恰当的方案,也可能在系统中埋下Bug。
场景三:在考试中,如果我们粗心大意的话,经常会出现漏做题目的情况,对应到软件系统开发中,如果我们在需求评估阶段没有明确需求功能点,我们也会遗漏某些功能的开发。
场景四:在考试中,如果我们审题错误或者在没有理解题意的情况下答题,我们得出错误的答案,对应到软件系统开发中,如果我们对需求理解不清晰或者理解错误,也会开发出不符合需求的功能。
场景五:在考试中,有时候我们用对了公式,但是计算过程计算错误了,也会得到错误的答案,对应到软件系统的开发中,我们做了正确的设计但是在开发过程中编写了错误的代码,也将引入Bug到系统中。
场景六:在考试中,有时候我们正确地解答了题目,最后把答案填到答题卡时却填错了,对应到软件系统的开发中,我们在系统功能验证通过后,在发布上线时却发布了错误的配置或者代码,引发了系统Bug。
如图2-1所示,在传统的软件开发周期中,软件缺陷可能发生在软件系统整个生命周期的任一环节。以上六个场景介绍了考试及软件系统常见的问题,我们对这些问题进行归类,场景一可以归类为需求类Bug,场景二可以归类为设计类Bug,场景三、四、五可以归类为开发类Bug,场景六可以归类为发布类Bug。
图2-1 考试中问题 VS 软件系统Bug
三、开发类Bug
工作中比较常见的Bug大部分是属于开发类Bug,同样我们可以对这类Bug进行更为细致的分类,如图3-1所示,展示了笔者对某个项目前端开发各类Bug的分类及和统计,这里将Bug分类为数据展示、样式设计、数据兼容、数据关联、页面跳转。
图3-1 前端各类型缺陷占比
除了按缺陷类型分类,我们也可以按Bug的严重等级进行划分,这里将严重程度划分为P1、P2、P3和P4,分别对应了严重、一般、普通、建议。如图3-2所示,展示了笔者对某个项目不同严重等级的Bug的统计。
图3-2 不同严重等级Bug占比
四、总结
在一场考试的生命周期中,有出卷、考卷、阅卷的过程,而在一套软件系统的生命周期中,有需求分析、系统设计、开发、测试、发布的过程。与考试不同的是,软件系统这场“考试”不是由一个人“答卷”的,而是由不同岗位的人共同作答的,业术有专攻,有的人只答填空题或者选择题(前端开发),有的人只答应用题(后端开发)。相似的是,两场考试中我们都可能出现答错和漏答的情况。
重新审视校园生活中考试过程,我们每一场考试最大的收获是什么,是我们完成了那一场考试么?应该不是,我们最大的收获应该是从一场考试中发现了自己的错误,从而在考试后补缺补漏,这也是建立错题集并归纳总结问题的重要缘由之一。回到软件系统开发,我们记录和跟踪缺陷的目的是什么,仅仅是为了在软件系统开发过程中跟踪Bug直至修复么?应该不止于此,我们也可以对项目缺陷进行分析,分析其共性进而分类,从而建立项目的“错题集”,为下一次“考试”提供宝贵的经验。
文章类比考试过程分析了软件系统开发过程的缺陷,但是本文并未对软件开发过程各个环节的缺陷类别进行更具体的分类,本文想分享的是对软件缺陷分类归纳的思路,同时想强调的是对缺陷进行归纳总结的重要性。感谢你的阅读,也期待你的纠错指点。
源自公众号 爱测角 作者:Chafan