软件测试方案设计

article/2025/9/21 13:21:18

文章目录

  • 1、软件框架
  • 2、测试方案设计
    • 2.1、测试覆盖
    • 2.2、功能测试和压力测试
    • 2.3、自动化测试
    • 2.4、持续集成

1、软件框架

在这里插入图片描述

站在软件的角度,一个系统通常可以分为以下四个层次:

  • 应用软件层(app layer)。用户重点自己开发的应用代码,例如我们的运动控制器要跑运动控制app,我们的示教器要跑qt用户交互app;
  • 中间软件层(middle layer)。在用户app和os系统之间的软件,一般是一些通用的库文件,比如qt库、算法库;
  • 操作系统层(os layer)。给用户层提供标准os服务的软件,一般包括kernel和驱动部分;
  • 硬件层(hardware layer)。最低层的基本硬件;

2、测试方案设计

我们的最终目标是交付给用户高质量可靠地产品,我们希望我们的系统每个角落都是经过严格测试的,我们要在实验室里模拟到用户可能会碰到的各种问题,才能经得起大规模商用后大量用户场景的考验。

所以我们在设计测试方案时,要考虑到尽可能多的对软件路径进行测试覆盖。

软件测试和硬件测试对比,有以下难点:

  • 测试对象比较虚幻。对硬件来说有可见的实体;对软件来说如果不了解细节你觉得它只是一个整体,但是当你了解细节以后,就会发现其中有越来越多的软件模块,每个模块都有自己的逻辑,都可能出错都需要被测试;
  • 测试对象非常多。软件的逻辑模块非常多,通常高出硬件模块几个数量级;
  • 测试对象逻辑复杂。对单个模块来说,软件模块可能出现的逻辑状态也是远高于硬件模块的;
  • 逻辑组合非常复杂。最终产品是要把多个模块组合成一个整体的,多个模块组合在一起就是(N x M x …)的复杂度;

考虑到以上难点后,我们尝试使用以下手段来增加测试的覆盖度。

2.1、测试覆盖

上述的四层模型,每一层都为上一层提供服务,下一层的能力肯定是大于上一层的需要,因为上一层的应用用不到下一层所有的功能。

比如:同一hardware既支持linux os又支持vxworks os,同一linux os既支持运动控制又支持qt应用。

所以从严格意义上讲,四层的能力模型是一个金字塔型的:
在这里插入图片描述

在这种模型下,从任一上层层次来设计测试用例,它都会贯穿测试到下面的层次,但是下面层次都是有覆盖不到的情况:
在这里插入图片描述
既然是这种情况,那么是不是可以这样认为:如果已经从底层进行了完全的测试,那么是不是不需要经过上层的测试就能说明底层已经非常稳定?

答案是否定的。底层自我测试的面可能更广,但是自我测试模拟不了上层带来的场景。

比如我们针对os层已经做了针对os层的所有测试,这个时候我们还不能说os层完全没问题了。因为设计的测试用例只是尽可能覆盖,但是永远不可能完全模拟到所有真实的使用场景。我们还要经过中间层、应用层的测试完成后,我们才能说os在这种应用的场景中大部分是没问题的。

所以,一个完备的测试方案,需要在每一层次上设计测试用例,才能形成一个完整的测试覆盖:
在这里插入图片描述

2.2、功能测试和压力测试

上一节描述为了完备的测试覆盖,我们需要在每一层次上设计测试用例。

那么针对某一层次的测试用例,应该怎么样来设计呢?

从功能上可以简洁的分为两大类:功能测试和压力测试。

1、功能测试:

  • 站在使用者的角度,测试提供的所有接口功能是否ok;
  • 还可以进一步对这一层次代码进行单元测试、集成测试,来充分验证代码逻辑;

