5.5软件工程-系统测试

系统测试

  • 意义和目的
  • 原则
  • 测试过程
  • 测试策略
  • 测试方法
    • 练习题
  • 测试用例设计
    • 黑盒测试
      • 等价类划分
      • 边界值分析
      • 错误推测
      • 因果图
    • 白盒测试
      • 逻辑覆盖
      • 循环覆盖
      • 基本路径测试法
    • 练习题
  • 调试
  • 软件度量
    • 练习题

考点少,知识点多

意义和目的

  • 系统测试的意义:系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试
  • 系统测试的目的:就是希望能以最少的人力和时间发现潜在的各种错误和缺陷
  • 信息系统测试应包括软件测试、硬件测试和网络测试。硬件测试、网络测试可以根据具体的性能指标进行,此处所说的测试更多的是指软件测试
  • 系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析、系统设计和实施的最后复查。根据测试的概念和目的,在进行信息系统测试时应遵循以下基本原则。

原则

根据测试的概念和目的,在进行信息系统测试时应遵循以下基本原则。

  1. 应尽早并不断地进行测试。测试不是在应用系统开发完之后才进行的,测试应贯穿在开发的各个阶段,应尽早纠正错误,消除隐患
  2. 测试工作应该避免由原开发软件的人或小组承担,测试工作应由专门人员来进行。
  3. 在设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期输出结果
  4. 在设计测试用例时,不仅要设计有效、合理的输入条件,也要包含不合理、失效的输入条件
  5. 在测试程序时,不仅要检验程序是否做了该做的事,还要检验程序是否做了不该做的事
  6. 严格按照测试计划来进行,避免测试的随意性
  7. 妥善保存测试计划、测试用例,作为软件文档的组成部分,为维护提供方便。
  8. 测试例子都是精心设计出来的,可以为重新测试或追加测试提供方便

测试过程

制订测试计划。在制订测试计划时,要充分考虑整个项目的开发时间和开发进度以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。
编制测试大纲。测试大纲是测试的依据,它明确、详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。
根据测试大纲设计和生成测试用例,产生测试设计说明文档。其内容主要有被测项目、输入数据、测试过程和预期输出结果等。
实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例对被测软件或设备进行完整的测试。
生成测试报告。测试完成后要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误。

另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。

测试策略

单元测试。单元测试也称为模块测试。单元测试侧重于模块中的内部处理逻辑和数据结构。测试的对象是可独立编译或汇编的程序模块、软件构件或面向对象软件中的类(统称为模块),测试依据是软件详细设计说明书。
集成测试。目的是检查模块之间,以及模块和已集成的软件之间的接口关系,并验证已集成的软件是否符合设计要求。测试依据是软件概要设计文档。
- 自顶向下集成测试。自顶向下集成测试是一种构造软件体系结构的增量方法。
- 自底向上集成测试。自底向上集成测试就是从原子模块(程序结构的最底层构件)开始进行构造和测侧试。
- 回归测试。回归测试有助于保证变更不引入无意识行为或额外的错误。回归测试可以手工进行,方法是重新执行所有测试用例的子集,或者利用捕捉/回放工具自动执行。
- 冒烟测试。冒烟测试是一种常用的集成测试方法,是时间关键项目的决定性机制,它让软件团队频繁地对项目进行评估。
确认测试。主要用于验证软件的功能、性能和其他特性是否与用户需求一致。根据用户的参与程度,通常包括以下类型:
- 内确认测试:主要由软件开发组织内部按照SRS进行测试。
- α测试:由有代表性的最终用户在开发者的场所进行。用户在开发环境下进行测试,且在受控的环境下进行。
- β测试:用户在实际使用环境下进行测试,β测试是在不被开发者控制的环境下软件的“现场”应用。接到β测试的问题报告之后,开发人员对软件进行修改,然后准备向最终用户发布软件产品。
- 客户验收测试:针对需求规约,在交付前以用户为主进行的测试。其测试对象为完整的、集成的计算机系统。验收测试的目的是,在真实的用户工作环境下,检验软件系统是否满足开发技术合同或SRS。验收测试的结论是用户确定是否接收该软件的主要依据。除应满足一般测试的准入条件外,在进行验收测试之前,应确认被测软件系统已通过系统测试。
系统测试。测试对象是完整的、集成的计算机系统:测试的目的是在真实系统工作环境下,验证完成的软件配置项是否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。测试依据是用户需求或开发合同。主要内容包括:
- 恢复测试。恢复测试是一种系统测试,通过各种方式强制地让系统发生故障,并验证能否按照要求从故障中恢复过来,并在约定的时间内开始事勞处理,而且不对系统造成任何伤害
- 安全性测试。安全性测试验证建立在系统内的保护机制是否能够实际保护系统不受非法入侵。

  • 压力测试。压力测试要求以非正常的数量、频率或容量等方式执行系统。
  • 性能测试。性能测试用来测试软件在集成环境中的运行性能。在测试过程中的任何步骤都可以进行性能测试。
    • 部署测试也被称为配置项测试。测试对象是软件配置项。测试目的是检验软件配置项与SRS的一致性。测试的依据是SRS。在此之间,应确认被测软件配置项已通过单元测试和集成测试。

