测试思想 什么是软件测试(摘录)

简介: 测试思想 什么是软件测试(摘录)

什么是软件测试(摘录)


IEEE 标准的定义:使用人工或自动的手段来运行或测定某个系统的过程,其目的在于检验;它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。对软件测试还有一些不同的定义。

G.J.Myers给出的定义:“程序测试是为了发现错误而执行程序的过程。这个定义被软件测试业界所认可,并经常被引用。但实际上,这样的定义还不能完全反映软件测试的内涵,它仍局限于程序测试。随后,G.J.Myers进一步提出了有关程序测试的3个重要观点,那就是:

(1)测试是为了证明程序有错,而不是证明程序无错误。

(2)一个好的测试用例在于它能发现至今未发现的错误。

(3)一个成功的测试是发现了至今未发现的错误的测试。

要完整地理解软件测试,就要从不同方面和视角去辨证地审视软件测试。概括起来,软件测试就是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中存在的各种问题与用户需求、预先的定义不一致的地方。

 

1.软件测试的侠义观点和广义观点

G.J.Myers给出了测试定义—“程序测试是为了发现错误而执行程序的过程,实际上这是一个狭义的概念,因为他认为测试是执行程序的过程,也就是传统意义上的测试在代码完成后,通过运行程序来发现程序代码或软件系统中错误。但是,这种意义上的测试是不能在代码完成之前发现软件系统需求及设计上的问题的,把需求、发现设计上的问题遗留到后期最 终在代码中体现出来,这样就可能会造成设计、编程的部分或全部返工。需求阶段和设计阶段的缺陷在开发过程中会产生扩大效应,缺陷的严重性随时间发展越来越 严重,其结果会大大增加软件开发的成本、延长开发的周期等。这种狭义的观点主要是受软件开发瀑布模型的影响,而且非常不利于保证软件质量。

延伸后的软件测试,被认为是软件测试的一种广义概念。这就引出了广义的软件测试的两个概念静态测试动态测试。这样,静态测试和动态测试就构成了一个全过程的、完整的软件测试,而且静态测试显得更为重要。

 

说明:静态测试的主要活动是评审,即通过对需求、设计、配置、程序和其他各类文档的审查来检验相应的内容是否满足用户的需求。由于静态测试不需要运行程序,所以测试对象是属于静态的.

动态测试通过运行程序来发现软件系统中的问题,在程序运行过程中发现缺陷,它具有动态性。

 

 2.软件测试的辨证观点

G.J.Myers的第2个观点是测试是为了证明程序有错,而不是证明程序无错误,引出了软件测试的另外一个争论:

 软件测试究竟是证明所有软件的功能特性是正确的,还是相反对软件系统进行各种试探和攻击,找出软件系统中不正常或不工作的地方,就我个人理解,这两个方面都有一定道理,前者(证明或验证所有软件的功能特性是正确的)是从质量保证的角度来思考软件测试,后者(证明程序有错)从软件测试的直接目标和测试效率来思考,两者应该相辅相成。在后者的思想背景下,可以认为测试不是为了证明所有的功能都能正常工作,恰恰相反,测试就是为了找出那些不能正常工作、不一致性的问题,也就是说,测试的工作就是发现缺陷(detect bug ),即在软件开发过程中,分析、设计与编码等工作都是建设性的,唯独测试带有破坏性, 它想方设法发现软件所存在的问题。软件测试就是在这两者之间获得平衡,但对于不同的应用领域,两者的比重是不一样的。例如,国防、航天、银行等软件系统, 承受不了系统的任何一次失效,因为任何失效都完全有可能导致灾难性的损失,所以强调前者,以保证非常高的软件质量。而一般的软件应用或服务,则可以强调后 者,质量目标设置在用户可接受水平,以降低软件开发成本,加快软件发布速度,有利于市场的扩张。

(1)验证软件是工作的,以正向思维方式,针对软件系统的所有功能点,逐个验证其正确性。

 (2)证明软件是不工作的,以反向思维方式,不断思考开发人员理解的误区、不良的习惯、程序代码的边界、无效数据的输入及系统的弱点.试图破坏系统、摧毁系统,目标就是发现系统中各种各样的问题。其代表人物就是上面多次提到的G.J.Myers。他强调,一个成功的测试必须是发现缺陷的测试,不然就没有价值。

 

3.软件测试的风险观点

 测试被定义为对软件系统中潜在的各种风险进行评估的活动,这就引出软件测试的风险观点。软件测试自身的风险性是大家公认的,测试的覆盖率不能做到100%;另 外一方面,软件测试的标准有时不清楚,软件规格说明书是测试中的一个标准,但也不是唯一的标准。因为规格说明书本身的内容完全有可能是错误的,它所定义的 国内特性不是用户所需要的。所以,我们常常强调软件测试人员应该站在客户的角度去进行测试,除了发现程序中的错误,还要发现需求定义的错误、设计规格说明 书的缺陷。但是,测试在大多数时间/情况下是由工程师完成的,而不是客户自己来做,所以又怎么能保证工程师和客户想得一样呢?

有人把开发比作打靶,目标明确,就是按照设计规格说明书去实现系统的功能。而把测试比作捞鱼,目标不明确,自己判断哪些地方鱼多,就去哪些地方捞:如果只捞大鱼(严重缺陷),网眼就可以大些、撒网区域相对比较集中(测试点集中在主要功能上)。如果想把大大小小的鱼都捞上来,网眼就要小,普遍撒网,不放过任何一块区域(测试点遍及所有功能)

