软件测试:宏观视角—超越测试方法论

发表于:2014-10-24 09:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:殷亮    来源:51Testing软件测试网原创

  决定的内容总是具体的,因此无法预计;它总得由人去发明。
                                 --让-保罗o萨特(Jean-Paul Sartre) ①
  宏观问题
  检验一个软件系统所需要的测试是不可穷尽的,因为我们不可能遍历客户的所有可能操作,或者说即使能够穷举这些可能的操作,并且我们在实验室所进行的测试与客户所做的现场操作步骤完全一样,但我们仍只能说这是不完全相同的两个场景,就像古希腊哲学家赫拉克利特(Heraclitus)的名言:人不能两次踏入同一条河流。场景的每一次执行既相同又不完全相同,而时空的不可穷尽则是测试证明的本质障碍。
  我们既存在又不存在。
  当认识到我们不可能证明一个无穷的场景集合时,软件测试就成了一门有关选择的科学:其核心内容便是研究如何从无穷集合中挑选一个有限的集合来对软件系统进行测试。在这里,我们将测试选择的这一根本问题视为宏观问题,并将在下文中展开更为详细地分析;而将关于测试我们知道什么以及不知道什么的问题,划归到哲学视角,这已在上一篇论文中得到了比较全面的探讨②。
  测试的比较
  我们必须承认的是,假如真能够从证明的角度来看待软件测试的话,那么一切与测试相关的理论无疑都将是纯粹的和精致的,同时其明确的结果也满足了人对于预期、秩序与简单的追求;但我们仍不得不放弃它,因为在我们有限的生命与有限的理性里,我们不大可能解决归纳与证明问题。也可以说,通过放弃对证明的奢求,我们因而得以回避了一个无法解决的问题,也不再被无穷集合所困扰。但是,这样的选择并非是没有代价的:一方面,与测试相关的理论变得不那么简洁和优雅,而是不可避免的略显晦涩;另一方面,当我们绕过证明这一不可征服的高山时,却与另一难题狭路相逢。
  这一难题就是对于不完备的测试,我们如何比较两种测试设计--也就是两个不同测试子集的优劣。在将测试视为一种证明时,因为我们的目的是证明所有场景,所以除了完全集合,任何不完全子集都是不完整的。而如果比较的是两个不同子集,则只要子集内部不存在冗余,那么两个子集的比较便是简单的元素数比较。因此可以说,在证明的世界里,这一难题并不存在;但是,当我们从证明的世界里走出时,我们却不得不面对这一难题的纠缠。
    ......
 查看全文请点击下载:http://www.51testing.com/html/49/n-867649.html
  当然,还有另一种说法,即评价测试设计的高效的标准是"以最少的测试覆盖到最多的缺陷"。随着从"检验出"到"覆盖到"的转变,"缺陷"一词的意义也随之变化了,这里的缺陷一词就特指潜在可能的缺陷,因而它不是结果论的,也由此避免了对特定软件实现与缺陷分布的依赖。但这一标准并不能给我们多大的指导意义,因为如果违背这一标准,则意味着对于同一缺陷我们加入了多余的测试。但是在什么情况会出现多余的测试呢?完全相同的测试肯定算是,但不完全相同的测试呢?比如对于一个接受1~255的输入,我们设计了5个测试:分别1、2、250、254、255,如果在此基础上,我们再加入一个测试用来测试输入3,那么这个测试算是多余的吗?在这里,除非我们能断定导致测试输入3可能失败的潜在缺陷与其它输入可能检验出的缺陷是源自同一错误,否则我们就不能将这个测试视为多余。但是很显然,我们并不能做出此类的断定,因为既然讨论的是潜在可能缺陷,那么我们所能断言的就只是其结果(缺陷的形式),而不是其原因(错误根源)。
  因此,我们只能说对于测试设计效率的客观评估是困难的,不管是遵循什么样的标准。当我们试图比较两个测试设计时,如果以最终检验的缺陷数来衡量,那么这一评估也就仅仅只是对当前的软件实现是客观的,而对于其它可能的实现或缺陷分布来说则是未知的;另一方面,如果我们用覆盖的潜在缺陷来衡量,那么这似乎又是另一种形式的倒退,因为我们必须对两个缺陷是否源自同样的错误做出断言,但我们也知道,这一过程既是不可能的、同样也是不充分的。
  测试的模式
  选择的存在,一方面赋予了软件测试以新的核心与意义,标志着测试不仅仅只是执行检测,其更为重要的内涵是做出决策;但另一方面它也使得测试工作者不得不面对着新的困难:即如何做出比较与选择的问题。在测试学科数十年的发展历程中,人们发明了各种各样的测试方法,这些测试方法所基于的假设与侧重点并不一样,但目的都是为测试工作者的选择提供一定的指导。
  在这些方法中,无论是功能性测试还是结构性测试,本质上都是关于选择的。在功能性测试中,边界值方法指导我们在边界与非边界中作出选择(例如在测试1~255时,我们选择输入1、2,而没有选择3);在等价类方法中,我们实际上也是通过划分互不相交的一组子集,然后从子集中选择一个元素作为测试输入;决策表方法同样是关于选择的,满足一个规则的变量可能有许多,但最终我们只会选择其中一个。而对于结构性测试而言,尽管在方法的立足点与技巧上相异甚远,但是结构性测试方法的本质上仍然还是选择:因为使得程序在某一特定路径上执行的选择大多数时候并非一个。
    ......
 查看全文请点击下载:http://www.51testing.com/html/49/n-867649.html

 版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号