测试方法

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

  • 静态测试是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测,包括对文档的静态测试和对代码的静态测试。对文档的静态测试主要以检查单的形式进行,而对代码的静态测试,包括桌面检查、代码审查、代码走查的方式。使用这种方式能够有效的发现30%-70%的逻辑设计和编码错误
    • 人工检测。人工检测不依靠计算机而是依靠人工审查程序或评审软件,包括代码检查、静态结构分析和代码质量度量等。
    • 计算机辅助静态分析。利用静态分析工具对被测试程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。
  • 动态测试是指通过运行程序发现错误。在对软件产品进行动态测试时可以采用黑盒测试法和白盒测试法
    • 黑盒测试也称为功能测试,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。常用的黑盒测试技术有等价类划分、边界值分析、错误准测和因果图等。
    • 白盒测试也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。白盒测试常用的技术是逻辑覆盖、循环覆盖和基本路径测试

练习题

软件确认测试也称为有效性测试,主要验证()。确认测试计划通常是在需求分析阶段完成的。根据用户的参与程度不同,软件确认测试通常包括()。
A.系统中各个单元模块之间的协作性
B.软件与硬件在实际运行环境中能否有效集成
C.软件功能、性能及其它特性是否与用户需求一致
D.程序模块能否正确实现详细设计说明中的功能、性能和设计约束等要求

A.黑盒测试和白盒测试
B.一次性组装测试和增量式组装测试
C,内部测试、Alpha、Beta和验收测试
D.功能测试、性能测试、用户界面测试和安全性测试

答案C C

测试用例设计

黑盒测试

常用的黑盒测试技术有等价类划分、边界值分析、错误推测和因果图等。

等价类划分

等价类划分:将程序的输入域划分为若干等价类,然后从每个等价类中选取一个代表性数据作为测试用例。

  • 等价类划分有两种不同的情况:有效等价类和无效等价类
    • 有效等价类:满足需求的数据集合。
    • 无效等价类:不满足需求的数据集合。
  • 等价类测试用例的设计原则:
    • 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
    • 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

边界值分析

边界值分析:将每类的边界值作为测试用例,边界值一般为范围的两端值以及在此范围之外的与此范围间隔最小的两个值。也就是选取正好等于、刚好大于、刚好小于边界的值作为测试数据

  • 上点:边界上的点(正好等于)
  • 离点:距离上点最近的点(刚好大于、刚好小于)
  • 内点:范围内的点(区间范围内的数据)

判断输入的数据是否小于-99或者大于99,如果小于-99或大于99给出错误提示
在这里插入图片描述

错误推测

