当前位置: 首页 > 编程日记 > 正文

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

什么是软件测试(摘录)

by:授客 QQ:1033553122

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

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

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

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

转载于:https://www.cnblogs.com/shouke/p/10158347.html

相关文章:

8-flutter 异步和线程

线程和异步的UI 1 异步的使用 Dart 有一个单线程执行模型,支持Isolate(一种在另外一种线程运行dart的方法),一个事件循环和异步编程。 可以使用async / await 来做网络请求不会挂起UI 使用http 导入 import ‘dart:io’; import ‘dart:c…

前端页面紫红色_谷歌正在开发一种神秘的新型移动操作系统,称为紫红色

前端页面紫红色Google seems to be building a replacement for Android called Fuchsia. Yesterday, they revealed what their new Armadillo user interface looks like (see photo above, courtesy of Ars Technica).谷歌似乎正在建立一个名为Fuchsia的 Android替代产品。 …

iOS UIButton 文字图片上下左右布局

例如文字在左 图片在右,iOS 9 之后一句话搞定 backBtn.semanticContentAttribute UISemanticContentAttributeForceRightToLeft;按钮标题居左实现 dateBtn.contentHorizontalAlignment UIControlContentHorizontalAlignmentLeft; dateBtn.contentEdgeInsets UIEdgeInsetsMak…

linux xampp eclipse xdebug 无法进入断点

一、xampp 版本 1.8.3-5 xampp安装后会自动集成xdebug,目录一般为 /opt/lampp/lib/php/extensions/***-debug-***目录 关于php 与php.ini路径 php程序路径为:/opt/lampp/bin/ php.ini配置文件路径为:/opt/lampp/etc/ 1、配置文件一般在/opt/lampp/etc/ph…

sliva数据库简介--转载

sliva rRNA数据库(http://www.arb-silva.de/)用来检查和比对RNA序列,既可以针对16S/18S,SSU,也可以针对23S/28S, LSU,包括了Bacteria, Archaea and Eukarya。同时也是ARB的官方指定数据库。 LSU: Large subunit (23S/2…

haproxy ssl_我们如何微调HAProxy以实现2,000,000个并发SSL连接

haproxy sslby Sachin Malhotra由Sachin Malhotra 我们如何微调HAProxy以实现2,000,000个并发SSL连接 (How we fine-tuned HAProxy to achieve 2,000,000 concurrent SSL connections) If you look at the above screenshot closely, you’ll find two important pieces of in…

OC文件操作(1)

1.文件的浅度遍历与深度遍历: //NSFileManager * fm [[NSFileManager alloc]init];//创建文件管理器 //第一步创建一个文件管理器 NSError * error nil; //显示路径下的内容,作用类似于ls -a指令 //返回值是把目录下的内容放到NSArray中 //浅度遍历 NSFileManager …

10-flutter 使用http包请求和网络指示器

使用http package 进行网络请求操作 1 安装步骤 Step1 在pubspec.yaml 文件中添加依赖 dependencies:http: ^0.12.01Step2 flutter packages getStep3 导入头文件 import ‘package:http/http.dart’ as http; 2 使用 var responseBody;http.Response response await http.…

使用nat方式解决虚拟机联网问题

本文全文参考:http://jingyan.baidu.com/album/4e5b3e1957979d91901e24f1.html?picindex1,谢谢 对于很多的linux初学者来说,最开始学习linux时通常是在虚拟机上进行的,然而对于新手来说虚拟机联网会对他们来说是比较困难的。…

老年痴呆 数字化_设计老年人愉快数字体验的5条原则

老年痴呆 数字化by Kaye Mao毛凯(Kaye Mao) 设计老年人愉快数字体验的5条原则 (5 Principles for Designing Delightful Digital Experiences for Seniors) When we got my grandfather his first smart phone, he was thrilled. He had heard all about the wonders of video…

hdu 3664 1~n排列(aii ) 为k个数

http://acm.hdu.edu.cn/showproblem.php?pid3664 求1~n的排列个数&#xff0c;使得逆序数&#xff08;ai>i ) 为给定的k. dp[i][j]表示前1~i的排列中&#xff0c;有j个数是逆序数的个数. #include <cstdio> #include <cstdlib> #include <cmath> #includ…

四边参数值的设定

border&#xff0c;margin&#xff0c;padding 拿border举例 border&#xff1a;上&#xff0c;右&#xff0c;下&#xff0c;左。 border&#xff1a;上下&#xff0c;左右。 border&#xff1a;上下左右。 border&#xff1a;上&#xff0c;左右&#xff0c;下。转载于:https…

11-flutter事件监听

事件监听 1 本身支持事件检测&#xff0c;就可以直接使用onpress body:Center(child: RaisedButton(child: Text("Click"),onPressed: (){print("我被Click了");}),),2 如果本身不支持事件的检测&#xff0c; 使用 GestureDetector 添加一个点击事件 hom…

react前端开发_是的,React正在接管前端开发。 问题是为什么。

react前端开发by Samer Buna通过Samer Buna 是的&#xff0c;React正在接管前端开发。 问题是为什么。 (Yes, React is taking over front-end development. The question is why.) Update: This article is now part of my book “React.js Beyond The Basics”.更新&#xf…

12-flutter Textfield的使用

获取用户的输入用 TextField 或者TextFormField 的实现&#xff0c;通过控制器来实现获取用户的输入。 1 TextField 的属性 const TextField({Key key,this.controller,this.focusNode,// 这个属性可以用来监听输入框是否获取this.decoration const InputDecoration(),Text…

MyEclipse10整合Axis2插件

1、下载axis2的eclipse插件 2、把下载好的两个插件包解压后放置myeclipse10安装目录下的dropins文件夹中 3、重启MyEclipse10后 File->New->Other 到此Axis2插件安装完毕。 转载于:https://www.cnblogs.com/dreammyle/p/4036224.html

STM32GPIO管脚设置

&#xff08;1&#xff09;GPIO_Mode_AIN 模拟输入 &#xff08;2&#xff09;GPIO_Mode_IN_FLOATING 浮空输入&#xff08;3&#xff09;GPIO_Mode_IPD 下拉输入 &#xff08;4&#xff09;GPIO_Mode_IPU 上拉输入 &#xff08;5&#xff09;GPIO_Mode_Out_OD 开漏输出&#x…

数据结构中等号表示什么_通过分析2016年最重要的252个中等故事我学到了什么...

数据结构中等号表示什么Medium may be struggling to find a sustainable business model, but they have years worth of funding left, and more readers than ever.中型企业可能很难找到一种可持续的商业模式&#xff0c;但他们还有数年的可用资金&#xff0c;而且读者比以往…

event事件

10.2.6 事件传播 当事件目标是Window对象或其他一些单独对象&#xff08;比如XMLHttpRequest&#xff09;时&#xff0c;浏览器会简单的通过调用对象上适当的处理程序响应事件。 在调用在目标元素上注册的事件处理函数后&#xff0c;大部分事件会“冒泡”到DOM树根。 发生在文档…

[原创]用命令行工具删除TFS2010服务器上的工作区信息

下面的示例显示有关所有计算机上的所有用户已在地址 http://myserver:8080/tfs/DefaultCollection 上的以下团队项目集合中创建的所有工作区的列表。 c:\projects>tf workspaces /owner:*/computer:* /collection:http://myserver:8080/tfs/DefaultCollection tf workspace …