2、压力测试:

  • 对提供的基本功能,进行一个时间、空间上的压力验证。例如:正常请求1s 1次,压力请求1s 1000次;正常流量10M,压力流量 100M。只有在测试环境中经过更加严苛的测试,才能经受住实际复杂环境的考验。
  • 对于提供压力的形式也不是一味重载,还需要构造负载剧烈变化的场景。例如:重载、轻载、重载。。。。(随机变化)
  • 如果每一层次都有了自己的测试用例,我们还可以把这些用例组合起来,生成新的压力场景。例如:os层进行压力测试的同时,app层进行功能测试,验证在压力场景下app的功能还是否正常。
  • 使用自动化的方式,大量重复的去跑常规功能测试用例,这本身就是一个很好的压力测试场景。

对四层模型来说,每一层的功能测试和压力测试有以下特点:

Layer Function Test Pressure Test App Layer 1、从用户的角度测试所有提供的功能;
2、单元测试+集成测试,验证代码逻辑; 1、重载压力测试;
2、轻重载随机变化测试; Middle Layer 一般中间层可能没有源码以库的形式提供,而且用户对它的整个架构理解的也不充分。
1、如果条件允许,可以让中间层厂商提供对应的报告;
2、如果资源有限,很多时候也没有对中间层设计专门的测试用例; 依赖对应厂商 OS Layer 1、对OS kernel公共部分的功能测试,比如:cpu、内存。。。;
2、对OS driver部分的功能测试,比如:网口、USB、存储、显示、input。。。;
3、单元测试+集成测试,验证代码逻辑; 1、重载压力测试;
2、轻重载随机变化测试; Hardware Layer 对硬件功能的完备性测试,一般是在产线上进行的:
1、在硬件大规模量产时,会允许软件还有些bug,但是不允许硬件出现任何的功能性问题,因为硬件基本是不能修改的;
2、量产时需要提供硬件功能测试软件给产线,来筛选出硬件不良品; 在硬件出厂前,在产线上还需要对硬件进行老化,让每个元器件度过初始震荡期,进入平稳运行期:
1、提供老化测试软件,对硬件器件施加压力,让她们能迅速老化;
2、软件能筛选出老化失败的不良品;

另外从bug发生的故障率来说,用户自己修改的代码出现问题的概率最大。对应在四层模型中,app代码os驱动代码出错的概率最大。

因为中间层代码、os kernel部分、hardware部分,使用的人一般很多,经过了多个用户的使用和测试后已经暴露出了较多的问题。而app代码和驱动代码基本都是用户自己开发/移植的,出错的概率更大一些。所以这两部分代码需要重点测试,给它们设计更多的测试用例。

2.3、自动化测试

从测试用例的数量和软件功能的数量来说,测试用例要大于软件功能的几倍,才能保证软件的质量。

同时这也带来一个问题,庞大的测试用例,如果用人工来执行,测试周期会非常久。这对bug的发现、bug的修复、版本的快速发布都是不可容忍的。

在今天这个产品开发周期越来越快的时代,越来越多的用到了自动化测试。如果是纯软件的项目,测试用例的自动化覆盖率应该达到100%;如果是嵌入式项目,测试用例的自动化覆盖率也应该达到80%以上。

1、自动化测试模型如下:
在这里插入图片描述

  • 自动化测试pc通过控制通道和被测设备进行连接,可以控制被测设备的行为,一些内部测试用例可以直接这样就能测试。控制通道可能是串口、usb、网口等等;
  • 自动化测试pc通过控制通道和测试仪器/设备进行连接,测试仪器/设备通过数据通道和被测设备进行连接,pc上的测试代码可以操控测试仪器被测设备进行测试。需要挑选支持代码控制的测试仪;
  • 跑在自动化测试pc上的自动化测试代码,一般使用python或者java来开发;

2、web管理 + 自动化测试:

在这里插入图片描述
在自动化测试的进阶阶段,有多套测试方案+多个测试开发人员+多个测试执行人员+多个开发人员,这样复杂的场景下需要一个有效的管理。

一般使用web来实现这些管理功能:

  • 配置测试方案。测试哪个版本的软件,要测试哪些case,每个测试case的配置;
  • 记录测试事件、测试log、测试结果、自动分析、自动提交bug;
  • 从bug记录上可以找到具体的测试信息;
  • 统计和报表呈现;
  • 权限管理;

2.4、持续集成

