已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件测试的目标,测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤, 测试是对软件规格说明、设计和编码的最后复审。 根本目标:尽可能多地发现并排除软件中潜藏的错误,最终把高质量的软件系统交给用户。 无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。,软件测试在软件生命周期中横跨两个阶段。软件测试包括两种: 单元测试模块的编写者和测试者是同一个人 综合测试由专门的测试人员承担 软件测试的工作量往往占软件开发总工作量的40以上,7. 基本概念,7.1.1 软件测试的目标 (1)测试是为了发现程序中的错误而执行程序的过程; (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; (3)成功的测试是发现了至今为止尚未发现的错误的测试。 测试的定义为了发现程序中的错误而执行程序的过程。,测试目标决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。 由于测试的目标是暴露程序中的错误,因此由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。,测试不能证明错误不存在,只能表示软件错误已经出现。 测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。,测试原则,所有的测试都应追溯到用户需求。 应在测试工作真正开始的前较长时间内就进行测试计划。(测试计划可在设计模型一完成就开始,详细测试方案定义可在设计模型被确定后立即开始) 穷举测试是不可能的。 为达到最佳效果,应由独立的第三方来构造测试。,可测试性,软件的可测试性就是一个计算机程序能够被测试的容易程度。 可测试性特征: 可操作性“运行得越好,被测试的效率越高” 可观察性。“你所见的即为你所测试的” 可控制性。“对软件控制越好,测试越能够被自动执行与优化” 可分解性。“通过控制测试范围,能更快的分界问题,执行更灵巧的再测试” 简单性。“需测试的内容越少,测试速度越快” 稳定性。“改变越少,对测试的破坏越小” 易理解性。“得到的信息越多,进行的测试越灵巧”,“好”测试的属性,一个好测试发现错误的可能性很高。 一个好测试并不冗余。(每个测试都该有不同的用途) 一个好测试应该是一组目的相似的测试中最佳的,最可能找到所有错误的测试。 一个好测试既不会太简单,也不会太复杂。,7.1.2 黑盒测试和白盒测试 测试任何产品都有两种方法: 黑盒测试如果已经知道了产品应该具有 的功能,可以通过测试来检验是否每个功能都能正常使用; 白盒测试如果知道产品内部工作过程, 可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行,且所有内部部件被充分利用(确保“所有齿轮吻合”)。,黑盒测试又称为功能测试,它把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按 照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如,数据库或文件)的完整性。 (故意不考虑控制结构,而是注意信息域),黑盒测试检测的错误类型,功能不对或遗漏。 界面错误。 数据结构或外部数据库访问错误。 性能错误。 初始化和终止错误。,白盒测试又称为结构测试,它的前提是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。 (使用程序设计的控制结构导出测试方案) 包含所有可能情况的测试称为穷尽测试,对于实际程序而言,穷尽测试通常是不可能做到的。,白盒测试功能,保证一个模块中的所有独立路径至少被执行一次。 对所有逻辑值均需测试TRUE和FALSE。 在上下边界及可操作范围内运行所有循环。 检查内部数据结构以确保其有效性。,7.1.3 软件测试的步骤 1. 模块测试 模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。在这个测试步骤中所发现的往往是编码和详细设计的错误。 2. 子系统测试 子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。模块相互间的协调和通信是这个测试过程中的主要问题,因此这个步骤着重测试模块的接口。,3. 系统测试 系统测试是把经过测试的子系统装配成一个完整的系统来测试。在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。 4. 验收测试 验收测试把软件系统作为单一的实体进行测试,目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误。,5. 平行运行 平行运行就是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。这样做的具体目的有如下几点: (1)可以在准生产环境中运行新系统而又不冒风险; (2)用户能有一段熟悉新系统的时间; (3)可以验证用户指南和使用手册之类的文档; (4)能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。,测试阶段的信息流,软件配置: 测试配置 + 测试实际结果 + 调试纪录 测试配置: 测试计划 + 测试方案 测试方案: 测试时使用的输入数据(测试用例) 每组输入数据预定要检查的功能 每组输入数据预期应该得到的正确输出,7.1.4 测试阶段的信息流,7 单元测试,单元测试集中检验软件设计的最小单元模块。单元测试通常使用白盒测试法,而且对多个模块的测试可以并行地进行。 7.2.1 单元测试考虑 在单元测试期间主要评价模块的下述五个特性: 模块接口; 局部数据结构; 重要的执行通路; 出错处理通路; 影响上述各方面特性的边界条件。,在对接口进行测试时主要检查下述各点; ()参数数目和由调用模块送来的变元的数目是否相等? (2)参数的属性和变元的属性是否匹配? (3)参数和变元的单位系统是否匹配? (4)传送给被调用模块的变元的数目是否等于那个模块的参数的数目? (5)传送给被调用模块的变元属性和参数的属性是否一致? (6)传送给被调用模块的变元的单位系统和该模块参数的单位系统是否一致? (7)传送给内部函数的变元属性、数目和次序是否正确? (8)是否修改了只做输入用的变元? (9)全程变量的定义和用法在各个模块中是否一致?,如果一个模块完成外部的输入或输出时,还应该再检查下述各点: (1)文件属性是否正确? (2)打开文件语句是否正确? (3)格式说明书与输入输出语句是否一致? (4)缓冲区大小与记录长度是否匹配? (5)使用文件之前先打开文件了吗? (6)文件结束条件处理了吗? (7)输入输出错误检查并处理了吗? (8)输出信息中有文字书写错误吗?,对于一个模块而言,局部数据结构是常见的错误来源。应该仔细设计测试方案,以便发现下述类型的错误: (1)错误的或不相容的说明; (2)使用尚未赋值或尚未初始化的变量; (3)错误的初始值或不正确的缺省值; (4)错误的变量名字(拼写错或截短了); (5)数据类型不相容; (6)上溢、下溢或地址异常。,由于错误的计算、不正确的比较或不适当的控制流造成的错误: (1)计算次序不对或误解了运算符的优先次序; (2)混合运算(运算对象的类型彼此不相容); (3)变量初始值不正确; (4)精度不够; (5)表达式的符号表示错误。,比较后控制流变化的错误: (1)比较数据类型不同的量; (2)逻辑运算符不正确或优先次序的错误; (3)当由于精度问题两个量不会相等时,程序中却期待着相等条件的出现; (4)“差1”错(即,多循环一次或少循环一次); (5)错误的或不存在的循环终止条件; (6)当遇到发散的迭代时不能终止循环; (7)错误地修改循环变量。,当错误处理部分,应该考虑潜在的错误: (1)对错误的描述是难于理解的; (2)记下的错误与实际遇到的错误不同; (3)在对错误进行处理之前,错误条件已经引起系统异常; (4)对错误的处理(例外处理)不正确; (5)描述错误的信息不足以帮助确定造成错误的位置。 边界测试是单元测试中最后的也可能是最重要的任务。软件常常在它的边界上失效。,7.2.2 单元测试过程 通常经过人工测试和计算机测试两种类型的测试。 1. 代码审查 人工测试源程序可以由编写者本人非正式地进行,也可以由审查小组正式进行。后者 称为代码审查,它是一种非常有效的程序验证技术,对于典型的程序来说,可以查出3070的逻辑设计错误和编码错误。 代码审查比计算机测试优越的是:一次审查会上可以发现许多错误。可减少系统验证的总工作量 实践表明,对于查找某些类型的错误来说,人工测试比计算机测试更有效;对于其他类型的错误来说则刚好相反。,2. 测试软件 模块并不是一个独立的程序,因此必须为每个单元测试开发驱动软件和(或)存根软件。 高内聚可简化单元测试过程。(减少所需的测试方案,且模块中的错误也更容易预测和发现),在所有的模块都完成单元测试以后提一个问题:,如果每个模块都工作的很好,那么为什么要怀疑把它们放在一起就不能正常工作呢? 问题在于:“怎样放在一起”接口 问题数不胜数,集成测试,集成测试是通过测试发现和接口有关的问题来构造程序结构的系统化技术。 目标:把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构。,7 集成测试,集成测试是组装软件的系统技术,由模块组装成程序时有两种方法。 一种方法是先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,这种方法称为非渐增式测试方法;(通常存在的倾向) 另一种方法是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。这种每次增加一个模块的方法称为渐增式测试,这种方法实际上同时完成单元测试和集成测试。,两种方法的主要优缺点: 非渐增式测试方法工作量比较大 渐增式测试可以较早发规模块间的接口错误;非渐增式测试最后才把模块组装在一起,因此接口错误发现得晚。 非渐增式测试一下子把所有模块组合在一起,如果发现错误则较难诊断定位;使用渐增式测试方法时,如果发生错误则往往和最近加进来的那个模块有关。,渐增式测试方法对程序的测试更彻底。 渐增式测试需要较多的机器时间。 非渐增式测试方法可以并行测试所有模块,因此能充分利用人力,加快工程进度。 总的说来,渐增式测试方法比较好。 使用渐增方式把模块结合到软件系统中去时,有自顶向下和自底向上两种方法。,7.3.1自顶向下结合 从主控制模块(“主程序”)开始,沿着软件的控制层次向下移动,从而逐渐把各个模块结合起来。,7.3.2 自底向上结合 自底向上测试从“原子”模块(即在软件结构最低层的模块)开始组装和测试。,7.3.3 不同测试策略的比较 自顶向下结合的优点: 不需要测试驱动程序,能在早期实现并验证系统的主要功能,能较早发现上层模快的接口错误。 自顶向下结合的缺点: 需要存根程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,而且用这种方法在早期不能充分展开人力。 自底向上测试方法的优缺点刚好相反。,混合策略: 改进的自顶向下测试方法: 基本上使用自顶向下的测试方法,但是在早期,就使用自底向上的方法测试软件中的少数关键模块。 混合法:对软件结构中较上层,使用的是自顶向下方法;对软件结构中较下层,使用的是自底向上方法,两者相结合。, 验收测试,验收测试的任务验证软件的有效性。 软件有效性定义如果软件的功能和性能如同用户所合理地期待的那样,则软件是有效的。 需求分析阶段产生的文档准确地描述了用户对软件的合理期望,因此是软件有效 的标准,也是验收测试的基础。,回归测试,对某些已经进行过测试的某些子集在重新进行一遍。 用来保证(由于测试或其他原因)改动不会带来不可预料的行为或者另外的错误活动。 通过重新执行所有的测试用例的一个子集人工的来进行,或使用自动化捕获回访工具来进行。 测试用例的类型包括: 能够测试软件的所有功能的代表性测试用例 专门针对可能会修改影响的软件功能的附加测试 针对修改过的软件成分的测试,进行集成测试时,应能识别关键模块。 关键模块的特性: 和好几个软件需求有关 含有高层控制(位于程序结构的高层) 本身是复杂的或者是容易出错的 含有确定性的性能需求 关键模块应尽可能早地进行测试 回归测试应集中在关键模块的功能上,7.4.1 验收测试(确认测试)的范围 验收测试的范围与系统测试类似,但是也有一些差别。 验收测试有两种可能的结果: (1)功能和性能与用户要求一致,软件是可以接受的; (2)功能或性能与用户的要求有差距。 7.4.2 软件配置复查,系统测试,将软件和其他系统成分(新的硬件、信息)集成起来,进行系统集成和确认测试。(不属于软件工程的研究范围) 系统测试类型 恢复测试 安全测试 压力测试 性能测试, 设计测试方案,测试方案包括预定要测试的功能,应 该输入的测试数据和预期的结果。 通常的做法是,用黑盒法设计基本的测试方案,再用白盒法补充一些方案。,7.5.1 逻辑覆盖 逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。 1. 语句覆盖 选择足够多的测试数据,使被测试程序中每个语句至少执行一次。 2. 判定覆盖 判定覆盖又叫分支覆盖,它的含义是,不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支部至少执行一次。,3. 条件覆盖 不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。 4. 判定条件覆盖 同时满足判定和条件两种覆盖标准的逻辑覆盖,这就是判定条件覆盖。它的含义是,选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式 也都取到各种可能的结果。,5. 条件组合覆盖 条件组合覆盖是更强的逻辑覆盖标准,它要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。 6. 点覆盖 如果连通图G的子图G是连通的,而且包含G的所有节点,则称G是G的点覆盖,7. 边覆盖 如果连通图G的子图G“是连通的,而且包含G的所有边,则称G”是G的边覆盖。 8. 路径覆盖 选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次),7.5.2 等价划分 如果把所有可能的输入数据(有效的和无效的)划分成若干个等价类,则可以合理地 做出下述假定:每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。因此,可以从每个等价类中只取一组数据作为测试数据。这样选取的测试数据最有代表性,最可能发现程序中的错误。,等价划分的测试方案用于设计基于输入条件的等价类评估 如果对象具有对称性或自反性的关系连接,就存在等价类。 等价类表示输入条件的一组有效或无效的状态,划分出等价类以后,根据等价类设计测试方案时主要使用下面两个步骤: (1)设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等价类,复重这一步骤直到所有有效等价类都被覆盖为止; (2)设计一个新的测试方案,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。,7.5.3 边界值分析(BVA) 是补充等价划分的测试方案设计技术。 设计使程序运行在边界情况附近的测试方案,暴露出程序错误的可能性更大一些。 应该选取刚好等于、稍小于和稍大干等价类边界值的数据作为测试数据,而不是选取每个等价类内的典型值或任意值作为测试数据。 7.5.4 错误推测 错误推测法在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。,7.5.5 实用测试策略 对软件系统进行实际测试时,应该联合使用各种设计测试方案的方法,形成一种综合策略。通常的做法是,用黑金法设计基本的测试方案,再用白金法补充一些必要的测试方案。 具体地说,可以使用下述策略结合各种方法: 1在任何情况下都应该使用边界值分析的方法。 2必要时用等价划分法补充测试方案。 3必要时再用错误推测法补充测试方案。 4对照程序逻辑,检查已经设计出的测试方案。,测试步骤,确定测试要度量什么(要测试什么,为什么要测试。)内容是需求规格说明的完全性、系统设计中模块的内聚性及实现代码的可靠性。 决定如何测试待定软件(选择何种测试方法) 开发测试用例。 确定测试的期望结果并创建测试喻示。 执行测试用例。 将测试结果与测试喻示表示的期望结果进行比较。,6 调试,在成功的测试之后,还必须进一步诊断和改正程序中的错误,这就是调试的任务。 调试过程的两个步骤: 它从表示程序中存在错误的某些迹象开始,首先确定错误的准确位置工(作量大约占调试总工作量的95) ; 确定问题的原因,并改正错误。,7.6.1 调试技术 现有的调试技术主要有下述三类: 1. 输出存储器内容 2. 打印语句 3. 自动工具 7.6.2 调试策略 调试过程的关键不是调试技术,而是用来推断错误原因的基本策略。,1. 试探法 分析错误征兆,猜想故障的大致位置 2. 回溯法 检查错误征兆,确定最先发现“症状”的地方,然后人工沿程序的控制流往回追踪源程序代码,直到找出错误根源或确定故障范围为止。 3. 对分查找法,4. 归纳法 从线索(错误征兆)出发,通过分析这些 线索之间的关系而找出故障。 归纳法的四个主要步骤: (l)收集有关的数据 (2)组织数据 (3)导出假设 (4)证明假设,5. 演绎法 演绎法调试开始时先列出所有看来可能成立的原因或假设,然后一个一个地排除列举出的原因,最后,证明剩下的原因确实是错误的根源。演绎法主要有下述四个步骤; (1)设想可能的原因 (2)用已有的数据排除不正确的假设 (3)精化余下的假设 (5)证明余下的假设,7 软件可靠性,7.7.1 基本概念 1. 软件可靠性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 62899-302-7:2025 EN Printed electronics - Part 302-7: Equipment - Inkjet - Measurement methods of dot placement evaluation for printed electronics
- TCECS 1516-2023 分布式空气源热泵供热系统技术规程
- GBT 51461-2024 农业工程术语标准
- 村社区保洁协议合同
- 供暖合同协议书范本
- 公司买汽油合同范本
- 江苏盐城响水县部分机关事业单位招聘政府购买服务用工人员34人易考易错模拟试题(共500题)试卷后附参考答案
- 兼职开发协议书范本
- 供用水安装合同范本
- 普洱市镇沅县大学生志愿服务西部地方项目志愿者招募易考易错模拟试题(共500题)试卷后附参考答案
- 2025年中国铝铸件铸造行业市场前景预测及投资价值评估分析报告
- 2025年河北机关事业单位工人技能等级考试题库及答案
- 企业文档管理与归档操作规范
- 质量管理与思政
- 2025年度哈尔滨“丁香人才周”(春季)民兵教练员补充招聘20人笔试考试备考题库及答案解析
- 2025年肠道菌群行业发展现状与未来趋势白皮书
- 足疗服务篇培训
- 2026年镇痛泵的使用及护理
- 四川成都文化旅游发展集团有限责任公司下属企业招聘笔试题库2025
- 2023年06月上海市浦东新区临港新片区文员招考聘用笔试题库含答案解析
- 企业合规管理全流程法律实务-1
评论
0/150
提交评论