小酋测试:演变中的软件测试

小酋一直想谈谈软件测试是什么,但往往最基础的,反而是最难以表述的;在没有大量的实践、思考和总结的前提下,讲这种纯理论的东西,很有压力,也不能讲好。直到今天,小酋认为可以为大家说说什么是软件测试了。

小酋测试:演变中的软件测试

要理解什么是软件测试,之前,让我们先来看看:

什么是软件缺陷?

引用百度给出的定义:

软件缺陷(Defect)(又叫做Bug),为计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。IEEE729-1983对缺陷有一个标准的定义:从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。

缺陷的表现形式不仅体现在功能的失效方面,还体现在其他方面。主要类型有:软件没有实现产品规格说明所要求的功能模块;软件中出现了产品规格说明指明不应该出现的错误;软件实现了产品规格说明没有提到的功能模块;软件没有实现虽然产品规格说明没有明确提及但应该实现的目标;软件难以理解,不容易使用,运行缓慢,或从测试员的角度看,最终用户会认为不好。

小酋来点通俗易懂的,用类比说明:

像山寨手机,从外观、功能、性能(如,能耗)和用户操作性来看,总是存在或隐藏着与原装正品差异的地方,而这些差异就是“缺陷”。如果存在明显的缺陷,威胁到消费者人生安全,如充电时发生爆炸,如果不在产品投向市场前找出来解决掉,想象一下后果有多严重?


软件测试是什么?

这个问题没有一个最终的标准答案,而是随着互联网、软件技术的发展在不断的演变。下面谈谈小酋所见的“软件测试”定义的演变过程。

演变中的软件测试

1、软件测试是对程序能够按预期运行建立起一种信心,证明软件没有缺陷。
局限性:该定义基于软件是满足质量的、没有缺陷的前提。然而,软件是不可能没有缺陷的(①说明见文末)。这样的定义,可能使测试人员、开发人员自我暗示软件中不存在缺陷,在面对缺陷时出现挫败感、罪恶感,并在后面基于一些主客观原因有意识的忽视缺陷,不利于缺陷的发现和修复。

2、软件测试是为了尽早的发现缺陷而执行程序的过程。
局限性:执行程序并没有达到尽早的发现缺陷的目的,因为软件项目阶段中的需求、设计阶段被忽视了。当需求、设计出现问题,直到后期运行程序时才发现,已经与“尽早发现缺陷”的原则相违背

3、软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
局限性:同上。虽然加入了依据,即设计要求。但并不能确保设计要求符合用户的期望,导致评估最终的软件是否满足用户期望不够准确。

4、描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较的过程。
局限性:到这里,定义似乎已经比较准确了。但是,实际中很多输出是无法预期的,而且有些预期是没法定义的,或者很难一开始就定义好的。比如一些软需求,包括易用性、行业普适规范、容错性等。总的来说,测试依据模糊,不够精准。

5、小酋给出的定义:结合测试人员(或团队)过往的经验、行业知识和专业技能,为尽可能早的发现软件项目中潜在的缺陷,对软件项目各阶段成果输出进行验证(验证其正确性、完整性、安全性)、确认(满足用户的需求或期望)的过程。
该定义的优越性:
指明了测试的参与人:测试人员,更多指具有过往经验、行业知识和专业技能的专业测试员。
说明了测试的目的:尽可能早的发现软件项目中潜在的缺陷。
更说明了测试对象:各阶段的成果产出。如需求规格说明书、原型设计、详细设计、数据库设计、程序等。
测试过程:验证软件(系统)正确性、完整性、安全性等,确认满足用户的需求或期望。通俗来说,验证确保“你把事做对了”,而确认确保“你做了对的事”。
基于上面所述,这是小酋当前能给出的软件测试相对准确的定义

①为什么软件不可能没有缺陷?

  • 不可能测试到程序对任何可能输入的响应;
  • 不可能测试到程序每一条可能的执行路径;
  • 无法找到所有的设计错误;
  • 不能采用逻辑来证明程序正确性;
  • 不可能测试到所有可能的场景;
  • 不可能对所有的的隐性元素进行测试;

然而,软件测试在不断演变,一切没有定论,也不应该有定论,未来可能会赋予软件测试更多的东西。希望看过小酋这篇文章后,能让你对软件测试有一个相对正确的认识。

小酋测试

(微信扫一扫,有更多精彩等着你哦~)



留言