上位机图像处理和嵌入式模块部署(树莓派4b进行自动化测试)

news2024/11/27 8:24:25

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        硬件、软件功能开发ok只是产品开发的第一步。怎么做到自动化测试、保证产品质量才是关键。很多时候,我们给客户提供了功能,这只是相当于一只脚踏入了行业的门槛而已。产品是不是稳定、性能够不够好,才是提高产品竞争力最重要的环节。

        当然,一个产品的测试很多,有软件测试、硬件测试、结构测试和系统测试。大部分测试都是黑盒测试,即测试人员不需要对功能的实现进行过多的理解和分析。这有成本的考量,也不失为一种方法。但是对于开发人员来说,他们自己的测试应该更加充分、更加完善一点。今天,我们就如何做好自动化软件测试简单讨论下。

1、静态代码检查

        静态代码检查是软件测试很重要的环节。目前这方面的工具很多,开源的有splint,商业软件有pc-lint。对于一些大公司或者是有特殊安全要求的行业来说,静态代码检查是非常重要的。它对代码的检查,比gcc、g++里面的-Werror选项还要高。

2、单元测试

        单元测试,就是利用编写的测试代码对功能代码进行测试。一开始的作用可能并没有那么明显,甚至看起来觉得有点浪费时间。可是等到测试用例积累到一定程度的时候,单元测试就会发挥它真正的威力了。我们都知道,软件fix bug,一般都是fix几个问题之后,往往会带来1-2个新问题,这是规律。而单元测试可以帮助我们降低相关问题的风险,至少出不会触发明显的bug问题。

3、功能测试

        基本的功能测试还是非常有必要的。这里的功能测试最好就是无界面的测试,这样比较好做成自动化脚本的形式。以树莓派4b+opencv为例,我们就可以利用python+xmlrpc的形式对开发板子上面的功能进行测试。相关的测试可以是用camera采集图片,也可以直接拿已有的图片进行测试。因为中间不会涉及到界面的部分,所以用脚本测试就够了。

4、python+autogui测试

        除了功能测试之外,还有一部分界面也需要进行测试的。这部分测试有上位机的测试,也有网页的测试。建议大家,还是用python+autogui的方法进行测试。python自不必多少,关键是如何使用autogui,这里面主要就是用autogui模拟鼠标和键盘的动作。有了这些动作之后,结合xmlrpc就可以实现相关的界面+功能测试了。

5、压力测试

        压力测试是检测软件鲁棒性非常好的一个办法。有些问题如果短时间没有办法通过脚本看出来的话,那么压力测试就可以帮助我们确认,比如系统长时间运行,确认是不是有问题。再比如说,内存会不会越界、程序并发有没有问题、内存会不会泄漏,只有压力足够大、时间足够长,有些问题才会很快地暴露出来。

6、性能分析和测试

        基础功能和压力测试都没有问题之后,下面就需要对一些关键的性能进行分析和优化了。优化之前,一般需要自己分析出软件程序的瓶颈点。比如哪部分花的时间最多,哪个流程花的时间最多,甚至是哪个函数花的时间最多。优化的顺序也应该是自上而下的,首先对流程进行优化,接着是模块,最后才是驱动、函数和汇编级别的优化。目前的经验表明,越是上面流程的优化,效果越明显;越是底层的优化,花的时间越长,不过可移植性会变差。

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

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

相关文章

Rust HTTP 客户端:易于使用、功能强大 | 开源日报 No.228

seanmonstar/reqwest Stars: 8.9k License: Apache-2.0 reqwest 是一个易于使用且功能强大的 Rust HTTP 客户端。 异步和阻塞客户端支持普通数据、JSON、urlencoded 和 multipart 数据格式可定制的重定向策略支持 HTTP 代理和系统原生 TLS 或 rustls 的 HTTPSCookie 存储功能…

一、路由基础

1.路由协议的优先级 路由器分别定义了外部优先级和内部优先级(越小越优) 路由选择顺序:外部优先级>>内部优先级(相同时) ①外部优先级:用户可以手工为各路由协议配置的优先级 ②内部优先级&#xf…

Nuxt3 实战 (五):Header 头部布局

前言 这两周一直忙公司系统的迭代需求,没啥时间捣鼓自己的小项目,趁着项目进入测试收尾阶段,抽空把 Layout 布局的 Header 部分先搞好。 需求拆分 顶部左侧放 Logo,右边放社交图标,暗黑模式切换提前准备好 Logo 和网…

Centos8操作系统安装mysql5.7版本以及报错解决

目录 一、卸载MySql 1.首先查看已安装的mysql 2.逐个或者执行一下命令统一卸载掉 注意: 3. 卸载其他相关文件 二、安装MySql 1.安装mysql的rpm源 2.安装MySql 如果遇到以下错误: 问题一: 解决方法: 问题二、 解决方法&#xff1…

【一刷《剑指Offer》】面试题 9:斐波那契数列(扩展:青蛙跳台阶、矩阵覆盖)

力扣对应链接:LCR 126. 斐波那契数 - 力扣(LeetCode) 牛客对应链接:斐波那契数列_牛客题霸_牛客网 (nowcoder.com) 核心考点:空间复杂度,fib 理解,剪枝重复计算。 一、《剑指Offer》内容 二、分…

