收藏 分享(赏)

第7章 实现--编码测试.ppt

上传人:tkhy51908 文档编号:8010301 上传时间:2019-06-04 格式:PPT 页数:124 大小:813KB
下载 相关 举报
第7章 实现--编码测试.ppt_第1页
第1页 / 共124页
第7章 实现--编码测试.ppt_第2页
第2页 / 共124页
第7章 实现--编码测试.ppt_第3页
第3页 / 共124页
第7章 实现--编码测试.ppt_第4页
第4页 / 共124页
第7章 实现--编码测试.ppt_第5页
第5页 / 共124页
点击查看更多>>
资源描述

1、第七章 实现编码,主讲人:李彦明,编码 软件测试的目的和原则 软件测试用例设计 软件测试测略 软件测试种类 程序调试,通常把编码和测试统称为实现。所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。作为软件工程过程的一个阶段,编码是对设计的进一步具体化,因此,程序的质量主要取决于软件设计的质量。但是,所选用的程序设计语言的特点及编码风格也将对程序的可靠性、可读性、可测试性和可维护性产生深远的影响。,软件测试在软件生命周期中横跨两个阶段。通常在编写出每个模块之后就对它做必要的测试(称为单元测试),模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。在这个阶段结束

2、之后,对软件系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。,大量统计资料表明,软件测试的工作量往往占软件开发总工作量的40%以上,在极端情况,测试那种关系人的生命安全的软件所花费的成本,可能相当于软件工程其他开发步骤总成本的3倍到5倍。因此,必须高度重视软件测试工作,绝不要以为写出程序之后软件开发工作就接近完成了,实际上,大约还有同样多的开发工作量需要完成。,仅就测试而言,它的目标是发现软件中的错误,但是,发现错误并不是最终目的。软件工程的根本目标是开发出高质量的完全符合用户需要的软件,因此,通过测试发现错误之后还必须诊断并改正错误,这就是

3、调试的目的。调试是测试阶段最困难的工作。在对测试结果进行收集和评价的时候,软件所达到的可靠性也开始明朗了。软件可靠性模型使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠性。,编码,为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。,选择程序标准,系统用户的要求。 (2) 可以使用的编译程序。 (3) 可以得到的软件工具。 (4) 工程规模。 (5) 程序员的知识。

4、(6) 软件可移植性要求。 (7) 软件的应用领域,编写程序的风格,程序内部文档包括恰当的标识符,适当的注解和程序的视觉组织等等。,源程序代码的逻辑简明清晰、易读易懂是好程序的一个重要标准,为了做到这一点应该遵循下述规则:,1.选取含义鲜明的名字,使它能正确地提示程序对象所代表的实体,缩写和命名规则应一致;2.注解是程序员和程序读者通信的重要手段,正确的注解非常有助于对程序的理解;3.程序清单的布局对于程序的可读性有很大影响,应该利用适当的阶梯形式是程序的层次结构清晰明显。,数据说明对所用到的数据结构中的数据元素进行说明。语句构造:1.不要为了节省空间而把多条语句写在同一行;2.尽量避免复杂的

5、条件测试;3.尽量减少对“非”条件的测试;4.避免大量使用循环嵌套和条件嵌套;5.利用括号使逻辑表达式或算术表达式的运算次序清晰直观;效率少用全局变量、多用局部变量或使用传递参数。,软件测试的目的和原则,软件测试的目的 软件测试的原则 软件测试的对象 测试信息流 测试与软件开发各阶段的关系,软件测试的目的,基于不同的立场,存在着两种完全不同的测试目的。 从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。 从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。,软件测试目的,(1

6、) 测试是程序的执行过程,目的在于发现错误; (2) 一个好的测试用例在于能发现至今未发现的错误; (3) 一个成功的测试是发现了至今未发现的错误的测试。,换言之,测试的目的是想以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。实施测试收集到的测试结果数据为可靠性分析提供了依据。测试不能表明软件中不存在错误,它只能说明软件中存在错误。,测试的执行步骤,软件测试的原则,1. 应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。 2. 测试用例应由测试输入数据和对应的

