软件工程/测试导论

从WiKiBoos,打开图书为一个开放的世界
跳转到导航 跳到搜索

软件测试调查是为了向利益相关者提供被测试产品或服务质量的信息。〔1〕软件测试还提供了一个客观的、独立的软件视图,允许企业了解和理解软件实现的风险。测试技术包括但不限于执行程序或应用程序的过程,其目的是寻找软件错误。

软件测试也可以被称为验证和验证软件程序/应用程序/产品的过程:

  1. 符合指导其设计开发的业务和技术要求;
  2. 按预期工作;
  3. 可以用相同的特性来实现。

软件测试,取决于所采用的测试方法,可以在开发过程中的任何时间实现。然而,大多数测试工作发生在需求被定义和编码过程已经完成之后。因此,测试的方法是通过采用的软件开发方法。

不同的软件开发模型将把测试工作集中在开发过程中的不同点上。较新的开发模型,如敏捷,通常采用测试驱动开发,并将测试的一部分增加到开发人员手中,然后到达测试人员的正式团队。在一个更传统的模型中,大多数测试执行都是在需求被定义和编码过程完成之后发生的。

简介[编辑]

测试永远不能完全识别软件中的所有缺陷。相反,它提供了一个批评比较将产品的状态和行为与某人可能认识到的问题的神谕原理或机制进行比较。这些神谕可以包括(但不限于)规格、合同,〔2〕可比产品、同一产品的过去版本、关于预期或预期目的、用户或客户期望、相关标准、适用法律或其他标准的推论。

每个软件产品都有目标受众。例如,视频游戏软件的受众与银行软件完全不同。因此,当一个组织开发或以其他方式投资于一个软件产品时,它可以评估软件产品是否会被其最终用户、其目标受众、其购买者和其他利益相关者所接受。软件测试是试图进行这种评估的过程。

NIST在2002进行的一项研究报告称,软件漏洞每年对美国经济造成595亿美元的损失。如果进行更好的软件测试,超过第三的成本是可以避免的。〔3〕

历史[编辑]

