第七章 测试

news2025/4/21 20:35:40

文章目录

  • 第七章 测试
    • 7.1 编码
      • 7.1.1 选择程序设计语言
        • 1. 计算机程序设计语言基本上可以分为汇编语言和高级语言
        • 2. 从应用特点看,高级语言可分为基础语言、结构化语言、专用语言
      • 7.1.2 编码风格
    • 7.2 软件测试基础
      • 7.2.1 软件测试的目标
      • 7.2.2 软件测试准则
      • 7.2.3 测试方法
        • 黑盒测试
        • 白盒测试
      • 7.2.4 软件测试的步骤
      • 7.2.5 测试阶段的信息流
        • 软件测试步骤
    • 7.3 单元测试
      • 7.3.1 测试重点
      • 7.3.2 代码审查
      • 7.3.3 计算机测试
        • 1. 对“编辑”功能的测试(存根模块)
        • 2. 对“编辑”功能的测试(驱动模块)
      • 例题
    • 7.4 集成测试
      • 7.4.1 自顶向下集成
      • 7.4.2 自底向上集成
      • 7.4.3 不同集成测试策略的比较
      • 7.4.4 回归测试
    • 7.5 确认测试
      • 7.5.1 确认测试的范围
      • 7.5.2 软件配置复查
      • 7.5.3 Alpha和Beta测试
    • 7.6 白盒测试技术
      • 7.6.1 逻辑覆盖
        • 1. 语句覆盖
    • 2. 判定覆盖
        • 3. 条件覆盖
        • 4. 判定/条件覆盖
        • 5. 条件组合覆盖
      • 测试
    • 7.7 黑盒测试技术
      • 7.7.1 等价划分(等价类划分)
      • 7.7.2 边界值分析
      • 7.7.3 错误推测
      • 例题
    • 7.8 调试
      • 7.8.1 调试过程
      • 7.8.2 调试途径
    • 7.9 软件可靠性
      • 7.9.1 基本概念
      • 7.9.2 估算平均无故障时间MTTF的方法
        • 1. 符号
        • 2. 基本假定
        • 3. 估算平均无故障时间MTTF
        • 4. 估计故障总数ET的方法
    • 小结

第七章 测试

1.编码和测试统称为实现。
2.编码:把软件设计结果翻译成程序。
3.测试:检测程序并改正错误的过程

7.1 编码

7.1.1 选择程序设计语言

1. 计算机程序设计语言基本上可以分为汇编语言和高级语言

2. 从应用特点看,高级语言可分为基础语言、结构化语言、专用语言

01 有理想的模块化机制;
02 可读性好的控制结构和数据结构;
03 便于调试和提高软件可靠性;
04 编译程序发现程序错误的能力强;
05 有良好的独立编译机制。

7.1.2 编码风格

  1. 程序内部的文档
  2. 恰当的标识符
  3. 语句构造
  4. 输入/输出
  5. 效率
    ① 程序运行时间
    ② 存储器效率
    ③ 输入/输出效率

7.2 软件测试基础

7.2.1 软件测试的目标

(1)测试是为了发现程序中的错误而执行程序的过程;
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
(3)成功的测试是发现了至今为止尚未发现的错误的测试

测试的定义:为了发现程序中的错误而执行程序的过程。

7.2.2 软件测试准则

为了能设计出有效的测试方案,软件工程师必须深入理解并运用指导软件测试的基本准则。

7.2.3 测试方法

黑盒测试

如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。也称功能测试。

白盒测试

也称结构测试。
如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试。

7.2.4 软件测试的步骤

  1. 模块测试
    模块测试又称单元测试,它把每个模块作为单独的实体来测试。
  2. 子系统测试
    子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。
  3. 系统测试
    系统测试是把经过测试的子系统装配成一个完整的系统来测试。
  4. 验收测试
    验收测试把软件系统作为单一的实体进行测试(利用用户的实际数据测试)。
  5. 平行运行
    平行运行是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。

7.2.5 测试阶段的信息流

在这里插入图片描述

软件测试步骤

在这里插入图片描述
在这里插入图片描述

7.3 单元测试

7.3.1 测试重点

  1. 模块接口
  2. 局部数据结构
  3. 重要的执行路径
  4. 出错处理通路
  5. 边界条件

