系统分析师16:系统测试与维护

1 内容概要

在这里插入图片描述

2 软件测试类型

2.1 测试类型

  • 动态测试【计算机运行】

    • 白盒测试法:关注内部结构与逻辑
    • 灰盒测试法:介于两者之间
    • 黑盒测试法:关注输入输出及功能
  • 静态测试【人工监测和计算机辅助分析】

    • 桌前检查
    • 代码审查
    • 代码走查
    • 以上三个都是做的【静态分析】
      • 控制流分析:是否存在没有使用的语句/无法达到的语句/调用并不存在的子程序
      • 数据流分析:引用未定义的变量、对以前未使用的变量再次赋值。
      • 接口分析:模块之间接口的一致性、子程序和函数之间的接口一致性、函数形参与实参的数量、顺序、类型的一致性。
      • 表达式分析:括号不配对、数组引用越界、除数为零

2.1.1 白盒测试

  • 白盒测试【结构测试】:主要用于单元测试阶段。
    • 控制流测试【逻辑覆盖测试(语句覆盖最弱,路径测试覆盖最强)
    • 数据流测试
    • 程序变异测试【错误驱动测试】
      在这里插入图片描述

2.1.2 黑盒测试

  • 黑盒测试【功能测试】∶主要用于集成测试、确认测试和系统测试阶段
    • 等价类划分:不同等价类,揭示不同问题;有效等价类/无效等价类。
    • 边界值分析:1<=x<=10,可取x的值为0、1、10和11作为测试数据
    • 错误推测:依靠测试人员的经验和直觉
    • 判定表:最适合描述在多个逻辑条件取值的组合所构成的复杂情况下,分别要执行哪些不同的动作
    • 因果图:根据输入条件与输出结果之间的因果关系来设计测试用例

在这里插入图片描述
例1
软件测试一般分为两个大类∶动态测试和静态测试。前者通过运行程序发现错误,包括()等方法;后者采用人工和计算机辅助静态分析的手段对程序进行检测,包括()等方法。
A:边界值分析、逻辑覆盖、基本路径
B:桌面检查、逻辑覆盖、错误推测
C:桌面检查、代码审查、代码走查
D:错误推测、代码审查、基本路径

A:边界值分析、逻辑覆盖、基本路径
B:桌面检查、逻辑覆盖、错误推测
C:桌面检查、代码审查、代码走查
D:错误推测、代码审查、基本路径

解析
软件测试一般分为两个大类:动态测试和静态测试。
动态测试是通过运行程序来发现错误的方法。它包括以下几种方法:

  • 边界值分析:测试输入域的边界值,因为错误往往发生在边界附近。
  • 逻辑覆盖:通过测试用例覆盖程序的逻辑路径,确保每条路径都被测试到。
  • 基本路径:通过分析程序的控制流图,设计测试用例以覆盖所有基本路径。

静态测试是采用人工和计算机辅助静态分析的手段对程序进行检测的方法。它包括以下几种方法:

  • 桌面检查:人工检查代码,查找错误。
  • 代码审查:通过团队评审代码,查找错误和改进建议。
  • 代码走查:通过模拟程序的执行过程,人工检查代码的逻辑和结构。

答案:A、C。

例2
用边界值分析法,假定10≤X≤30,那么X在测试中应取的边界值是( )。
A:X=11,X=29
B:X=9,X=10,X=30,X=31
C:X=10,X=30
D:X=9,X=31
在这里插入图片描述

解析

  • 边界值分析法要求测试边界值及其附近的值;
  • 对于范围10≤X≤30,边界值及其附近的值包括:
    • 下边界:10
    • 下边界减1:9
    • 上边界:30
    • 上边界加1:31
    • 因此,X在测试中应取的边界值是9、10、30、31。

答案:B。

