软件测试的方法与工具

软件测试的方法与工具

PMT 徐晓春 1999年12月

摘要:随着软件程序量和复杂度在不停地增加,软件测试工作显得越加艰巨,现在无论怎样强调软件测试对软件质量的影响都不为过分。本文抛开具体的测试细节,提出要确立软件质量保证的观念,对软件内部测试的主要方法和它与软件质量的关系进行了分析,并对采用自动化工具进行测试进行了简要分析,最后介绍一种自动测试工具TestWorks。

关键词:软件内部测试 软件质量保证 自动测试工具

人们经常苦恼于软件产品中存在的质量问题,但又不得不花费精力和时间去一个一个地解决,接着是永无止境的贴打补丁或者干脆升级,甚至有时则停止使用这种软件而采用另外的软件,重新学习新软件的使用方法,给用户带来了许多麻烦。实际上诸多问题的原因,在很大程度上由于开发软件的过程中,缺乏高强度的内部测试,仅仅自己稍加测试,觉得差不多就立即形成一个版本,或者有些测试根本就没有进行,就立即交付使用,结果用户一使用就出错,所以推出的软件质量难以保证。重开发,轻测试是目前我国软件行业内的存在的问题之一。

一、确立软件质量保证的观念

软件质量保证(Quality Assure)贯穿于整个软件的开发过程,监督并改善软件的开发,以确保遵循统一标准和程序,保证问题被发现并被解决,它主要侧重于“预防”。

软件质量的管理为何难以保证?软件质量侧重于应用产品是否满足用户需求,其质量的提高依赖于精心设计、良好的软件开发过程和高强度的测试。解决软件中存在的问题是一个能见度高的进程,而防止软件中存在的问题能见度却很低。这可以用我国古代的一个寓言来形容:

古时候,有一从医世家,其中有一个很著名的医生,在一个大地主的家中作随身医师,有人问他们的家中谁的医技最高。他回答到:

我用那些烈性药去治疗那些垂死挣扎的病人,偶尔有人治愈了,所以地主们都知道了我;

我的二哥治病一般都是疾病有发作的迹象时就开始了,它的医技在当地的农夫和邻居中很出名;

我的大哥能够感觉到疾病的存在,往往在它发作之前就根除了,他的名字除了我们家的人谁也不知道。

所以,确立起软件质量保证的观念,将质量保证切实贯穿于软件开发的整个过程中,对排除隐患,提高软件的质量有着重要的意义。保证软件质量的一条重要途径就是高

强度的软件测试,通过测试,发现错误,并将错误反馈给调试员,使软件错误得到纠正。Windows 3.1的β测试员有15000人,而Windows NT 3.0的测试人员有75000人,到了1994年6月的Windows 95的β-1版本的β测试员的人数达到150000人。

二、软件内部测试的主要方法

软件BUG的存在迫使人们进行软件测试。软件测试实质上是为了发现程序中的错误而执行程序的过程。软件的内部测试狭义的概念是由软件开发部门自我组织的,在部门内部进行的软件测试;而广义上的软件的内部测试是指在向用户发布正式版本之前进行的软件测试。这个过程通常由单元测试,集成测试(系统测试)、验收测试、平行运行测试构成,通常需要设计完整的测试方案。本文不对软件的内部测试作严格定义。测试过程和过程中的参与对象由下图所示:

图 软件内部测试过程

在设计完整的测试方案之后,每一步的测试都需要对结果进行分析,及早发现问题并纠正差错,如有可能,应尽量使测试题目小型化,尽可能地覆盖所有的测试情况。测试案例可以通过选择输入组合来进行。选择输入组合的一个有效途径是把计算机测试和人工检查代码结合起来。例如,通过代码检查发现程序中两个模块使用并修改某些共享的变量,如果一个模块对这些变量的修改不正确,则会引起另一个模块出错,因此,这是程序发生错误的一个可能原因。对于一个模块,局部数据结构是常见的错误来源。

实际工作中,常用的测试方法有很多,列举如下表:

序号 1 2 4 5 6 7 8 9 10 11 13 15 16 17 19 21 22

测试类型 黑盒法 白盒法 单元测试

增量集成测试 集成测试 功能测试 系统测试 健全性测试 回归测试 认同测试 负载测试 压力测试 性能测试 可用性测试 安装/卸载测试 恢复能力测试 安全性测试 兼容性测试 验收测试 比较测试 α测试 β测试

简述

亦称功能测试,完全基于软件的功能和需求的测试

亦称结构测试,已知程序的内部逻辑,覆盖代码的测试 最小函数或模块的测试

增加新的功能后进行新的测试

