软件测试的目标_第1页
软件测试的目标_第2页
软件测试的目标_第3页
软件测试的目标_第4页
软件测试的目标_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件测试的目标是在软件投入生产运行之前发现尽可能多的软件错误。目前,软件测试仍然是保证软件质量的关键步骤,测试是对软件规范、设计和编码的最终审查。基本目标:尽可能发现并消除软件中隐藏的错误,最终向用户交付高质量的软件系统。我们不能过分强调软件测试的重要性及其对软件可靠性的影响。软件测试跨越软件生命周期的两个阶段。软件测试有两种类型:单元测试模块的作者和测试人员是同一个人,由专门的测试人员承担的软件测试工作量往往占软件开发总工作量的40%以上。7.基本概念,7.1.1软件测试的目标(1)测试是为了发现程序中的错误而执行程序的过程;(2)一个好的测试方案是一个很可能发现到目前为止还没有发现的错误的

2、测试方案;(3)一个成功的测试是发现到目前为止还没有发现的错误的测试。测试的定义是为了发现程序中的错误而执行程序的过程。测试目标决定了测试方案的设计。如果你测试表明程序是正确的,你将设计一些不容易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,它会试图设计出最能暴露错误的测试方案。因为测试的目标是暴露程序中的错误,所以程序编写人员测试自己是不合适的。因此,在综合测试阶段,其他人通常会组成一个测试团队来完成测试工作。测试不能证明错误不存在,它只能表明软件错误已经发生。测试永远不能证明程序是正确的。即使经过最严格的测试,程序中仍可能隐藏着未被发现的错误。测试只能找出程序中的错误,但不能证