2.2 测试方法

  • AB测试
    多版本同时使用,利于收集各版本的用户反馈,评估出最好版本。故也算是一种 【网页优化方法】

  • Web测试
    web系统测试与其他系统 测试测试内容基本相同只是测试重点不同
    Web代码测试包括:源代码规则分析、链接测试、框架测试、表格测试、图形测试等方面

  • 链接测试
    链接测试可分为3个方面:

    • 测试所有链接是否按指示的那样 确实链接到了该链接的页面
    • 测试所链接的 页面是否存在
    • 保证Web应用系统上 没有孤立的页面

3 测试阶段

  • 回归测试:测试软件变更之后,变更部分的正确性和对变更需求的符合性

  • 测试阶段

    • 单元测试:依据 【详细设计】,模块测试,模块功能、性能、接口等
    • 集成测试:依据 【概要设计】,模块间的接口
    • 系统测试:依据 【需求文档】,在真实环境下,验证完整的软件配置项能否和系统正确连接
    • 确认测试:依据 【需求文档】,验证软件与需求的一致性。内部确认测试、Alpha测试、Beta测试、验收测试
      在这里插入图片描述
  • 集成测试策略

    • 一次性组装【风险高】
    • 增量式组装【测试全面】
      • 自顶向下【需要桩模块】
      • 自底向上【需要驱动模块】
      • 混合式【都需要】

在这里插入图片描述
例3
在单元测试中,( ) 。
A:驱动模块用来调用被测模块,自顶向下的单元测试中不需要另外编写驱动模块
B:桩模块用来模拟被测模块所调用的子模块,自顶向下的单元测试中不需要另外编写桩模块
C:驱动模块用来模拟被测模块所调用的子模块,自底向上的单元测试中不需要另外编写驱动模块
D:桩模块用来调用被测模块,自底向上的单元测试中不需要另外编写桩模块

解析
在单元测试中,驱动模块和桩模块的作用如下:

  • 驱动模块
    驱动模块(Driver Module)是用来调用被测模块的代码。它通常用于自底向上的单元测试中,因为自底向上的测试是从最底层的模块开始测试,逐步向上测试更高层次的模块。在这种情况下,需要编写驱动模块来调用被测模块。
  • 桩模块
    桩模块(Stub Module)是用来模拟被测模块所调用的子模块的代码。它通常用于自顶向下的单元测试中,因为自顶向下的测试是从最高层次的模块开始测试,逐步向下测试更低层次的模块。在这种情况下,需要编写桩模块来模拟被测模块调用的子模块。
  • 选项分析
    A: 驱动模块用来调用被测模块,自顶向下的单元测试中不需要另外编写驱动模块。这个选项是正确的,因为在自顶向下的单元测试中,通常需要编写桩模块而不是驱动模块
    B: 桩模块用来模拟被测模块所调用的子模块,自顶向下的单元测试中不需要另外编写桩模块。这个选项是错误的,因为在自顶向下的单元测试中,通常需要编写桩模块来模拟被测模块调用的子模块
    C: 驱动模块用来模拟被测模块所调用的子模块,自底向上的单元测试中不需要另外编写驱动模块。这个选项是错误的,因为在自底向上的单元测试中,通常需要编写驱动模块来调用被测模块
    D: 桩模块用来调用被测模块,自底向上的单元测试中不需要另外编写桩模块。这个选项是错误的,因为桩模块来模拟被测模块调用的子模块,而不是用来调用被测模块,在自底向上的单元测试中,通常不需要编写桩模块,而是需要编写驱动模块

答案: A。

3.1 系统测试

3.1.1 系统测试分类

  • 功能测试

  • 性能测试

    • 负载测试:各种工作负载下系统的性能
    • 压力测试【测上限】:系统的瓶颈或不能接受的性能点强度测试【测下限】:系统资源特别低的情况下运行
    • 容量测试【并发测试】:同时在线的最大用户数
    • 可靠性测试:MTTF之类的参数
  • 健壮性测试

  • 用户界面测试

  • 安全性测试

  • 安装与反安装测试