对由各部分组合起来的程序进行测试

黑盒类测试,使软件适合应用程序的功能需求

黑盒类测试,基于全部需求说明,覆盖系统所有组合部分

常作为初始测试,确定一个新的软件版本是否表现正常,以应付更强的测试

修复或调整好的软件的环境之后重新测试,自动的测试工具适用于这种类型

基于最终用户说明书,或者基于最终用户/消费者使用一段时间的最后测试

测试应用程序在重负载之下的承受能力

负载和性能测试.交替进行常用的测试术语,形容在重负载之下的功能测试结果

负载和压力测试.交替进行常用的测试术语 测试该软件的用户界面是否友好 测试软件的安装、卸载或升级过程

测试系统在崩溃,硬件失效,或者遇到其他灾难性的问题时是否能很好地恢复

测试系统自身保护并且防止非法的内部或外部的访问,故意的损害等等的能力

测试软件在特别的硬件/软件/操作系统/网络/等等环境中是否能很好地执行

获知消费者对该软件是否满意 在同类产品中比较软件的优缺点 在软件开发将结束时进行该测试

当开发和测试工作实质上完成时进行该类测试

在实际操作的过程中,一般都是建立本地化的测试环境,结合以上测试方法,形成本地的内部测试方法。对于不同类型的软件,其测试方法可能存在差异,或者差异很大。

微软内部流行几种测试方式,一种是采用高度结构化的测试脚本,它是基于方案上进行测试,是白盒测试的一种;另一种是“大猩猩测试”,测试人员只是试验他们所能想到的每一种方法测试产品,使之出错。微软还定期举办“臭虫聚会”,各种各样的人聚到一起寻找程序错误。

三、软件内部测试的自动工具

软件的自动测试对于降低人工测试的强度有重要的意义,保证软件的持续开发质量有着重要作用。但是,采用自动测试工具是否能降低测试难度?

有可能的,对于小型项目,自动测试工具可能用处不大,不值得再花时间学习一种测试工具的使用方法。但对于大型工程,或者持续的长期的工程,采用自动测试工具则是有用的。对于一项工程,其功能部件可能很多,而且部件之间的关系也比较复杂,要采用人工的测试就需要投入很大的精力,而且当需要进行反复测试的时候,自动测试工具的需求就逐渐明显。因为是长期的工程,学习一种测试工具的使用方法的时间相对于工程建设的时间比例就很下,因此,在工程性软件的开发中采用自动测试工具是很有意义的。

现在很多的自动工具是基于“记录/回放”的方式。例如,测试员在应用程序的GUI中可以通过单击组合的菜单选择,对话框选择,按钮,等等,把他们的行为用工具记录下来并将结果存入日志文件。记录通常为文本格式,是基于测试工具的脚本语言。如果新增了按钮,或者一段重要代码被修改了,等等,然后只要“回放”记录的动作,再比较LOG结果,检查有哪些变化。这些工具的问题是,如果测试系统时变化很频繁,就可能不得不大量改变记录方式,以致耗费大量的时间更新脚本。而且,对结果(如SCREENS,DATA,LOGS等等)的分析也是一项很沉重的任务。但是如果对脚本的结构、格式很熟悉,那么脚本的更新的任务就会轻松很多。目前,有许多基于文本接口的“记录/回放”工具,支持各种平台。

人工测试通常很难进行,而且很不可靠,也不奏效。事实上,面对很复杂的程序,我们有时不得不进行自动化测试。有一些不可能人工进行的测试,如代码覆盖测试,只有使用自动工具才能进行。程序量和复杂度在不停地增加,传统的测试方法显得力不从心,直到九十年代后期,除了测试自动化之外再也没有任何选择,除非不想作任何测试。

目前流行的软件测试工具的类型可以分为以下几类:

序号 1 2 3 4 5 6

测试的类型 代码分析器 覆盖分析器 内存分析器

装载/性能测试工具

WEB测试工具 其他工具

简述

监督程序代码复杂度,是否遵循标准等等

校检哪一部分的代码已经被测试,面向代码语句覆盖、条件覆盖、路径覆盖等等

边界检查和漏洞检测等等

测试在不同的负载级别之下客户/服务器和WEB应用程序等等 检验链接是否有效,客户和服务器端的代码、WEB站点的交互是否正常工作

测试实例管理,文件管理,BUG报告,配置管理工具

