技术文章

软件缺陷产生的原因

软件缺陷产生的原因多种多样,一般可能有以下几种原因。

1. 需求表述、理解、编写引起的错误。

2. 系统设计架构引起的错误。

3. 开发过程缺乏有效的沟通及监督,甚至没有沟通或监督。

4. 程序员编程中产生的错误。

5. 软件开发工具本身隐藏的问题。

6. 软件复杂度越来越高。

7. 与用户需求不符,即使软件实现本身无缺陷。

8. 外界应用环境或电磁辐射导致的缺陷。

 

上述情况都可能产生缺陷,常见的缺陷分为以下4种情况。

 

1. 遗漏

规定或预期的需求未体现在产品中,可能在需求调研或分析阶段未能将用户规格全部分析实现,也可能在后续产品实现阶段,未能全面实现。

 

通俗而言,一是根本没记录需求,需求本身就遗漏了客户的原始需求,二是需求是齐备完整的,但在设计开发阶段,遗漏了某些需求。

 

【案例5-1 OA系统需求遗漏缺陷】

 

OA系统需求调研时,用户提出需要实现发文回收功能,发出的通告信息可在对方未查收时撤销,需求开发人员在需求调研阶段并未记录该需求,从而导致此需求遗漏。

 

另外一种情况是,需求开发人员在需求规格说明书中已经详细阐明了需求,但研发人员在实现时遗漏了。

 

2. 错误

需求是正确,但在实现阶段未将规格说明正确实现,可能在概要、详细设计时产生了错误,也可能是编码错误,即有此需求,但需求实现与用户期望不一致。例如,排序功能,用户期望的是按价格升序排列,实现时却是降序排列。

 

【案例5-2 HTML代入注入错误】

 

OA系统中添加图书类别时,类别名称输入HTML代码,系统未做安全性防御,未能屏蔽该代码,从而导致成功添加对应代码功能,如图5-1所示。

 

软件缺陷产生的原因

图5-1 OA系统缺陷示例

 

此处的缺陷是一个典型的功能错误,可定性为安全性缺陷,系统因注入的HTML代码而显示出删除操作功能代码。

 

3. 冗余

需求规格说明并未涉及的需求被实现,即用户未提及或无需的需求,在被测对象中得到了实现,如用户未提及查询结果分类显示,但在实际实现中,却以不同类别进行了显示。

 

一般而言,冗余功能从用户体验角度来看,如果不影响正常的功能使用,则可以保留,除非存在较大应用风险。

 

4. 不满意

除了上述遗漏、错误、冗余3种常见缺陷类型外,用户对实现不满意亦可称为缺陷。例如,针对中老年人的系统在设计开发过程中,采用了时尚前卫的界面、细小隽秀的字体,导致终端用户不适应、看不清,这样即使所有需求都得到了正确的实现,但不符合用户使用习惯,也是一种缺陷。

 

在测试过程中,测试工程师需要时刻记住,功能再完美、界面再漂亮的系统,如果不是用户期望的,则该系统完全无效,所以测试过程中需处处以用户为基准,从需求角度出发。

 

【案例5-3 用户体验缺陷】

 

图5-2是用户通过“我的办公桌”流程链接跳转后的显示界面,在图中可以看到:“请注意查看待办流程:请假申请:[2006-01-01 04:37:37]”显示时出现了不恰当的换行,04:37被错误换行,此种类型的错误即可认为是用户体验方面的缺陷。

软件缺陷产生的原因