例4
软件性能测试有多种不同类型的测试方法,其中,()用于测试在限定的系统下考查软件系统极限运行的情况,()可用于测试系统同时处理的在线最大用户数量。
A:强度测试
B:负载测试
C:压力测试
D:容量测试

A:强度测试
B:负载测试
C:压力测试
D:容量测试

解析

  • 强度测试(Stress Testing)
    强度测试用于测试在限定的系统下考查软件系统极限运行的情况。它通过模拟极端条件下的负载,测试系统在超出正常工作负载时的表现,以确定系统的极限和稳定性。
  • 负载测试(Load Testing)
    负载测试用于测试系统在正常和预期峰值负载条件下的性能。它通过逐渐增加负载,测试系统在不同负载水平下的响应时间和资源使用情况。
  • 压力测试(Stress Testing)
    压力测试与强度测试类似,也是用于测试系统在极端条件下的表现。它通过超出系统正常工作负载的负载,测试系统的极限和稳定性。
  • 容量测试(Volume Testing):同时在线的最大用户数。
    根据题目描述:
  1. 用于测试在限定的系统下考查软件系统极限运行的情况的测试方法是强度测试。
  2. 可用于测试系统同时处理的在线最大用户数量的测试方法是容量测试。

答案:A、D。

3.1.2 系统测试步骤

  • 制定系统测试计划
    进行人员以及任务的确定,明确测试范围、测试方法、测试环境与辅助工具

  • 设计系统测试用例
    如:等价类划分、边界值分析等测试方法的应用

  • 执行系统测试
    执行设计好的测试用例,并记录结果

  • 缺陷管理与改错
    消除已发现的错误

3.2 面向对象测试

  • 算法层(单元测试)︰包括等价类划分测试、组合功能测试(基于判定表的测试)、递归函数测试和多态消息测试
  • 类层(模块测试)︰包括不变式边界测试、模态类测试和非模态类测试
  • 模板层/类树层(集成测试)︰包括多态服务测试和展平测试

4 软件调试

  • 软件调试方法
    • 蛮力法:主要思想是“通过计算机找错”,低效,耗时
    • 回溯法:从出错处人工沿控制流程往回追踪,直至发现出错的根源。复杂程序由于回溯路径多,难以实施
    • 原因排除法:主要思想是演绎和归纳,用二分法实现
  • 软件测试与软件调试区别
    • 软件测试

      • 目的是找出存在的错误
      • 从一个已知的条件开始,使用预先定义的过程,有预知的结果
      • 测试过程可以事先设计,进度可以事先确定
    • 软件调试

      • 目的是定位错误并修改程序以修正错误
      • 从一个未知的条件开始,结束的过程不可预计
      • 调试不能描述过程或持续时间

5 系统转换计划

5.1 遗留系统演化策略

  • 开发新系统时,需要完全兼容遗留系统的功能模型和数据模型

  • 低水平、高价值:继承

  • 低水平、低价值:淘汰

  • 高水平、高价值:改造

    • 改造包括系统功能的增强和数据模型的改造两个方面
  • 高水平、低价值:集成

    • 针对“信息孤岛

在这里插入图片描述

例5
遗留系统的演化可以采用淘汰、继承、改造和集成四种策略。若企业中的遗留系统技术含量较高,业务价值较低,在局部领域中工作良好,形成了一个个信息孤岛时,适合于采用()演化策略。
A:淘汰
B:继承
C:改造
D:集成

解析

  • 低水平、高价值:继承
  • 低水平、低价值:淘汰
  • 高水平、高价值:改造
  • 高水平、低价值:集成

答案:D。

5.2 新旧系统的转换策略

在系统转换过程中,选择合适的转换策略至关重要,因为它直接影响到转换的顺利进行和系统的稳定性。以下是三种常见的系统转换策略:
在这里插入图片描述

5.2.1 直接转换策略(Big Bang Approach)

定义: 直接转换策略是指在某个特定的时间点,旧系统被完全停止,新系统立即接管所有功能。

