资源预览内容
第1页 / 共59页
第2页 / 共59页
第3页 / 共59页
第4页 / 共59页
第5页 / 共59页
第6页 / 共59页
第7页 / 共59页
第8页 / 共59页
第9页 / 共59页
第10页 / 共59页
亲,该文档总共59页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软件测试技术与测试实训教程黎连业 王华 李龙 黎照北京:机械工业出版社2012.05 第10讲:第10章 单元测试和单元测试 实训单元测试(Unite Testing)又称为模块测试,主要来检验软件设计中最小 的单位模块。一般来说模块的内聚程度高,每一个模块只能完成一种功 能,因此模块测试的程序规模小,易检查出错误。我们可以通过单元测试进 行程序语法检查和程序逻辑检查,验证程序的正确性。单元测试非常重要, 因为它影响的范围比较广,主要表现在如果一个单元模块的一个函数或者参 数出现问题,会造成后面很多问题的出现,而且如果单元测试做不好,使得 集成测试或者后面系统测试工作也做不好。做好单元测试是一个重要而且基 础性的工作,主要的测试方法分为人工测试和自动化测试两种方式。 本章重点主要讨论以下内容: 单元测试的概述; 单元测试的步骤; 单元测试需要填写的表格; 单元测试提交的软件BUG清单 单元测试的测试用例; 单元测试的人工测试实训和操作方法; 单元测试的自动化测试实训操作方法。 10.1单元测试的概述 单元测试是一种验证行为。程序中的每一项功能都应测试。作为 单元测试,需要考虑以下内容。 10.1.1单元测试的目的 单元测试目的主要有以下几点: (1)检查单元模块内部的错误,为软件的评审验收提供依据。 (2)单元测试是以程序设计说明书和之前所作的测试数据(正常的 和错误的)为指导,测试模块内重要的路径,以检查出错误; (3)检验信息能否正确地流入和流出单元; (4)在单元测试工作过程中,其内部数据能否保持其完整性,包括 内部数据的形式、内容及相互关系不发生错误,也包括全局变量 在单元中的处理和影响。 (5)在为限制数据加工而设置的边界处,能否正确工作。 (6)单元的运行能否做到满足特定的逻辑覆盖。 (7)单元中发生了错误,其中的出错处理措施是否有效。1012 单元测试的内容 模块是由程序员自己来完成的,程序员有责任编写功能代码,同时 也就有责任为自己的代码编写单元测试。程序员交付的代码一定是 通过编译的代码,但代码通过编译,只是说明了它的语法正确;却 无法保证它的语义也一定正确,没有任何人可以轻易承诺这段代码 的行为一定是正确的。 执行单元测试,就是为了证明模块代码的行为和系统期望是一致的 。这个部分的测试工作是程序开发人员(程序员)进行的。测试人 员或者QA(Quality Assurance)人员对单元测试工作是要求对所 有的局部的和全局的数据结构、外部接口和程序代码的关键部分进 行桌前检查和严格的代码审查。 单元测试是以程序设计说明书为指导,测试模块范围内的重要控制 路径,以揭露错误。 当程序编好以后,将它录制在媒体上,或者直接由终端键盘输入到 机中进行调试。测试的相对复杂性和所发现的错误受到单元测试所 限定的范围的限制。它在执行的过程中紧密的依照程序框架对模块 进行测试(调试),测试包含入口和出口的参数,输入和输出信息 ,错误处理信息,部分边界数值测试。需要在8个方面对所测模块 进行检查。1程序语法检查 程序语法从两个方面进行检查:一是通过 编译语言对程序进行检查;二是通过人工 检查。编译语言对程序的检查只检查与法 的正确性与否,但不能够发现结构性和功 能性的错误。人工检查是静态的,检查程 序的结构、程序处理的功能以及程序书写 的格式。 人工检查程序中错误的有关内容,一般如 表10-1所示。2 模块接口测试 模块接口测试是单元测试的基础,模块接口是模块内与模块外联系的关键部位。当模块通过外部 调用时,数据必须能够正确流入,当模块结束问题的处理返回调用模块时,数据必须能够正确流 出,这样,模块才能完成它的功能。 模块接口测试应考虑下列因素: 调用其他模块时所给的输入参数与模块的形式参数在个数、属性、顺序上是否匹配; 调用其他模块时所给实际参数的个数是否与被调模块的形式参个数相同; 调用其他模块时所给实际参数的属性是否与被调模块的形式参属性匹配; 调用预定义函数时所用参数的个数、属性和次序是否正确; 输入的实际参数与形式参数的个数是否相同; 输入的实际参数与形式参数的属性是否匹配; 输入的实际参数与形式参数的量纲是否一致; 是否修改了只做输入用的形式参数; 是否存在与当前入口点无关的参数引用; 是否修改了只读型参数; 对全程变量的定义各模块是否一致; 是否把某些约束作为参数传递; 输出给标准函数的参数在个数、属性、顺序上是否正确; 限制是否通过形式参数来传送; 文件属性是否正确; OPEN/CLOSE语句是否正确; 格式说明与输入输出语句是否匹配; 缓冲区大小与记录长度是否匹配; 文件使用前是否已经打开; 是否处理了输入/输出错误; 输出信息中是否有文字性错误; 在结束文件处理时是否关闭了文件。3 程序逻辑检查 程序逻辑检查主要是检查程序的逻辑结构是否正确?程序 中所使用的循环语句的上下项以及循环次数是否有问题? 函数或子模块是否有自我调用问题? 4局部数据结构测试 局部数据结构是为了保证临时存储在模块内的数据在程 序执行过程中完整、正确的基础。模块的局部数据结构往 往是错误的根源,力求发现最常见的几类错误: 不合适或不相容的类型说明; 变量无初值; 变量初始化或省缺值有错; 不正确的变量名(拼错或不正确地截断); 出现上溢、下溢和地址异常。 5路径测试 应对模块中重要的执行路径进行测试。由于错误的计算、不正确的 比较或不正常的控制流而导致执行路径的错误。路径错误应考虑下 列因素: 运算的优先次序不正确或误解了运算的优先次序; 运算的方式错,即运算的对象彼此在类型上不相容; 算法错; 初始化不正确; 浮点数运算精度问题而造成的两值比较不等; 关系表达式中不正确的变量和比较符号表示不正确; 不正确地多循环一次或少循环一次; 错误的或不可能的循环终止条件; 当遇到发散的迭代时不能终止的循环; 不适当地修改了循环变量等。6 边界条件测试 边界条件测试是单元测试中最重要的一项任务 。软件经常在边界上失效,边界条件测试是一 项基础测试,也是后面系统测试中的功能测试 的重点,边界测试执行的较好,可以大大提高 程序健壮性。边界条件测试应考虑下列因素: 程序内有一个n次循环,n次循环应是1n, 而不 是0n; 小于、小于等于、等于、大于、大于等于、不 等于确定的比较值出错; 出现上溢、下溢和地址异常。7错误处理测试 比较完善的模块设计要求能预见出错的条件,并设 置适当的出错处理,以便在一旦程序出错时,能对 出错程序重做安排,保证其逻辑上的正确性。这种 出错处理也应当是模块功能的一部分。错误处理测 试应考虑下列因素: 出错的描述难以理解; 出错的描述不足以对错误定位,不足以确定出错的 原因; 显示的错误与实际的错误不符; 对错误条件的处理不正确; 异常处理不当。 8代码书写规范 代码书写规范应考虑下列因素: 模块设计程序框架流程图; 代码书写规范,对齐方式; 代码的注释; 参数类型,数据长度,指针,数组长度大小 ; 输入输出参数和结果。1013 单元测试的优点 单元测试有下面的这些优点: 1是一种验证行为 程序中的每一项功能都是测试来验证它的正确性。 2是一种设计技术 单元测试使我们把程序设计成易于调用和可测试的设计,是一种设计 技术。 3是一种编写文档的行为 单元测试是一种文档,它是展示函数或类如何使用的最佳文档。这份 文档是可编译、可运行的,并且它保持最新,永远与代码同步。 4具有回归性 单元测试避免了代码出现回归,编写完成之后,可以随时随地的快速 运行测试。 5保证 保证代码质量,保证代码的可维护性,保证代码的可扩展性。10.1.4 单元测试所需文档资料 单元测试是以程序设计说明书为指导,测 试模块范围内的重要控制路径,以揭露错 误。 单元测试所需文档资料有: 系统需求说明书; 系统功能说明书; 系统测试说明书; 程序设计说明书; 测试大纲。10.2 单元测试的步骤 单元测试是对每个程序的单体调试。主要有以下2步 : 程序语法检查; 程序逻辑检查。在程序的逻辑检查之前,首先需要制作测试数据, 即:假设一些输入数据和文件数据。测试数据直接 影响了程序的调试工作,所以制作的数据应该满足 以下几个条件: 数据应能满足设计上要求的上下限及循环次数; 数据应满足程序中的各种检验要求的错误数据; 数据应能适宜于人工对程序的检查工作。测试数据的内容包含4个方面: 正常的数据 不同的数据 错误的数据 大量的数据 通过以上不同角度的数据检验,证明程序 逻辑是对的,程序的调试也就结束了。在单元(程序)测试期,评价模块的五个主 要特性是: 模块接口; 局部数据结构; “重要”的执行路径; 错误处理路径; 影响上述几点的界限条件。 在其它任何测试开始之前,需要测试横穿模块接口的数 据流。如果数据不是正确地进入和退出,其它的测试就 谈不上。在程序测试中接口测试的清单如下: 输入参数的数目是否等于变元的数目; 参数与变元的属性是否匹配; 参数与变元的单位是否匹配; 传送给被调用模块的变元数是否等于参数的项目; 传送给被调用模块的变元属性是否同参数属性一致; 传送给被调用模块的变元单位是否同参数的单位一致 ; 属于内部的函数属性数目及变元次序是否正确; 对参数的任何访问是否与当前的入口点无关; 输入是否改动变元; 跨模块的全程量定义是否相容; 限制是否作为变元来传送; 参数是否被重复定义。程序测试通常附属于编码步骤来考虑。在开发、复审了源代码并检 查了语法正确性之后开发设计单元测试的情况。设计信息量复审为 建立测试情况提供了指导,使得测试情况有可能发现上面讨论的各 类错误。每个测试情况应有一组预期的结果。 由于模块不是一个独立的程序,必须为每个模块测试开发驱动软件 和承接软件,在大多数应用中,驱动软件和“主程序”并无区别。客 观存在接受测试情况的数据,将这些数据送给模块,并打印有关的 结果。承接软件代替被测模块下属模块。承接软件使用下属模块的 接口,可以作最少量的数据处理,打印入口检查信息,并将控制返 回给它的上级模块。 驱动软件和承接软件代表开销。它们都是要书写的软件,但却不是 与最后的软件产品一起支付的。当模块设计成高内聚时,单元测试 就简化了。当一个模块只描述一个功能时,测试情况的数量就会减 少,就可能会更容易地预计和发现错误。 程序测试实际上是为了发现错误而执行的程序的,但测试不能发现 所有的错误,即使是最彻底的切实可行的检测方法,也只能查出程 序所存在的错误的一部分,其余的错误在实际使用过程中才能逐渐 发现。因为要检查每一种可能的情况,检测的数目是相当大,实际 上不可能实现的,另一方面,一个软件的许多问题是无法通过输入 来进行检查的,而是需要使用一些特殊的检测方法。 程序测试之后,还需要对每个程序作一份程序测试说明书,以备系 统今后修改维护。 程序测试说明书的主要内容是: 说明程序测试数据制作的方法; 测试方法; 测试过程中所产生的问题。 其格式如表10-2所示。10.3 单元测试需要填写的表格 尽管单元测试是针对模块的测试,但往往 会涉及到代码测试和功能测试。编码和测 试人员应当对自己所要测试的内容填写一 份表,供项目经理、测试经理和总工程师 审核以及备查。 具体的单元测试表格如表10-3所示。10.4单元测试提交的软件BUG清单
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号