一种名为Testworks的自动测试系统,代表现代软件质量控制和软件测试的水平。它搜集了很多测试工具,并把它们捆绑在一起,支持大多数软件测试工程的主要功能,包括静态分析,METRICS,测试文件的生成,GUI测试,测试管理,测试的确认,分支和CALL-PAIR覆盖分析等等。之所以把许多测试工具捆绑在一起,一是为了节省用户的开销,二是将一些类似的工具组织在一起,使用户使用方便。它们经由TestWorks捆绑之后,有统一的用户界面,并具有许多公共特性;另外一个特点是它还支持多平台。

TestWorks能够应用于Y2K的测试,集成测试、嵌入和交叉测试、WEB站点的测试和远程测试。

四、结束语

软件内部测试作为软件工程的一个必不可少的环节,对于提高软件的质量有着极其重要的意义,采用不同形式的测试,对软件进行广泛的测试,提高内部测试强度,及时发现问题,并将问题解决,避免问题积累,可以防微杜渐,创造强壮的软件产品,争取市场,以质量取胜。

本文已发表于《计算机世界》1999年12月6日产品技术版,原文名《防微杜渐,强化软件的内部测试——软件产品质量的保证》

软件测试的方法与工具

PMT 徐晓春 1999年12月

摘要:随着软件程序量和复杂度在不停地增加,软件测试工作显得越加艰巨,现在无论怎样强调软件测试对软件质量的影响都不为过分。本文抛开具体的测试细节,提出要确立软件质量保证的观念,对软件内部测试的主要方法和它与软件质量的关系进行了分析,并对采用自动化工具进行测试进行了简要分析,最后介绍一种自动测试工具TestWorks。

关键词:软件内部测试 软件质量保证 自动测试工具

人们经常苦恼于软件产品中存在的质量问题,但又不得不花费精力和时间去一个一个地解决,接着是永无止境的贴打补丁或者干脆升级,甚至有时则停止使用这种软件而采用另外的软件,重新学习新软件的使用方法,给用户带来了许多麻烦。实际上诸多问题的原因,在很大程度上由于开发软件的过程中,缺乏高强度的内部测试,仅仅自己稍加测试,觉得差不多就立即形成一个版本,或者有些测试根本就没有进行,就立即交付使用,结果用户一使用就出错,所以推出的软件质量难以保证。重开发,轻测试是目前我国软件行业内的存在的问题之一。

一、确立软件质量保证的观念

软件质量保证(Quality Assure)贯穿于整个软件的开发过程,监督并改善软件的开发,以确保遵循统一标准和程序,保证问题被发现并被解决,它主要侧重于“预防”。

软件质量的管理为何难以保证?软件质量侧重于应用产品是否满足用户需求,其质量的提高依赖于精心设计、良好的软件开发过程和高强度的测试。解决软件中存在的问题是一个能见度高的进程,而防止软件中存在的问题能见度却很低。这可以用我国古代的一个寓言来形容:

古时候,有一从医世家,其中有一个很著名的医生,在一个大地主的家中作随身医师,有人问他们的家中谁的医技最高。他回答到:

我用那些烈性药去治疗那些垂死挣扎的病人,偶尔有人治愈了,所以地主们都知道了我;

我的二哥治病一般都是疾病有发作的迹象时就开始了,它的医技在当地的农夫和邻居中很出名;

我的大哥能够感觉到疾病的存在,往往在它发作之前就根除了,他的名字除了我们家的人谁也不知道。

所以,确立起软件质量保证的观念,将质量保证切实贯穿于软件开发的整个过程中,对排除隐患,提高软件的质量有着重要的意义。保证软件质量的一条重要途径就是高

强度的软件测试,通过测试,发现错误,并将错误反馈给调试员,使软件错误得到纠正。Windows 3.1的β测试员有15000人,而Windows NT 3.0的测试人员有75000人,到了1994年6月的Windows 95的β-1版本的β测试员的人数达到150000人。

二、软件内部测试的主要方法

软件BUG的存在迫使人们进行软件测试。软件测试实质上是为了发现程序中的错误而执行程序的过程。软件的内部测试狭义的概念是由软件开发部门自我组织的,在部门内部进行的软件测试;而广义上的软件的内部测试是指在向用户发布正式版本之前进行的软件测试。这个过程通常由单元测试,集成测试(系统测试)、验收测试、平行运行测试构成,通常需要设计完整的测试方案。本文不对软件的内部测试作严格定义。测试过程和过程中的参与对象由下图所示:

图 软件内部测试过程

在设计完整的测试方案之后,每一步的测试都需要对结果进行分析,及早发现问题并纠正差错,如有可能,应尽量使测试题目小型化,尽可能地覆盖所有的测试情况。测试案例可以通过选择输入组合来进行。选择输入组合的一个有效途径是把计算机测试和人工检查代码结合起来。例如,通过代码检查发现程序中两个模块使用并修改某些共享的变量,如果一个模块对这些变量的修改不正确,则会引起另一个模块出错,因此,这是程序发生错误的一个可能原因。对于一个模块,局部数据结构是常见的错误来源。

