软件测试的两类经典方法

传统上认为软件测试的方法从总体上分为两类。

第一类测试方法是试图验证软件是“工作的”,所谓“工作的”就是指软件的功能是按照预先的设计执行的;而第二类测试方法则是设法证明软件是“不工作的”。

提出第一类方法的代表人物是软件测试领域的先驱Dr. Bill Hetzel,他曾于1972年6月在美国的北卡罗来纳大学组织了历史上第一次正式的关于软件测试的论坛。他首先在1973年给软件测试一个这样的定义:“就是建立一种信心,认为程序能够按预期的设想运行。后来在1983年他又将定义修订为:“评价一个程序和系统的特性或能力,并确定它是否达到预期的结果。软件测试就是以此为目的的任何行为。在他的定义中的“设想”和“预期的结果”其实就是我们现在所说的用户需求或功能设计。他还把软件的质量定义为“符合要求”。

第一类测试可以简单抽象地描述为这样的过程:在设计规定的环境下运行软件的功能,将其结果与用户需求或设计结果相比较,如果相符则测试通过,如果不相符则视为Bug。这一过程的终极目标是将软件的所有功能在所有设计规定的环境全部运行,并通过。

在软件行业中一般把第一类方法奉为主流和行业标准。1990年的IEEE/ANSI标准将软件测试进行了这样的定义:“就是在既定的状况条件下,运行一个系统或组建,观察记录结果,并对其某些方面进行评价的过程。这里所谓“既定的状况”也可理解为需求或设计。

尽管如此,这一方法还是受到很多业界权威的质疑和挑战。代表人物是Glenford J. Myers,他认为测试不应该着眼于验证软件是工作的,相反应该首先认定软件是有错误的,然后去发现尽可能多的错误。他还从人的心理学的角度论证,将 “验证软件是工作的”作为测试的目的,非常不利于测试人员发现软件的错误。于是他于1979年提出了他对软件测试的定义:“就是以发现错误为目的而运行程序的过程。

这就是软件测试的第二类方法,简单地说就是验证软件是“不工作的”,或者说是有错误的。他甚至极端地认为,一个成功的测试必须是发现Bug的测试,不然就没有价值。这就如同一个病人(假定此人确有病),到医院做一项医疗检查,结果各项指标都正常,那说明该项医疗检查对于诊断该病人的病情是没有价值的,是失败的。

第二类软件测试方法在业界也很流行,受到很多学术界专家的支持,有一个明确而简洁的定义:“软件测试员的目标是找到软件缺陷,尽可能早一些,并确保其得以修复。”有些软件企业以Bug数量来作为考核测试人员业绩的一项指标,其实就是接受了这样的方法。

时间: 2024-11-10 13:54:04

软件测试的两类经典方法的相关文章

Android中退出多个Activity的两个经典方法

这里介绍两种方法:一种把每个activity记住,然后逐一干掉:另一种思路是使用广播. 方法一.用list保存activity实例,然后逐一干掉 上代码: import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Application; import android.content.Dial

Struts2验证错误信息的两个经典方法-addFieldError&addActionError

这两个方法都是ActionSupport类实现的方法,应用中我们都会继承ActionSupport类,在ActionSupport类中实现了一个hasErrors()方法,该方法会判断是否存在这两种级别(Action级和Field级)的error,所以当我们需要报错时,我们可以方便的应用:如 try { XXX } catch (Exception e) { Super.addFieldError(“username”, “输入有误”); 或者: Super.addActionError(“输入

第十九篇:处理僵尸进程的两种经典方法

前言 如果父进程没有结束,而子进程终止了.那么在父进程调用 wait 函数回收这个子进程或者父进程终止以前,这个子进程将一直是僵尸进程. 本文将提供两种方法处理这个问题. 方法一:父进程回收法 wait函数将使其调用者阻塞,直到其某个子进程终止.故父进程可调用wait函数回收其僵尸子进程.除此之外,waitpid函数提供更为详尽的功能( 增加了非阻塞功能以及指定等待功能 ),请读者自行查阅相关资料. 代码实现 1 #include <unistd.h> 2 #include <sys/w

shell 两类执行方法

如脚本scripts.sh 1.产生一个新shell 在scripts文件开头加入语句:#!/bin/sh,通过./scripts.sh(需要执行权限)或sh scripts.sh(不需要执行权限) 2.不产生新shell,在当前shell下执行命令 通过.(点) ./scripts.sh或source ./scripts.sh执行 引申功能点: source与点命令 source 命令是 bash shell 的内置命令,从 C Shell 而来. source 命令的另一种写法是点符号,用法

Javascript中两种最通用的定义类的方法

在Javascript中,一切都是对象,包括函数.在Javascript中并没有真正的类,不能像C#,PHP等语言中用 class xxx来定义.但Javascript中提供了一种折中的方案:把对象定义描述为对象的配方(先看一下例子会比较容易理解).定义类的方法有很多种,这里有两中较为通用的方法,大家参考一下.这两种方法均可以解决 构造函数会重复生成函数,为每个对象都创建独立版本的函数的问题.解决了重复初始化函数和函数共享的问题??提示音:http://www.huiyi8.com/tishiy

java基础知识回顾之---java String final类普通方法的应用之“两个字符串中最大相同的子串”

/* * 3,两个字符串中最大相同的子串. * "qwerabcdtyuiop" * "xcabcdvbn" *  * 思路: * 1,既然取得是最大子串,先看短的那个字符串是否在长的那个字符串中. *   如果存在,短的那个字符串就是最大子串. * 2,如果不是呢,那么就将短的那个子串进行长度递减的方式取子串,去长串中判断是否存在. *   如果存在就已找到,就不用在找了. * 3.先找最大的子串,再递减子串找,找到,就停止 */ 原理图如图: 代码: publi

java两个类的方法同步问题

在之前的印象中,只处理过同一个类方法同步的问题.在工作中,遇到了两个类的方法需要同步的问题. 具体业务场景是,在某预约系统,预约有两个入口,一个是pc端的,一个是微信公众号端的.因为没有考虑高并发问题,导致两个用户同时分别在两个接口预约导致冲突问题,下面记录下 ,解决的方法的代码示例. 利用一个Thread_C 类做为同步锁(Thread_C.instance();//单例) package test; public class ThreadTest3 { /** * @param args *

hdu 3657 最小割的活用 / 奇偶方格取数类经典题 /最小割

题意:方格取数,如果取了相邻的数,那么要付出一定代价.(代价为2*(X&Y))(开始用费用流,敲升级版3820,跪...) 建图:  对于相邻问题,经典方法:奇偶建立二分图.对于相邻两点连边2*(X&Y),源->X连边,Y->汇连边,权值w为点权. ans=总点权-最小割:如果割边是源->X,表示x不要选(是割边,必然价值在路径上最小),若割边是Y-汇点,同理:若割边是X->Y,则表示选Y点且选X点, 割为w( 2*(X&Y) ). 自己的确还没有理解其本质

软件测试的几种基本方法

上次我们介绍了软件测试的基本概念及基本原则,今天我们就来看看软件测试的几种基本方法吧. 首先,当然就是我们大家熟悉的黑盒测试和白盒测试,这是按是否查看程序内部结构分的.其次,还可以按是否运行程序分为静态测试和动态测试,按阶段可分为单元测试.集成测试.系统测试.验收测试.回归测试.除此之外还有冒烟测试.随机测试等.接下来就详细介绍一下以上几种测试. 一.按是否查看程序内部结构分为: 1.黑盒测试(Black Box Testing): 黑盒测试是根据软件的规格对软件进行的测试,这类测试不考虑软件内