7、预期输出结果这两部分组成。 3. 程序员应避免检查自己的程序。 4. 在设计测试用例时,应包括合理的输入条件和不合理的输入条件。,5. 充分注意测试中的群集现象。 经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。 6. 严格执行测试计划,排除测试的随意性。 7. 应当对每一个测试结果做全面检查。 8. 妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。,软件测试的对象,软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。 需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及

8、源程序,都应成为软件测试的对象。,为把握软件开发各个环节的正确性,需要进行各种确认和验证工作。 确认,是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。需求规格说明确认程序确认 (静态确认、动态确认) 验证,试图证明在软件生存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。,测试信息流,测试信息流,软件配置:软件需求规格说明、软件设计规格说明、源代码等; 测试配置:测试计划、测试用例、测试程序等; 测试工具:测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试数据库等等。,测试结果分析:比较实测结果与预期结果,评价错误是否发生。 排

9、错(调试):对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。 修正后的文档再测试:直到通过测试为止。,通过收集和分析测试结果数据,对软件建立可靠性模型 利用可靠性分析,评价软件质量:软件的质量和可靠性达到可以接受的程度;所做的测试不足以发现严重的错误; 如果测试发现不了错误,可以肯定,测试配置考虑得不够细致充分,错误仍然潜伏在软件中。,测试与软件开发各阶段的关系,软件开发过程是一个自顶向下,逐步细化的过程 软件计划阶段定义软件作用域 软件需求分析建立软件信息域、功能和性能需求、约束等 软件设计 把设计用某种程序设计语言转换成程序代码,测试过程是依相反顺序安排的自

10、底向上,逐步集成的过程。,测试用例设计,两种常用的测试方法黑盒测试白盒测试,白盒测试在测试过程的早期阶段,黑盒测试用于测试过程的后期.,黑盒测试,这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。黑盒测试又叫做功能测试或数据驱动测试。,黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:是否有不正确或遗漏了的功能?在接口上,输入能否正确地接受? 能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?,设计黑盒测试方案时,

11、应该考虑下述问题,怎样测试功能的有效性? 哪些类型的输入可构成好的测试用例? 系统是否对特定的输入值特别敏感? 怎样划定数据类的边界? 系统能够承受什么样的数据率和数据量?,数据的特定组合将对系统运行产生什么影响? 用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。 但这是不可能的。,动态黑盒测试 闭着眼睛测试软件,软件,输入,不深入代码细节的测试方法称为动态黑盒测试。软件测试员充当客户来使用它。,输出,黑盒测试分类,等价划分:把程序的输入域划分成若干个数据类,据此导出测试用例. 有效输入:16个数字字符组成;最高位数字串是零;最高

12、位数字左邻是负号的数字串. 无效输入:空字符串;左部填充的字符既不是零也不是空格;最高位数字右面由数字和空格,其他字符混合组成;负号与最高位数字之间有空格. 合法输出:在计算机能表示的最小负整数和零之间的负整数;零;在零和计算机能表示的最大正整数之间的正整数. 非法输出:比计算机能表示的最小负整数还小的负整数;比计算机能表示的最大正整数还大的正整数,16个数字组成的数字串,输出是合法的正整数. 输入: 1 预期的输出: 1 最高位数字是零的数字串,输出是合法的正整数. 输入:000001 预期的输出: 1 负号与最高位数字紧相邻,输出合法的负整数.输入:-00001 预期的输出: -1 最高位

13、数字是零,输出也是零输入:000000 预期的输出: 0 太小的负整数. 输入:-47561 预期的输出:”错误-无效输入”,太大的正整数. 输入:132767 预期的输出:”错误-无效输入” 空字符串. 输入: 预期的输出:”错误-没有数字” 字符串左部字符既不是零也不是空格.输入:xxxxx1 预期的输出:”错误-填充错误” 最高位数字后面有空格.输入: 1 2 预期的输出:”错误-无效输入” 最高位数字后面有其他字符.输入: 1xx2 预期的输出:”错误-无效输入” 负号和最高位数字之间有空格.输入: - 12 预期的输出:”错误-负号位置错”,边界值分析:设计使程序运行在边界情况附近的

