《 实现--编码测试》由会员分享,可在线阅读,更多相关《 实现--编码测试(124页珍藏版)》请在金锄头文库上搜索。
1、第七章 实现编码主讲人:李彦明编码编码软件测试的目的和原则软件测试的目的和原则软件测试用例设计软件测试用例设计软件测试测略软件测试测略软件测试种类软件测试种类程序调试程序调试通常把编码和测试统称为实现。所谓编码就是把软件设计结果翻译成用某 种程序设计语言书写的程序。作为软件工程过 程的一个阶段,编码是对设计的进一步具体化 ,因此,程序的质量主要取决于软件设计的质 量。但是,所选用的程序设计语言的特点及编 码风格也将对程序的可靠性、可读性、可测试 性和可维护性产生深远的影响。软件测试在软件生命周期中横跨两个阶 段。通常在编写出每个模块之后就对它做必 要的测试(称为单元测试),模块的编写者和 测试
2、者是同一个人,编码和单元测试属于软 件生命周期的同一个阶段。在这个阶段结束 之后,对软件系统还应该进行各种综合测试 ,这是软件生命周期中的另一个独立的阶段 ,通常由专门的测试人员承担这项工作。大量统计资料表明,软件测试的工作量 往往占软件开发总工作量的40%以上,在极端 情况,测试那种关系人的生命安全的软件所 花费的成本,可能相当于软件工程其他开发 步骤总成本的3倍到5倍。因此,必须高度重 视软件测试工作,绝不要以为写出程序之后 软件开发工作就接近完成了,实际上,大约 还有同样多的开发工作量需要完成。仅就测试而言,它的目标是发现软件中的 错误,但是,发现错误并不是最终目的。软件 工程的根本目标
3、是开发出高质量的完全符合用 户需要的软件,因此,通过测试发现错误之后 还必须诊断并改正错误,这就是调试的目的。 调试是测试阶段最困难的工作。在对测试结果进行收集和评价的时候,软 件所达到的可靠性也开始明朗了。软件可靠性 模型使用故障率数据,估计软件将来出现故障 的情况并预测软件的可靠性。编码为了使程序容易测试和维护以减少软件 的总成本,所选用的高级语言应该有理想的 模块化机制,以及可读性好的控制结构和数 据结构;为了便于调试和提高软件可靠性, 语言特点应该使编译程序能够尽可能多地发 现程序中的错误;为了降低软件开发和维护 的成本,选用的高级语言应该有良好的独立 编译机制。选择程序标准(1) 系
4、统用户的要求。 (2) 可以使用的编译程序。 (3) 可以得到的软件工具。 (4) 工程规模。 (5) 程序员的知识。 (6) 软件可移植性要求。 (7) 软件的应用领域编写程序的风格程序内部文档包括恰当的标识符,适 当的注解和程序的视觉组织等等。 源程序代码的逻辑简明清晰、易读易源程序代码的逻辑简明清晰、易读易 懂是好程序的一个重要标准,为了做到这懂是好程序的一个重要标准,为了做到这 一点应该遵循下述规则:一点应该遵循下述规则:1.选取含义鲜明的名字,使它能正确地提示 程序对象所代表的实体,缩写和命名规则应 一致;2.注解是程序员和程序读者通信的重要手段 ,正确的注解非常有助于对程序的理解;
5、3.程序清单的布局对于程序的可读性有很大 影响,应该利用适当的阶梯形式是程序的层 次结构清晰明显。 数据说明对所用到的数据结构中的数据元 素进行说明。 语句构造:1.不要为了节省空间而把多条语句写在同一 行;2.尽量避免复杂的条件测试;3.尽量减少对“非”条件的测试;4.避免大量使用循环嵌套和条件嵌套;5.利用括号使逻辑表达式或算术表达式的运 算次序清晰直观; 效率少用全局变量、多用局部变量或使用 传递参数。软件测试的目的和原则vv软件测试的目的软件测试的目的vv软件测试的原则软件测试的原则vv软件测试的对象软件测试的对象vv测试信息流测试信息流vv测试与软件开发各阶段的关系测试与软件开发各阶
6、段的关系软件测试的目的vv基于不同的立场,存在着两种完全不同的测基于不同的立场,存在着两种完全不同的测 试目的。试目的。 vv从从用户的角度用户的角度出发,普遍希望通过软件测试出发,普遍希望通过软件测试 暴露软件中隐藏的错误和缺陷暴露软件中隐藏的错误和缺陷,以考虑是否,以考虑是否 可接受该产品。可接受该产品。 vv从从软件开发者的角度软件开发者的角度出发,则希望测试成为出发,则希望测试成为 表明软件产品中不存在错误表明软件产品中不存在错误的过程,验证该的过程,验证该 软件已正确地实现了用户的要求,确立人们软件已正确地实现了用户的要求,确立人们 对软件质量的信心。对软件质量的信心。软件测试目的(
7、1) (1) 测试是测试是程序的执行过程程序的执行过程,目的在于,目的在于 发现错误发现错误; (2) (2) 一个好的测试用例在于一个好的测试用例在于能发现至今能发现至今 未发现的错误未发现的错误; (3) (3) 一个成功的测试是一个成功的测试是发现了至今未发发现了至今未发 现的错误的测试现的错误的测试。vv换言之,测试的目的是换言之,测试的目的是n n想以最少的时间和人力,想以最少的时间和人力,系统地找出软件系统地找出软件 中潜在的各种错误和缺陷中潜在的各种错误和缺陷。如果我们成功。如果我们成功 地实施了测试,我们就能够发现软件中的地实施了测试,我们就能够发现软件中的 错误。错误。n n
8、测试的附带收获是,它测试的附带收获是,它能够证明软件的功能够证明软件的功 能和性能与需求说明相符合能和性能与需求说明相符合。n n实施测试收集到的测试结果数据为实施测试收集到的测试结果数据为可靠性可靠性 分析提供了依据。分析提供了依据。n n测试不能表明软件中不存在错误,它只能测试不能表明软件中不存在错误,它只能 说明软件中存在错误。说明软件中存在错误。测试的执行步骤错误现场结果执行案例改正测试用例调试已识别 的原因被怀疑 的原因回归 测试附加 测试软件测试的原则1. 1. 应当把应当把“尽早地和不断地进行软件测尽早地和不断地进行软件测 试试”作为软件开发者的座右铭。作为软件开发者的座右铭。2
9、. 2. 测试用例应由测试用例应由测试输入数据测试输入数据和对应的和对应的 预期输出结果预期输出结果这两部分组成。这两部分组成。3. 3. 程序员应避免检查程序员应避免检查自己自己的程序。的程序。4. 4. 在设计测试用例时,应包括在设计测试用例时,应包括合理的输合理的输 入条件入条件和和不合理的输入条件不合理的输入条件。5. 5. 充分注意测试中的群集现象。充分注意测试中的群集现象。 经验表明,经验表明,测试后测试后程序中残存的错误数目与程序中残存的错误数目与 该程序中已发现的错误数目成正比该程序中已发现的错误数目成正比。 6. 6. 严格执行测试计划,严格执行测试计划,排除测试的随意性。排
10、除测试的随意性。 7. 7. 应当对每一个测试结果做全面检查。应当对每一个测试结果做全面检查。 8. 8. 妥善保存测试计划,测试用例,出错统计妥善保存测试计划,测试用例,出错统计 和最终分析报告,为维护提供方便。和最终分析报告,为维护提供方便。软件测试的对象vv软件测试并不等于程序测试。软件测试并不等于程序测试。软件测试软件测试 应贯穿于软件定义与开发的整个期间。应贯穿于软件定义与开发的整个期间。 vv需求分析、概要设计、详细设计以及程需求分析、概要设计、详细设计以及程 序编码序编码等各阶段所得到的等各阶段所得到的文档文档,包括,包括需需 求规格说明求规格说明、概要设计规格说明、概要设计规格
11、说明、详细详细 设计规格说明设计规格说明以及以及源程序源程序,都应成为软,都应成为软 件测试的对象。件测试的对象。vv为把握软件开发各个环节的正确性,需要进为把握软件开发各个环节的正确性,需要进 行各种行各种确认确认和和验证验证工作。工作。 vv确认确认,是一系列的活动和过程,目的是想证,是一系列的活动和过程,目的是想证 实在一个给定的外部环境中软件的逻辑正确实在一个给定的外部环境中软件的逻辑正确 性。性。n n需求规格说明确认需求规格说明确认n n程序确认程序确认 ( (静态确认、动态确认静态确认、动态确认) ) vv验证验证,试图证明在软件生存期各个阶段,以,试图证明在软件生存期各个阶段,
12、以 及阶段间的逻辑协调性、完备性和正确性。及阶段间的逻辑协调性、完备性和正确性。测试信息流测试信息流测试信息流vv软件配置软件配置:软件需求规格说明、软件设计:软件需求规格说明、软件设计 规格说明、源代码等;规格说明、源代码等; vv测试配置测试配置:测试计划、测试用例、测试程:测试计划、测试用例、测试程 序等;序等; vv测试工具测试工具:测试数据自动生成程序、静态:测试数据自动生成程序、静态 分析程序、动态分析程序、测试结果分析分析程序、动态分析程序、测试结果分析 程序、以及驱动测试的测试数据库等等。程序、以及驱动测试的测试数据库等等。vv测试结果分析测试结果分析:比较实测结果与预期结果,
13、:比较实测结果与预期结果, 评价错误是否发生。评价错误是否发生。 vv排错排错( (调试调试) ):对已经发现的错误进行错误定:对已经发现的错误进行错误定 位和确定出错性质,并改正这些错误,同时位和确定出错性质,并改正这些错误,同时 修改相关的文档。修改相关的文档。 vv修正后的文档再测试修正后的文档再测试:直到通过测试为止。:直到通过测试为止。vv通过收集和分析测试结果数据,对软件建通过收集和分析测试结果数据,对软件建 立可靠性模型立可靠性模型 vv利用可靠性分析,评价软件质量:利用可靠性分析,评价软件质量:n n软件的质量和可靠性达到可以接受的软件的质量和可靠性达到可以接受的 程度;程度;
14、n n所做的测试不足以发现严重的错误;所做的测试不足以发现严重的错误; vv如果测试发现不了错误,可以肯定,测试如果测试发现不了错误,可以肯定,测试 配置考虑得不够细致充分,错误仍然潜伏配置考虑得不够细致充分,错误仍然潜伏 在软件中。在软件中。测试与软件开发各阶段的关系vv软件开发过程是一个软件开发过程是一个自顶向下,逐步细化自顶向下,逐步细化 的过程的过程 vv软件计划阶段定义软件作用域软件计划阶段定义软件作用域 vv软件需求分析建立软件信息域、功能和性软件需求分析建立软件信息域、功能和性 能需求、约束等能需求、约束等 vv软件设计软件设计 vv把设计用某种程序设计语言转换成程序代把设计用某
15、种程序设计语言转换成程序代 码码vv测试过程是依相反顺序安排的测试过程是依相反顺序安排的自底向上,自底向上, 逐步集成逐步集成的过程。的过程。测试用例设计vv两种常用的测试方法两种常用的测试方法n n黑盒测试黑盒测试n n白盒测试白盒测试白盒测试在测试过程的早期阶段白盒测试在测试过程的早期阶段, ,黑黑 盒测试用于测试过程的后期盒测试用于测试过程的后期. .黑盒测试vv这种方法是把这种方法是把测试对象测试对象看做看做一个黑盒子一个黑盒子,测,测 试人员完全不考虑程序内部的逻辑结构和内试人员完全不考虑程序内部的逻辑结构和内 部特性,只依据程序的需求规格说明书,检部特性,只依据程序的需求规格说明书
16、,检 查程序的功能是否符合它的功能说明。查程序的功能是否符合它的功能说明。黑盒测试又叫做黑盒测试又叫做功能测试功能测试或或数据驱动测试数据驱动测试。vv黑盒测试方法是在程序接口上进行测试,主黑盒测试方法是在程序接口上进行测试,主 要是为了发现以下错误要是为了发现以下错误: :n n是否有不正确或遗漏了的功能是否有不正确或遗漏了的功能? ?n n在接口上,在接口上,输入能否正确地接受输入能否正确地接受? ? 能否能否 输出正确的结果输出正确的结果? ?n n是否有数据结构错误或外部信息是否有数据结构错误或外部信息( (例如数例如数 据文件据文件) )访问错误访问错误? ?n n性能上是否能够满足要求性能上是否能够满足要求? ?n n是否有初始化或终止性错误是否有初始化或终止性错误? ? 设计黑盒测试方案时,应该考虑下述问题v怎样测试功能的有效性? v哪些类型的输入可构成好的测试用例? v系统是否对特定的输入值特别敏感? v怎样划定数据类的边界? v系统能够承受什么样的数据率和数据量?vv数据的特定组合将对系统运