7.3.2 代码审查

在这里插入图片描述

7.3.3 计算机测试

驱动程序或存根程序
在这里插入图片描述
在这里插入图片描述

1. 对“编辑”功能的测试(存根模块)

在这里插入图片描述

2. 对“编辑”功能的测试(驱动模块)

在这里插入图片描述

例题

在这里插入图片描述

7.4 集成测试

1)非渐增式测试方法
先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。
2)渐增式测试方法
每次增加一个待测试模块,把它同已经测试好的那些模块结合起来进行测试,反复进行直到完成所有模块测试的方法

7.4.1 自顶向下集成

1)深度优先策略
2)宽度优先策略

7.4.2 自底向上集成

自底向上集成方法是从软件结构最底层模块开始进行组装和测试,它与自顶向下结合方法相反,需要驱动程序,不需要存根程序

7.4.3 不同集成测试策略的比较

在这里插入图片描述

7.4.4 回归测试

回归测试用于保证由于调试或其他原因引起的程序变化,不会导致额外错误的测试活动。

7.5 确认测试

7.5.1 确认测试的范围

• 也称为验收测试,目标是验证软件的有效性
• 如果软件的功能和性能符合用户的期待,软件就是有效的。
软件规格说明书是进行确认测试的基础

7.5.2 软件配置复查

确认测试一般使用黑盒测试法
目的:保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,而且已经编好
目录。

7.5.3 Alpha和Beta测试

Alpha测试:用户在开发者的场所进行测试,并且在开发者的指导下进行,测试在受控环境中进行,开发者记录发现的错误和问题;
Beta测试:用户在一个或多个客户场所进行测试,不受开发者控制,测试者记录发现的问题和错误,定期将问题报告发送给开发者。

7.6 白盒测试技术

7.6.1 逻辑覆盖

1. 语句覆盖

设计的测试用例能使程序中每条语句至少执行一次。如果遵循这个规定则说明达到了100%的语句覆盖。
在这里插入图片描述
语句覆盖是最弱的逻辑覆盖准则,它发现不了判断中逻辑运算符的错误。

2. 判定覆盖

判定覆盖是指:选取足够的测试用例,使得程序中每个判断的可能结果都至少执行一次,也就是说使
程序的每个判断分支至少通过一次。
在这里插入图片描述
比语句覆盖稍强的逻辑覆盖准则,它任然发现不了判断中逻辑运算符的错误。

3. 条件覆盖

条件覆盖是指:选择足够的测试用例,使得程序中每个判定表达式的每个条件都取到各种可能的结果。即每个判定中的所有条件取值组合都被至少执行一次

在这里插入图片描述

4. 判定/条件覆盖

选取足够的测试用例使得同时满足判定覆盖和条件覆盖的要求。
在这里插入图片描述

5. 条件组合覆盖

条件组合覆盖指:选取足够的测试用例,使得每个判定表达式中条件的各种可能的组合都至少出现一次。
在这里插入图片描述

测试

在这里插入图片描述
在这里插入图片描述

7.7 黑盒测试技术

测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明,又叫做功能测试或数据驱动测试。

7.7.1 等价划分(等价类划分)

等价类划分是一种黑盒测试技术。
在这里插入图片描述
等价类某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。
在这里插入图片描述

7.7.2 边界值分析

  1. 程序通常在处理边缘情况时容易出现错误,如等价类与等价类之间的边界值。
  2. 边界值分析测试法属黑盒测试

7.7.3 错误推测

  1. 错误推测法在很大程度上靠直觉和经验进行。
  2. 基本思想:列举出程序中可能的错误和容易发生错误的特殊情况,且根据它们选择测试方案。如:输入、输出为0时容易出错;输出记录为0条时容易出错;等等。
  3. 在进一步测试时要着重测试哪些发现了较多错误的组合情况。

例题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.8 调试

7.8.1 调试过程

在这里插入图片描述

7.8.2 调试途径

  1. 蛮干法:打印内存的内容,从中寻找错误的线索,是效率最低的程序调试方法。
  2. 回溯法:从发现问题的程序段开始人工地往回追踪分析程序代码,直到找到错误。
  3. 原因排除法包括:对分查找法、归纳法、演绎法