14、测试方案,暴露出程序错误的可能性更大一些. 使输出刚好等于最小的负整数.输入:-32768 预期的输出: -32768 使输出刚好等于最大的正整数.输入: 32767 预期的输出: 32767,原来等价方案5最好 使输出刚好小于最小的负整数.输入:-32769 预期的输出:”错误-无效输入”,原来测试方案6最好 使输出刚好大于最大的正整数.输入: 32768 预期的输出: :”错误-无效输入”,错误推测法:列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据他们选择测试方案. 如输入数据为零或输出数据为零往往容易发生错误;如果输入或 输出的数目允许变化,则输入或输出的数目为0和1的情况是

15、容易出错的情况.,等价划分法和边界值分析法都只是孤立地考虑各个输入数据的测试功效,而没有考虑多个输入数据的组合效应,可能会遗漏了输入数据易于出错的组合情况. 选择输入组合的一个有效途径是利用判定表或判定树为工具,列出输入数据各种组合与程序相应的动作之间的对应关系,然后为判定表的每一列至少设计一个测试用例. 选择输入组合的一个有效途径是把计算机测试和人工检查代码结合起来.,白盒测试,此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。 通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为

16、结构测试或逻辑驱动测试。,软件人员使用白盒测试方法,主要想对程序模块进行如下的检查:对程序模块的所有独立的执行路径至少测试一次;对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性,等。,对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小程序的流程图,它包括了一个执行20次的循环。 包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作365 24小时,要想把所有路径测试完,需3170年。,逻辑覆盖法 语句覆盖:选择足够多的测试数据,使被测程序中的每条语句都被执行一次. 点覆盖

17、:如果连通图G的子图G1是连通的,而且包含G的所有结点,则称G1是G的点覆盖. 判定覆盖:每个判定的分支都至少执行一次. 边覆盖:如果连通图G的子图G11是连通的,而且包含G的所有边,则称G11是G的边覆盖. 条件覆盖:判定表达式中有条件都取得各种可能的结果 路径覆盖:选取足够多的数据使程序的每条可能路径都至少执行一次.,判定/条件覆盖:选取足够多的测试数据,使得判定表达式中的每个条件都渠道各种可能的值,而且每个判定表达式也都取得各种可能的结果.条件组合覆盖:选取足够多的测试数据,使得每个判定表达式中的条件的各种可能组合都至少出现一次. 控制结构测试 基本路径测试 条件测试 循环测试,基本路径

18、测试,基本路径测试方法把覆盖的路径数压缩到一定限度内,程序中的循环体最多只执行一次。 它是在程序控制流图的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,设计测试用例的方法。设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。,1. 程序的控制流图,符号为控制流图的一个结点,表示一个或多个无分支的PDL语句或源程序语句。箭头为边,表示控制流的方向。,在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。 如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, .) 连接的复合条件表

19、达式,则需改为 一系列只有单个条件的嵌套的判断。,2. 程序环路复杂性,程序的环路复杂性给出了程序基本路径集中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。 下图的环型复杂度为6。,所谓独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径。 从控制流图来看,一条独立路径是至少包含有一条在其它独立路径中从未有过的边的路径。,3. 导出测试用例,导出测试用例,确保基本路径集中的每一条路径的执行。 根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到 用逻辑覆盖方法。,每个测试用例执行之后,与预期结果进行比较。如果所有测试用例都执行完毕,

20、则可以确信程序中所有的可执行语句至少被执行了一次。 必须注意,一些独立的路径(如例中的路径1),往往不是完全孤立的,有时它是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。,软件测试的策略,测试过程按4个步骤进行,即单元测试、组装测试、确认测试和系统测试。 开始是单元测试,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。,组装测试把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。 确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。 系统测试把已经经过确认的