13-flutter 加载图片

Image Widget 1 flutter 加载图片的方式 new Image从ImageProvider 中获取图像new Image.asset使用key 从assetBundle 获取图片Image.network从网络中获取图片Image.file从本地文件获取图片Image.memory用来加载Uint8List资源&#xff08;字节数组&#xff09;图片 2 image 支…

react 组件样式_如何使用样式化组件为React组件创建视觉变体

react 组件样式by Gilad Dayagi通过吉拉德达亚吉 如何使用样式化组件为React组件创建视觉变体 (How to create visual variants for React components using styled-components) Styled-components is a library for styling React components that took the React world by s…

HDU 1406 完数

完数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18647 Accepted Submission(s): 6894 Problem Description完数的定义&#xff1a;如果一个大于1的正整数的所有因子之和等于它的本身&#xff0c;则称这个…

14-flutter Animation 动画

动画 一 Animation 在Flutter中&#xff0c;Animation对象本身和UI渲染没有任何关系。Animation是一个抽象类&#xff0c;它拥有其当前值和状态&#xff08;完成或停止&#xff09;。其中一个比较常用的Animation类是Animation。 Flutter中的Animation对象是一个在一段时间内…

---Intel SSD 750 under Linux

https://wiki.archlinux.org/index.php/Solid_State_Drives/NVMe转载于:https://www.cnblogs.com/bzhao/p/6405268.html

谷歌数字图书馆_如何在没有联系的情况下找到6位数字的工作-提示使我获得了Google和其他技术巨头的工作机会...

谷歌数字图书馆Shortly after college, I began chasing something many people want but few ever get: a job they love.大学毕业后不久&#xff0c;我开始追求许多人想要但很少有人得到的东西&#xff1a;他们热爱的工作。 I left school with a biology degree and a job …

attribute

(verilog-2001) (*keep 1*) wire my_reg; 最大扇出信号设置 &#xff08;*maxfan 20*&#xff09;reg clk_en; 上电初始化 reg q 1b1; keep :确保组合逻辑不被优化 preserve:防止寄存器被优化掉。对于扇出较大的信号&#xff0c;可以同时定义两个信号来分担扇出&#xff0c…

算法基础之冒泡排序

data[10,4,33,21,54,3,9,11] //for index,i in enumerate(data[0:-1): for j in range(1,len(data)): for i in range(len(data)-j): if data[i]>data[i1]: tempdata[i1] data[i1]data[i] data[i]temp print(data) 转载于:https://www.cnblogs.com/my334420/p/6407843.html

15-flutter Scaffold详解

Scaffold 是一个实现基本的material design 的布局结构 appBar显示在界面顶部的一个 AppBarbody当前界面所显示的主要内容 WidgetfloatingActionButtonMaterial 设计中所定义的 FAB&#xff0c;界面的主要功能按钮persistentFooterButtons固定在下方显示的按钮&#xff0c;比…

成本管理系统开源_开源教科书如何降低大学成本

成本管理系统开源Over the past 10 years, the cost of textbooks in the US has increased by 88%. This has contributed to more than $1 trillion in total student loan debt, which Americans are struggling pay back.在过去的10年中&#xff0c;美国的教科书成本增加了…