软件工程-软件测试

测试的目的

就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。

测试原则

  • 应尽早、不断地进行测试。
  • 测试工作应该避免由原开发软件的人或小组承担
  • 在设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期输出结果。
  • 在设计测试用例时,不仅要设计有效、合理的数据,也要包含不合理、失效的数据
  • 在测试程序时,不仅要检验程序是否做了该做的事,还要检验程序是否做了不该做的事
  • 严格按照测试计划来进行,避免测试的随意性。
  • 妥善保存测试计划、测试用例,作为软件文档的组成部分,为维护提供方便。
  • 测试例子都是精心设计出来的,可以为重新测试或追加测试提供方便
  • 修改后应进行回归测试
  • 尚未发现的错误数量与该程序已发现错误数成正比

测试过程

  1. 制订测试计划
  2. 编制测试大纲
  3. 根据测试大纲设计和生成测试用例,产生测试设计说明文档
  4. 实施测试
  5. 生成测试报告

传统软件的测试策略

有效的软件测试实际上分为 4 步进行,即单元测试、集成测试、确认测试和系统测试。

单元测试也叫模块测试,侧重于模块中的内部处理逻辑和数据结构。

单元测试的测试内容(考点)

  • 模块接口
  • 局部数据结构(如某个变量没有正确初始化)
  • 重要的执行路径
  • 出错处理
  • 边界条件

集成测试

就是将各个单元组合并进行测试,以验证它们在集成时是否按预期工作。这里的主要目的是测试模块之间的接口。

集成测试有两种方法:一种是非增量集成,一种是增量集成。

自顶向下集成测试是一种构造软件体系结构的增量方法。

模块的集成顺序为从主控模块(主程序) 开始,沿着控制层次逐步向下,以深度优先或广度优先的方式将从属于 (或间接从属于) 主控模块的模块集成到结构中。

自底向上集成测试就是从原子模块(程序结构的最底层构件) 开始进行构造和测试。由于构件是自底向上集成的,在处理时所需要的从属于给定层次的模块总是存在的,因此,没有必要使用桩模块。

三明治集成测试

为了克服这些限制并利用自顶向下和自底向上方法的优势,使用了集成测试的混合方法。这种方法称为三明治集成测试或混合集成测试。在这里,系统被视为三层。主目标层位于中间,目标层上方的另一层,目标层下方的最后一层。自上而下的方法用于从顶层到中间层的层。自下而上的方法用于从底部到中间的层。大爆炸方法用于中间的模块。

回归测试:在软件发生变更之后进行的测试,以发现在变更时可能引起的其他错误

冒烟测试是一种常用的集成测试方法。

将已经转换为代码的软件构件集成到构建中。一个构建包括所有的数据文件、库、可复用的模块以及实现一个或多个产品功能所需的工程化构件。

设计一系列测试以暴露影响构建正确的完成其功能的错误,其目的是为了发现极有可能造成项目延迟的业务阻塞错误。

每天将该构建与其他构建及整个软件产品(以其当前形势) 集成起来进行冒烟测试这种集成方法可以自顶向下,也可以自底向上。

确认测试始于集成测试的结束,那时已测试完单个构件,软件已组装成完整的软件包,且接口错误已被发现和改正。

确认测试准则

软件确认是通过一系列表明与软件需求相符合的测试而获得的。

配置评审

确认过程的一个重要成分是配置评审,主要是检查软件(源程序、目标程序)、文档 (包括面向开发和用户的文档) 和数据(程序内部的数据或程序外部的数据) 是否齐全以及分类是否有序。确保文档、资料的正确和完善,以便维护阶段使用。

α \alphaα测试与β \betaβ测试

α \alphaα测试是由有代表性的最终用户在开发者的场所进行。软件在自然的环境下使用,开发者站在用户的后面观看,并记录错误和使用问题。α \alphaα测试在受控的环境下进行。

β \betaβ测试在一个或多个最终用户场所执行。与 α \alphaα测试不同,开发者通常不在场,因此,β \betaβ测试是在不被开发者控制的环境下软件的"现场"应用。最终用户记录测试过程中遇见的所有问题(现实存在的或想象的),并定期地报告给开发者。接到 测试的问题报告之后,开发人员对软件进行修改,然后准备向最终用户发布软件产品。

β \betaβ 测试的一种变体称为客户验收测试,有时是按照合同交付给客户时进行的。客户执行一系列的特定测试,试图在从开发者那里接收软件之前发现错误。

系统测试是将已经确认的软件、计算机硬件、外设和网络等其他因素结合在一起,进行信息系统的各种集成测试和确认测试,其目的是通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方。

  • 恢复测试
  • 安全性测试
  • 压力测试
  • 性能测试
  • 部署测试

测试方法

软件测试方法分为静态测试和动态测试。

静态测试是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。

动态测试是指通过运行程序发现错误。在对软件产品进行动态测试时可以采用黑盒测试法和白盒测试法。

(1)黑盒测试

黑盒测试也称为功能测试,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。

常用的黑盒测试技术

等价类划分

边界值分析

错误推测

因果图

(2)白盒测试

白盒测试也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。

白盒测试的原则

程序模块中的所有独立路径至少执行一次。

在所有的逻辑判断中,取"真"和取"假"的两种情况至少都能执行一次。

每个循环都应在边界条件和一般条件下各执行一次。

测试程序内部数据结构的有效性等。

白盒测试常用的技术

逻辑覆盖

逻辑覆盖考察用测试数据运行被测程序时对程序逻辑的覆盖程度,主要的逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖6种。

循环覆盖

执行足够的测试用例,使得循环中的每个条件都得到验证

基本路径测试

基本路径测试法是在程序控制流图的基础上通过分析控制流图的环路复杂性,导出基本可执行路径集合,从而设计测试用例。

相关推荐
人才程序员1 天前
QML z轴(z-order)前后层级
c语言·前端·c++·qt·软件工程·用户界面·界面
Theodore_10221 天前
3 需求分析
java·开发语言·算法·java-ee·软件工程·需求分析·需求
做人求其滴2 天前
GDPU软件工程习题(挖空版)
软件工程
MrFlySand_飞沙2 天前
软件工程
软件工程
jokr_2 天前
【软件工程复习】
软件工程
云空2 天前
《软件工程文档攻略:解锁软件开发的“秘籍”》
软件工程
人才程序员2 天前
【无标题】
c语言·前端·c++·qt·软件工程·qml·界面
Aderversa2 天前
关于数据流图绘制和使用上的一些个人经验
软件工程
梁辰兴3 天前
UML 建模实验
软件工程·uml·建模
shinelord明4 天前
【再谈设计模式】外观模式~复杂系统交互的简化大师
开发语言·数据结构·设计模式·软件工程