7.9 软件可靠性

7.9.1 基本概念

对故障可修复系统,应同时使用可靠性可用性来衡量。

  1. 软件可靠性定义
    软件可靠性:是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
  2. 软件的可用性
    软件可用性是:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。

可靠性和可用性的区别是:可靠性是在0到t时间间隔内,系统没有失效的概率。而可用性是在t时刻,
系统是正常运行的概率。

如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念,则上面公式的系统稳态可靠性变成:
平均维修时间MTTR是修复一个故障平均需要用的时间,取决于维护人员的技术水平和对系统熟悉程度。
平均无故障时间MTTF是系统按照规格说明书规定成功地运行的平均时间,取决于系统中潜伏的错误数量。
在这里插入图片描述

7.9.2 估算平均无故障时间MTTF的方法

1. 符号

估算MTTF时使用到下列符号
ET——测试之前程序中故障总数;
IT——程序长度(机器指令总数);
τ——测试(包括调试)时间;
Ed(τ) ——在0至τ期间发现的错误数;
Ec(τ) ——在0至τ期间改正的错误数;

2. 基本假定

在这里插入图片描述

3. 估算平均无故障时间MTTF

在这里插入图片描述

4. 估计故障总数ET的方法

1)植入故障法
在这里插入图片描述
2)分别测试法
在这里插入图片描述
在这里插入图片描述

小结

1.实现包括编码和测试两个阶段。
2.高级程序设计语言较汇编语言有很多优点。
3.通常软件测试至少分为单元测试、集成测试和验收测试3个基本阶段。
4.软件测试不仅仅指利用计算机进行的测试,还包括人工进行的测试(例如,代码审查)。
5.白盒测试和黑盒测试是软件测试的两类基本方法,设计白盒测试方案的技术主要有,逻辑覆盖和控
制结构测试;设计黑盒测试方案的技术主要有,等价划分、边界值分析和错误推测。
7.及时改正测试过程中发现的软件错误就是调试的任务。
7.程序中潜藏的错误的数目,直接决定了软件的可靠性。通过测试可以估算出程序中剩余的错误数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639671.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM基础面试题及原理讲解

基本问题 介绍下 Java 内存区域(运行时数据区)Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么)对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题 Strin…

Flutter Widget 生命周期 key探究

Widget 在Flutter中,一切皆是Widget(组件),Widget的功能是“描述一个UI元素的配置数据”,它就是说,Widget其实并不是表示最终绘制在设备屏幕上的显示元素,它只是描述显示元素的一个配置数据。 …

分库分表 21 招

(一)好好的系统,为什么要分库分表? 咱们先介绍下在分库分表架构实施过程中,会接触到的一些通用概念,了解这些概念能够帮助理解市面上其他的分库分表工具,尽管它们的实现方法可能存在差异&#…

自动化测试框架seldom

创建项目 | seldom文档 这个框架还是不错的,一直在优化,测试框架里的功能这里都有了。 seldom继承unittest单元测试框架,可以用来做UI和接口自动化项目。 安装 pip install seldom 创建项目 > seldom -P mypro 创建测试用例 # tes…

第8章 维护

文章目录 第8章 维护一、软件交付使用的工作二、软件交付使用的方式1) 直接方式2) 并行方式3) 逐步方式 8.1 软件维护的定义1、软件维护的定义2、软件维护的原因3、软件维护的类型1、改正性维护2、适应性维护3、完善性维护4、预防性维护 8.2 软件维护的特点8.2.1结构化维护和非…

12.异常-Exception|Java学习笔记

文章目录 异常介绍异常体系图一览运行时异常编译异常异常处理异常处理的方式try-catch 异常处理throws 异常处理注意事项和使用细节 自定义异常自定义异常的步骤 throw和throws的区别 异常介绍 基本概念:Java语言中,将程序执行中发生的不正常情况称为“…

【TCP/IP】多进程服务器的实现(进阶) - 多进程服务器模型及代码实现

经过前面的铺垫,我们已经具备实现并发服务器的基础了,接下来让我们尝试将之前的单任务回声服务器改装成多任务并发模式吧! 多任务回声服务器模型 在编写代码前,先让我们大致将多任务(回声)服务器的模型抽象…