测试用例自动化的一个重要目的,就是支持持续集成。

持续集成CI(Continuous integration)是来自于敏捷开发(Agile software development)的一个重要概念。在敏捷开发模式下,我们的产品是迭代式的开发,从最小功能做起,随时修改随时可用。产品随时保持可用的状态,可以随时发布。

在新的代码合入以后,需要测试在极短的测试时间中,验证代码合入的新功能,以及验证对原来的功能是否有影响。如果不使用自动化测试,人工测试是不可能完成的。
在这里插入图片描述

实现了持续集成以后,我们会得到这样的理想场景:

  • 每天开发人员提交完代码,下班以后;
  • 自动编译系统,拉取最新的代码进行编译;
  • 编译完成后自动烧录到被测系统,并启动自动测试;
  • 自动测试完成后,会把测试不过的情况和log邮件发送给前一天有对应代码提交的开发人员;
  • 开发人员上班以后,处理前一天提交的错误,并开发新功能提交代码;
  • 晚上,又是新一轮的自动验证;

http://chatgpt.dhexx.cn/article/3sBTnBQH.shtml

相关文章

又发现个新的全网资源搜索神器

平常用谷歌百度搜资源一个个翻很费劲,这里分享几个最新可用的全网网盘资源搜索神器,在公众号苏生不惑后台回复神器 获取软件下载地址。 混合盘 这个app聚合搜索多个网盘资源,可从数十个网盘搜索网站中检索出你需要的资源,app非常简…

magnetX,资源搜索神器!老司机快上车!

magnetX 中文版是一款非常好用的资源搜索神器,界面干净简洁并且不会有弹窗。而且可以通过关键字搜索,或者网址过滤这两种方式快速找到你想要的资源,并且还能配合WebTorrent在线播放,还可以配合下载工具进行一键下载资源&#xff0…

【森林SOU】小巧绿色版搜索神器

种子搜索神器是一款基于P2P技术的资源搜索软件,搜索神器有很多,其实下面为大家带来的这个搜索工具就很不错,小巧功能强大无需安装,这里有着十分全面的资源可以自由搜索,下载也没有什么速度限制,十分便捷&am…

2014 三款强大搜片神器 | 各种视频资源 | 电影电视剧搜索

您还在百度上搜索电影吗,即浪费时间有累眼睛,并且还经常找到的不是自己想要的资源(某位仁兄下来了几个G的葫芦娃~~)。 亲们的福音来了。三款超强大的搜索下载看片软件很适合你。 只要有了他们,找神马资源都会变的轻松,So Easy~~ 下…

分享几个好用的百度网盘搜索引擎

与大家分享几个好用的网盘搜索神器,方便大家搜索百度云网盘分享的资源文件。(已测试,目前都可用) 一、 盘搜 http://www.pansou.com/ 网站简洁,搜索即可出来结果,点击搜索结果就能跳转。 二、 飞鱼盘搜 h…

吊打本地搜索神器everthing,最快 最强的电脑本地搜索神器!

Windows的小伙伴应该都对Windows资源管理器 自带的『文件搜索功能』说一句“垃圾” 全盘搜索一个文件居然需要几十秒 而为了解决Windows搜索慢的问题 不少小伙伴应该都用过或者听说过『Everything』这个软件 不论磁盘空间多大、存有多少文件 Everything都能以毫秒级的速度搜…

推荐一些非常好用的网盘搜索神器

网盘工具的兴起,大多数的用户会在网盘上分享自己的资源。那么如何快速的在网盘上找到你想要的资源呢 ? 而今天推荐的就是一些网盘搜索引擎,它可以使我们快速搜搜索到自己想要的资源,从而提高了整体的搜索效率。下面将介绍一些搜索引擎&#…

easySearch:一款聚合资源搜索神器

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 大家好,我是免费哥。 今天给大家带来的资源是:资源聚合搜索神器easySearch 资料简介 这是一款Chrome浏览器插件,支持主流链接…

资源搜索引擎

