软件测试技术:基于案例的测试
基本信息
- 作者: 赵翀 孙宁
- 丛书名: 高等院校计算机教材系列
- 出版社:机械工业出版社
- ISBN:9787111336976
- 上架时间:2011-6-17
- 出版日期:2011 年6月
- 开本:16开
- 页码:325
- 版次:1-1
- 所属分类:
计算机 > 软件工程及软件方法学 > 软件质量、软件测试及维护
内容简介回到顶部↑
目录回到顶部↑
《软件测试技术:基于案例的测试》
前言
教学建议
第一部分 软件测试背景知识
第1章 软件测试基础 1
1.1 软件质量 1
1.1.1 软件质量的内涵 1
1.1.2 软件质量与软件危机 3
1.1.3 软件质量保证 6
1.1.4 软件错误与缺陷 7
1.2 软件测试过程 10
1.2.1 软件测试的模型 10
1.2.2 测试过程成熟度 11
1.2.3 测试活动的自动化 12
1.3 软件测试术语 13
1.4 软件的可测性 14
1.5 软件测试原则 17
1.6 测试与调试 18
1.7 小结 20
习题 20
前言
教学建议
第一部分 软件测试背景知识
第1章 软件测试基础 1
1.1 软件质量 1
1.1.1 软件质量的内涵 1
1.1.2 软件质量与软件危机 3
1.1.3 软件质量保证 6
1.1.4 软件错误与缺陷 7
1.2 软件测试过程 10
1.2.1 软件测试的模型 10
1.2.2 测试过程成熟度 11
1.2.3 测试活动的自动化 12
1.3 软件测试术语 13
1.4 软件的可测性 14
1.5 软件测试原则 17
1.6 测试与调试 18
1.7 小结 20
习题 20
前言回到顶部↑
软件是一个逻辑体,软件中的错误都是人类自己造成的。由于软件规模、复杂性等因素,使得软件的正确性难以证明。软件中的错误是不可避免的,人们只能根据需要尽可能地减少软件中的错误。软件测试是发现软件缺陷,提高软件可信性的重要手段。
由浅入深逐步发展中的软件测试
人类认识问题是一个由浅入深逐步发展的过程,从软件测试的发展过程,我们也可窥见一斑。
软件测试的历史可以追溯到1947年。第一个软件隐错发现于哈佛大学。在Mark II中的一只飞蛾导致计算机功能混乱,这也是IT词汇中的术语“bug”的由来。1949年,Alan Turing发表了一篇关于软件测试的文章“On Checking a Large Routine”。文章中解释了计算机规则检查对发现错误的效力,并试图回答这样一个问题:如何检查一个规则,以使我们确信它是正确的。接着他于1950年在文章“Computing Machinery and Intelligence”中提出了著名的图灵测试。直到1956年之前,测试和调试都没有进行清晰的划分,测试经常与调试相关,这个时期可以称为是面向调试的阶段。
20世纪50年代的很多实践表明了软件测试是多么有效。1957年,Charles L. Baker 在《数字计算机编程》(Digital Computer Programming)中描述了关于调试和测试实践以及它们的区别。从那时起到1978年是面向演示执行的阶段,这时对调试和测试进行了区分,但在这个阶段主要表明软件满足需求。1958年第一个软件测试团队产生。它是由Gerald M. Weinberg组建的,他当时是Mercury项目的操作系统开发经理。Mercury项目是美国第一个载人宇宙飞行项目。1961年,Gerald Weinberg和Herbert Leeds在一本名为《计算机编程基础》(Computer Programming Fundamentals)的书中专门写了一章关于测试的内容。Weinberg和Leeds认为测试应该证明计算机程序的适应性而不是处理信息的能力。在IBM白皮书《评估控制程序的功能测试》中,William Elmendorf给出了一个称为受过训练的软件测试方法,这时更关注软件测试的方法。
20世纪70年代,随着计算机程序的广泛应用,代码的错误数量也不断增加。人们开始失去对计算机工业中撰写的代码的信任,因为它没有任何清晰的标准。这是由于缺少质量控制措施造成的。1979年出版了Glenford J. Myers的《软件测试的艺术》(The Art of Software Testing),其中介绍了更多关于有效软件测试的原则。John Good Enough和Susan Gerhart在1975年发表了论文“测试数据选择的原理”(Toward a Theory of Test Data Selection),从此软件测试开始成为一个研究方向。他们在文中讨论了形式化证明方法以及基于结构测试的限制,也概括了判定表的使用。
从1979年到1982年可以称为面向破坏的阶段,这时的目标是找到错误。Myers在他的著作中对测试做了定义:测试是为发现错误而执行一个程序或者系统的过程。
1983年开始人们逐渐认识到测试生命周期的重要性。1983年发布了标准IEEE 829,规定了软件测试8个已定义阶段使用的文档形式。同年,美国联邦政府发布了V&V 标准,名为“确认、验证以及计算机软件测试生命周期指南”(Guideline for Life-Cycle Validation, Verification and Testing of Computer Software),该标准描述了应该能保证成功的软件测试生命周期,它是一种通过测试需求、设计和实现来侦查缺陷的方式。1983年,Bill Hetzel在《软件测试完全指南》中指出:测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量。1986年Paul E. Brook 发布了V模型,第一次将测试放入软件开发生命周期中。1987年软件可靠性的开创性工作《Software Reliability: Measurement, Prediction, Application》由John D. Musa等人发布,软件可靠性成为软件质量的关键部分。因此1983年到1987年可视为面向评估的时期:其目的是在软件生命周期的过程中提供产品评估以及质量度量。
1988年出版了Boris Beizer的《软件测试技术》(Software Testing Techniques)。书中不仅指出侦查缺陷的重要性,也指出在整个软件测试生命周期中预防缺陷的重要性。1988年“探索测试”引入,Cem Kaner在《测试计算机软件》(Testing Computer Software)的书中第一次使用术语“探索测试”,该书以实际的面向真实世界的方法而著称。David Gelperin 和William Hetzel 在论文“软件测试的生长过程”中讨论了四种测试模型以及测试的发展过程。因此,从1988年开始被看成是面向预防的阶段,这期间测试是用来验证软件满足规约、发现缺陷以及预防缺陷。
1989年性能测试工具LoadRunner诞生。20世纪90年代,测试工具盛行起来。1995年记录和回放测试工具WinRunner发布。1998年缺陷跟踪工具Bugzilla发布。
1990年Boris Beizer在《软件测试技术(第2版)》中对“bug”进行了分类,并给出了术语“杀虫剂悖论”。1991年John Wiley & Sons出版了期刊《Software Testing, Verification and Reliability》。1992年第一届Software Testing Analysis & Review会议在拉斯维加斯举行。
1993年Herzlich提出了W模型,Matthias Grochtmann 和Klaus Grimm针对划分测试提出了分类树方法。1996年测试成熟度模型(TMM)在伊利诺伊技术学院开发出来。1998年第一个欧洲软件测试认证ISEB创建,1999年国际软件测试认证CSTP创建。2001年引入SaaS(Software as a Service)模型,软件作为一种服务的概念首次出现在论文“Software as a Service: Strategic Backgrounder”中。2002年ISTQB(国际软件测试资格委员会)在爱丁堡成立。Rick和Stefan在《系统的软件测试》一书中对软件测试做了进一步定义:测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命周期过程。2003年Bret Pettichord发表文章将软件测试思想划分为五个学派。2005年TMMi(Test Maturity Model Integration)发布,该模型被当做评估和改进测试过程的标准。2007年5月ISO成立工作组来开发新的软件测试标准ISO 29119。2008年STaaS(Software Testing as a Service)引入。STaaS是用来测试一种应用程序的软件测试模型,该应用程序通过Internet为用户提供服务。2009年Michael Bolton的文章《Testing vs.Checking》将检查和测试进行了区分,检查(checking)是证实、确认和验证,而测试是探索、发现、调查和学习。2009年8月Weekend Testers建立,为测试协作、测试不同种类的软件以及同行认可等提供一个平台,它在印度、欧洲、澳大利亚和美国都有分会。
在过去的30年中,随着社会对软件测试需求的增加,软件测试理论和技术得到了较快的发展。特别是近十年来,国际上一些著名学术机构,以及微软、IBM等众多国际IT巨头的参与,使得软件测试理论正在走向成熟,软件测试对缺陷和错误的发现能力,软件测试工具的自动化程度都得到了大幅度的提升,以软件测试工具、软件测试服务为主导的软件测试产业正在兴起。
软件测试是软件工程的一个重要分支
在20世纪60年代计算机发展早期,程序设计是少数聪明人做的事。“手工作坊”式的软件开发过程中,程序的编写者和使用者往往是同一个人。由于规模小,程序编写起来相当容易,也没有什么系统化的方法,对软件开发工作更没有进行任何管理。这种个体化的软件环境,使得软件设计往往只是人们头脑中隐含进行的一个模糊过程,除了程序清单之外,根本没有其他文档资料保存下来。这些智力与技能超群的人编写的程序,既能控制计算机,又能让旁人看不懂,更不会复用。但是随着软件规模的扩大,程序复杂性的增加,维护难度的增加,产生了许多问题:程序质量低下,错误频出,进度延误,费用剧增等。这些问题导致了“软件危机”。
1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,通过借鉴传统工业的成功做法,他们主张通过工程化的方法开发软件来解决软件危机,并提出“软件工程”这一术语。四十余年来,尽管软件的一些隐错如人类的感冒一样无法根治,但软件的发展速度超过了任何传统工业,如今软件工程成为了一门学科。
软件工程主要讲述软件开发的道理,基本上是软件实践者的成功经验和失败教训的总结。软件工程的观念、方法、策略和规范都是朴实无华的,平凡之人皆可领会,关键在于运用。软件工程方法学包括方法、工具和过程三要素。
脱离软件工程框架的软件测试是不可想象的,软件工程的工程思想和方法作用在软件产品的每个阶段,当然软件测试也不能例外。
软件测试是软件工程的一个重要分支,是软件质量保证的重要基础。现代软件测试与传统的软件测试不一样,它贯穿软件工程的整个软件生命周期(从需求分析、软件设计、代码开发,一直到最后测试、验收和维护),涉及各种软件开发技术、应用技术以及测试技术,覆盖软件各种应用领域(图形用户软件、嵌入式系统、Web应用系统等),面临不同的专业领域知识,所要求的投入与软件开发相比规模同等甚至更高。
实际上,软件作为信息化的产品,其测试是软件开发企业必不可少的质量监控环节,软件测试在整个软件开发的系统工程中占据相当大的比重。在软件产业发达国家,软件企业一般把40%的工作花在测试上,测试人员和开发人员之比平均在1∶1以上,软件测试费用占整体开发费用的30%~50%,对于要求高可靠性、高安全性的软件,测试费用则相当于整个软件项目开发所有费用的3~5倍。这些足以说明软件测试的重要性。
由浅入深逐步发展中的软件测试
人类认识问题是一个由浅入深逐步发展的过程,从软件测试的发展过程,我们也可窥见一斑。
软件测试的历史可以追溯到1947年。第一个软件隐错发现于哈佛大学。在Mark II中的一只飞蛾导致计算机功能混乱,这也是IT词汇中的术语“bug”的由来。1949年,Alan Turing发表了一篇关于软件测试的文章“On Checking a Large Routine”。文章中解释了计算机规则检查对发现错误的效力,并试图回答这样一个问题:如何检查一个规则,以使我们确信它是正确的。接着他于1950年在文章“Computing Machinery and Intelligence”中提出了著名的图灵测试。直到1956年之前,测试和调试都没有进行清晰的划分,测试经常与调试相关,这个时期可以称为是面向调试的阶段。
20世纪50年代的很多实践表明了软件测试是多么有效。1957年,Charles L. Baker 在《数字计算机编程》(Digital Computer Programming)中描述了关于调试和测试实践以及它们的区别。从那时起到1978年是面向演示执行的阶段,这时对调试和测试进行了区分,但在这个阶段主要表明软件满足需求。1958年第一个软件测试团队产生。它是由Gerald M. Weinberg组建的,他当时是Mercury项目的操作系统开发经理。Mercury项目是美国第一个载人宇宙飞行项目。1961年,Gerald Weinberg和Herbert Leeds在一本名为《计算机编程基础》(Computer Programming Fundamentals)的书中专门写了一章关于测试的内容。Weinberg和Leeds认为测试应该证明计算机程序的适应性而不是处理信息的能力。在IBM白皮书《评估控制程序的功能测试》中,William Elmendorf给出了一个称为受过训练的软件测试方法,这时更关注软件测试的方法。
20世纪70年代,随着计算机程序的广泛应用,代码的错误数量也不断增加。人们开始失去对计算机工业中撰写的代码的信任,因为它没有任何清晰的标准。这是由于缺少质量控制措施造成的。1979年出版了Glenford J. Myers的《软件测试的艺术》(The Art of Software Testing),其中介绍了更多关于有效软件测试的原则。John Good Enough和Susan Gerhart在1975年发表了论文“测试数据选择的原理”(Toward a Theory of Test Data Selection),从此软件测试开始成为一个研究方向。他们在文中讨论了形式化证明方法以及基于结构测试的限制,也概括了判定表的使用。
从1979年到1982年可以称为面向破坏的阶段,这时的目标是找到错误。Myers在他的著作中对测试做了定义:测试是为发现错误而执行一个程序或者系统的过程。
1983年开始人们逐渐认识到测试生命周期的重要性。1983年发布了标准IEEE 829,规定了软件测试8个已定义阶段使用的文档形式。同年,美国联邦政府发布了V&V 标准,名为“确认、验证以及计算机软件测试生命周期指南”(Guideline for Life-Cycle Validation, Verification and Testing of Computer Software),该标准描述了应该能保证成功的软件测试生命周期,它是一种通过测试需求、设计和实现来侦查缺陷的方式。1983年,Bill Hetzel在《软件测试完全指南》中指出:测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量。1986年Paul E. Brook 发布了V模型,第一次将测试放入软件开发生命周期中。1987年软件可靠性的开创性工作《Software Reliability: Measurement, Prediction, Application》由John D. Musa等人发布,软件可靠性成为软件质量的关键部分。因此1983年到1987年可视为面向评估的时期:其目的是在软件生命周期的过程中提供产品评估以及质量度量。
1988年出版了Boris Beizer的《软件测试技术》(Software Testing Techniques)。书中不仅指出侦查缺陷的重要性,也指出在整个软件测试生命周期中预防缺陷的重要性。1988年“探索测试”引入,Cem Kaner在《测试计算机软件》(Testing Computer Software)的书中第一次使用术语“探索测试”,该书以实际的面向真实世界的方法而著称。David Gelperin 和William Hetzel 在论文“软件测试的生长过程”中讨论了四种测试模型以及测试的发展过程。因此,从1988年开始被看成是面向预防的阶段,这期间测试是用来验证软件满足规约、发现缺陷以及预防缺陷。
1989年性能测试工具LoadRunner诞生。20世纪90年代,测试工具盛行起来。1995年记录和回放测试工具WinRunner发布。1998年缺陷跟踪工具Bugzilla发布。
1990年Boris Beizer在《软件测试技术(第2版)》中对“bug”进行了分类,并给出了术语“杀虫剂悖论”。1991年John Wiley & Sons出版了期刊《Software Testing, Verification and Reliability》。1992年第一届Software Testing Analysis & Review会议在拉斯维加斯举行。
1993年Herzlich提出了W模型,Matthias Grochtmann 和Klaus Grimm针对划分测试提出了分类树方法。1996年测试成熟度模型(TMM)在伊利诺伊技术学院开发出来。1998年第一个欧洲软件测试认证ISEB创建,1999年国际软件测试认证CSTP创建。2001年引入SaaS(Software as a Service)模型,软件作为一种服务的概念首次出现在论文“Software as a Service: Strategic Backgrounder”中。2002年ISTQB(国际软件测试资格委员会)在爱丁堡成立。Rick和Stefan在《系统的软件测试》一书中对软件测试做了进一步定义:测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命周期过程。2003年Bret Pettichord发表文章将软件测试思想划分为五个学派。2005年TMMi(Test Maturity Model Integration)发布,该模型被当做评估和改进测试过程的标准。2007年5月ISO成立工作组来开发新的软件测试标准ISO 29119。2008年STaaS(Software Testing as a Service)引入。STaaS是用来测试一种应用程序的软件测试模型,该应用程序通过Internet为用户提供服务。2009年Michael Bolton的文章《Testing vs.Checking》将检查和测试进行了区分,检查(checking)是证实、确认和验证,而测试是探索、发现、调查和学习。2009年8月Weekend Testers建立,为测试协作、测试不同种类的软件以及同行认可等提供一个平台,它在印度、欧洲、澳大利亚和美国都有分会。
在过去的30年中,随着社会对软件测试需求的增加,软件测试理论和技术得到了较快的发展。特别是近十年来,国际上一些著名学术机构,以及微软、IBM等众多国际IT巨头的参与,使得软件测试理论正在走向成熟,软件测试对缺陷和错误的发现能力,软件测试工具的自动化程度都得到了大幅度的提升,以软件测试工具、软件测试服务为主导的软件测试产业正在兴起。
软件测试是软件工程的一个重要分支
在20世纪60年代计算机发展早期,程序设计是少数聪明人做的事。“手工作坊”式的软件开发过程中,程序的编写者和使用者往往是同一个人。由于规模小,程序编写起来相当容易,也没有什么系统化的方法,对软件开发工作更没有进行任何管理。这种个体化的软件环境,使得软件设计往往只是人们头脑中隐含进行的一个模糊过程,除了程序清单之外,根本没有其他文档资料保存下来。这些智力与技能超群的人编写的程序,既能控制计算机,又能让旁人看不懂,更不会复用。但是随着软件规模的扩大,程序复杂性的增加,维护难度的增加,产生了许多问题:程序质量低下,错误频出,进度延误,费用剧增等。这些问题导致了“软件危机”。
1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,通过借鉴传统工业的成功做法,他们主张通过工程化的方法开发软件来解决软件危机,并提出“软件工程”这一术语。四十余年来,尽管软件的一些隐错如人类的感冒一样无法根治,但软件的发展速度超过了任何传统工业,如今软件工程成为了一门学科。
软件工程主要讲述软件开发的道理,基本上是软件实践者的成功经验和失败教训的总结。软件工程的观念、方法、策略和规范都是朴实无华的,平凡之人皆可领会,关键在于运用。软件工程方法学包括方法、工具和过程三要素。
脱离软件工程框架的软件测试是不可想象的,软件工程的工程思想和方法作用在软件产品的每个阶段,当然软件测试也不能例外。
软件测试是软件工程的一个重要分支,是软件质量保证的重要基础。现代软件测试与传统的软件测试不一样,它贯穿软件工程的整个软件生命周期(从需求分析、软件设计、代码开发,一直到最后测试、验收和维护),涉及各种软件开发技术、应用技术以及测试技术,覆盖软件各种应用领域(图形用户软件、嵌入式系统、Web应用系统等),面临不同的专业领域知识,所要求的投入与软件开发相比规模同等甚至更高。
实际上,软件作为信息化的产品,其测试是软件开发企业必不可少的质量监控环节,软件测试在整个软件开发的系统工程中占据相当大的比重。在软件产业发达国家,软件企业一般把40%的工作花在测试上,测试人员和开发人员之比平均在1∶1以上,软件测试费用占整体开发费用的30%~50%,对于要求高可靠性、高安全性的软件,测试费用则相当于整个软件项目开发所有费用的3~5倍。这些足以说明软件测试的重要性。
【插图】







点击看大图
加载中...

