前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊一聊软件测试的原则有哪些

聊一聊软件测试的原则有哪些

原创
作者头像
漫谈测试
发布2024-09-26 16:58:53
880
发布2024-09-26 16:58:53
举报
文章被收录于专栏:漫谈测试
  • 测试用例中一个必需部分是对预期输出或结果进行定义
  • 程序员应当避免测试自己编写的程序
  • 编写软件的组织不应当测试自己编写的软件
  • 应当彻底检查每个测试的执行结果
  • 测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效和未预料到的输入情况
  • 检查程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”
  • 应避免测试用例用后即弃,除非软件本身就是一个一次性的软件
  • 计划测试工作时不应默许假定不会发现错误
  • 程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比
  • 软件测试是一项极富创造性、极具智力挑战性的工作

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

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

原则2:程序员应当避免测试自己编写的程序。

任何作者都知道或应该知道,亲自编辑或校对自己的作品确实是个不好的做法。作者清楚某段文字要说明的是什么,实际表达出来的意思却南辕北辙,而自己可能却意识不到。况且实际上也不会想在自己的作品中找出什么错误来。对程序员而言,也存在相同的问题。

原则3:编写软件的组织不应当测试自己编写的软件。

这里的论据与前面的论据相似。从很多方面来讲,一个软件项目或编程组织是一个有机的机构,具有与个体程序员相似的心理问题。而且在大多数情况下,主要是根据其在给定时间、特定成本范围内开发软件的能力来衡量编程组织或项目经理。其中的一个原因是,度量时间和成本目标比较容易,而定量地衡量软件的可靠性则极其困难。即便是合理规划和实施的测试过程,也可能被认为降低了完成进度和成本目标的可能性,因此,编程组织难以客观地测试自己的软件。

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

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

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

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

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

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

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

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

原则8:计划测试工作时不应默许假定不会发现错误。

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

原则9:程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比

这种现象如下图所示。乍看上去,这幅图似乎没有什么意义,但很多程序都存在这种现象。例如,假如某个程序由两个模块、类或子程序A和B组成,模块A中已经发现了五个错误,而模块B中仅仅找到了一处错误。如果模块A所经过的测试并不是故意设计得更为严格,那么该原则告诉我们,模块A与模块B相比,存在更多错误的可能性要大。

该原则的另一个说法是,错误总是倾向于聚集存在,而在一个具体的程序中,某些部分要比其他部分更容易存在错误,尽管没有人能够对这种现象给出很好的解释。

原则10:软件测试是一项极富创造性、极具智力挑战性的工作。

测试一个大型软件所需要的创造性很可能超过了开发该软件所需要的创造性。我们已经看到,要充分地测试一个软件以确保所有错误都不存在是不可能的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原则1:测试用例中一个必需部分是对预期输出或结果的定义。
  • 原则2:程序员应当避免测试自己编写的程序。
  • 原则3:编写软件的组织不应当测试自己编写的软件。
  • 原则4:应当彻底检查每个测试的执行结果。
  • 原则5:测试用例的编写不仅应当根据有效和预期的输入情况,而且也应当根据无效和未预料到的输入情况。
  • 原则6:检查程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”。
  • 原则7:应避免测试用例用后即弃,除非软件本身就是一个一次性的软件。
  • 原则8:计划测试工作时不应默许假定不会发现错误。
  • 原则9:程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比
  • 原则10:软件测试是一项极富创造性、极具智力挑战性的工作。
相关产品与服务
测试服务
测试服务 WeTest 包括标准兼容测试、专家兼容测试、手游安全测试、远程调试等多款产品,服务于海量腾讯精品游戏,涵盖兼容测试、压力测试、性能测试、安全测试、远程调试等多个方向,立体化安全防护体系,保卫您的信息安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档