实际工作中,常用的测试方法有很多,列举如下表:

序号 1 2 4 5 6 7 8 9 10 11 13 15 16 17 19 21 22

测试类型 黑盒法 白盒法 单元测试

增量集成测试 集成测试 功能测试 系统测试 健全性测试 回归测试 认同测试 负载测试 压力测试 性能测试 可用性测试 安装/卸载测试 恢复能力测试 安全性测试 兼容性测试 验收测试 比较测试 α测试 β测试

简述

亦称功能测试,完全基于软件的功能和需求的测试

亦称结构测试,已知程序的内部逻辑,覆盖代码的测试 最小函数或模块的测试

增加新的功能后进行新的测试

对由各部分组合起来的程序进行测试

黑盒类测试,使软件适合应用程序的功能需求

黑盒类测试,基于全部需求说明,覆盖系统所有组合部分

常作为初始测试,确定一个新的软件版本是否表现正常,以应付更强的测试

修复或调整好的软件的环境之后重新测试,自动的测试工具适用于这种类型

基于最终用户说明书,或者基于最终用户/消费者使用一段时间的最后测试

测试应用程序在重负载之下的承受能力

负载和性能测试.交替进行常用的测试术语,形容在重负载之下的功能测试结果

负载和压力测试.交替进行常用的测试术语 测试该软件的用户界面是否友好 测试软件的安装、卸载或升级过程

测试系统在崩溃,硬件失效,或者遇到其他灾难性的问题时是否能很好地恢复

测试系统自身保护并且防止非法的内部或外部的访问,故意的损害等等的能力

测试软件在特别的硬件/软件/操作系统/网络/等等环境中是否能很好地执行

获知消费者对该软件是否满意 在同类产品中比较软件的优缺点 在软件开发将结束时进行该测试

当开发和测试工作实质上完成时进行该类测试

在实际操作的过程中,一般都是建立本地化的测试环境,结合以上测试方法,形成本地的内部测试方法。对于不同类型的软件,其测试方法可能存在差异,或者差异很大。

微软内部流行几种测试方式,一种是采用高度结构化的测试脚本,它是基于方案上进行测试,是白盒测试的一种;另一种是“大猩猩测试”,测试人员只是试验他们所能想到的每一种方法测试产品,使之出错。微软还定期举办“臭虫聚会”,各种各样的人聚到一起寻找程序错误。

三、软件内部测试的自动工具

软件的自动测试对于降低人工测试的强度有重要的意义,保证软件的持续开发质量有着重要作用。但是,采用自动测试工具是否能降低测试难度?

有可能的,对于小型项目,自动测试工具可能用处不大,不值得再花时间学习一种测试工具的使用方法。但对于大型工程,或者持续的长期的工程,采用自动测试工具则是有用的。对于一项工程,其功能部件可能很多,而且部件之间的关系也比较复杂,要采用人工的测试就需要投入很大的精力,而且当需要进行反复测试的时候,自动测试工具的需求就逐渐明显。因为是长期的工程,学习一种测试工具的使用方法的时间相对于工程建设的时间比例就很下,因此,在工程性软件的开发中采用自动测试工具是很有意义的。

现在很多的自动工具是基于“记录/回放”的方式。例如,测试员在应用程序的GUI中可以通过单击组合的菜单选择,对话框选择,按钮,等等,把他们的行为用工具记录下来并将结果存入日志文件。记录通常为文本格式,是基于测试工具的脚本语言。如果新增了按钮,或者一段重要代码被修改了,等等,然后只要“回放”记录的动作,再比较LOG结果,检查有哪些变化。这些工具的问题是,如果测试系统时变化很频繁,就可能不得不大量改变记录方式,以致耗费大量的时间更新脚本。而且,对结果(如SCREENS,DATA,LOGS等等)的分析也是一项很沉重的任务。但是如果对脚本的结构、格式很熟悉,那么脚本的更新的任务就会轻松很多。目前,有许多基于文本接口的“记录/回放”工具,支持各种平台。

人工测试通常很难进行,而且很不可靠,也不奏效。事实上,面对很复杂的程序,我们有时不得不进行自动化测试。有一些不可能人工进行的测试,如代码覆盖测试,只有使用自动工具才能进行。程序量和复杂度在不停地增加,传统的测试方法显得力不从心,直到九十年代后期,除了测试自动化之外再也没有任何选择,除非不想作任何测试。