21、软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。,单元测试,单元测试又称模块测试,是针对软件设计的最小单位 程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。 单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。,1. 单元测试的内容,在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。,(1) 模块接口测试,在单元测试的开始,应对通过被测模块的数据流进行测试。测试项目包括:调

22、用本模块的输入参数是否正确;本模块调用子模块时输入给子模块的参数是否正确;全局量的定义在各模块中是否一致;,(2) 局部数据结构测试,不正确或不一致的数据类型说明 使用尚未赋值或尚未初始化的变量 错误的初始值或错误的缺省值 变量名拼写错或书写错 不一致的数据类型 全局数据对模块的影响,(3) 路径测试,选择适当的测试用例,对模块中重要的执行路径进行测试。 应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。 对基本执行路径和循环进行测试可以发现大量的路径错误。,(4) 错误处理测试,出错的描述是否难以理解 出错的描述是否能够对错误定位 显示的错误与实际的错误是否相符

23、对错误条件的处理正确与否 在对错误进行处理之前,错误条件是否已经引起系统的干预等,(5) 边界测试,注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。 如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。,2. 单元测试的步骤,模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模块。,如果一个模块要完成多种功能,可以将这个模块看成由几个小程序组成。必须对其中的每个小程序先进行单元测试要做的工作,对关键模块还要做性能

24、测试。 对支持某些标准规程的程序,更要着手进行互联测试。有人把这种情况特别称为模块测试,以区别单元测试。,组装测试,组装测试 (集成测试、联合测试) 通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失;一个模块的功能是否会对另一个模块的功能产生不利的影响;,各个子功能组合起来,能否达到预期要求的父功能;全局数据结构是否有问题;单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。 在单元测试的同时可进行组装测试, 发现并排除在模块连接中可能出现 的问题,最终构成要求的软件系统。,子系统的组装测试

25、特别称为部件测试,它所做的工作是要找出组装后的子系统与系统需求规格说明之间的不一致。 通常,把模块组装成为系统的方式有两种一次性组装方式增值式组装方式,关键模块问题,在组装测试时,应当确定关键模块,对这些关键模块及早进行测试。 关键模块的特征: 满足某些软件需求; 在程序的模块结构中位于较高的层次(高层控制模块); 较复杂、较易发生错误; 有明确定义的性能要求。,确认测试,确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。 对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。,1. 进行有效性测试(黑盒测试),有效性测试

26、是在模拟的环境 (可能就是开发的环境) 下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。 首先制定测试计划,规定要做测试的种类。还需要制定一组测试步骤,描述具体的测试用例。,通过实施预定的测试计划和测试步骤,确定软件的特性是否与需求相符;所有的文档都是正确且便于使用;同时,对其它软件需求,例如可移植性、兼容性、出错自动恢复、可维护性等,也都要进行测试,在全部软件测试的测试用例运行完后,所有的测试结果可以分为两类:测试结果与预期的结果相符。这说明软件的这部分功能或性能特征与需求规格说明书相符合,从而这部分程序被接受。测试结果与预期的结果不符。这说明软件的这部分功能或性能特征

27、与需求规格说明不一致,因此要为它提交一份问题报告。,2. 软件配置复查,软件配置复查的目的是保证软件配置的所有成分都齐全;各方面的质量都符合要求; 具有维护阶段所必需的细节;而且已经编排好分类的目录。 应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查这些文档资料的完整性和正确性。,验收测试,在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。 验收测试是以用户为主的测试。软件开发人员和QA(质量保证)人员也应参加。 由用户参加设计测试用例,使用生产中的实际数据进行测试。,在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进

