6) 软件测试与调试

软件测试与调试 #

1 软件测试方法 #


  • 测试的原则
    • 尽早、不断的进行测试
    • 程序员避免测试自己设计的程序
    • 既要选择有效、合理的数据,也要选择无效、不合理的数据
    • 修改后应进行回归测试
    • 尚未发现的错误数量与该程序已发现错误数成正比

1.1 测试类型的划分 #

pCaGbdg.md.png

  • 动态测试

  黑盒测试是根据程序外部功能来设计测试用例。

  等价类划分:各个阶段的测试用例各选一个,如1-1000分为普卡用户,1001-3000为金卡用户,大于等于3001为砖石卡。无效等价类也需要给测试用例。

  在黑盒测试中,判定表方法最适合描述在多个逻辑条件取值组合所构成的复杂情况下,分别要执行哪些不同的动作。

  边界值分析通过选择等价类边界作为测试用例,不仅重视输入条件边界,而且也必须考虑输出域边界。

  因果图方法是从用自然语言书写的程序规格说明的摧述中找出因 (输入条件)和果 (输出或程序状态的改变),可以通过因果图转换为判定表。

  正交试验设计法,就是使用已经造好了的正交表格来安排试验并进行数据分析的一种方法,目的是用最少的测试用例达到最高的测试覆盖率。

  白盒测试就是根据程序内部结构和内部逻辑,测试其功能是否正确,在白盒测试中测试强度最高的是路径覆盖。

  语句覆盖要求设计足够多的测试用例,使程序中每多语句至少被执行一次。

  判定/条件覆盖准则的缺点是未考虑条件的组合情况。

  与判定覆盖相比,条件覆盖增加对符合判定情况的测试,增加了测试路径。

pCaJpLT.md.png

  • 静态测试

  静态测试是指被测试程序不在机器上运行,而采用人工检测和计算机辅助静态分析的手段对程序进行检测。静态测试包括对文档的静态测试和对代码的静态测试。对文档的静态测试主要以检查单的形式进行,而对代码的静态测试般采用桌前检查、代码审查和代码走查;静态测试一般测试的是:

  1、控制流分析:可检查被测程序是否存在没有使用的语句或子程序、是否调用并不存在的子程序,以及是否存在无法达到的语句等。

  2、数据流分析:例如,引用未定义的变量、对以前未使用的变量再次陆值等程序差错或异常情况。

  3、接口分析:例如可以检查函数形参与实现的数量、顺序、类型和使用的一致性。

  4、表达式分析:例如,括号不配对、数组引用越界、除数为零,以及浮点数变量比较时的误差等错误。

  5、信息流分析阶段:找出输入变量和输出变量之间的依赖关系;

  6、路径分析阶段找出程序中所有可能的路径并画出在此路径中执行的语句。

例题 pCaGvzq.md.png

1.2 结构化测试阶段 #

pCaJt6P.md.png

  • 单元测试

  驱动模块用来调用被测模块,自顶向下的单元测试中不需要另外编写驱动模块。桩模块用来模拟被测模块所调用的子模块,自顶向下的单元测试中需要另外编写桩模块。驱动模块用来模拟被测模块所调用的子模块,自底向上的单元测试中需要另外编写驱动模块。

  单元测试的技术依据是软件详细设计说明书。

  • 集成测试

  程序的单元测试通过后进行模块之间的集成测试,主要测试各模块之间的接口是否正常起作用,并验证已集成的软件是否符合设计要求,集成测试的技术依据是概要设计文档。

pCaJypn.md.png

  • 系统测试

  系统测试的对象是完整的计算机系统,系统测试的目的是在真实系统工作环境下,验证完整的软件配置项能否和系统正确连接。系统测试的技术依据是用户需求或开发合同;强度测试、恢复测试、安全性测试、性能测试、可靠性测试和安装测试都是系统测试的内容。

  • 配置项测试

  配置项测试的目的是检验软件配置项与SRS要求的是否一致。配置项测试的技术依据是需求规格说明书SRS(或者是需求基线)。

  • 确认测试

  确认测试主要验证软件的功能、性能和其他特性是否与用户需求一致,确认测试的技术依据是需求规格说明书SRS(或者是需求基线);根据用户的参与程度,通常包括以下四种类型:内部确认测试 (由软件开发组织内部按软件需求说明书进行测试)、Alpha测试 (由用户在开发环境下进行测试)、Beta测试 (由用户在实际使用环境下进行测试)和验收测试 (针对软件需求说明书,在交付前以用户为主进行的测试)。

  • 验收测试

  在软件交付前以用户为主的测试,验收测试的技术依据是需求规格说明书SRS(或者是需求基线)。

  • 回归测试

  软件变更后,测试变更是否都软件的正确性有影响。

  • 强度测试

  是对系统在异常情况下的承受能力的测试是检查系统在极限状态下运行时,性能下降的幅度是否在允许的范围内。

  • 恢复测试

  恢复测试监测系统的容错能力。

  • 安全性测试

  系统的安全性测试是检测系统的安全机制、保密措施是否完善,主要是为了检验系统的防范能力。

  • 性能测试

  测试响应时间、处理速度、吞吐量、处理精度等。

  • 可靠性测试

  测试MTBF和MTTR等指标。

  • 安装测试

  测试安装过程中是否出错、遗漏等。

pCaJ6lq.md.png

例题 pCaJ4k4.md.png

pCaJO0O.md.png

1.3 面向对象测试 #

  和结构化测试基本上一一对应,但它只需要了解每个层大概有什么测试方法就行,不用掌握每一种方法。

  与传统的结构化系统相比,面向对象系统具有三个明显特征,即封装性、继承性与多态性。封装性决定了面向对象系统的测试必须考虑到信息隐蔽原则对测试的影响,以及对象状态与类的测试序列,因此在测试一个类时,仅对该类的每个方法进行测试是不够的,继承性决定了面向对象系统的测试必须考虑到继承对测试充分性的影响,以及误用引起的错误,多态性决定了面向对象系统的测试必须考虑到动态绑定对测试充分性的影响、抽象类的测试以及误用对测试的影响。

pCaYp9A.md.png

1.4 自动化测试 #

  自动化测试工具主要使用脚本技术来生成测试用例,脚本是一组测试工具执行的指令集合。脚本的基本结构主要有五种:线性脚本是录制手工测试的测试用例时得到的脚本,结构化脚本具有各种逻辑结构和函数调用功能;共享脚本是指一个脚本可以被多个测试用例使用,数据驱动脚本是指将测试输入存储在独立的数据文件中,而不是脚本中,关键字驱动脚本是数据驱动脚本的逻辑扩展,用测试文件描述测试用例。

2 软件调试 #


2.1 软件调试方法 #

  原因排除法:正向找错,回溯法:反向找错。

pCaYCct.md.png

2.2 调试和测试的区别 #

pCaYkB8.md.png