Glenford J. Myers在1979首先介绍了调试与测试的分离。〔4〕虽然他关注的是破损测试(“成功的测试就是发现bug”。〔4〕〔5〕它说明了软件工程界将基本开发活动(如调试)与验证活动分离的愿望。Dave Gelperin和William C. Hetzel分1988个阶段对软件测试的阶段和目标进行了以下阶段的划分:〔6〕

软件测试主题[编辑]

范围[编辑]

测试的主要目的是检测软件故障,以便发现和纠正缺陷。这是一个非平凡的追求。测试不能确定产品在所有条件下都能正常工作,但只能确定它在特定条件下不能正常工作。〔12〕软件测试的范围通常包括检查代码以及在各种环境和条件下执行该代码以及检查代码的各个方面:它做它应该做的和做它需要做的事情。在当前的软件开发文化中,测试组织可能与开发团队分离。测试团队成员有各种各样的角色。来自软件测试的信息可用于纠正软件开发的过程。〔13〕

功能与非功能测试[编辑]

功能测试是指验证代码的特定动作或功能的活动。这些代码通常在代码需求文档中找到,尽管一些开发方法从用例或用户故事中起作用。功能测试倾向于回答“用户能做到这一点”或“这个特定功能是否有效”的问题。

非功能性测试指的是与特定功能或用户行为无关的软件方面,例如可扩展性或安全性。非功能测试往往会回答这样的问题:“有多少人能同时登录”。

缺陷与故障[编辑]

并非所有的软件缺陷都是由编码错误引起的。昂贵的缺陷的一个常见来源是由需求间隙引起的,例如,未被识别的要求,导致程序设计者省略错误。〔14〕需求间隙的一个常见来源是非功能性需求,如可测试性、可扩展性、可维护性、可用性、性能和安全性。

软件故障通过以下过程发生。程序员犯了一个错误(错误),这导致软件源代码中的缺陷(错误,bug)。如果该缺陷被执行,在某些情况下,系统将产生错误的结果,导致故障。〔15〕不是所有的缺陷都会导致失败。例如,死代码中的缺陷不会导致失败。当环境改变时,缺陷可能变成故障。环境中的这些变化的例子包括在新硬件平台上运行的软件、源数据的改变或与不同软件的交互。〔15〕单一的缺陷可能导致广泛的失败症状。

早期发现故障[编辑]

人们普遍认为,发现缺陷越早修复成本越低。〔16〕下表显示了根据发现的阶段来修复缺陷的成本。〔17〕例如,如果需求中的问题只在发布后找到,那么修复成本要比需求审查发现的成本高出10到100倍。

修复缺陷的成本 检测时间
要求 建筑 施工 系统测试 释放后
引入时间 要求 5×10× 10× 10×100×
建筑 - 10× 15× 25×100×
施工 - - 10× 10×25×

兼容性[编辑]

软件故障(真实或感知)的一个共同原因是缺乏与其他应用软件、操作系统(或操作系统版本、旧的或新的)或与原始有很大差异的目标环境的兼容性(例如,在桌面上运行的终端或GUI应用程序现在需要成为Web应用程序,而Web应用程序必须在Web浏览器中呈现)。例如,在缺乏向后兼容性的情况下,这可能会发生,因为程序员只在最新版本的目标环境中开发和测试软件,而不是所有用户都在运行。这导致意外的结果,即最新的工作可能不在目标环境的早期版本上,或者在较早版本的目标环境能够使用的旧硬件上起作用。有时,这些问题可以通过主动地将操作系统功能抽象成单独的程序模块或库来固定。

输入组合与前提条件[编辑]

软件测试的一个非常基本的问题是全部输入和前提条件(初始状态)的组合是不可行的,即使是一个简单的产品。〔12〕〔18〕这意味着软件产品中的缺陷数量可能非常大,在测试中很难发现很少发生的缺陷。更重要的是,质量的非功能维度(应该如何)相对于它应该是什么-可用性、可扩展性、性能、兼容性、可靠性可以是高度主观的;对一个人构成足够价值的东西可能对另一个人是不可容忍的。

静态与动态测试[编辑]

软件测试有很多方法。评论、演练或检查被认为是静态测试,而实际上用一组给定的测试用例执行程序代码被称为动态测试。静态测试可以(并且在实践中经常被忽略)被省略。当第一次使用程序本身(通常被认为是测试阶段的开始)时,进行动态测试。动态测试可以在程序完成100%之前开始,以测试代码的特定部分(模块或离散函数)。这方面的典型技术要么使用存根/驱动程序,要么从调试器环境执行。例如,电子表格程序本质上是在很大程度上交互地测试(“即时”),在每次计算或文本操作之后立即显示结果。

软件验证与验证[编辑]

软件测试与验证和验证相结合:〔19〕

  • 验证:我们的软件是正确的吗?(也就是说,它符合规格)。
  • 验证:我们已经建立了正确的软件吗?(即,这就是顾客想要的)。

术语验证和验证通常在行业中可互换地使用,这两个术语也不正确定义也是常见的。根据IEEE标准软件工程术语汇编:

验证是评估系统或组件以确定给定开发阶段的产品是否满足在该阶段开始时施加的条件的过程。
验证是在开发过程结束或结束时对系统或组件进行评估的过程,以确定它是否满足特定要求。

软件测试团队[编辑]

软件测试可以由软件测试人员来完成。直到20世纪80年代,“软件测试员”一词被普遍使用,但后来也被视为一个独立的职业。关于软件测试的周期和不同的目标,〔20〕已经确立了不同的角色:经理试验铅测试设计器测试器自动化开发人员测试管理员.

软件质量保证(QA)[编辑]

虽然有争议,软件测试是软件质量保证(QA)过程的一部分。〔12〕在SQA,软件过程专家和审计员关心的是软件开发过程,而不仅仅是文档、代码和系统等人工制品。他们检查和改变软件工程过程本身,以减少在交付的软件中出现的故障数量:所谓的缺陷率。

什么是“可接受的缺陷率”取决于软件的性质;飞行模拟器视频游戏将比实际飞机的软件具有更高的缺陷容忍度。

虽然与QA有密切的联系,但测试部门经常独立存在,有些公司可能没有SQL函数。

软件测试是一种旨在通过将计算机程序的预期结果与其实际输入结果相比较来检测软件中的缺陷的任务。相反,QA(质量保证)是实施旨在防止缺陷首先发生的政策和程序。

测试方法[编辑]

箱法[编辑]

传统的软件测试方法分为白盒测试和黑盒测试。这两种方法被用来描述测试工程师在设计测试用例时所采用的观点。

白盒测试[编辑]

白盒测试当测试人员访问内部数据结构和算法时,包括实现这些数据的代码。

白盒测试的类型
存在以下类型的白盒测试:
  • API测试(应用程序编程接口)——使用公共和私有API的应用程序测试
  • 代码覆盖率-创建测试以满足代码覆盖的某些标准(例如,测试设计器可以创建测试以使程序中的所有语句至少执行一次)
  • 故障注入方法——通过向测试代码路径引入故障来提高测试覆盖率
  • 突变检测方法
  • 静态测试-白盒测试包括所有静态测试
测试覆盖率
白盒测试方法也可用于评估用黑盒测试方法创建的测试套件的完整性。这允许软件团队检查很少测试的系统的部分,并确保最重要的功能点已经被测试。〔21〕
代码覆盖的两种常见形式是:
  • 功能覆盖报告执行的函数
  • 语句覆盖报告完成测试的行数

它们都返回一个代码覆盖度量,以百分比来衡量。

黑盒测试[编辑]

黑盒测试将软件视为“黑匣子”——没有任何内部实现的知识。黑盒测试方法包括:等价划分、边界值分析、所有配对测试、模糊测试、基于模型的测试、探索性测试和基于规范的测试。

基于规范的测试基于规范的测试旨在根据适用的要求测试软件的功能。〔22〕因此,测试仪将数据输入到测试对象中,并且只看到测试对象的输出。这一级别的测试通常需要向测试人员提供彻底的测试用例,然后可以简单地验证对于给定的输入,输出值(或行为),或者“是”或“不是”,与测试用例中指定的期望值相同。
基于规范的测试是必要的,但不足以防范某些风险。〔23〕
利与弊黑盒测试仪与代码没有“绑定”,测试人员的感知非常简单:代码必须有错误。使用“请求和接收”的原理,黑匣子测试器发现程序员不喜欢的bug。另一方面,黑匣子测试被认为是“就像在一个没有手电筒的黑暗迷宫中行走”,因为测试员不知道实际测试的软件是如何构造的。因此,当(1)测试器编写许多测试用例来检查只能由一个测试用例测试的东西时,和/或(2)后端的某些部分根本没有被测试。

因此,黑盒测试一方面具有“无关联意见”的优点,另一方面又具有“盲目探索”的缺点。〔24〕

灰盒测试[编辑]

灰盒测试是黑盒测试和白盒测试的结合。灰盒测试(美国拼写:灰盒测试)涉及内部数据结构和算法的知识,用于设计测试用例,但测试用户或黑箱级别。操作输入数据和格式化输出不符合灰色框,因为输入和输出明显地在我们正在调用的被测试系统的“黑盒”之外。当在两个不同的开发人员编写的两个代码模块之间进行集成测试时,这种区别尤其重要,其中只有接口被暴露用于测试。然而,修改数据仓库确实符合灰盒,因为用户通常不能改变被测试系统之外的数据。灰盒测试还可以包括反向工程来确定例如边界值或错误消息。

测试水平[编辑]

测试经常被分组在软件开发过程中添加的地方,或者通过测试的特异性水平。

单元测试[编辑]

单元测试指的是验证特定代码段功能的测试,通常是在函数级。在面向对象的环境中,这通常是在类级别,最小单元测试包括构造函数和析构函数。〔25〕

这些类型的测试通常是由开发人员编写的,它们在代码(白盒样式)上工作,以确保特定的函数按预期工作。一个函数可能有多个测试,以捕获代码中的角情况或其他分支。单独的单元测试不能验证一个软件的功能,而是用来确保软件的构建块彼此独立地使用工作。

单元测试也称为单元测试。组件测试.

集成测试[编辑]

集成测试是任何类型的软件测试,试图通过软件设计验证组件之间的接口。软件组件可以以一种迭代的方式或所有的方式(“大爆炸”)集成在一起。通常前者被认为是一个更好的做法,因为它允许本地化问题更快速和固定本地化。

集成测试是为了揭露接口组件之间的缺陷和集成组件(模块)之间的交互作用。在软件作为系统工作之前,逐渐增加了与建筑设计元素相对应的测试软件组件的更大组。〔26〕

系统测试[编辑]

系统测试测试一个完全集成的系统,以验证它符合它的要求。〔27〕

系统集成测试[编辑]

系统集成测试验证系统集成到系统需求中定义的任何外部或第三方系统。[需要引文]

回归测试[编辑]

回归测试关注在发生重大代码更改后发现缺陷。具体来说,它试图揭示软件回归,或旧的错误已经回来。每当先前正确工作的软件功能停止按预期工作时,就会出现这样的回归。典型地,当新开发的软件部分与先前存在的代码发生冲突时,作为程序改变的意外结果发生回归。回归测试的常用方法包括重新运行先前运行的测试并检查先前固定的故障是否重新出现。测试的深度取决于释放过程中的阶段和附加特征的风险。它们可以是完整的,因为在释放后期添加的变化或被认为是有风险的,非常浅的,包括对每个特征的阳性测试,如果变化在释放早期或被认为是低风险的。

验收测试[编辑]

接受测试意味着两件事之一:

  1. 在向主测试过程引入新的构建之前,即在集成或回归之前,将烟雾测试用作验收测试。
  2. 由客户进行的验收测试,通常在他们自己的硬件的实验室环境中,被称为用户验收测试(UAT)。验收测试可以作为任何两个开发阶段之间的切换过程的一部分来执行。[需要引文]

阿尔法测试[编辑]

阿尔法测试是潜在用户/客户或开发人员现场的独立测试团队进行的模拟或实际操作测试。在软件进行beta测试之前,Alpha测试通常被用作现成软件的一种内部验收测试形式。〔28〕

贝塔测试[编辑]

贝塔测试在alpha测试之后,可以被认为是外部用户接受测试的一种形式。版本的软件,被称为beta版本,被释放到有限的观众以外的编程团队。软件被发布到人群中,以便进一步的测试可以确保产品没有什么故障或错误。有时,beta版本可供公开公众使用,以将反馈字段增加到最大数量的未来用户。[需要引文]

非功能测试[编辑]

存在专门的方法来测试软件的非功能方面。与功能测试相反,它建立了软件的正确操作(正确的是它符合设计要求中定义的预期行为),非功能测试验证了软件即使在接收到无效或意外输入时也能正常工作。软件故障注入,以模糊的形式,是非功能测试的一个例子。非功能测试,特别是软件测试,被设计成确定被测试设备是否能够容忍无效或意外输入,从而建立输入验证例程和错误处理例程的健壮性。各种商业非功能测试工具都是从软件故障注入页面链接的,也有许多可用的开源软件和自由软件工具来执行非功能性测试。

软件性能测试与负载测试[编辑]

执行性能测试以确定系统或子系统在特定工作负载下执行的速度。它还可以用于验证和验证系统的其他质量属性,例如可扩展性、可靠性和资源使用。负载测试主要涉及可以在特定负载下继续进行的测试,无论是大量数据还是大量用户。这通常被称为软件可伸缩性。作为非功能活动执行的相关负载测试活动通常被称为耐久试验.

容量测试是测试功能的一种方式。应力测试是测试可靠性的一种方法。负载测试是测试性能的一种方法。关于负载测试的具体目标几乎没有达成一致意见。术语负载测试、性能测试、可靠性测试和体积测试经常互换使用。

稳定性试验[编辑]

稳定性测试检查软件是否能在一个可接受的时间内连续运行。这种非功能软件测试的活动通常被称为负载(或持久性)测试。

可用性测试[编辑]

需要使用可用性测试来检查用户界面是否易于使用和理解。它接近应用程序的使用。

安全性测试[编辑]

安全测试对于处理机密数据的软件来说是必不可少的,以防止黑客入侵系统。

国际化与本土化[编辑]

软件的国际化和本地化的一般能力可以自动测试,没有实际的翻译,通过使用伪定位。它将验证应用程序仍然工作,即使它已经被翻译成新的语言或适应新的文化(如不同的货币或时区)。〔29〕

也必须对人类语言的实际翻译进行测试。可能的本地化故障包括:

  • 软件通常是通过将字符串列表翻译成上下文来定位的,而译者可以选择模糊的源字符串的错误翻译。
  • 如果有几个人翻译字符串,技术术语可能会变得不一致。
  • 逐字逐字翻译可能在目标语言中听起来不恰当、人为或过于技术化。
  • 原始语言中的未翻译消息可以在源代码中留下硬编码。
  • 一些消息可以在运行时自动创建,结果字符串可能不语法,功能不正确,误导或混淆。
  • 软件可以使用对源语言的键盘布局没有作用的键盘快捷方式,而是用于在目标语言的布局中键入字符。
  • 软件可能缺少对目标语言的字符编码的支持。
  • 字体和字体大小在源语言中是合适的,在目标语言中可能不合适;例如,如果字体太小,CJK字符可能变得不可读。
  • 目标语言中的字符串可能比软件所能处理的长。这可能使字符串部分地被用户看不见,或者导致软件失败。
  • 软件可能缺乏适当的支持阅读或写入双向文本。
  • 软件可以用未本地化的文本显示图像。
  • 本地化操作系统可能有不同命名的系统配置文件和环境变量以及日期和货币的不同格式。

为了避免这些和其他本地化问题,知道目标语言的测试人员必须用所有可能的用例来运行程序,以查看这些消息是否可读,在上下文中正确翻译,不会导致失败。

破坏性试验[编辑]

破坏性测试试图使软件或子系统失效,以测试其鲁棒性。

测试过程[编辑]

传统CMMI或瀑布开发模式[编辑]

软件测试的一种常见做法是在功能被开发后,由独立的测试人员进行测试,然后将其发送给客户。〔30〕这种做法常常导致测试阶段被用作项目缓冲器来补偿项目延迟,从而损害测试的时间。〔31〕

另一种做法是在项目启动的同时启动软件测试,直到项目完成为止,这是一个连续的过程。〔32〕

敏捷或极端开发模式[编辑]

在对位中,一些新兴软件学科,如极限编程和敏捷软件开发运动,坚持“测试驱动软件开发”模型。在这个过程中,首先由软件工程师编写单元测试(通常用极端编程方法对编程)。当然,这些测试最初失败,正如预期的那样。然后,在编写代码时,它会递增部分测试套件。随着新的故障条件和拐角情况的发现,测试套件不断更新,它们与任何被开发的回归测试集成在一起。单元测试与软件源代码的其余部分一起被维护,并且通常集成到构建过程中(固有交互测试被降级到部分手动构建接受过程)。这个测试过程的最终目标是实现连续部署,其中软件更新可以频繁地发布给公众。〔33〕 〔34〕

样本测试周期[编辑]

虽然组织之间存在差异,但有一个典型的测试周期。〔35〕下面的样本在采用瀑布开发模式的组织中是常见的。

  • 需求分析测试应该从软件开发生命周期的需求阶段开始。在设计阶段,测试人员与开发人员一起确定设计的哪些方面是可测试的,以及这些测试的工作参数。
  • 测试计划测试策略、测试计划、测试平台的创建。由于许多活动将在测试期间进行,所以需要一个计划。
  • 测试开发测试程序、测试场景、测试用例、测试数据集、测试脚本在测试软件中的使用。
  • 测试执行测试人员根据计划和测试文档执行软件,然后向开发团队报告任何错误。
  • 测试报告测试完成后,测试员生成度量指标并对测试结果做出最终报告,测试软件是否准备好发布。
  • 测试结果分析或缺陷分析,通常由开发团队与客户一起进行,以决定哪些缺陷应该被处理、固定、拒绝(即发现软件正常工作)或推迟待处理。
  • 缺陷再测试一旦开发团队处理了缺陷,测试团队就会重新测试。AKA分辨率测试。
  • 回归测试对于每一个新的、修改的或固定的软件的集成来说,有一个小的测试程序是建立在一个子集测试的基础上的,这是为了确保最新的交付没有破坏任何东西,并且软件产品作为一个整体仍然在正常工作。
  • 测试闭包一旦测试符合退出标准,就可以对诸如捕获关键输出、经验教训、结果、日志、与项目相关的文档等活动进行归档,并将其作为未来项目的参考。

自动化测试[编辑]

许多编程组越来越多地依赖于自动化测试,尤其是使用测试驱动开发的组。有许多框架来编写测试,而连续集成软件每次代码被检查到版本控制系统时都会自动运行测试。

虽然自动化不能复制人类能做的一切(以及他们想做的所有方式),但它对于回归测试是非常有用的。然而,它确实需要一个完善的测试脚本测试套件才能真正有用。

测试工具[编辑]

通过测试工具和调试器可以显著地帮助程序测试和故障检测。测试/调试工具包括如下特性:

  • 程序监控器,允许对程序代码进行完全或部分监视,包括:
    • 指令集模拟器,允许完整的指令级监控和跟踪设施
    • 程序动画,允许在源代码级或机器代码中逐步执行和条件断点
    • 代码覆盖报告
  • 格式化转储或符号调试,允许在错误或选定点检查程序变量的工具。
  • 自动功能的GUI测试工具用于通过GUI重复系统级测试
  • 基准,允许进行运行时性能比较
  • 有助于突出热点和资源使用的性能分析(或分析工具)

这些特征中的一些可以被集成到集成开发环境(IDE)中。

  • 回归测试技术是有一套标准的测试,它涵盖了导致持久表数据的现有功能,并将预变化数据与后变化数据进行比较,其中不存在差异,使用类似DIFIKIT的工具。检测到的差异表明意想不到的功能变化或“回归”。

软件测试中的测量[编辑]

通常,质量被限制在诸如正确性、完整性、安全性等主题上。[需要引文]但也可以包括如ISO标准ISO/IEC 9126所描述的更多的技术要求,例如能力、可靠性、效率、可移植性、可维护性、兼容性和可用性。

有许多常用的软件度量,通常称为韵律学,用于帮助确定软件的状态或测试的充分性。

测试伪影[编辑]

软件测试过程可以产生多个工件。

测试计划
测试规范被称为测试计划。开发人员清楚地知道将执行什么样的测试计划,并且这些信息可供管理人员和开发人员使用。这个想法是让他们在开发代码或进行额外的修改时更加谨慎。一些公司有一个更高层次的文档称为测试策略。
跟踪矩阵
可追溯性矩阵是将需求或设计文档与测试文档相关联的表。它用于在源文档被更改时更改测试,或者用于验证测试结果是否正确。
测试用例
测试用例通常包括唯一标识符、来自设计规范的需求引用、前提条件、事件、一系列后续步骤(也称为动作)、输入、输出、预期结果和实际结果。临床定义的测试用例是输入和预期结果。〔36〕这和“条件X,你的导出结果是Y”一样实用,而其他测试用例更详细地描述了输入场景和预期结果。它有时可以是一系列的步骤(但通常包含在一个单独的测试过程中,可以针对多个测试用例,作为一个经济问题),但是有一个预期的结果或预期的结果。可选字段是测试用例ID、测试步骤或执行顺序、相关要求、深度、测试类别、作者和复选框,用于测试是否是自动化的和自动化的。更大的测试用例也可以包含先决条件的状态或步骤和描述。测试用例也应该包含一个实际结果的位置。这些步骤可以存储在字处理器文档、电子表格、数据库或其他公共存储库中。在数据库系统中,您还可以看到过去的测试结果、生成结果、以及使用哪些系统配置来生成这些结果。这些过去的结果通常会被存储在一个单独的表中。
测试脚本
测试脚本是测试用例、测试过程和测试数据的组合。最初,术语是由自动化回归测试工具创建的产品派生的。今天,测试脚本可以是手动的、自动化的,或者两者兼而有之。
测试套件
测试用例集合最常用的术语是测试套件。测试套件通常还包含每个测试用例集合的更详细的指令或目标。它肯定包含一个测试人员识别测试期间使用的系统配置的部分。一组测试用例也可以包含先决条件或步骤,以及以下测试的描述。
测试数据
在大多数情况下,使用多组值或数据来测试特定特征的相同功能。所有的测试值和可变的环境部件被收集在单独的文件中并作为测试数据存储。将这些数据提供给客户端和产品或项目也是有用的。
测试线束
软件、工具、数据输入和输出的样本和配置统称为测试线束。

资质证书[编辑]

有几个认证程序支持软件测试人员和质量保证专家的专业愿望。目前没有颁发的证书实际上要求申请人演示测试软件的能力。没有认证是基于广泛接受的知识体。这导致一些人宣称测试领域还没有准备好进行认证。〔37〕认证本身不能衡量个人的生产力、技能或实践知识,不能保证他们的能力,或作为测试人员的专业性。〔38〕

软件测试认证类型
  • 基于考试正式考试,需要通过;也可以通过自学[例如,ISTQB或QAI ]学习。〔39〕
  • 基于教育讲师主持会议,每门课程必须通过[例如国际软件测试协会(IIST)]。
测试证书
  • 质量保证协会(QAI)提供的软件测试认证证书(CAST)〔40〕
  • 凯特提供的国际软件测试研究所〔41〕
  • 质量保证研究所(QAI)提供的软件测试认证经理(CMST)〔40〕
  • 质量保证研究所(QAI)提供的认证软件测试器(CSTE)〔40〕
  • 提供的认证软件测试专家(CSTP)国际软件测试研究所〔41〕
  • CSTP(TM)(澳大利亚版)K. J. Ross与联营公司〔42〕
  • 信息系统考试委员会提供的ISEB
  • 国际软件测试资格委员会提供的ISTQB认证测试仪、基础级(CTFL)〔43〕〔44〕
  • 国际软件测试资格委员会提供的ISTQB认证测试仪〔43〕〔44〕
  • TMPF TMAP下一个基金会的基础情报科学研究所〔45〕
  • TMPA TMAP下一步由情报科学研究所〔45〕
质量保证证书
  • 提供的CMSQ质量保证研究所(QAI)。〔40〕
  • CQA提供的质量保证研究所(QAI)〔40〕
  • 美国质量学会(ASQ)提供的CQE〔46〕
  • 美国质量协会(ASQ)提供的CQIA〔46〕

争议[编辑]

一些主要的软件测试争议包括:

什么构成负责任的软件测试?γ
“情境驱动”测试学派的成员〔47〕相信没有测试的“最佳实践”,而是测试是一套技能,允许测试者选择或发明测试实践以适应每个独特的情况。〔48〕
敏捷与传统
测试员应该学会在不确定和不断变化的条件下工作,还是应该把目标对准过程“成熟”?敏捷测试运动自2006以来在商业界日益流行,〔49〕〔50〕政府和军队〔51〕软件供应商使用这种方法,但也传统的测试最后的模型(例如瀑布模型)。[需要引文]
探索性测试与脚本化〔52〕γ
测试应在设计的同时执行,还是应该预先设计?
手动测试与自动测试
一些作者认为测试自动化相对于它的价值来说是如此昂贵,因此应该谨慎使用。〔53〕更具体地说,测试驱动开发说明开发人员应该在编码功能之前编写XUnt类型的单元测试。然后,测试可以被认为是捕获和实现需求的一种方式。
软件设计与软件实现
测试是否只在结束或整个过程中进行?
监管之人,谁人监管?γ
这个想法是任何形式的观察也是一种相互作用。测试的行为也会影响被测试的。〔54〕

推荐信[编辑]

  1. γ 探索性测试Cem Kaner,佛罗里达理工大学,质量保证研究所全球软件测试年会,奥兰多,FL,2006年11月
  2. γ 莱特纳,A,Ciupa,I,IOLOL,M.,迈耶,B,FIVA,A,“契约驱动开发=测试驱动开发-编写测试用例”ESEC/FSE’07:欧洲软件工程会议和软件工程基础的ACM SigPoT研讨会2007,(杜布罗夫尼克,克罗地亚),2007年9月
  3. γ 软件错误每年花费美国经济595亿美元NIST报告
  4. γ 梅尔斯,Glenford J.(1979)。软件测试的艺术. John Wiley和儿子们。国际标准书号γ0—47—04328—1.γ
  5. γ 公司,人民计算机(1987)。Dobb博士的专业程序员软件工具杂志.Dobb博士的专业程序员软件工具杂志(M&T酒馆)十二(1-6):116.HTTP//Boo.GoGoLe.com/?ID= 7RoiaaaaaaJ.γ
  6. γ Gelperin,D;B. Hetzel(1988)。软件测试的发展。计算机辅助制造系统 三十一(6)。ISSN 001-0782.γ
  7. γ 直到1956,它才是面向调试的时期,测试通常与调试相关:测试和调试之间没有明显的区别。 Gelperin,D;B. Hetzel(1988)。软件测试的发展。计算机辅助制造系统 三十一(6)。ISSN 001-0782.γ
  8. γ 从1957—1978开始,现在有一个面向调试的时期,调试和测试现在被区分出来。 Gelperin,D;B. Hetzel(1988)。软件测试的发展。计算机辅助制造系统 三十一(6)。ISSN 001-0782.γ
  9. γ 1979至1982年间的时间被宣布为破坏导向时期,目标是找出错误。 Gelperin,D;B. Hetzel(1988)。软件测试的发展。计算机辅助制造系统 三十一(6)。ISSN 001-0782.γ
  10. γ 1983—1987被归类为评估导向期:这里的意图是在软件生命周期期间提供产品评价和测量质量。 Gelperin,D;B. Hetzel(1988)。软件测试的发展。计算机辅助制造系统 三十一(6)。ISSN 001-0782.γ
  11. γ 从1988开始,它被视为预防导向期,测试表明软件满足其规范,检测故障并防止故障。 Gelperin,D;B. Hetzel(1988)。软件测试的发展。计算机辅助制造系统 三十一(6)。ISSN 001-0782.γ
  12. γ C Kaner,Cem法尔克、杰克、Nguyen、Hung Quoc(1999)。计算机软件测试,第二版。. 纽约,等:John Wiley和儿子,公司。页480页。国际标准书号γ0—47—35846- 0.γ 无效<参考文献>标签“KANE1”的名称定义了多次不同内容 无效<参考文献>标签“KANE1”的名称定义了多次不同内容
  13. γ 亚当,Huizinga,多萝塔(2007)。自动化缺陷预防:软件管理的最佳实践. 威利IEEE计算机学会出版社。第41页-第43页。国际标准书号γ0470042125.HTTP://www. Wiy.com /WiycDa/WieLytTye/TuffTCD-074042125.HTML.γ
  14. γ 亚当,Huizinga,多萝塔(2007)。自动化缺陷预防:软件管理的最佳实践. 威利IEEE计算机学会出版社。P 86。国际标准书号γ0470042125.HTTP://www. Wiy.com /WiycDa/WieLytTye/TuffTCD-074042125.HTML.γ
  15. γ 1.1.2认证测试器基础级教学大纲国际软件测试资格委员会
  16. γ Kaner,CemJames Bach,Bret Pettichord(2001)。软件测试中的经验:基于上下文驱动的方法. 约翰.威利和儿子们。P 4。国际标准书号γ0—47—08112—4.γ
  17. γ 麦康奈尔,史提夫(2004)。代码完成(第二版)。微软出版社。第960页。国际标准书号γ0—7356—1967—0.γ
  18. γ 原则2,第1.3节,认证测试器基础级教学大纲国际软件测试资格委员会
  19. γ Tran,鄂石原(1999)。“验证/验证/认证”. 在Koopman,P.。可靠嵌入式系统的主题. 美国:卡内基梅隆大学.http://www. ECU.CMU.EDU/~Koopman/DESYS99/验证/索引.html. 检索到2008—01-13.γ
  20. γ 见D. Gelperin和W.C. Hetzel
  21. γ 说明代码覆盖分析,Steve Cornett
  22. γ 莱考克,G. T.(1993)(后文)。基于规范的软件测试理论与实践. 英国谢菲尔德大学计算机科学系.HTTP://www. McS.L.A.UK/Poope/GTL1/SISIS.PS.Gz. 检索到2008—02-13.γ
  23. γ 巴赫,杰姆斯(1999年6月)。“基于风险和需求的测试”(PDF)。电脑 三十二(6):113—114.HTTP//www. SEMFICE.COM/Trase/RealthsBaseTest.PDF. 检索到2008—08—19.γ
  24. γ Savenkov,罗马(2008)。如何成为软件测试仪. 罗马Savenkov Consulting。P 159。国际标准书号γ97—0—615—23—37—7.γ
  25. γ 粘结剂,罗伯特诉(1999)。测试面向对象系统:对象、模式和工具. Addison Wesley专业。P 45。国际标准书号γ0-201-80933-9.γ
  26. γ 贝泽,鲍里斯(1990)。软件测试技术(第二版)。纽约:Van Nostrand Reinhold。第21430页。国际标准书号γ04-242-2062-0.γ
  27. γ IEEE(1990)。IEEE标准计算机词典:IEEE标准计算机术语汇编. 纽约:IEEE。国际标准书号γ十五亿五千九百三十七万零七百九十三.γ
  28. γ van Veenendaal,埃里克。“软件测试中使用的术语词汇表”.http://www. asqq.org/教育资源/词汇表. 检索到的2010年6月17日.γ
  29. γ 全球化一步一步:世界准备的测试方法。微软开发者网络
  30. γ e)软件测试中的测试阶段:
  31. γ 梅尔斯,Glenford J.(1979)。软件测试的艺术. John Wiley和儿子们。第145页-第146页。国际标准书号γ0—47—04328—1.γ
  32. γ 达斯廷,埃弗里德(2002)。有效的软件测试. Addison Wesley。P 3。国际标准书号γ0—20179—429—2.γ
  33. γ Marchenko,阿特姆(2007年11月16日)。“XP实践:持续集成”.HTTP//AGILESOFWATEAdvest.COM/XP/实践/连续集成. 检索到2009至11-16.γ
  34. γ 格里斯,莱文特(2007年2月19日)。“敏捷101:什么是持续集成?”.HTTP//www. JavoZI.COM/BLG/?P=18. 检索到2009至11-16.γ
  35. γ 潘,Jiantao(春季1999)。“软件测试(18-84B可靠嵌入式系统)”.可靠嵌入式系统的主题. 卡内基梅隆大学电气与计算机工程系.http://www. ECU.CMU.EDU/~Koopman/DESYS99/SWI测试/.γ
  36. γ IEEE(1998)。IEEE软件测试文档标准. 纽约:IEEE。国际标准书号γ0781-1443-X.γ
  37. γ Kaner,CEM(2001)。“NSF助学计划”为“软件测试中学术和商业课程质量的显著改善奠定了基础”(PDF).HTTP://www. TestEngultual.Org/Gualal/NSFFGRANT.PDF.γ
  38. γ Kaner,CEM(2003)。“测量软件测试者的有效性”(PDF).HTTP://www. TestEngultual.Org/A/MEST.PDF.γ
  39. γ 布莱克,雷克斯(2008年12月)。高级软件测试-第2卷:ISTQB高级证书作为高级测试管理器的指南. Santa Barbara:洛基诺克出版社。国际标准书号γ十九亿三千三百九十五万二千三百六十九.γ
  40. γ C D e 质量保证研究所
  41. γ 国际软件测试研究所
  42. γ K. J. Ross与联营公司
  43. γ “ISQB”.HTTP//www. istqb. Org/.γ
  44. γ “美国的ISQB”.HTTP://www. ASQQB.Org/.γ
  45. γ 信息科学研究所
  46. γ 美国质量学会
  47. γ 上下文驱动测试
  48. γ 没有敏捷方法的敏捷特性的文章。
  49. γ “我们都是故事的一部分”David Strom,2009年7月1日
  50. γ IEEE关于项目管理机构采用有经验的管理者与年轻学生之间敏捷趋势的差异的文章. 也见2007敏捷采纳研究
  51. γ 威利森,John S.(2004年4月)。“敏捷部队的敏捷软件开发”.串音(STSC)(2004年4月)。归档于原文关于未知.http://Web.Access .Org/Web/2005 510135922/http://www. STSC.HIL.AF.MI/CouthTalk/No.44/04/0404WiLISON.HTML.γ
  52. γ IEEE关于探索性与非探索性测试的文章
  53. γ 一个例子是Mark Fewster,Dorothy Graham:软件测试自动化。Addison Wesley,1999岁,ISBN 0201-31403-3.
  54. γ 微软开发网络正好讨论这个话题

外部链接[编辑]