Linux多进程(二)进程通信方式三 共享内存

共享内存提供了一个在多个进程间共享数据的方式,它们可以直接访问同一块内存区域,因此比使用管道或消息队列等通信机制更高效。在多进程程序中,共享内存通常与信号量一起使用,以确保对共享内存的访问是线程安全的。 一、打开/创建…

俊杰测评:电视盒子什么牌子好?电视盒子品牌排行榜

欢迎各位来到俊杰的数码测评频道,每年我会进行数十次电视盒子测评,今年已经买过二十多款电视盒子了,本期的测评主题是电视盒子什么牌子好,通过十天的深入详细对比后我整理了电视盒子品牌排行榜,近期想买电视盒子的可以…

代码随想录算法训练营第五十一天| 309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费,总结

题目与题解 参考资料:买卖股票总结 309.最佳买卖股票时机含冷冻期 题目链接:309.最佳买卖股票时机含冷冻期 代码随想录题解:309.最佳买卖股票时机含冷冻期 视频讲解:动态规划来决定最佳时机,这次有冷冻期!|…

python获取文件路径

文件:allpath_parameter.py # 获取当前目录路径 # current_dir os.getcwd() # 获取当前目录路径 realpath00 os.path.abspath(os.path.join(os.path.dirname(os.path.split(os.path.realpath(__file__))[0]), .)) print(realpath00)# 获取当前目录的上级目录路…

Centos安装/更新Docker

首先要配置好Centos 配置好静态IP 替换yum源为阿里云 Docker是什么? Docker 是一种开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后部署到任何流行的 Linux 机器上。是一种虚拟化的技术,可以把…

linux 编译opencv遇到问题

linux编译opencv4.8的时候遇到问题 Error: suffix or operands invalid for vpand看到很多说法是升级as这个工具的版本,自测是从2.20升级到2.27就可以了

12G-SDI视频分配器JR104D-4K-SDI

JR104D-4K-SDI 12G-SDI分配器1分4,12G-SDI分配器1分2,12G-SDI分配器1分8,机架式12G-SDI分配器1分4,12G-SDI分配器4组1分4,12G-SDI分配器16组1分4, 广播级指标生产厂家。 一、产品介绍: JR104D-4K-SDI视频分配器,是按…

Docker网络模式与cgroup资源控制

前言 在 Docker 中,网络模式和 cgroup 资源控制作为关键功能,对于容器的性能优化和资源管理起着至关重要的作用。本文将介绍 Docker 的网络模式和cgroup资源控制,探讨不同网络模式的特点以及如何利用 cgroup 资源控制机制来有效管理容器的资…

【SSM进阶学习系列丨整合篇】Spring+SpringMVC+MyBatis 框架配置详解

文章目录 一、环境准备1.1、创建数据库和表1.2、导入框架依赖的jar包1.3、修改Maven的编译版本1.4、完善Maven目录1.5、编写项目需要的包1.6、编写实体、Mapper、Service 二、配置MyBatis环境2.1、配置mybatis的主配置文件2.2、编写映射文件2.3、测试环境是否正确 三、配置Spri…

机器学习——过拟合

一、过拟合得表现 模型在训练过程中,除了会出现过拟合现象,还有可能出现欠拟合的情况。相比而言,后者通常发生在建模前期,只要做好特征工程一般可以解决模型欠拟合问题。下图描述了模型在训练数据集上的三种情况: 其…

【深度学习实战(11)】搭建训练框架之dataset,dataloader

一、dataset和dataloader要点说明 在我们搭建自己的网络时,往往需要定义自己的dataset和dataloader,将图像和标签数据送入模型。 (1)在我们定义dataset时,需要继承torch.utils.data.dataset,再重写三个方法…

文本高效拆分内容,根据空行高效拆分文本内容,文本文档管理更轻松

文本文档是我们日常生活和工作中不可或缺的一部分。然而,随着文本内容的不断增加,如何高效、有序地管理这些文档成为了一个挑战。传统的文本编辑工具往往无法满足我们对于文档整理的需求,而手动整理又费时费力。现在,我们为您带来…

Java实战:确定给定日期是一年的第几天

本次实战,我们将探讨如何确定给定日期是一年中的第几天。为此,我们提供了三种不同的方法,每种方法都有其独特的实现方式和适用场景。 方法一:不使用数组 这种方法通过Scanner类获取用户的输入,包括年份、月份和日期。…

从虚拟化走向云原生,红帽OpenShift“一手托两家”

汽车行业已经迈入“软件定义汽车”的新时代。吉利汽车很清醒地意识到,只有通过云原生技术和数字化转型,才能巩固其作为中国领先汽车制造商的地位。 和很多传统企业一样,吉利汽车在走向云原生的过程中也经历了稳态业务与敏态业务并存带来的前所…

WEB攻防-PHP特性-函数缺陷对比

目录 和 MD5函数 intval ​strpos in_array preg_match str_replace 和 使用 时,如果两个比较的操作数类型不同,PHP 会尝试将它们转换为相同的类型,然后再进行比较。 使用 进行比较时,不仅比较值,还比较变量…