目前流行的软件测试工具的类型可以分为以下几类:

序号 1 2 3 4 5 6

测试的类型 代码分析器 覆盖分析器 内存分析器

装载/性能测试工具

WEB测试工具 其他工具

简述

监督程序代码复杂度,是否遵循标准等等

校检哪一部分的代码已经被测试,面向代码语句覆盖、条件覆盖、路径覆盖等等

边界检查和漏洞检测等等

测试在不同的负载级别之下客户/服务器和WEB应用程序等等 检验链接是否有效,客户和服务器端的代码、WEB站点的交互是否正常工作

测试实例管理,文件管理,BUG报告,配置管理工具

一种名为Testworks的自动测试系统,代表现代软件质量控制和软件测试的水平。它搜集了很多测试工具,并把它们捆绑在一起,支持大多数软件测试工程的主要功能,包括静态分析,METRICS,测试文件的生成,GUI测试,测试管理,测试的确认,分支和CALL-PAIR覆盖分析等等。之所以把许多测试工具捆绑在一起,一是为了节省用户的开销,二是将一些类似的工具组织在一起,使用户使用方便。它们经由TestWorks捆绑之后,有统一的用户界面,并具有许多公共特性;另外一个特点是它还支持多平台。

TestWorks能够应用于Y2K的测试,集成测试、嵌入和交叉测试、WEB站点的测试和远程测试。

四、结束语

软件内部测试作为软件工程的一个必不可少的环节,对于提高软件的质量有着极其重要的意义,采用不同形式的测试,对软件进行广泛的测试,提高内部测试强度,及时发现问题,并将问题解决,避免问题积累,可以防微杜渐,创造强壮的软件产品,争取市场,以质量取胜。

本文已发表于《计算机世界》1999年12月6日产品技术版,原文名《防微杜渐,强化软件的内部测试——软件产品质量的保证》


    相关文章

    2014年自考软件开发工具资料笔记

    软件开发工具资料笔记 第1章 绪论 1.1 软件开发工具的由来 1.软件产品的(质量)(效率)(价格)已成为各方面关注的十分重要的问题.(多选题) 2.名词解释:软件开发工具 在高级程序设计语言的基础上,为提高软件的质量和效率,从规划.分析 ...

    软件工程导论(第五版)课后习题答案

    <软件工程导论>课后习题答案 第一章 软件工程概论 1.什么是软件危机? 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题.这些问题表现在以下几个方面: (1)用户对开发出的软件很难满意. (2)软件产品的质量往 ...

    多处理机系统的死锁检测方法[综述]

    多处理机系统的死锁检测方法 摘要:在多处理机系统中,并发性得到了有效利用,但并发程序的不确定性使得死锁检测十分困难.针对现有的工作集中在使用分析.验证或测试的单一途径来检测死锁这一问题,本文通过分析现有工具的死锁检测能力,提出了综合使用工具 ...

    职业测试工程师的基本知识体系

    职业测试工程师的基本知识体系 一门职业是通过其基本知识体系(Common body of knowledge),道德规范准则和认证过程定义的. COBK分为5类,共包含16个知识域,代表了职业测试工程师必须具备的知识技能和能力. 类别I:常 ...

    [软件工程]教学大纲

    软件工程 一. 说明 (一) 课程性质 <软件工程>课程是计算机科学与技术专业必修的一门专业课程.为了摆脱软件危机的困扰,一门研究软件开发与维护的普遍原理和技术的工程学科--软件工程学从60年代末期开始迅速发展起来了,现在它已经 ...

    浅析软件测试技术现状

    ·综述· 浅析软件测试技术现状 李静,郭晓磊 摘 (开封大学软件职业技术学院,河南开封475004) 要:软件测试被定义为是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量.随着测试工具 盛行,Rick和Stefan在 ...

    软件工程填空题

    1. 可行性研究从技术可行性.经济可行性.___三方面进行分析.答案:社会可行性 2. .IDEF0方法用来描述系统的功能活动及其联系,建立系统的___模型.答案:功能 3. 结构化方法总的指导思想是___逐层分解.答案:自顶向下 4. 在 ...

    敏捷开发测试规范V0.1

    敏捷开发测试规范(试行) 2012年9月 目录 1 概述............................................................................................ ...

    [人机交互与界面设计]实践项目

    课程设计项目 项目1 Windows软件界面设计(12学时) ⒈ 目的与要求 在熟练掌握人机界面相关原则和开发方法的基础上,考察对人机界面的设计理念和原则的掌握程度,使学生能够将相关理论和知识应用于实际系统的开发中.通过设计一个简单的Win ...