一、为什么会出现bug!
是人就会犯错误!
1. 问题的复杂性决定了出现bug的可能性比较高。
如何判断一个系统的复杂性呢?
Ø 需求文档的页数比较多。
Ø 需求经常改变。
Ø 不停的询问-回答-询问的过程。
Ø 方法的复杂度,工具的复杂性,人的复杂性,过程的复杂性
2. 现实很残酷,更便宜、更好、更快、市场时间等词语加注到项目开发过程中时,会忘记其中的一些环节,bug由此产生。
Ø 时间——在实践充裕的条件下,编写同样功能的程序会产生相对较少的bug。然而,现实往往是残酷的,在相对较短的时间里出高质量的产品的过程中,必然出现一些不可避免的缺陷,这时就是一个控制的问题。
Ø 钱,也可以说是公司的收益。当花费长时间去编写低bug率的代码时,必要要增加成本的基数。任何公司和个人都不会做赔本的生意,所以时间和金钱上,bug率的提高总是不断的斗争着,如何才能调整好两个的关系是至关重要的。
Ø 持续变化的过程。由于很多不定性因素,如客户需求的变更,系统环境的变化(XP/VISTA/WIN7),团队人员的变化等,这些都是考虑的问题,对于系统的缺陷影响有时就在不能完全理解式样和需求以及变化的环境中产生的。
Ø 缺少相关经验。当我们对一件事情不太熟悉的时候,出现迷糊的情况是比较多的,所以会产生相应的反应对于环境和技术相关的,由此产生的一些bug也是在所难免的,只有不断的积累经验,当碰到一件事情的时候,可以对照起来应用,效果就更佳!
3. 人性的弱点
Ø 是人都会犯错误的。我们常常会犯一些很低级的错误,这个时候,我们需要正式自己的错误,然后勇于改正错误。
二、bug是如何产生的
1. 对软件的修改
在修改软件的过程可能产生自客户需求的变更以及维护阶段对式样理解的不透彻,这些环节都会有意无意的产生出bug,造成软件整体水平的下降。主要表现在以下几点:
Ø 理解力不足。
在对问题理解力不够的条件下很难正确的修改软件。
Ø 视野狭隘
Ø 特征蠕变
2. 拙劣的描述
一个不正确的描述会导致不正确的实现,从而导致bug。
3. 方法的复杂性
4. 缺少一致的观点
5. 程序员错误(缺乏对工具的理解,使用不恰当的工具,懒惰)
三、bug是如何躲过测试的
1. 遵循形式过程代价太大
由于检查、审查和测试占据很多的时间精力和费用,所以付出的成本代价比较大。
2. 市场/政策的决策
3. 时间不充分
如前所述,测试要花时间,QA要花时间,当日程表改过后,留给测试和QA的时间相当少,所以也就是这个时候,bug出现的机率开始提高。记得,软件在时间不充裕的时候就会出现bug。
4. 缺少重现能力
有时候当测试人员发现错误后,很难再次重现该bug。当然bug的可重现性有很多原因,如没有正当的或正确的记录和跟踪bug出现的环境和状况,没有适当的配置和环境来重现等都是bug逃避的手段。
5. 自负
作为一个程序员都对自己的程序非常自信,任务没有错误,认为特完美,殊不知错误就发生在你认为非常完美的地方,可以这样说,任何人都无法面对自己的缺点就像开发出的软件时无法面对自己的bug一样,所以这也是bug为什么能够继续猖獗的原因之一。
6. 差劲的描述/不知道该测什么
当我们失去目标时,我们的前途开始渺茫,我们不知道自己的生活中心是什么,就像我们面对软件时不知道如何下手测试其正确性一样。发现bug如何更好的描述,如何更好的重现bug以为开发人员找到突破口是关键。所以详细的记录bug发生的环境和条件至关重要。
7. 缺乏测试环境
好的测试环境有三个特征:有良好工具的测试人员,在一台与客户系统有相同的系统配置的计算机上的软件,用户的使用被理解并且被良好的建模。只有这三点都满足时,才能更好的测试出bug,并且记录。
小结
通过对bug生命周期这章的学习,了解到bug产生的原因以及bug为什么没有在测试中发现的种种原因。只有了解如何产生我们才能更好地面对它,解决它。
Bug的种类
软件测试改进过程——
1. 测试的目的就是发现尚未被发现的错误。
2. 一个优秀测试人员应该持有的基本态度是集中精力接漏错误。
3. 态度——我就是要破坏掉这个东西,我知道有错而且要找出错误,这就是我的工作,我以此谋生。
4. 测试的过程是发现错误的环节,是个对事不对人的环节。所以,处理好开发者和测试者之间的关系固然重要。
可以通过一下话语来调节:
“你们是开发领域的专家,已经尽了最大努力,我们正在花时间学会如何测试,我们要找出工具所不能及的地方,我们将慢慢成为测试的行家,我们一起努力将会贡献更好的产品”
5. 测试人员工作内容:
检查内部结构和设计
检查功能型的用户界面
检查设计目的
检查用户需求
运行代码……
6. 测试是一个在软件生存周期中始终存在的一个过程,测试过程中越早发现的错误对于公司还是软件来说都是有益的!
7. 风险评估是软件开发过程中必须的一个过程。
8. 测试框架:
计划—— 我们想做什么,我们打算怎么做,要花多长时间,需要的资源,成本….
9. 测试必须独立进行,这样才能真正有效的对软件质量进行度量。