28、行确认。 确认测试应交付的文档有:确认测试分析报告最终的用户手册和操作手册项目开发总结报告。,系统测试,系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。 系统测试的目的在于通过与系统的需求定义作比较, 发现软件与系统的定义不符合或与之矛盾的地方。,测试和测试,在软件交付使用之后,用户将如何实际使用程序,对于开发者来说是无法预测的。 测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。,测试的目的是评价软

29、件产品的功能、局域化、可使用性、可靠性、性能和支持。尤其注重产品的界面和特色。 测试可以从软件产品编码结束之时开始,或在模块(子系统)测试完成之后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。,测试是由软件的多个用户在实际使用环境下进行的测试。这些用户返回有关错误信息给开发者。 测试时,开发者通常不在测试现场。因而,测试是在开发者无法控制的环境下进行的软件现场应用。 在测试中,由用户记下遇到的所有问题,包括真实的以及主观认定的,定期向开发者报告。,测试主要衡量产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持 )。着重于产品的支持性,包括文档、客户培训和支持

30、产品生产能力。 只有当测试达到一定的可靠程度时,才能开始测试。它处在整个测试的最后阶段。同时,产品的所有手册文本也应该在此阶段完全定稿。,测试种类,软件测试是由一系列不同的测试组成。主要目的是对以计算机为基础的系统进行充分的测试。 功能测试功能测试是在规定的一段时间内运行软件系统的所有功能,以验证这个软件系统有无严重错误。,可靠性测试如果系统需求说明书中有对可靠性的要求,则需进行可靠性测试。 平均失效间隔时间 MTBF (Mean Time Between Failures) 是否超过规定时限? 因故障而停机的时间 MTTR (Mean Time To Repairs) 在一年中应不超过多少时

31、间。,强度测试强度测试是要检查在系统运行环境不正常乃至发生故障的情况下,系统可以运行到何种程度的测试。例如:把输入数据速率提高一个数量级,确定输入功能将如何响应。设计需要占用最大存储量或其它资源的测试用例进行测试。,设计出在虚拟存储管理机制中引起“颠簸”的测试用例进行测试。设计出会对磁盘常驻内存的数据过度访问的测试用例进行测试。 强度测试的一个变种就是敏感性测试。在程序有效数据界限内一个小范围内的一组数据可能引起极端的或不平稳的错误处理出现,或者导致极度的性能下降的情况发生。此测试用以发现可能引起这种不稳定性或不正常处理的某些数据组合。,性能测试 性能测试是要检查系统是否满足在需求说明书中规定

32、的性能。特别是对于实时系统或嵌入式系统。 性能测试常常需要与强度测试结合起来进行,并常常要求同时进行硬件和软件检测。 通常,对软件性能的检测表现在以下几个方面:响应时间、吞吐量、辅助存储区,例如缓冲区,工作区的大小等、处理精度,等等。,恢复测试恢复测试是要证实在克服硬件故障(包括掉电、硬件或网络出错等)后,系统能否正常地继续进行工作,并不对系统造成任何损害。 为此,可采用各种人工干预的手段,模拟硬件故障,故意造成软件出错。并由此检查:错误探测功能系统能否发现硬件失效与故障;,能否切换或启动备用的硬件;在故障发生时能否保护正在运行的作业和系统状态;在系统恢复后能否从最后记录下来的无错误状态开始继

33、续执行作业,等等。掉电测试:其目的是测试软件系统在发生电源中断时能否保护当时的状态且不毁坏数据,然后在电源恢复时从保留的断点处重新进行操作。,启动停止测试这类测试的目的是验证在机器启动及关机阶段,软件系统正确处理的能力。这类测试包括反复启动软件系统 (例如,操作系统自举、网络的启动、应用程序的调用等)在尽可能多的情况下关机。,配置测试 这类测试是要检查计算机系统内各个设备或各种资源之间的相互联结和功能分配中的错误。 它主要包括以下几种:配置命令测试:验证全部配置命令的可操作性(有效性);特别对最大配置和最小配置要进行测试。软件配置和硬件配置都要测试。,循环配置测试:证明对每个设备物理与逻辑的,

