本人今年刚大学毕业,刚从事软件测试工作一个月。工作比较简单,对工作前景感到茫然,现正在自学软件测试知识,希望提高软件测试技能。这个9月份读了Ron Patton写的软件测试。下面是本人的读书笔记。
入门第一本软件测试书一、软件测试的背景
软件失败的术语
作为软件测试员,在不同环境下要用不同的术语描述软件失败时的现象。以下是一些例子:
缺点(defect) 偏差(variance)
故障(fault) 失败(failure)
问题(problem) 矛盾(inconsistency)
错误(error) 特殊(feature)
事件(incident) 缺陷(bug)
异常(anomaly)
软件缺陷的官方定义
只有至少满足下列5个规则之一才称发生了一个软件缺陷:
(1)软件未实现产品说明书要求的功。
(2)软件出现了产品说明书指明不应该出现的错误。
(3)软件实现了产品说明书未提到的功能。
(4)软件未实现产品说明书虽未明确提及但应该实现的目标。
(5)软件难以理解、不易使用、运行缓慢或者——从测试员的角度看——最终用户会认为不好。
为什么会出现软件缺陷
导致软件缺陷最大的原因是产品说明书。其次是设计,编码,及其它。如下图所示:
软件缺陷产生原因产品说明书成为造成软件缺陷的罪魁祸首有不少原因。在许多情况下,说明书没有写;其他原因可能是说明书不够全面、经常更改,或者整个开发小组没有很好地沟通。为软件做计划是极其重要的,如果没有做好,软件缺陷就会出现。
软件缺陷修复费用
从开始到计划、编程、测试,到公开使用的过程中,都有可能发现缺陷。下图显示了修复软件缺陷的费用是如何随着时间推移而增加的。
软件缺陷修复费用从上图可以看出,随着时间的推移,费用呈十倍地增长。也就是指数级的增长。
软件测试员的目标
软件测试员的目标是尽可能早地找出软件缺陷,并确保其得以修复。
软件测试员应具备的素质
1.他们是群探索者。软件测试员不会害怕进入陌生环境。
2.他们是故障排除员。
3.他们不放过任何蛛丝马迹。
4.他们具有创造性。测试显而易见的事实,对软件测试员来说还不够。
5.他们判断准确。软件测试员要决定测试内容、测试时间,以及看到的问题是否是真正的缺陷。
6.他们注重策略和外交。软件测试员常常带来的是坏消息,他们必须告诉程序员,你的孩子(程序)很丑。优秀的软件测试员知道怎样策略和职业地处理这些问题,也知道如何和不够冷静的程序员合作。
7.他们善于说服。软件测试员找出的缺陷有时被认为不重要,不用修复。测试员要善于清晰地表达观点,说明软件缺陷为何必须修复,并推进缺陷的修复。
8.他们是群追求完美者。他们力求完美,但是当知道某些无法企及时,不去苛求,而是尽力接近目标。
二、软件开发的过程
产品组成部分
在软件行业中,用于描述制造出来并交付他人的软件产品组件的术语是可交付的部分。
解释所有可交付部分的内容的最简便方法是分门别类。如下:客户需求、产品说明书、进度表、软件设计文档、测试文档。
软件产品中包括大量看不见的投入软件产品组成部分:帮助文件、用户手册、样本和示例、标签和不干胶、产品支持信息、图标和标志、错误信息、广告和宣传材料、安装、说明文件。
软件开发生命周期模式
4种最常用的模式:大爆炸模式、边写边改模式、瀑布模式、螺旋模式
大爆炸模式:大爆炸模式是最简单的软件开发模式。优点是简单。计划、进度安排和正规开发过程没有,所有精力都花费在开发软件和编写代码上。
大爆炸模式大爆炸模式几乎没有什么测试,假如有的话,也要挤在产品发布前进行,尽量避开在此模式下进行测试。
边写边改模式:边写边改模式是项目小组在未刻意采用其他开发模式时默认的开发模式。这是在大爆炸模式基础上更进了一步,至少考虑到了产品需求。
边写边改模式由于开头几乎没有计划和文档编制,项目小组得以迅速展现成果。故,边写边改模式极其适合意在快速制作而且用完就扔的小项目。
与大爆炸模式类似,测试在边写边改模式中未特别强调,但是在编写代码和修复缺陷过程中举足轻重。
作为边写边改的项目的软件测试员,需要和程序员一样清醒地认识到自己将陷入无休止的循环往复。几乎每一天都会拿到新的软件版本并着手进行测试。当新版本出来时,旧版本的测试可能尚未完成,而新版本还可能包含新的或者经过修改的功能。最后,终于有机会对几乎所有功能进行测试了,并且发现缺陷越来越少,这时某人(或者进度)决定该发布软件了。
在进行软件测试工作期间,边写边改模式是最有可能碰到的。这种模式是软件开发的入门,有助于理解更加正规的方法。
瀑布模式:采用瀑布模式的项目从最初的构思到最终产品要经过一系列步骤。每一个步骤结束时,项目小组组织审查,并决定是否进入下一步,如果项目未准备好进入下一步,就停滞下来直到准备好。
瀑布模式关于瀑布模式有三点需要强调:
1.瀑布模式非常强调产品的定义。注意,开发或者代码编制阶段只是其中单独的一块。
2.瀑布模式各步骤是分立的、没有交叉。
3.瀑布模式无法回溯。一旦进入某一个步骤,就要完成该步骤的任务,然后才能向下继续——无法回溯。
该模式的效果很好。该模式的目标是在编写代码之前解决所有的未知问题并明确所有细节。缺点是,在这个变化迅速、在互联网上开发产品的时代,当软件产品还在细细考虑和定义时,当初制造它的理由都可能会变了。
当软件提交到测试小组时,所有细节都已确定并有闻到记录,而且实现在软件之中。由此,测试小组得以制定精确的计划和进度。测试对象非常明确,在分辨是功能还是缺陷上也没有一点问题。然而,这个优点也带来一个巨大的缺点。因为测试仅在最后进行,所以一些根本性问题可能出现在早期,但是直到准备发布产品时才可能发现。
螺旋模式:尽管螺旋模式不太理想,但是该模式确实经历了很长的路来解决其他模式中不存在的问题,同时有一些好的突破。
螺旋模式螺旋模式的总体思想是一开始不必不详细定义所有细节。从小开始,定义重要功能,努力实现这些功能,接受客户反馈,然后进入下一个阶段。重复上述过程,直到得到最终产品。
螺旋模式每一次循环包括6个步骤:
1.确定目标、可选方案和限制条件。
2.明确并化解风险。
3.评估可选方案。
4.当前阶段开发和测试。
5.计划下一阶段。
6.确定进入下一阶段的方法。
螺旋模式中包含了一点瀑布模式(分析、设计、开发和测试的步骤)、一点边写边改模式(螺旋模式的每一次)和一点大爆炸模式(从外界观察)。加上该模式发现问题早、成本低的特点,可以算做相当好的开发模式。
软件测试员喜欢该模式。因为通过参与最初的设计阶段,可以尽早地影响到产品,可以把产品的来龙去脉弄得很清楚;并且在项目末期,不至于最后一分钟还在匆匆忙忙地进行全面测试。软件测试员的测试一直都在进行,所以最后一步只是一个验证表面所有部分都没有问题。
三、软件测试的实质
测试的原则
1.完全测试程序是不可能的
即使是最简单的程序也不行,主要有如下4个原因:输入量太大、输出结果太多、软件执行路径太多、软件说明书是主观的。
2.软件测试是有风险的行为
如果决定不去测试所有的情况,那就是选择了冒险。软件测试员要学会的一个关键思想是,如何把数量巨大的可能测试减少到可以控制的范围,以及如何针对风险做出明智的抉择,哪些测试重要,哪些测试不重要。
我们的目标是找到最优的测试量,使测试不多不少。
3.测试无法显示潜伏的软件缺陷
可以报告软件缺陷存在,却不能报告软件缺陷不存在。你可以进行测试,发现并报告软件缺陷,但是任何情况下都不能保证软件缺陷没有了。唯一的方法是继续测试,可能还会找到一些。
4.找到的软件缺陷越多,就说明软件缺陷越多
原因是:程序员也有心情不好的时候、程序员往往犯同样的错误、某些软件缺陷实乃冰山一角。
5.杀虫剂怪事
“杀虫剂怪事”一词,用于描述软件测试越多,其对测试的免疫力越强的现象。
为了克服杀虫剂怪事,软件测试员必须不断编写不同的、新的测试程序,对程序的不同部分进行测试,以找出更多软件缺陷。
6.并非所有软件缺陷都要修复
不需要修复软件缺陷的原因有几个:
没有足够的时间、不算真正的软件缺陷、修复的风险太大、不值得修复。
7.产品说明书从没有最终版本
软件测试员必须要想到产品说明书可能改变。未曾计划测试的功能会增加,经过测试并报告软件缺陷的功能可能发生变化甚至被删除。
软件测试的术语和定义
精确和准确
软件测试员必须要知道精确和准确之间的区别。
下图演示了这两个术语,飞镖游戏的目标是设法投中靶盘的中心区域。左上角靶盘上的飞镖既不精确也不准确。它们不仅远离靶心,而且相互之间分得很开。
右上角靶盘上的飞镖是精确但不准确,它们紧紧地聚在一起,因此可以说投掷者有很高的稳定性,但是不够准确,因为飞镖全部脱靶。
左下角靶盘上的飞镖是准确但不精确,因为飞镖非常接近靶心,因此可以说投掷者非常接近瞄准的目标,但飞镖落点分散,谈不上稳定性。
右下角靶盘上的飞镖是精确和准确的完美结合。飞镖落点集中而且命中目标。
飞镖演示精确与准确软件测试要精度还是准度很大程度上取决于产品是什么,最终取决于开发小组。
确认和验收
确认是保证软件符合产品说明书的过程;验证是保证软件满足用户要求的过程。
测试和质量保证
软件测试员的目标是尽可能早地找出软件缺陷,并确保缺陷得以修复。
软件质量保证人员的主要职责是创建和执行改进软件缺陷发生的标准和方法。
网友评论