软件测试的原则

点击领取学习资料

前言

让我们继续本章的话题基础,即软件测试中大多数重要的问题都是心理学问
题。我们可以归纳出一系列重要的测试指导原则,这些原则看上去大多都是显而易
见的,但常常总是被我们忽视掉。表 2-l 总结了这些重要原则,每条原则都将在下
面的章节中详细介绍。

一、软件测试的重要原则

  1. 测试用例中一个必需部分是对预期输出或结果进行定义
  2. 程序员应避免测试自己编写的程序
  3. 编写软件的组织不应当测试自已编写的软件
  4. 应当彻底检查每个测试的执行结果
  5. 测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效 和未预料到的输入情况
  6. 检查程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程是 否“做了其不应该做的”
  7. 应避免测试用例用后即弃,除非软件本身就是个一次性的软件
  8. 计划测试工作时不应默许假定不会发现错误
  9. 程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比
  10. 软件测试是一项极富创造性,极具智力的挑战性的工作

二、测试用例中一个必需部分是对预期输出或结果的定义。

1.引入库

这条显而易见的原则在软件测试中是最常犯的错误之一。同样,这个问题也是基于人们的心理的。如果某个测试用例的预期结果事先没有得到定义,由于“所见即所想”现象的存在。某个似是而非、实际上是错误的结果可能会被解释成正确的结论。换句话说,尽管“软件测试是破坏性”的定义是合理的,但人们在潜意识中仍然渴望看到正确的结果。克服这种倾向的一种方法、就是通过事先精确定义程序的预期输出,鼓励人们对所有的输出进行仔细检查。因此,一个测试用例必须包括两个部分:

  • 1.对程序的输入数据的描述。
  • 2.对程序在上述输入数据下的正确输出结果的精确描述。

所谓“问题”,可以归纳为一个或一组我们不能给出可信服的解释、看上去不太正常或不符合我们期望或预想的事实。应当明确的是,在确定事物存在“问题”之前,人们必须已经形成特定的认识。没有期望,也就没有所谓的意外。

2.程序员应当避免测试自己编写的程序

任何作者都知道或应该知道,亲自编辑或校对自己的作品确实是个不好的做法。作者清楚某段文字要说明的是什么,实际表达出来的意思却南辕北辙,而自己可能却意识不到。况且实际上也不会想在自己的作品中找出什么错误来。对程序员而言,也存在相同的问题。
如果我们对软件项目关注的重点发生变化,就会产生另外一个问题。当程序员“建设性”地设计和编写完程序之后,很难让他突然改变视角以一种“破坏性”的眼光来审查程序。正如许多房屋业主都知道的那样,撕下屋里的墙纸(这是个破坏性的过程)并不容易,如果这些墙纸又恰恰是业主第一个亲手贴的,尤其令其沮丧不已。

同样,大多数程序员都不能有效地测试自己编写的程序,因为他们无法改变思维方式来尽力暴自己程序中的错误。另外,程序员可能会下意识地避免找出错误来,担心受到同事、上司、客户或正在开发的程序或系统的主管的惩罚。仅次于上面的心理学问题,还有一个重要的问题:由干程序员错误地理解了疑难定义或规范,导致程序中存在错误。如果情况是这样,程序员可能会带着同样的软件测试的艺术误解来测试自己的程序。

这并不意味着程序员测试自己的程序是不可能的。当然,我们的言下之意是,让其他人来测试程序会更加有效,也会更容易测试成功。请注意,我们的论据并不适合于“调试”(纠正已知的错误)。“调试”由程序的编写人员来完成会有效得多。
点击领取学习资料

3.编写软件的组织不应当测试自己编写的软件


这里的论据与前面的论据相似。从很多方面来讲,一个软件项目或编程组织是一个有机的机构,具有与个体程序员相似的心理问题。而且在大多数情况下,主要是根据其在给定时间、特定成本范围内开发软件的能力来衡量编程组织或项目经理。其中的一个原因是,度量时间和成本目标比较容易,而定量地衡量软件的可靠性则极其困难.即便是合理规划和实施的测试过程,也可能被认为降低了完成进度和成本目标的可能性,因此、编程组织难以客观地测试自己的软件。
同样,我们并不是说编程组织发现程序中的问题是不可能的,事实上很多组织已经在某种程度上成功地做到了这一点。当然,我们的言下之意是,更经济的方法是由客观、独立的第三方来进行测试。