错误推测:没有固定的方法,凭经验而言,来推测有可能产生问题的地方,作为测试用例进行测试。错误推测法的思想是根据经验列举出可能出现问题的清单,根据清单分享问题可能原因,推测发现缺陷。适合的场景:

  • 时间紧任务量大时,根据之前项目类似经验找出易出错的模块重点测试。
  • 时间宽裕通过该方法列出之前出现问题较多的模块再次复测。

因果图

因果图:由一个结果来反推原因的方法,具体结果具体分析,没有固定方法。

白盒测试

白盒测试常用的技术是逻辑覆盖、循环覆盖和基本路径测试

逻辑覆盖

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

  1. 语句覆盖。是指选择足够的测试数据,使被测试程序中的每条语句至少执行一次。语句覆盖对程序执行逻辑的覆盖很低,因此一般认为它是很弱的逻辑覆盖。
  2. 判定覆盖是指设计足够的测试用例,使得被测程序中的每个判定表达式条件的真假分支都要覆盖一次,因此判定覆盖也称为分支覆盖。判定覆盖要比语句覆盖更强一些。
  3. 条件覆盖。是指构造一组测试用例,使得每一判定语句中每个逻辑条件的各种可能的值至少满足一次
  4. 判定/条件覆盖。是指设计足够的测试用例,使得判定中每个条件的所有可能取值(真/假)至少出现一次,并使每个判定本身的判定结果(真/假)也至少出现一次。
  5. 条件组合覆盖。是指设计足够的测试用例,使得每个判定中条件的各种可能值的组合都至少出现一次。满足条件组合覆盖的测试用例是一定满足判定覆盖、条件覆盖和判定/条件覆盖的。
  6. 路径覆盖。是指覆盖被测试程序中所有可能的路径。

循环覆盖

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

基本路径测试法

基本路径测试法:是在程序控制流图的基础上通过分析控制流图的环路复杂性,导出基本可执行路径集合,从而设计测试用例。设计出的测试用例要保证在测试中程序的每一条独立路径都执行过,即程序中的每条可执行语句至少执行一次。此外,所有条件语句的真值状态和假值状态都测试过。路径测试的起点是程序控制流图。程序控制流图中的结点代表包含一个或多个无分支的语句序列,边代表控制流。

练习题

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

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

答案A C

针对月收入小于等于3500元免征个人所得税的需求,现分别输入3499,3500和3501进行测试,则采用的测试方法()
A,判定覆盖
B,边界值分析
C.路径覆盖
D.因果图

答案B

白盒测试技术的各种覆盖方法中,()具有最弱的错误发现能力。
A.判定覆盖
B.语句覆盖
C.条件覆盖
D.路径覆盖

答案B

调试

  • 测试是发现错误,调试是根据测试时所发现的错误找出原因和具体的位置,进行改正
  • 调试需要确定错误的准确位置,确定问题的原因并设法改正;改正后要进行回归测试
    – 调试的方法有:试探法、回溯法、原因排除法(对分查找法、归纳法、演绎法)
    • 试探法:调试人员分析错误的症状,猜测问题所在的位置,利用在程序中设置输出语句,分析寄存器、存储器的内容等手段获得错误的线索,一步步地试探和分析出错误所在。这种方法效率很低,适合于结构比较简单的程序
    • 回溯法:从发现错误症状的位置开始,人工沿着程序的控制流程往回跟踪代码,直到找出错误根源为止。这种方法适合于小型程序,对于大规模程序,由于其需要回溯的路径太多而变得不可操作
    • 对分查找法:这种方法主要用来缩小错误的范围。
    • 归纳法:就是从测试所暴瑶的问题出发,收集所有正确或不正确的数据,分析它们之间的关系,提出假想的错误原因,用这些数据来证明或反驳,从而查出错误所在。
    • 演绎法:演绎法根据测试结果,列出所有可能的错误原因;分析已有的数据,排除不可能和彼此矛盾的原因;对其余的原因,选择可能性最大的,利用已有的数据完善该假设,使假设更具体:用假设来解释所有的原始测试结果,如果能解释这一切,则假设得以证实,也就找出错误,否则,要么是假设不完备或不成立,要么有多个错误同时存在,需要重新分析,提出新的假设,直到发现错误为止。

