当前位置: 首页 > news >正文

【系统架构设计】测试评审方法

【系统架构设计】测试评审方法

  • 测试方法
    • 从测试阶段上分
      • 单元测试
      • 集成测试
      • 系统测试
    • 从测试方法上分
      • 白盒测试
      • 黑盒测试
  • 评审方法
  • 面向对象的测试

测试方法

需要明确 错误(erro)和缺陷(fault) 的概念,根据IEEE定义,错误主要针对软件开发过程,而缺陷针对软件产品。软件开发人员在开发过程中所出现的错误是导致软件产品缺陷的原因。因此,缺陷是错误的结果和表现形式

从测试阶段上分

从测试阶段上分,软件测试通常可分为单元测试、集成测试、系统测试

单元测试

也称模块测试,目的是检查模块是否实现了详细说明书中规定的功能和算法,应该在详细设计阶段制定。

测试一个模块需要为该模块编写一个驱动模块若干个桩(stub)模块

  • 驱动模块用来调用被测模块,它接收测试者提供的测试数据,并把这些数据传送给被测模块,然后从被测模块接收测试结果,并以某种可见的方式将测试结果返回给测试者;
  • 桩模块用来模拟被测模块所调用的子模块,它接收被测模块的调用,检验调用参数,并以尽可能简单的操作模拟被调用的子程序模块功能,把结果返回被测模块。

顶层模块测试时不需要驱动模块,底层模块测试时不需要桩模块

集成测试

也称组装测试,目的是发现模块间的接口和通信问题,应该在概要设计阶段制定。

集成的方式可分为非渐增式渐增式

  • 非渐增式集成是先测试所有的模块,然后一下子把所有这些模块集成到一起,并把庞大的程序作为一个整体来测试。这种测试方法的出发点是可以“一步到位”,但测试者面对众多的错误现象,往往难以分清哪些是“真正的”错误,哪些是由其他错误引起的“假性错误”,诊断定位和改正错误也十分困难。非渐增式集成只适合一些非常小的软件。

  • 渐增式集成是将单元测试和集成测试合并到一起,它根据模块结构图,按某种次序选一个尚未测试的模块,把它同已经测试好的模块组合在一起进行测试,每次增加一个模块,直到所有模块被集成在程序中。这种测试方法比较容易定位和改正错误,目前在进行集成测试时已普遍采用渐增式集成

ps :平时常用的就是渐增式集成方法,把要测试的和已知没问题的一起测试,如果出现问题,那就是要测试的有问题,然后再通过打印的方式去定位原因。

系统测试

是软件测试中的最后的、最完整的测试,目的是从全局来考察软件系统的功能和性能要求,应该在需求分析阶段制定。

通常包括 确认测试验收测试

  • 确认测试,主要依据软件需求说明书检查软件的功能、性能及其他特征是否与用户的需求一致。
  • 验收测试 通常采用 (Alpha)测试和 (Beta)测试 的过程,来发现那些看起来只有最终用户才能发现的错误。
  1. a 测试由用户在开发者的场所进行,并且在开发者的指导下进行测试。开发者负责记录发现的错误和使用中遇到的问题。也就是说, 测试是在“受控的”环境中进行的。
  2. b 测试是在一个或多个用户的现场由该软件的最终用户实施的,开发者通常不在现场,用户负责记录发现的错误和使用中遇到的问题并把这些问题报告给开发者。也就是说,测试是在“不受控的”环境中进行的。

ps :app 在发布前,会将测试版本发给用户使用,让他们在现场进行实操,如果有问题在进行解决,当时就是(Beta)测试;然后测试版本在做汇报时,给客户演示,以及让客户体验测试,当时就是(Alpha)测试。

从测试方法上分

从测试方法上分,软件测试通常可分为白盒测试、黑盒测试

白盒测试

又称结构测试,主要用于单元测试阶段。它的前提是可以把程序看成装在一个透明的白箱子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部逻辑设计测试用例,检测程序中的主要执行通路是否都能按预定要求正常工作。

白盒测试根据软件的内部逻辑设计测试用例,常用的技术是逻辑覆盖,即考察用测试数据运行被测程序时对程序逻辑的覆盖程度。主要的覆盖标准有 6 种:

  • 语句覆盖。语句覆盖是指选择足够多的测试用例,使得运行这些测试用例时,被测程序的每个语句至少执行一次。很显然,语句覆盖是一种很弱的覆盖标准。

  • 判定覆盖。判定覆盖又称分支覆盖,它的含义是,不仅每个语句至少执行一次,而且每个判定的每种可能的结果(分支)都至少执行一次。判定覆盖比语句覆盖强,但对程序逻辑的覆盖程度仍然不高。

  • 条件覆盖。条件覆盖的含义是,不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取得各种可能的结果。

ps :一定要注意条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖。如A || B > 1 ,对条件覆盖还要考虑A || B,但对判断覆盖就是 一次 假,所以,判断覆盖是整体上的,条件覆盖是细节上的

  • 判定/条件覆盖。同时满足判定覆盖和条件覆盖的逻辑覆盖称为判定/条件覆盖。它的含义是,选取足够的测试用例,使得判定表达式中每个条件的所有可能结果至少出现一次,而且每个判定本身的所有可能结果也至少出现一次。

  • 条件组合覆盖。条件组合覆盖的含义是,选取足够的测试用例,使得每个判定表达式中条件结果的所有可能组合至少出现一次。