4 应当彻底检查每个测试的执行结果

这个原则可能是最显而易见的原则,但也同样常常被忽视。我们见过大量的例
子,即便错误的症状在输出清单中可以清楚地看到,但还是没有找出那些错误来。
换言之,在后续测试中发现的错误,往往是前面的测试遗漏掉的

5测试用例的编写不仅应当根据有效和预期的输入情况,而且也应当根据无效和未预料到的输入情况。

在测试软件时,有一个自然的倾向,即将重点集中在有效和预期的输入情况上,而忽略了无效和未预料到的情况。比如,在本书第 l 章三角形程序的测试中,总是出现这个倾向。

例如,很少有人会向程序输入 1,2,5 以证明程序不会错误地将其解释为一个不规则三角形,而不是一个无效三角形。此外,在软件产品中突然暴露出来的许多问题是当程序以某些新的或未预料到的方式运行时发现的。因此,针对未预料到的和无效输入情况的测试用例,似乎比针对有效输入情况的那些用例更能发现问题。
点击领取学习资料

6.程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”。

这条原则是上条原则的必然结果。必须检查程序是否有我们不希望的负作用。比如,某个工资管理程序即便可以生成正确的工资单,但是如果也为非雇员生成工资单或者它覆盖掉了人员文件的第一条记录,这样的程序仍然是不正确的程序。

7.避免测试用例用后即弃,除非软件本身就是一个一次性的软件

这个问题在采用交互式系统来测试软件时最常见。人们通常会坐在终端前,匆忙地编写测试用例,然后将这些用例交由程序执行。这样做的问题在于,饱含我们宝贵投人的测试用例,在测试结束后就消失了,一旦软件需要重新测试(例如,当改正了某个错误或作了某种改进后),又必须重新设计这些测试用例。情况往往是这样的,由于重新设计测试用例需要投人大量的工作,人们总是避免这样做。

因此,对该程序的重新测试极少会同上次一样严格。这就意味着,如果对程序的更改导致了程序某个先前可以执行的部分发生了故障,这个故障往往是不会被发现的,保留测试用例,当程序其他部件发生更动后重新执行,这就是我们所谓的“回归测试”。

8.划测试工作时不应默许假定不会发现错误。

项目经理经常容易犯这个错误,这也是使用了不正确的测试定义的一个迹象——也就是说,假定“测试是一个证明程序正确运行的过程”。我们再一次重申,所谓测试,就是为发现错误而执行程序的过程。

10.件测试是一项极富创造性、极具智力挑战性的工作

点击领取学习资料

测试一个大型软件所需要的创造性很可能超过了开发该软件所需要的创造性.我们已经看到,要充分地测试一个软件以确保所有错误都不存在是不可能的。本书后续章节讨论的技术使我们能够为某个软件设计出合理的测试用例集,然而这些技术仍然需要大量的创造性

小结

点击领取学习资料

请牢记以下三个重要的测试原则:

  • 软件测试是为发现错误而执行程序的过程。
  • 一个好的测试用例具有较高的发现某个尚未发现的错误的可能性。
  • 一个成功的测试用例能够发现某个尚未发现的错误。