软件度量

  • 软件的两种属性:外部属性指面向管理者和用户的属性,可直接测量,一般为性能指标。内部屈性指软件产品本身的压性,如可靠性,只能间接测量
  • McCabe度量法:又称为环路复杂度,假设有向图中有向边数为m,节点数为n,则此有向图的环路复杂度为m-n+2.
  • 注意m和n点的含义不能混淆,可以用一个最简单的环路来做特殊值记忆此公式,另外,针对一个程序流程图,每一个分支变(连线)就有一条有向边,每一条语句(语句框)就是一个顶点。

练习题

根据McCabe度量法,以下程序图的复杂性度量值为()。
在这里插入图片描述

A.4
B.5
C.6
D.7

答案A
根据公式V(G)=m-n+2p,其中m、n和p分别表示图G中的弧的个数、顶点的个数和强联通分量数。根据上述公式可得,右图的复杂性为9-7+2=4

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科普文:微服务之分布式链路追踪SkyWalking单点服务搭建

1. 概述 1.1 概念 SkyWalking 是什么? SkyWalking 极简入门 | Apache SkyWalking FROM Apache SkyWalking 分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。 提供分布式追…

19.计算两点间的距离

Problem-2001 Problem Description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。 Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。 Outpu…

Python实战——轻松实现动态网页爬虫(附详细源码)

大家好&#xff0c;我是东眠的鱼&#xff0c;专注原创&#xff0c;致力于用浅显易懂的语言分享爬虫、数据分析及可视化等干货&#xff0c;希望人人都能学到新知识。<文末附带精品籽料哦&#xff0c;也可以和博主一起学Python呀&#xff01;> 项目背景 有同学自学爬虫时…

Redis基础总结、持久化、主从复制、哨兵模式、内存淘汰策略、缓存

文章目录 Redis 基础Redis 是什么&#xff0c;有哪些特点为什么要使用 Redis 而不仅仅依赖 MySQLRedis 是单线程吗Redis 单线程为什么还这么快 Redis 数据类型和数据结构五种基本数据结构及应用场景其他数据类型Redis 底层数据结构 Redis 持久化数据不丢失的实现AOF 日志RDB 快…

go中的值传递和指针传递

文章目录 1、& 和 *2、空指针3、nil4、用值传递还是指针传递&#xff1f;5、补充 1、& 和 * &后跟一个变量名&#xff0c;得到的是这个变量的内存地址*int类型的变量&#xff0c;代表这个变量里存的值是int类型的变量的内存地址数据类型的指针类型&#xff0c;即在…

Spring Boot 参数校验 Validation 使用

概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是必不可少的活。前、后端校验都是保证参数的准确性的手段之一&#xff0c;前端校验并不安全&#xff0c;任何人都可以通过接口来调用我们的服务&#xff0c;就算…

【linux】【操作系统】内核之traps.c源码阅读

C 文件traps.c 是 Linux 内核的一部分&#xff0c;主要处理硬件陷阱和故障。文件中包含多个函数来处理不同类型的异常和错误。下面是详细的解析&#xff1a; 概览 目的&#xff1a;此文件负责处理各种硬件异常和故障。它包括了处理特定类型错误以及初始化异常处理器的函数。文…

前端的学习-CSS(弹性布局-flex)

一&#xff1a;什么是弹性布局-Flex flex 是 Flexible Box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。 语法&#xff1a; .box{display: flex; } .box{display: inline-flex; } 注意&#xff0c;设为 Flex 布局以后&#xff0…

SpringBoot整合Knife4j接口文档

1. 在项目入口模块pom文件导入依赖 <!-- knife4j&#xff08;API 文档工具&#xff09; --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>${knife4j…