ps : 满足条件组合覆盖的测试用例,也一定满足判定/条件覆盖。因此,条件组合覆盖是上述 5 种覆盖标准中最强的一种。然而,条件组合覆盖还不能保证程序中所有可能的路径都至少经过一次。

  • 路径覆盖。路径覆盖的含义是,选取足够的测试用例,使得程序的每条可能执行到的路径都至少经过一次(如果程序中有环路,则要求每条环路路径至少经过一次)。

ps:路径覆盖实际上考虑了程序中各种判定结果的所有可能组合,因此是一种较强的覆盖标准。但路径覆盖并未考虑判定中的条件结果的组合,并不能代替条件覆盖和条件组合覆盖

黑盒测试

又称功能测试,主要用于集成测试、确认测试阶段。根据软件需求说明书所规定的功能来设计测试用例,它不考虑软件的内部结构和处理算法。

评审方法

评审过程中,以下几点需要注意:

  • 不应以测试代替评审
  • 评审人员应关注产品而不应评论开发人员
  • 评审人员应关注于实质性问题,而非一些非实质性的问题,例如,文档的格式、措词
  • 评审会议不应变为问题解决方案讨论会
  • 评审应被安排进入项目计划
  • 评审参与者应了解整个评审过程
  • 评审人员事先应对评审材料充分了解
  • 应重视评审的组织工作

面向对象的测试

传统的软件测试策略是从小型测试开始,逐步走向大型测试。即从单元测试开始,然后进入集成测试,最后是系统测试。

面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成测试所要求的逐步地将开发的模块搭建在一起进行测试的方法已成为不可能。而且,面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同以往的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因此,传统的测试模型对面向对象软件已经不再适用

面向对象的开发模型突破了传统的瀑布模型,将开发分为 OOA、OOD 和 OOP 三个阶段:

  • OOA:Object Oriented Analysis 面向对象分析方法
  • OOD:Object Oriented Design 面向对象设计
  • OOP:Object Oriented Programming 面向对象的程序设计

结合传统的测试步骤的划分,可以把面向对象的软件测试分为:面向对象分析的测试、面向对象设计的测试、面向对象编程的测试、面向对象的单元测试、面向对象的集成测试、面向对象的系统测试

ps :面向对象测试的整体目标是以最小的工作量发现最多的错误,与传统软件测试的目标是一致的,但 OO 测试的策略与传统测试有很大不同。这种不同主要体现在两个方面,第一,测试的焦点从过程构件(模块)移向了类;第二,测试的视角扩大到了分析和设计模型。所以在理解过程中,要结合起来看,只不过传统的以模块去理解,面向对象的以类为单位去理解。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 打卡学习Python爬虫第五天|Xpath解析的使用
  • 书生大模型实战营第三期基础岛第三课——浦语提示词工程实践
  • 城乡燃气安全监管平台 打造城市安全防护网
  • JavaJSON处理工具类JSONUtils
  • python-字符串排序(赛氪OJ)
  • 视频转音频mp3软件有哪些?分享好用的转换工具
  • docker具体操作
  • 一把手告诉你联盟营销白帽电商广告借力NewsBreak头条优势
  • 队列相关内容
  • YOLOv10改进 | 独家创新- 注意力篇 | YOLOv10结合全新多尺度线性注意力机制DSLAM和C2f_DSLAM(全网独家创新)
  • 安卓中synchronized 关键字 的作用和介绍
  • java 使用zookeeper包实现zookeeper分布式锁
  • [mongodb][配置]MongoDB中限制内存
  • Docker方式部署K8s集群
  • bash代码片段snippets
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • gulp 教程
  • HashMap剖析之内部结构
  • Java 23种设计模式 之单例模式 7种实现方式
  • spring boot下thymeleaf全局静态变量配置
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • win10下安装mysql5.7
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 力扣(LeetCode)22
  • MyCAT水平分库
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # 职场生活之道:善于团结
  • #1014 : Trie树
  • #java学习笔记(面向对象)----(未完结)
  • #前后端分离# 头条发布系统
  • #数据结构 笔记三
  • (152)时序收敛--->(02)时序收敛二
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (二)fiber的基本认识
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三)c52学习之旅-点亮LED灯
  • (十五)使用Nexus创建Maven私服
  • (一)、python程序--模拟电脑鼠走迷宫
  • (转)大道至简,职场上做人做事做管理
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .net core 控制台应用程序读取配置文件app.config
  • .NET 常见的偏门问题
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET4.0并行计算技术基础(1)
  • /tmp目录下出现system-private文件夹解决方法
  • @angular/cli项目构建--http(2)
  • @RequestBody的使用
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [C++]Leetcode17电话号码的字母组合
  • [Codeforces] probabilities (R1600) Part.1
  • [CSS] 点击事件触发的动画
  • [Docker]十.Docker Swarm讲解
  • [Everyday Mathematics]20150130