软件测试的目标

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

黑盒测试检测的错误类型
功能不对或遗漏。 界面错误。 数据结构或外部数据库访问错误。 性能错误。 初始化和终止错误。
白盒测试又称为结构测试,它的前提是可 以把程序看成装在一个透明的白盒子里,也 就是完全了解程序的结构和处理过程。这种 方法按照程序内部的逻辑测试程序,检验程 序中的每条通路是否都能按预定要求正确工 作。 (使用程序设计的控制结构导出测试方案) 包含所有可能情况的测试称为穷尽测试, 对于实际程序而言,穷尽测试通常是不可能 做到的。
7.2.2 单元测试过程 通常经过人工测试和计算机测试两种类型的测 试。 1. 代码审查 人工测试源程序可以由编写者本人非正式地进 行,也可以由审查小组正式进行。后者称为代码审 行,也可以由审查小组正式进行。后者 称为代码审 查,它是一种非常有效的程序验证技术,对于典型 的程序来说,可以查出30%~70%的逻辑设计错误 的程序来说,可以查出30%~70%的逻辑设计错误 和编码错误。 代码审查比计算机测试优越的是:一次审查会 上可以发现许多错误。可减少系统验证的总工作量 实践表明,对于查找某些类型的错误来说,人 工测试比计算机测试更有效;对于其他类型的错误 来说则刚好相反。
“好”测试的属性
一个好测试发现错误的可能性很高。 一个好测试并不冗余。(每个测试都该有 不同的用途) 一个好测试应该是一组目的相似的测试中 最佳的,最可能找到所有错误的测试。 一个好测试既不会太简单,也不会太复杂。
7.1.2 黑盒测试和白盒测试 测试任何产品都有两种方法: 黑盒测试——如果已经知道了产品应该具有 黑盒测试——如果已经知道了产品应该具有 的功能,可以通过测试来检验是否每个功能 都能正常使用; 白盒测试——如果知道产品内部工作过程, 白盒测试——如果知道产品内部工作过程, 可以通过测试来检验产品内部动作是否按照 规格说明书的规定正常进行,且所有内部部 件被充分利用(确保“所有齿轮吻合”)。
2. 测试软件 模块并不是一个独立的程序,因此必须为 每个单元测试开发驱动软件和(或)存根软 件。
高内聚可简化单元测试过程。(减少所需的 测试方案,且模块中的错误也更容易预测和 发现)
在所有的模块都完成单元测试以后 提一个问题:
如果每个模块都工作的很好,那么为什么 要怀疑把它们放在一起就不能正常工作呢? 问题在于:“怎样放在一起”——接口 问题在于:“怎样放在一起”——接口 问题数不胜数
黑盒测试又称为功能测试,它把程序看成 一个黑盒子,完全不考虑程序的内部结构和 处理过程。也就是说,黑盒测试是在程序接 口进行的测试,它只检查程序功能是否能按 照规格说明书的规定正常使用,程序是否能 适当地接收输入数据产生正确的输出信息, 并且保持外部信息(如,数据库或文件)的 完整性。 (故意不考虑控制结构,而是注意信息域)
在对接口进行测试时主要检查下述各点; (1)参数数目和由调用模块送来的变元的数目是否 相等? (2)参数的属性和变元的属性是否匹配? (3)参数和变元的单位系统是否匹配? (4)传送给被调用模块的变元的数目是否等于那个 模块的参数的数目? (5)传送给被调用模块的变元属性和参数的属性是 否一致? (6)传送给被调用模块的变元的单位系统和该模块参 数的单位系统是否一致? (7)传送给内部函数的变元属性、数目和次序是否 正确? (8)是否修改了只做输入用的变元? (9)全程变量的定义和用法在各个模块中是否一致?
软件测试的目标
测试的目的就是在软件投入生产性运行之前, 尽可能多地发现软件中的错误。目前软件测试仍然 是保证软件质量的关键步骤, 测试是对软件规 格说明、设计和编码的最后复审。 根本目标:尽可能多地发现并排除软件中潜 藏的错误,最终把高质量的软件系统交给用户。 无论怎样强调软件测试的重要性和它对软件 可靠性的影响都不过分。
3. 系统测试 系统测试是把经过测试的子系统装配成一 个完整的系统来测试。在这个测试步骤中发 现的往往是软件设计中的错误,也可能发现 需求说明中的错误。 4. 验收测试 验收测试把软件系统作为单一的实体进行 测试,目的是验证系统确实能够满足用户的 测试,目的是验证系统确实能够满足用户的 需要,在这个测试步骤中发现的往往是系统 需求说明书中的错误。
7.3.2 自底向上结合 自底向上测试从“原子”模块(即在软件结构最 低层的模块)开始组装和测试。
7.3.3 不同测试策略的比较 自顶向下结合的优点: 不需要测试驱动程序,能在早期实现并验 证系统的主要功能,能较早发现上层模快的 接口错误。 自顶向下结合的缺点: 需要存根程序,可能遇到与此相联系的测 试困难,低层关键模块中的错误发现较晚, 而且用这种方法在早期不能充分展开人力。 自底向上测试方法的优缺点刚好相反。
7.1.1 软件测试的目标 (1)测试是为了发现程序中的错误而执行程序 的过程; (2)好的测试方案是极可能发现迄今为止尚未 发现的错误的测试方案; (3)成功的测试是发现了至今为止尚未发现的 错误的测试。 测试的定义——为了发现程序中的错误而执 测试的定义——为了发现程序中的错误而执 行程序的过程。
测试目标决定了测试方案的设计。如果为 了表明程序是正确的而进行测试,就会设计 一些不易暴露错误的测试方案;相反,如果 测试是为了发现程序中的错误,就会力求设 计出最能暴露错误的测试方案。 由于测试的目标是暴露程序中的错误,因 此由程序的编写者自己进行测试是不恰当的。 因此,在综合测试阶段通常由其他人员组成 测试小组来完成测试工作。
测试阶段的信息流
软件配置: 测试配置 + 测试实际结果 + 调试纪录 测试配置: 测试计划 + 测试方案 测试方案: 测试时使用的输入数据(测试用例) 每组输入数据预定要检查的功能 每组输入数据预期应该得到的正确输出
7.1.4 测试阶段的信息流
7.2 单元测试
单元测试集中检验软件设计的最小单元——模 单元测试集中检验软件设计的最小单元——模 块。单元测试通常使用白盒测试法,而且对多个模 块的测试可以并行地进行。 7.2.1 单元测试考虑 在单元测试期间主要评价模块的下述五个特性: 模块接口; 局部数据结构; 重要的执行通路; 出错处理通路; 影响上述各方面特性的边界条件。
如果一个模块完成外部的输入或输出时, 还应该再检查下述各点: (1)文件属性是否正确? (2)打开文件语句是否正确? (3)格式说明书与输入/输出语句是否一致? (4)缓冲区大小与记录长度是否匹配? (5)使用文件之前先打开文件了吗? (6)文件结束条件处理了吗? (7)输入/输出错误检查并处理了吗? (8)输出信息中有文字书写错误吗?
由于错误的计算、不正确的比较或不适当 的控制流造成的错误: (1)计算次序不对或误解了运算符的优先次序; (2)混合运算(运算对象的类型彼此不相容); (3)变量初始值不正确; (4)精度不够; (5)表达式的符号表示错误。
比较后控制流变化的错误: (1)比较数据类型不同的量; (2)逻辑运算符不正确或优先次序的错误; (3)当由于精度问题两个量不会相等时,程序中却 期待着相等条件的出现; (4)“差1”错(即,多循环一次或少循环一次); )“差1”错(即,多循环一次或少循环一次); (5)错误的或不存在的循环终止条件; (6)当遇到发散的迭代时不能终止循环; (7)错误地修改循环变量。
渐增式测试方法对程序的测试更彻底。 渐增式测试需要较多的机器时间。 非渐增式测试方法可以并行测试所有模块, 因此能充分利用人力,加快工程进度。 总的说来,渐增式测试方法比较好。 使用渐增方式把模块结合到软件系统中去 时,有自顶向下和自底向上两种方法。
7.3.1自顶向下结合 7.3.1自顶向下结合 从主控制模块(“主程序”)开始,沿着软件的 控制层次向下移动,从而逐渐把各个模块结合起来。
软件测试在软件生命周期中横跨两个阶段。 软件测试包括两种: 单元测试——模块的编写者和测试者是同一 单元测试——模块的编写者和测试者是同一 个人 综合测试——由专门的测试人员承担 综合测试——由专门的测试人员承担 软件测试的工作量往往占软件开发总工作 量的40%以上 量的40%以上
7.1 7.1 基本概念
5. 平行运行 平行运行就是同时运行新开发出来的系统和将 被它取代的旧系统,以便比较新旧两个系统的处理 结果。这样做的具体目的有如下几点: (1)可以在准生产环境中运行新系统而又不冒风 险; (2)用户能有一段熟悉新系统的时间; (3)可以验证用户指南和使用手册之类的文档; (4)能够以准生产模式对新系统进行全负荷测试, 可以用测试结果验证性能指标。
当错误处理部分,应该考虑潜在的错误: (1)对错误的描述是难于理解的; (2)记下的错误与实际遇到的错误不同; (3)在对错误进行处理之前,错误条件已经引 起系统异常; (4)对错误的处理(例外处理)不正确; (5)描述错误的信息不足以帮助确定造成错误 的位置。 边界测试是单元测试中最后的也可能是最 重要的任务。软件常常在它的边界上失效。
可测试性
软件的可测试性就是一个计算机程序能够被测试的容易程度。 可测试性特征: 可操作性“运行得越好,被测试的效率越高” 可观察性。“你所见的即为你所测试的” 可控制性。“对软件控制越好,测试越能够被自动执行与 优化” 可分解性。“通过控制测试范围,能更快的分界问题,执 行更灵巧的再测试” 简单性。“需测试的内容越少,测试速度越快” 稳定性。“改变越少,对测试的破坏越小” 易理解性。“得到的信息越多,进行的测试越灵巧”
测试不能证明错误不存在,只能表示软件 错误已经出现。 测试决不能证明程序是正确的。即使经过 了最严格的测试之后,仍然可能还有没被发 现的错误潜藏在程序中。测试只能查找出程 序中的错误,不能证明程序中没有错误。
测试原则
所有的测试都应追溯到用户需求。 应在测试工作真正开始的前较长时间内就 进行测试计划。(测试计划可在设计模型 一完成就开始,详细测试方案定义可在设 计模型被确定后立即开始) 穷举测试是不可能的。 为达到最佳效果,应由独立的第三方来构 造测试。
对于一个模块而言,局部数据结构是常见 的错误来源。应该仔细设计测试方案,以便 发现下述类型的错误: (1)错误的或不相容的说明; (2)使用尚未赋值或尚未初始化的变量; (3)错误的初始值或不正确的缺省值; (4)错误的变量名字(拼写错或截短了); (5)数据类型不相容; (6)上溢、下溢或地址异常。
白盒测试功能
保证一个模块中的所有独立路径至少被执 行一次。 对所有逻辑值均需测试TRUE和FALSE。 对所有逻辑值均需测试TRUE和FALSE。 在上下边界及可操作范围内运行所有循环。 检查内部数据结构以确保其有效性。
7.1.3 软件测试的步骤 1. 模块测试 模块测试的目的是保证每个模块作为一个单元 能正确运行,所以模块测试通常又称为单元测试。 在这个测试步骤中所发现的往往是编码和详细设计 的错误。 2. 子系统测试 子系源自文库测试是把经过单元测试的模块放在一起 形成一个子系统来测试。模块相互间的协调和通信 是这个测试过程中的主要问题,因此这个步骤着重 测试模块的接口。
两种方法的主要优缺点: 非渐增式测试方法工作量比较大 渐增式测试可以较早发规模块间的接口错误; 非渐增式测试最后才把模块组装在一起,因 此接口错误发现得晚。 非渐增式测试一下子把所有模块组合在一起, 如果发现错误则较难诊断定位;使用渐增式 测试方法时,如果发生错误则往往和最近加 进来的那个模块有关。
集成测试
集成测试是通过测试发现和接口有关的问 题来构造程序结构的系统化技术。 目标:把通过了单元测试的模块拿来,构 造一个在设计中所描述的程序结构。
7.3 集成测试
集成测试是组装软件的系统技术,由模块组装 成程序时有两种方法。 一种方法是先分别测试每个模块,再把所有模块 按设计要求放在一起结合成所要的程序,这种方 法称为非渐增式测试方法;(通常存在的倾向) 另一种方法是把下一个要测试的模块同已经测试 好的那些模块结合起来进行测试,测试完以后再 把下一个应该测试的模块结合进来测试。这种每 次增加一个模块的方法称为渐增式测试,这种方 法实际上同时完成单元测试和集成测试。
相关文档
最新文档