新款奔驰S450升级动态按摩座椅有哪些功能

奔驰 S450 升级前排动态按摩座椅通常具有以下功能&#xff1a; 1. 多种按摩模式和强度选择&#xff1a;通过精心设计的气囊和机械装置&#xff0c;能够模拟如揉捏、敲击、推拿等不同的按摩手法&#xff0c;为驾驶者和前排乘客舒缓肌肉疲劳&#xff0c;放松身心。 2. 广泛的按…

6.C基础_输入输出函数

putchar 功能&#xff1a;输出一个字符 函数声明&#xff1a; int putchar(int c);返回值&#xff1a;参数c的ASCLL码值 c&#xff1a;要输出的字符&#xff0c;可以为字符常量、字符变量或表达式 注意点&#xff1a;输出的结果不带\n getchar 功能&#xff1a;从键盘读…

SpringCache集成Redis

1. 添加config配置类 配置SpringCache 与 redis 的集成 配置类 2. 在service层中加注解 在Service层中增加注解 CacheConfig() 里面的CacheNmes是redis的nameSpace命名空间 方法上的Cacheable是key的值 请求结果 第一次会查数据库&#xff0c;后面相同的查询会直接走redis&am…

LBS 开发微课堂|Polyline绘制优化:效果更丰富,性能更佳!

为了让广大的开发者 更深入地了解 百度地图开放平台的技术能力 轻松掌握满满的技术干货 更加简单地接入 开放平台的服务 我们特别推出了 “位置服务&#xff08;LBS&#xff09;开发微课堂” 系列技术案例 第一期的主题是 《Polyline 绘制优化升级》 你还想了解哪些…

vulhub:Apache解析漏洞CVE-2017-15715

Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个换行解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 #启动靶机 cd /Vulnhub/vulhub-mast…

程序员的魔法石!

本文由 ChatMoney团队出品 AI自己写代码&#xff0c;这只是传说&#xff1f;还是摸鱼新指南&#xff1f; AI出现之前&#xff0c;从来都是老板或产品经理提需求&#xff0c;程序员熬夜加班吭哧吭哧写代码或者是从Github&#xff0c;Stackoverflow上controlc&#xff0c;control…

JavaFX布局-GridPane

JavaFX布局-GridPane 常用实行alignmenthgapvgappaddinggridLinesVisible 实现方式Java实现fxml实现 使用行和列来组织其子节点将节点放置在二维网格中的任何单元格&#xff0c;同时也可以设置跨越行、跨越列 常用实行 alignment 对齐方式&#xff0c;设置内容居中&#xff0…

数据库文件管理

数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库&#xff1a; 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer 小型:Sqlite 2.非关…

第三十一天 chrome调试工具

打开调试工具 页面空白处右击 检查 或者F12 使用调试工具 ctrl滚轮改变代码大小 左边是html 右边是css css可以直接改动数值左右箭头或者直接输入 查看颜色 ctrl0 复原浏览器大小 点击元素右侧出现样式引入 没有的话 说明类名或者样式引用错误 这里的.new-left是存在的 如果类…

【Android Studio】UI 布局

文章目录 view布局LinearLayout view 在Android开发中&#xff0c;View是一个非常重要的概念&#xff0c;它是所有用户界面组件的基类。View类及其子类构成了Android应用中的用户界面。每个View都占用屏幕上的一个矩形区域&#xff0c;并可以响应用户输入&#xff08;如触摸、按…

鸿蒙(API 12 Beta2版)NDK开发【JSVM-API使用规范】

JSVM-API使用规范 生命周期管理 【规则】 合理使用OH_JSVM_OpenHandleScope和OH_JSVM_CloseHandleScope管理JSVM_Value的生命周期&#xff0c;做到生命周期最小化&#xff0c;避免发生内存泄漏问题。 每个JSVM_Value属于特定的HandleScope&#xff0c;HandleScope通过OH_JSV…