1.DogeDoge搜索引擎:https://www.dogedoge.com/ 不追踪,不误导。 2.秘迹搜索:https://mijisou.com/ 这是一个 不追踪 你的搜索引擎 3.小白盘:https://www.xiaobaipan.com/ 4.云盘精灵(资源搜索)&#xf…

各大网盘搜索资源神器免费送!!!

文章目录 百度网盘资源搜索神器系列1、盘多多:http://www.panduoduo.net/2、盘搜:http://www.pansou.com/3、盘搜搜:http://www.pansoso.com/ 百度网盘资源搜索神器系列 给经常玩百度网盘的玩家推荐微信公众号:性感的小君君 提供…

黑科技丨资源搜索神器

黑科技丨资源搜索神器 黑科技丨资源搜索神器 资源整合网站 网盘搜索学术搜索数据搜索 影视资源 前言:本文向读者推荐各种好用的资源搜索神器。 资源整合网站 网盘搜索 资源搜索:一款集合各大搜索于一身的搜索网站,如一网打尽、56网盘、水滴等…

网盘资源搜索神器,只有你想不到没有你搜不到的,老司机必备!

1. 盘搜搜 http://www.pansoso.com/ 非常老牌的一个搜索网站,搜出来的资源大部分都能用。而且资源也比较全,很多想要的都能快速找到。 2. 胖次 https://www.panc.cc/ 专业的网盘资源搜索工具,涵盖了视频、音乐、图片、小说以及APP等不同类…

线性回归学习

以下笔记来自于黑马程序员十三天入门机器学习 线性回归 1. 什么是线性回归1.1 定义与公式1..2 线性回归的特征与⽬标的关系分析 2 线性回归api初步使⽤2.1 线性回归API2.2 举例2.3 步骤分析2.4 代码过程 3.线性回归的损失和优化3.1 损失函数3.2 优化算法3.2.1 正规⽅程3.2.1.1…

机器学习:线性回归

一、线性回归简介 1 线性回归应用场景 房价预测销售额度预测贷款额度预测 举例: 2 什么是线性回归 2.1 定义与公式 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。 特点&…

多元线性回归推导过程

接上篇:人工智能开篇 常用算法一 多元线性回归详解1 此次我们来学习人工智能的第一个算法:多元线性回归.文章会包含必要的数学知识回顾,大部分比较简单,数学功底好的朋友只需要浏览标题,简单了解需要哪些数学知识即可. 本章主要包括以下内容 数学基础知识回顾 什么是多元线…

线性回归详解(2)机器学习

多元线性回归   在介绍完机器学习的相关概念后,我们先从机器学习中最简单入门的线性回归模型出发,并且从最底层的数学讲起,完全深入理解机器学习的本质。 1 基本概念 线性回归是机器学习中有监督机器学习下的一种算法。 回归问题主要关注的…

【机器学习】线性回归

线性回归学习内容: 线性回归(上)Linear Regression引言:看看就行线性回归概念算法求解步骤Part1.建立模型基本形式Part2.选定距离衡量方程Part3.学习模型参数 评价指标: . . . R 2 ...R^2 ...R2 线性回归(下…

详解使用pytorch实现线性回归时,线性回归方程,损失函数,梯度下降优化算法之间的关系

One-dimensional linear regression 给定数据集(点集),我们希望优化出一个好的函数f(x),使得f(xi) wxib。有均方差损失函数可得E(w,b)。如下图: 为什么要求出outputs&…

【Matlab学习手记】多元非线性回归

介绍两种方法做多元非线性回归:lsqcurvefit、Adagrad 法。 lsqcurvefit是Matlab提供的内置函数,用于基于最小二乘的曲线拟合问题;Adagrad是一种基于梯度的迭代方法,特点在步长不固定,随着迭代次数变化。 clear; clc;…

线性回归原理----简单线性回归、多元线性回归

回归分析是用来评估变量之间关系的统计过程。用来解释自变量X与因变量Y的关系。即当自变量X发生改变时,因变量Y会如何发生改变。 线性回归是回归分析的一种,评估的自变量X与因变量Y之间是一种线性关系,当只有一个自变量时,成为简…