优点:

  • 快速: 转换过程迅速,可以在短时间内完成。
  • 成本低: 不需要同时维护两个系统,节省了资源和成本。

缺点:

  • 风险高: 如果新系统出现问题,可能会导致业务中断,影响正常运营。
  • 缺乏过渡期: 没有时间进行逐步适应和调整,可能会导致用户不适应。

适用场景:

  • 适用于小型系统或对业务影响较小的系统。
  • 适用于新系统已经过充分测试,确保其稳定性和可靠性。

5.2.2 并行转换策略(Parallel Approach)

定义: 并行转换策略是指在一段时间内,新旧系统同时运行,并比较两者的输出结果,直到确认新系统稳定可靠后,再完全切换到新系统。

优点:

  • 风险低: 即使新系统出现问题,旧系统仍然可以继续运行,确保业务连续性。
  • 可靠性高: 通过并行运行,可以验证新系统的准确性和稳定性。

缺点:

  • 成本高: 需要同时维护两个系统,增加了资源和成本。
  • 复杂性高: 需要确保两个系统之间的数据同步和一致性。

适用场景:

  • 适用于关键业务系统,确保转换过程中的业务连续性。
  • 适用于新系统尚未完全验证,需要通过并行运行来逐步确认其可靠性。

5.2.3 分段转换策略(Phased Approach)

定义: 分段转换策略是指将系统转换过程分为多个阶段,逐步将新系统的各个模块或功能替换旧系统,最终完成整个系统的转换。

优点:

  • 风险可控: 通过分阶段进行,可以逐步验证新系统的各个模块,降低整体风险。
  • 灵活性高: 可以根据实际情况调整每个阶段的转换计划。

缺点:

  • 时间长: 转换过程较长,可能需要数月甚至更长时间。
  • 复杂性高: 需要详细规划每个阶段的转换步骤和时间表。

适用场景:

  • 适用于大型复杂系统,逐步验证和部署新系统。
  • 适用于需要逐步适应新系统的用户和业务流程。

在这里插入图片描述

5.3 数据转换与迁移

在这里插入图片描述

6 系统运行与维护

  • 影响可维护性的因素

    • 【可理解性】是指通过阅读源代码和相关文档,了解软件的功能和如何运行的容易程度
    • 【可修改性】是指修改软件的难易程度
    • 【可测试性】是指验证软件程序正确的难易程度
      可测试性好的软件,通常意味着软件设计简单,复杂性低。因为软件的复杂性越大,测试的难度也就越大
    • 【可靠性】一个软件的可靠性越高,需要维护的概率就会越低
    • 【可移植性】是指将软件从一个环境移植到新的的环境下正确运行的难易程度
      软件运行环境的变化是软件维护的一种常见情形,可移植性好的软件会降低维护的概率
  • 维护类型

    • 正确性维护【修BUG】︰识别和纠正软件错误/缺陷,测试不可能发现所有错误
    • 适应性维护【应变】∶指使应用软件适应环境变化【外部环境、数据环境】而进行的修改
    • 完善性维护【新需求】︰扩充功能和改善性能而进行的修改。
    • 预防性维护【针对未来】∶为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使用系统适应各类变化而不被淘汰。经典实例:【专用】改【通用】

例6
软件的维护并不只是修正错误。为了满足用户提出的增加新功能、修改现有功能以及一般性的改进要求和建议,需要进行(),它是软件维护工作的主要部分;软件测试不可能揭露旧系统中所有潜在的错误,所以这些程序在使用过程中还可能发生错误,诊断和更正这些错误的过程称为();为了改进软件未来的可维护性或可靠性,或者为了给未来的改进提供更好的基础而对软件进行修改,这类活动称为( ) 。

A:完善性维护
B:适应性维护
C:预防性维护
D:改正性维护

A:完善性维护
B:适应性维护
C:预防性维护
D:改正性维护