34、逻辑与功能的每次循环置换配置都能正常工作。修复测试:检查每种配置状态及哪个设备是坏的。并用自动的或手工的方式进行配置状态间的转换。,安全性测试安全性测试是要检验在系统中已经存在的系统安全性、保密性措施是否发挥作用,有无漏洞。 力图破坏系统的保护机构以进入系统的主要方法有以下几种:正面攻击或从侧面、背面攻击系统中易受损坏的那些部分;以系统输入为突破口,利用输入的容错性进行正面攻击;,申请和占用过多的资源压垮系统,以破坏安全措施,从而进入系统;故意使系统出错,利用系统恢复的过程,窃取用户口令及其它有用的信息;通过浏览残留在计算机各种资源中的垃圾(无用信息),以获取如口令,安全码,译码关键字等信息;

35、浏览全局数据,期望从中找到进入系统的关键字;浏览那些逻辑上不存在,但物理上还存在的各种记录和资料等。,可使用性测试 可使用性测试主要从使用的合理性和方便性等角度对软件系统进行检查,发现人为因素或使用上的问题。 要保证在足够详细的程度下,用户界面便于使用;对输入量可容错、响应时间和响应方式合理可行、输出信息有意义、正确并前后一致;出错信息能够引导用户去解决问题;软件文档全面、正规、确切。,可支持性测试这类测试是要验证系统的支持策略对于公司与用户方面是否切实可行。 它所采用的方法是试运行支持过程(如对有错部分打补丁的过程,热线界面等);对其结果进行质量分析;评审诊断工具;维护过程、内部维护文档;修

36、复一个错误所需平均最少时间。,安装测试安装测试的目的不是找软件错误,而是找安装错误。 在安装软件系统时,会有多种选择。要分配和装入文件与程序库布置适用的硬件配置进行程序的联结。 而安装测试就是要找出在这些安装过程中出现的错误。,安装测试是在系统安装之后进行测试。它要检验:用户选择的一套任选方案是否相容;系统的每一部分是否都齐全;所有文件是否都已产生并确有所需要的内容;硬件的配置是否合理,等等。,过程测试 在一些大型的系统中,部分工作由软件自动完成,其它工作则需由各种人员,包括操作员,数据库管理员,终端用户等,按一定规程同计算机配合,靠人工来完成。 指定由人工完成的过程也需经过仔细的检查,这就是

37、所谓的过程测试。,互连测试 互连测试是要验证两个或多个不同的系统之间的互连性。 兼容性测试 这类测试主要想验证软件产品在不同版本之间的兼容性。有两类基本的兼容性测试:向下兼容交错兼容,容量测试 容量测试是要检验系统的能力最高能达到什么程度。例如,对于编译程序,让它处理特别长的源程序;对于操作系统,让它的作业队列“满员”;对于信息检索系统,让它使用频率达到最大。在使系统的全部资源达到“满负荷”的情形下,测试系统的承受能力。,文档测试这种测试是检查用户文档(如用户手册)的清晰性和精确性。 用户文档中所使用的例子必须在测试中一一试过,确保叙述正确无误。,调试,软件调试是在进行了成功的测试之后才开始的

38、工作。它与软件测试不同,调试的任务是进一步诊断和改正程序中潜在的错误。 调试活动由两部分组成:确定程序中可疑错误的确切性质和位置。对程序(设计,编码)进行修改,排除这个错误。,调试工作是一个具有很强技巧性的工作。 软件运行失效或出现问题,往往只是潜在错误的外部表现,而外部表现与内在原因之间常常没有明显的联系。如果要找出真正的原因,排除潜在的错误,不是一件易事。 可以说,调试是通过现象,找出原因的一个思维分析的过程。,调试的步骤,(1) 从错误的外部表现形式入手,确定程序中出错位置; (2) 研究有关部分的程序,找出错误的内在原因; (3) 修改设计和代码,以排除这个错误; (4) 重复进行暴露