3、明程序中没有错误。测试原则,所有的测试都应该追溯到用户需求。测试计划应该在测试真正开始之前很久就执行。(设计模型完成后,可以立即开始测试计划,设计模型确定后,可以立即开始详细的测试方案定义。彻底的测试是不可能的。为了获得最佳结果,测试应该由独立的第三方构建。可测试性软件可测试性是指一个计算机程序测试起来有多容易。可测试性特征:可操作性“操作越好,测试效率越高”和可观察性。可控性:“你所看到的就是你所测试的”“软件控制越好,测试越能自动执行和优化”的可分解性。“通过控制测试范围,可以更快地标定问题,更灵活地进行重新测试。”稳定性:“测试内容越少,测试速度越快”“变化越少,对测试的损害越小”的可理

4、解性。你得到的信息越多,测试就越灵巧.“好的”测试属性,好的测试很有可能发现错误。一个好的测试不是多余的。(每个测试应该有不同的目的。一个好的测试应该是一组具有相似目的的测试中最好的,并且最有可能发现所有错误的测试。一个好的测试既不太简单也不太复杂。7.1.2黑盒测试和白盒测试测试任何产品都有两种方法:黑盒测试如果你已经知道产品应该具备的功能,你可以测试每个功能是否可以正常使用;白盒测试如果你知道产品的内部工作过程,你可以检查产品的内部动作是否按照规格正常进行,所有内部部件是否充分利用(确保所有齿轮匹配)。黑盒测试,也称为功能测试,将程序视为黑盒,根本不考虑程序的内部结构和处理。也就是说,黑盒

5、测试是在程序接口上进行的测试,它只检查程序功能是否能够按照规范正常使用,程序是否能够正确接收输入数据以生成正确的输出信息,并保持外部信息(如数据库或文件)的完整性。(故意忽略控制结构,但注意信息字段),黑盒测试检测到的错误类型,错误功能或遗漏。错误的界面。访问数据结构或外部数据库时出错。性能错误。初始化和终止错误。白盒测试,也称为结构测试,是基于这样一个前提,即程序可以被看作是包装在一个透明的白盒中,即完全理解程序的结构和处理。根据程序中的逻辑测试程序,该方法检查程序中的每个通道是否能够按照预定的要求正确工作。(使用程序设计的控制结构来导出测试方案)包含所有可能情况的测试称为穷举测试,这对于实

6、际程序来说通常是不可能的。白盒测试功能,确保模块中的所有独立路径至少执行一次。测试所有逻辑值的真和假。在上下边界和可操作范围内运行所有循环。检查内部数据结构以确保其有效性。7.1.3软件测试步骤1。模块测试模块测试的目的是确保每个模块能够作为一个单元正确运行,所以模块测试通常被称为单元测试。编码和详细设计中的错误经常在这个测试步骤中被发现。2.子系统测试子系统测试是将经过单元测试的模块放在一起,形成一个测试子系统。模块之间的协调和通信是这个测试过程中的主要问题,所以这一步重点是测试模块的接口。系统测试系统测试是将被测试的子系统组装成一个完整的系统进行测试。软件设计中的错误经常在这个测试步骤中被

7、发现,需求规格中的错误也可能被发现。4.验收测试验收测试将软件系统作为单一实体进行测试,以验证系统是否能够真正满足用户的需求。在这个测试步骤中经常会发现系统需求规格中的错误。并行操作并行操作是同时运行新开发的系统和将被其取代的旧系统,以比较新旧系统的处理结果。这样做的具体目的如下:(1)新系统可以在没有风险的准生产环境中运行;(2)用户可以在一段时间内熟悉新系统;(3)可以验证用户指南和用户手册等文件;(4)新系统可以在准生产模式下进行满负荷测试,测试结果可以验证系统的性能指标。测试阶段的信息流,软件配置:测试配置,测试实际结果,调试记录,测试配置,测试计划,测试计划,测试计划,测试中使用的输

8、入数据(测试用例),每组输入数据要检查的功能,每组输入数据的预期正确输出,7.1.4测试阶段的信息流,7个单元测试,单元测试侧重于检查软件设计的最小单元模块。单元测试通常采用白盒测试方法,多个模块的测试可以并行进行。7.2.1单元测试在单元测试中考虑了主评估模块的以下五个特征:模块接口;本地数据结构;重要的执行路径。错误处理路径;影响上述特性的边界条件。,测试界面时主要检查以下几点;()参数的数量是否等于调用模块发送的参数数量?(2)参数和变量的属性匹配吗?(3)参数和变量的单位系统匹配吗?(4)传输到被调用模块的参数数量是否等于该模块的参数数量?(5)传递给被调用模块的参数和参数的属性是否一

9、致?(6)传递给被调用模块的参数的单位系统是否与模块参数的单位系统一致?(7)传递给内部函数的参数的属性、数量和顺序是否正确?(8)参数是否仅用作修改的输入?(9)整个过程变量的定义和用法在每个模块中是否一致?如果一个模块完成外部输入或输出,还应该检查以下几点:(1)文件属性是否正确?(2)打开文件的语句是否正确?(3)格式规范是否与输入和输出语句一致?(4)缓冲区大小是否与记录长度匹配?(5)您在使用文件之前打开过吗?(6)文件结束的条件是否已得到处理?(7)是否检查并处理了输入/输出错误?(8)输出信息中是否有任何书写错误?对于模块,本地数据结构是一个常见的错误源。测试方案应仔细设计,以发

10、现以下类型的错误:(1)不正确或不兼容的解释;(2)使用尚未赋值或初始化的变量;(3)错误的初始值或错误的默认值;(4)错误的变量名(拼写错误或被截断);(5)不兼容的数据类型;(6)溢出、下溢或异常地址。计算错误、比较错误或控制流程不当导致的错误:(1)计算顺序错误或操作员的优先顺序被误解;(2)混合操作(操作对象类型不兼容);(3)变量初始值不正确;(4)精度不够;(5)表达的符号是错误的。比较后控制流变化的误差:(1)比较不同数据类型的量;(2)不正确的逻辑运算符或错误的优先级;(3)当两个量由于精度问题而不相等时,程序期望出现相等条件;(4)“差值1”误差(即更多周期或更少周期);(5

11、)错误或不存在的环路终止条件;(6)当遇到发散迭代时,循环不能终止;(7)正确修改循环变量。在处理错误时,应考虑潜在的错误:(1)错误的描述难以理解;(2)记录的错误与实际遇到的错误不同;(3)在处理错误之前,错误条件已经导致系统异常;(4)错误处理不正确(异常处理);(5)描述错误的信息不足以帮助确定错误的位置。边界测试是单元测试中最后也可能是最重要的任务。软件经常在其边界失败。7.2.2单元测试过程通常经历两种类型的测试:手工测试和计算机测试。1.代码评审手动测试源程序可以由作者自己非正式地执行,也可以由评审小组正式地执行。后者称为代码审查,是一种非常有效的程序验证技术。对于典型程序,可以

12、找出3070的逻辑设计错误和编码错误。代码审查优于计算机测试,因为在一次审查会议中可以发现许多错误。它可以减少系统验证的总工作量。实践表明,对于发现某些类型的错误,手动测试比计算机测试更有效。其他类型的错误则相反。测试软件模块不是一个独立的程序,因此有必要为每个单元测试开发驱动软件和/或存根软件。高内聚性可以简化单元测试过程。(所需的测试方案减少了,模块中的错误更容易预测和发现。)在所有模块都完成单元测试后,问一个问题:如果每个模块都运行良好,为什么你会怀疑它们不能一起正常工作?问题是:“如何把它们放在一起”的接口问题数不胜数,而集成测试是一种通过测试与接口相关的问题来构造程序结构的系统技术。

13、目的:选取通过单元测试的模块,构建设计中描述的程序结构。集成测试是一种系统的软件组装技术,从模块组装程序有两种方法。一种方法是分别测试每个模块,然后将所有模块放在一起,根据设计要求形成所需的程序。这种方法称为非增量测试方法;另一种方法是将下一个要测试的模块与已经测试过的模块相结合,然后将下一个要测试的模块结合到测试之后的测试中。这种一次添加一个模块的方法称为增量测试,它实际上同时完成单元测试和集成测试。这两种方法的主要优缺点是:非增量测试方法的工作量相对较大,增量测试会提前导致大块之间的接口错误;非增量测试最终将模块组装在一起,因此接口错误会在以后被发现。非增量测试一次将所有模块组合在一起,如

14、果发现错误很难诊断和定位;当使用增量测试方法时,如果有错误,它通常与新添加的模块有关。增量测试方法可以更彻底地测试程序。增量测试需要更多的机器时间。非增量测试方法可以并行测试所有模块,因此可以充分利用人力,加快项目进度。一般来说,增量测试方法更好。当用增量方法将模块集成到软件系统中时,有两种方法,自顶向下和自底向上。7.3.1自上而下的组合从主控制模块(“主程序”)开始,向下移动到软件的控制级别,从而逐渐组合各种模块。7.3.2自底向上和自底向上测试的结合组装和测试从“原子”模块(即软件结构最底层的模块)开始。7.3.3不同测试策略的比较自顶向下组合的优点:无需测试驱动程序,系统的主要功能可以

15、在早期实现和验证,上层模块的接口错误可以更早发现。自顶向下组合的缺点:需要存根程序,这可能导致测试困难,低级关键模块中的错误发现较晚,并且这种方法不能在早期充分部署人力。自底向上测试方法的优点和缺点正好相反。混合策略:改进自顶向下的测试方法:基本上采用自顶向下的测试方法,但在早期,软件中的一些关键模块采用自底向上的方法进行测试。混合方法:对于软件结构的上层,采用自顶向下的方法;对于软件结构的底层,采用自下而上的方法,并将两种方法结合起来。验收测试、验收测试任务来验证软件的有效性。软件有效性定义了如果软件的功能和性能是用户合理期望的,那么软件就是有效的。需求分析阶段产生的文档准确描述了用户对软件

16、的合理期望,是软件的有效标准和验收测试的基础。回归测试,对于一些已经测试过的子集,再做一次。用于确保变更(由于测试或其他原因)不会导致意外行为或其他错误活动。通过重新执行所有测试用例的一个子集,或者通过使用一个自动化的捕获审查工具来手动执行。测试用例的类型包括:能够测试软件所有功能的代表性测试用例,专门针对可能被修改和影响的软件功能的附加测试,针对修改后的软件组件的测试,以及集成测试期间关键模块的识别。关键模块的特征:它与几个软件需求相关。它包含高级控件(位于程序结构的顶部)。它很复杂或容易出错,并且包含确定性的性能要求。关键模块应尽早测试。回归测试应该关注关键模块的功能。7.4.1验收测试的

17、范围(验证测试)验收测试的范围类似于系统测试,但也有一些区别。验收测试有两种可能的结果:(1)功能和性能符合用户要求,软件是可接受的;(2)功能或性能与用户需求之间存在差距。7.4.2软件配置审查、系统测试、软件和其他系统组件(新硬件和信息)的集成、系统集成和验证测试。(在软件工程的研究范围之外)系统测试类型恢复测试安全测试压力测试性能测试设计测试方案,其中包括预定要测试的功能输入测试数据和预期结果。通常的做法是用黑盒方法设计基本的测试方案,然后用白盒方法补充一些方案。7.5.1逻辑覆盖逻辑覆盖是一系列测试过程的总称,这些过程逐步进行越来越完整的路径测试。1.为语句覆盖选择足够的测试数据,以便被测试程序中的每个语句至少可以执行一次。2.决策覆盖也称为分支覆盖,这意味着不仅每个语句必须至少执行一次,而且每个决策的每个可能结果也应该至少执行一次,即每个决策的每个分支都应该至少执行一次。条件覆盖不仅至少执行一次每个语句,而且使判断表达式中的每个条件得到各种可能的结果。4.决策条件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论