A:完善性维护
B:适应性维护
C:预防性维护
D:改正性维护

解析
根据题目描述,我们可以将软件维护的不同类型与各个描述进行匹配:

  1. 为了满足用户提出的增加新功能、修改现有功能以及一般性的改进要求和建议,需要进行(),它是软件维护工作的主要部分。
  • 这种维护类型主要是为了增强软件的功能或性能,属于完善性维护
  • 答案:A:完善性维护
  1. 软件测试不可能揭露旧系统中所有潜在的错误,所以这些程序在使用过程中还可能发生错误,诊断和更正这些错误的过程称为()。
  • 这种维护类型主要是为了修正已经发现的错误,属于改正性维护
  • 答案:D:改正性维护
  1. 为了改进软件未来的可维护性或可靠性,或者为了给未来的改进提供更好的基础而对软件进行修改,这类活动称为( )。
  • 这种维护类型主要是为了预防未来的问题,属于预防性维护
  • 答案:C:预防性维护

答案:A、D、C。

7 附录 思维导图

在这里插入图片描述

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

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

相关文章

图解网络OSI模型与TCP/IP

一、OSI模型与TCP/IP 1、OSI模型 OSI/RM&#xff08;Open System Interconnection&#xff0c;开放系统互联参考模型&#xff09;是由ISO&#xff08;国际标准组织&#xff09;创建的一个有助于开放和理解计算机的通信模型&#xff0c;OSI七层参考模型作为一套规范的标准&…

端口冲突的解决方案以及SpringBoot自动检测可用端口demo

端口冲突的解决方案 端口冲突通常发生在尝试运行两个或多个应用程序或服务时&#xff0c;它们尝试使用同一个端口号&#xff0c;导致系统无法正确分配资源。 各种端口错误 你是否遇到过下面这些报错信息呢&#xff1f; Windows 系统报错&#xff1a; 系统错误 1004 套接字操作…