39、了这个错误的原始测试或某些有关测试。,从技术角度来看,查找错误的难度在于:现象与原因所处的位置可能相距甚远。当其它错误得到纠正时,这一错误所表现出的现象可能会暂时消失,但并未实际排除。现象实际上是由一些非错误原因(例如,舍入不精确)引起的。,现象可能是由于一些不容易发现的人为错误引起的。错误是由于时序问题引起的,与处理过程无关。现象是由于难于精确再现的输入状态(例如,实时应用中输入顺序不确定)引起。现象可能是周期出现的。在软、硬件结合的嵌入式系统中常常遇到。,几种主要的调试方法,调试的关键在于推断程序内部的错误位置及原因。可以采用以下方法: 强行排错这种调试方法目前使用较多,效率较低。它不需要

40、过多的思考,比较省脑筋。例如:通过内存全部打印来调试,在这大量的数据中寻找出错的位置。,在程序特定部位设置打印语句,把打印语句插在出错的源程序的各个关键变量改变部位、重要分支部位、子程序调用部位,跟踪程序的执行,监视重要变量的变化。自动调试工具。利用某些程序语言的调试功能或专门的交互式调试工具,分析程序的动态过程,而不必修改程序。,归纳法调试 归纳法是一种从特殊推断一般的系统化思考方法。归纳法调试的基本思想是:从一些线索(错误征兆)着手,通过分析它们之间的关系来找出错误。收集有关的数据 列出所有已知的测试用例和程序执行结果。看哪些输入数据的运行结果是正确的,哪些输入数据的运行结果有错误。,组织

41、数据 由于归纳法是从特殊到一般的推断 过程,所以需要组织整理数据,以 发现规律。常以3W1H形式组织可用的数据: “What” 列出一般现象; “Where”说明发现现象的地点; “When” 列出现象发生时所有已知情况; “How” 说明现象的范围和量级;,“Yes”描述出现错误的3W1H; “No”作为比较,描述了没有错误的3W1H。通过分析找出矛盾来。提出假设分析线索之间的关系,利用在线索结构中观察到的矛盾现象,设计一个或多个关于出错原因的假设。如果一个假设也提不出来,归纳过程就需要收集更多的数据。此时,应当再设计与执行一些测试用例,以获得更多的数据。,证明假设把假设与原始线索或数据进行

42、比较,若它能完全解释一切现象,则假设得到证明;否则,就认为假设不合理,或不完全,或是存在多个错误,以致只能消除部分错误。,演绎法调试 演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。演绎法排错是测试人员首先根据已有的测试用例,设想及枚举出所有可能出错的原因做为假设;然后再用原始测试数据或新的测试,从中逐个排除不可能正确的假设;最后,再用测试数据验证余下的假设确是出错的原因。,列举所有可能出错原因的假设 把所有可能的错误原因列成表。通过它们,可以组织、分析现有数据。利用已有的测试数据,排除不正确的假设 仔细分析已有的数据,寻找矛盾,力求排除前一步列出所有原因。如果所

43、有原因都被排除了,则需要补充一些数据(测试用例),以建立新的假设。,改进余下的假设 利用已知的线索,进一步改进余下的假设,使之更具体化,以便可以精确地确定出错位置。证明余下的假设,调试原则,在调试方面,许多原则本质上是心理学方面的问题。调试由两部分组成,调试原则也分成两组。 确定错误的性质和位置的原则用头脑去分析思考与错误征兆有关的信息。避开死胡同。,只把调试工具当做辅助手段来使用。利用调试工具,可以帮助思考,但不能代替思考。避免用试探法,最多只能把它当做最后手段。 修改错误的原则在出现错误的地方,很可能还有别的错误。,修改错误的一个常见失误是只修改了这个错误的征兆或这个错误的表现,而没有修改错误的本身。当心修正一个错误的同时有可能会引入新的错误。修改错误的过程将迫使人们暂时回到程序设计阶段。修改源代码程序,不要改变目标代码。,Thank You !,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报