mac下部署和访问 Kubernetes 仪表板(Dashboard)

简介 Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kub…

技术分享——隐私计算简介

随着数据规模的不断扩大和网络技术的快速发展,数据安全和隐私保护成为了热门的话题。隐私计算作为一种新兴的数据安全和隐私保护技术,为数据安全和隐私泄露问题提供了新的思路和方法。 2020年10月19日,Gartner发布2021年前沿战略科技趋势&am…

VTK源码编译安装记录与教程(VS2019+QT5.15.2+PCL1.12.1+VTK9.1.0配置,超详细)

因为PCL库(傻瓜式安装)中自动安装的VTK库并不完整,不支持QT环境的UI界面开发,于是,想用QT在VS2019上开发图形界面程序,需要单独自己通过VTK源码编译安装,再进行配置。本人安装时开发环境已经装好…

2023拒绝行业内卷!八年软件测试月薪30K*16薪行业心得 想入行必看

目前工作做软件测试工作8年,属于高级测试员那个级别吧!现在看到各行各业的人都在转行学习软件测试,想给大家一些学习建议和忠告。 很多粉丝都跟我说今年行情很差,找不到工资,真的找不到工作了吗? 我们常在网…

simhash原理以及用python3实现simhash算法详解(附python3源码)

1. 为什么需要Simhash? 传统相似度算法:文本相似度的计算,一般使用向量空间模型(VSM),先对文本分词,提取特征,根据特征建立文本向量,把文本之间相似度的计算转化为特征向量距离的计算,如欧式距离、余弦夹角等。 缺点:大数据情况下复杂度会很高。 Simhash应用场景:…

Graph Learning笔记 - 长尾分布问题

Graph Learning笔记 - 长尾分布问题 分享四篇论文入门图神经网络时的学习笔记。 SL-DSGCN 论文:Investigating and Mitigating Degree-Related Biases in Graph Convolutional Networks 来源:2020CIKM 概要 GCN在图的半监督学习上能取得良好表现&a…

lora,固定模特+固定衣服,怎么实现?

在电商行业,经常会有一个需求,就是把固定的衣服让模型穿上,然后拍很多的图片,放在商品主图、详情页、买家秀...... 人工智能发展到现在,最近aigc也挺热门的,有没有办法用“人工智能”算法就实现这个功能&a…

逆向汇编反汇编——函数分析

add esp,8就是把esp调整到函数调用之前的状态,用以平衡堆栈 默认采用的是cdcall:外平栈 stdcall:内平栈 什么是堆栈平衡? 》原来的堆栈是什么样的,函数调用之后堆栈还是什么样的(即,esp和ebp的值保持不变)&#xf…

掌握Scala数据结构(2)MAP、TUPLE、SET

一、映射 (Map) (一)不可变映射 1、创建不可变映射 创建不可变映射mp,用键->值的形式 创建不可变映射mp,用(键, 值)的形式 注意:Map是特质(Scala里的trait,相当于Java里的interface&#…

git选择指定分支中的指定目录进行合并

指定路径合并 先进入branch A : git checkout branchA 将dir2中的变更转移至branchA: git checkout branchB dir2 所有变更将出现在branchA中的dir2中,检查后提交即可。 git commit -m "sync branchB dir2 to branchA" 也可以…

读财报丨第二增长曲线渐显,但涂鸦智能的未来还看PaaS业务?

2022年以来,全球物联网行业持续低迷,赛道内不少玩家出现业绩下滑,而且陆续传出巨头企业关停相关业务板块的消息。这背后是消费电子行业库存积压,客户需求难以释放等宏观因素,导致IoT领域面临一定的经营困境。 近日&am…

STM32——07-STM32定时器Timer

定时器介绍 软件定时 缺点:不精确、占用 CPU 资源 void Delay500ms () //11.0592MHz { unsigned char i , j , k ; _nop_ (); i 4 ; j 129 ; k 119 ; do { do { while ( -- k ); } while ( -- j ); } while ( -- i ); } 定时器工…

108-Spring的底层原理(下篇)

这里续写上一章博客(107章博客): Spring 声明式事务的支持: 编程式事务:在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务 声明式事务:通过xml或者注解配置的方式达到事务…