风险观点的框架下,软件测试可以被看作是一个动态的监控过程,对软件开发全过程进行检测,随时发现不健康的征兆,发现问题、报告问题,并重新评估新的风险,设置新的监控基准,不断地持续下去,包括回归测试。这时,软件测试完全可以看作是软件质量控制的过程。

对应这种观点,产生基于风险的测试策略,首先评估测试的风险,每个功能出问题的概率有多大?根据Pareto原则(也叫80/20原则),哪些功能是用户最常用的功能(约占20%)?如果某个功能出问题,其对用户的影响又有多大?然后根据风险大小确定测试的优先级。优先级高的功能特性,测试优先得到执行。一般来讲,针对用户最常用的这20%功能(优先级高)的测试会得到完全地、充分地执行,而低优先级功能的测试(用户不常用的功能,约占80% )就可能由于时间或经费的限制,降低测试的要求、减少测试工作最,这样做风险性并不是很大。

 

4.软件测试的经济学观点

一个好的测试用例在于它能发现至今未发现的错误, 这体现了软件测试的经济学观点。实际上,软件测试经济学问题至今仍是业界关注的问题之一。经济学的核心就是要盈利,盈利的基础就是要有一个清楚的商业性目 标。同样,商业性目标是否正确,直接决定了企业是否盈利。在多数情况下,软件测试是在公司内执行的。正是公司的行为目的,决定了软件测试含义或定义经济性 的一面。正如对软件质最的定义不仅仅局限于和客户需求的一致性、适用性,而且要增加其他的要求—“开发成本控制在预算内、按时发布软件、系统易于维护等。

软件测试也一样,要尽快尽早地发现更多的缺陷,并督促和帮助开发人员修正缺陷。原因很简单,缺陷发现得越早,所付出的代价就越低,例如在编程阶段发现一个需求定义上的错误,其代价将10倍于在需求阶段就发现该缺陷的代价。这就是从经济学的观点来说明测试进行得越早越好这样一个道理。

 

5.软件测试的标准观点

从标准观点来看,可以定义为验证有效性确认活动够成的整体,即软件测试=V&V

验证是检验软件是否已正确地实现了软件需求规格说明书所定义的系统功能和特性。验证过程提供证据表明软件相关产品与所有生命周期活动的要求(如正确性、完整性、一致性、准确性等)一致。相当于以软件产品设计规格说明书为标准进行软件测试的活动。

有效性确认是确认所开发的软件是否满足用户真正需求的活动。一切从客户出发,理解客户的需求,并对软件需求定义和设计存疑,以发现需求定义和产品设计中的问题。主要通过各种软件评审活动来实现,保证让客户参加评审和测试活动。

当然,软件测试的对象是产品(包括阶段性产品,如市场需求说明书、产品规格说明书、技术设计文档、数据字典、程序包、用户文档等),而质量保证和管理的对象集中于软件开发的标准、流程和方法等上。

 

目录
相关文章
|
3月前
|
存储 测试技术 Python
软件测试/测试开发全日制|Pytest结合CSV实现测试的数据驱动
软件测试/测试开发全日制|Pytest结合CSV实现测试的数据驱动
35 0
|
3月前
|
存储 测试技术 Python
软件测试/测试开发全日制|Pytest结合Excel实现数据驱动
软件测试/测试开发全日制|Pytest结合Excel实现数据驱动
41 0
|
3月前
|
存储 测试技术 Python
软件测试/测试开发全日制|Pytest结合yaml实现数据驱动
软件测试/测试开发全日制|Pytest结合yaml实现数据驱动
41 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率与质量:AI驱动的自动化测试策略
【2月更文挑战第19天】 在快速迭代的软件发展环境中,传统的手动测试方法已无法满足高效率和高质量的要求。本文探讨了人工智能(AI)技术如何革新现有的软件测试流程,通过引入AI驱动的自动化测试策略,旨在提高测试覆盖率,减少人为错误,优化资源分配,并缩短产品上市时间。我们将分析AI在识别潜在缺陷、生成测试用例、执行测试以及结果分析中的应用,并讨论实施这些策略时可能遇到的挑战和限制。
157 3
|
3月前
|
设计模式 Java 测试技术
软件测试/测试开发/全日制|Page Object模式:为什么它是Web自动化测试的必备工具
软件测试/测试开发/全日制|Page Object模式:为什么它是Web自动化测试的必备工具
54 0
|
23小时前
|
测试技术
【测试】优化软件测试:有效测试用例设计的关键
【测试】优化软件测试:有效测试用例设计的关键
|
1天前
|
jenkins 测试技术 持续交付
深入探索软件测试中的持续集成与自动化测试实践
【4月更文挑战第27天】 在当今软件开发的快速迭代过程中,持续集成(CI)和自动化测试已成为确保代码质量和加快交付速度的关键因素。本文将探讨如何通过实施持续集成流程,并结合自动化测试策略来优化软件测试工作。我们将分析持续集成的原理、自动化测试的最佳实践以及如何将这些方法应用于实际项目中,旨在为读者提供一套完整的解决方案,以提高软件项目的效率和质量。
9 3
|
22天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
45 6
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率:AI驱动的自动化测试策略
【2月更文挑战第30天】随着人工智能(AI)在软件开发周期中的日益普及,其在提高软件测试效率方面的潜力正受到越来越多的关注。本文探讨了如何通过集成AI技术来优化自动化测试流程,从而减少重复工作、提高错误检测率和加快反馈速度。我们将分析当前AI在自动化测试中的应用,并提出一系列策略以利用AI改进测试案例生成、执行和维护过程。
89 0
|
2月前
|
关系型数据库 MySQL 测试技术
【软件测试】 初识软件测试
【软件测试】 初识软件测试

热门文章

最新文章