软件测试的艺术——软件测试的原则相关推荐

  1. 精读-软件测试的艺术之代码检查,走查与评审

    本文是关于精读书籍<软件测试的艺术>的一些学习笔记和分享 本书共有九章包括测试思想(心理,经济),代码检查,测试用例设计,模块测试,更高级别的测试,调试,极限测试和因特尔应用系统的测试. ...

  2. 精读-软件测试的艺术之调试,极限测试和因特尔应用系统的测试

    本文是关于精读书籍<软件测试的艺术>的一些学习笔记和分享 本书共有九章包括测试思想(心理,经济),代码检查,测试用例设计,模块测试,更高级别的测试,调试,极限测试和因特尔应用系统的测试. ...

  3. 软件测试的艺术 读书笔记完整版

    第 1 章 一次自评价测试 定义: 所谓软件测试,就是一个过程或一系列过程,用来确认计算机代码完成了其应该完成的功能,不执行其不该有的操作. 一个三角形类别判定程序的测试用例的评判(评判测试用例的设计 ...

  4. 《软件测试的艺术》高清脑图总结

    各位朋友,大家好,我是财哥. 今天财哥为大家带来一本软件测试的经典书籍分享:<软件测试的艺术>,这本书堪称软件测试书籍中的圣经,该书首次印刷于1979年,距今一共发行过三版:第一版,第二版 ...

  5. 《软件测试的艺术》第四章 测试用例的设计

    <软件测试的艺术>第四章 测试用例的设计 4.0 前言 4.1 白盒测试 逻辑覆盖测试 语句覆盖 判定覆盖/分支覆盖 条件覆盖 判定/条件覆盖 多重条件覆盖 4.2 黑盒测试 4.2.1 ...

  6. 软件测试的艺术_全书读书笔记

    --写在前面,本文是对<软件测试的艺术(第3版)>的观后总结,记录方便日后查阅复习.本文中的一些图片都是引用自<软件测试的艺术(第3版)>. 相对于别的书来说,这本书的可读性非 ...

  7. 《软件测试的艺术》读书笔记 - 1

    <软件测试的艺术(原书第三版)> 本书从第1版付梓到现在已经30余年,是软件测试领域的经典著作.本书结构清晰.讲解生动活泼,简明扼要地展示了久经考验的软件测试方法和智慧. 作 者:(美)梅 ...

  8. 测试小故事26:软件测试的艺术

    艺术,什么是艺术?当无法用准确的语言描述所看到的.听到的.感受到的,也许我们会用"很艺术"来形容. <软件测试的艺术>, The Art of Software Tes ...

  9. 《软件测试的艺术》第3章:代码检查、走查与评审

    <软件测试的艺术>: 软件开发人员通常不会考虑到的一种测试形式:人工测试.大多数人认为,因为程序是为了供机器执行而编写的,那么也应由机器来对程序进行测试.这种想法是有问题的.人工测试方法在 ...

  10. 《软件测试的艺术》第六章 更高级别的测试

    <软件测试的艺术>第六章 更高级别的测试 6.0 前言 软件开发过程模型 6.1 功能测试 6.2 系统测试 6.2.1 能力测试 6.2.2 容量测试 6.2.3 强度测试 6.2.4 ...

最新文章

  1. 给数组倒序_22个超详细的 JS 数组方法
  2. 面试官要我写个shell,现在不让我离开,我是不是被录取了?
  3. 乐源机器人优点跟缺点_机床实现自动化上下料选桁架机械手还是关节机器人好?...
  4. UA OPTI512R 傅立叶光学导论 透镜成像系统例题
  5. JVM的垃圾回收与内存分配
  6. QML基础类型之color
  7. 限制 计算机中 某用户上网 win7,利用win7限制上网时间的方法
  8. php 判断字符串为时间,检查字符串是否为unix时间戳
  9. .class与.java_Java中Class类的作用与深入理解
  10. canvas生成图片toDataURL报错的原因和解决方法
  11. 主流搜索引擎Lucene,Solr,ElasticSearch
  12. 允许更新此预编译站点的作用
  13. 7zip压缩zip格式时文件名支持中文的设置
  14. jquery 文本编辑器插件
  15. 基于Python实现的DHT嗅探器
  16. Win server 2008 R2激活工具使用图文教程(SK Patch v1 R2 Final OEM)
  17. After Effect弹性表达式的用法
  18. 怎么使用阿里巴巴矢量图标
  19. 基于pytorch使用LSTM进行虎年春联生成
  20. Cesium中实时根据鼠标的位置显示经度,纬度,视角高度以及海拔高度

热门文章

  1. 数字图像处理(matlab版)第三版,数字图像处理及MATLAB实现(第3版)
  2. NetBEUI协议巧安装
  3. 统计分析软件_专业统计分析软件 SPSS 25 来了!手把手教你安装
  4. Android 加载天地图
  5. 北斗/GPS模块输出的NMEA 0183语句详解
  6. 基于MTK方案AG3335芯片设计的款超小型超低功耗定位器
  7. 数学建模【三款超实用建模小软件!】
  8. 嵌入式 | 51 单片机《手把手教你51单片机-C语言版》
  9. 企业直播活动策划方案怎么做
  10. 初级商业数字营销师超级推荐