[C#]使用纯opencvsharp部署yolov11-onnx图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 使用纯OpenCvSharp部署YOLOv11-ONNX图像分类模型是一项复杂的任务&#xff0c;但可以通过以下步骤实现&#xff1a; 准备环境&#xff1a;首先&#xff0c;确保开发环境已安装OpenCvSharp和必…

初始项目托管到gitee教程,开箱即用

0.本地仓库与远程仓库关联&#xff08;需先在gitee创建仓库&#xff09; ①打开powershell生成ssh key ssh-keygen -t ed25519 -C "Gitee SSH Key"-t key 类型-C 注释 生成成功如下&#xff0c;并按下三次回车 ②查看公私钥文件 ls ~/.ssh/输出&#xff1a; id_…

PPPoE协议个人理解+报文示例+典型配置-RFC2516

个人认为&#xff0c;理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息&#xff0c;更加便于理解协议。 因此本文将在PPPoE协议报文的基础上进行介绍。 PPPoE协议发展 关于PPPoE基本原理&#xff0c;可参考1999年发布的《RFC2516-A Method fo…

大模型客服的未来发展趋势

在当今数字化时代&#xff0c;大模型客服正以惊人的速度改变着客户服务的格局。随着技术的不断进步&#xff0c;大模型客服的未来发展趋势充满了无限可能。随着人工智能技术的快速发展&#xff0c;智能客服领域正迎来一场前所未有的变革。大模型客服作为其中的重要分支&#xf…

32位机器上指针大小为什么是4字节?

&#xff08;1&#xff09;32位机器可寻址内存空间位4GB。为什么&#xff1f; 32位机器的总线宽度是32位&#xff0c;每一位可以是0或者1&#xff0c;那么32位可以表示个不同的值&#xff0c;也就是能寻址到个内存地址&#xff0c;每个内存地址对应一个内存单元&#xff08;1个…

RFID学习

24.10.5学习目录 一.简介1.组成2.RFID协议3.RFID卡 一.简介 RFID被称为无线射频识别&#xff0c;其是一种通信技术&#xff0c;通过无线电讯号耦合识别特定目标并读写相关数据&#xff1b; RFID主要位于典型物联网架构中的感知层&#xff0c;其因为具有非接触式特性&#xff…

hiricacp 连接池校验机制

一、背景 项目发生告警&#xff0c;但是并没有影响业务&#xff0c;看了下日志&#xff0c;红框里面有循环调用了3次 &#xff0c;一直以为是外部的重试在重试&#xff0c;但是外部确没有重试记录&#xff0c;就深扒了代码 二、想法 我知道hikaricp获取连接之后会校验连接的有…

k8s 之安装metrics-server

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/01/29 18:25 metrics-server可帮助我们查看pod的cpu和内存占用情况 kubectl top po nginx-deploy-56696fbb5-mzsgg # 报错&#xff0c;需要Metrics API 下载 Metrics 解决 wget https://github.com/kubernetes-sigs/metri…

系统架构设计师⑦:企业信息化战略与实施

系统架构设计师⑦&#xff1a;企业信息化战略与实施 信息的概念及特点 信息的定义&#xff1a; ①香农:信息就是不确定性的减少。 ②维纳:信息就是信息&#xff0c;既不是物质&#xff0c;也不是能量。 信息的特点&#xff1a; ①客观性(真伪性):也叫事实性&#xff0c;不符…

【最新华为OD机试E卷-支持在线评测】简单的自动曝光(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

神经网络激活函数列表大全及keras中的激活函数定义

一、概述 在机器学习中&#xff0c;激活函数是神经网络中的一种函数&#xff0c;用于在神经网络的每个神经元中引入非线性。没有激活函数&#xff0c;神经网络就无法学习复杂的模式&#xff0c;因为线性变换的组合仍然是线性的。 在神经网络的每层中&#xff0c;将该层所有输…

设计模式之装饰器模式(Decorator)

一、装饰器模式介绍 装饰模式(decorator pattern) 的原始定义是&#xff1a;动态的给一个对象添加一些额外的职责。 就扩展功能而言&#xff0c;装饰器模式提供了一种比使用子类更加灵活的替代方案。 在软件设计中&#xff0c;装饰器模式是一种用于替代继承的技术&#xff0c;它…

【颜色平衡树 / E】

题目 思路 DFS暴力 60分 代码 #include <bits/stdc.h> using namespace std; const int N 5010; const int M 5010; int h[N], e[M], ne[M], idx; int c[N], f; int ans; void add(int a, int b) // 添加一条边a->b {e[idx] b, ne[idx] h[a], h[a] idx ; } …

Linux防火墙-常用命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令&#xff0c;我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

C语言—单链表

目录 一、链表的概念及结构 二、单链表实现 &#xff08;2.1&#xff09;基本结构定义 &#xff08;2.2&#xff09;申请节点 &#xff08;2.3&#xff09;打印函数 &#xff08;2.4&#xff09;头部插入删除\尾部插入删除 &#xff08;2.4.1&#xff09;尾部插入 &…

计算机毕业设计 基于Python的人事管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

spring揭秘26-springmvc06-springmvc注解驱动的web应用

文章目录 【README】【1】springmvc注解驱动web应用【1.1】springmvc注解驱动web应用的3个组件【1.2】springmvc注解驱动web应用代码实践 【2】springmvc常用注解【2.1】Controller注解&#xff08;标注处理器类&#xff09;【2.2】RequestMapping注解&#xff08;标注处理器类…

OpenAI董事会主席Bret Taylor的Agent公司Sierra:专注于赋能下一代企业用户体验

本文由readlecture.cn转录总结。ReadLecture专注于音、视频转录与总结&#xff0c;2小时视频&#xff0c;5分钟阅读&#xff0c;加速内容学习与传播。 视频来源 youtube: https://www.youtube.com/watch?vriWB5nPNZEM&t47s 大纲 介绍 欢迎与介绍 介绍Bret Taylor&#x…