当前位置: 首页 > news >正文

测试的基本原则

1.SDLC 才是王道:软件开发生命周期(SDLC)对于软件开发而言,是如同基石般的关键流程,每一位开发人员都应该对其了如指掌。从最初的需求定义,到最终软件上线后的维护,SDLC 的各个阶段环环相扣,共同构建起软件的完整生命周期。将测试理念融入到 SDLC 的每一个环节,就像是给建筑的每一层都做好了质量检测,是确保软件质量坚如磐石的重要举措。不同的组织由于自身的业务特点、技术水平和管理模式的差异,采用的 SDLC 模型也不尽相同,这就导致各阶段的名称和具体工作内容会有所变化。但无论如何,像定义阶段精准确定软件需求,设计阶段精心规划软件架构,开发阶段将设计转化为代码,部署阶段让软件在实际环境中运行,以及维护阶段保障软件持续稳定运行,这些核心概念阶段都是开发应用程序必不可少的环节。在每个阶段,都要充分考虑测试工作,把测试计划的制定、测试用例的设计以及测试执行等内容,都纳入到现行的开发流程中。这样一来,才能保障测试计划全面覆盖软件的各个方面,确保测试的有效性。目前,软件行业中存在着各种各样的 SDLC 框架,比如瀑布模型、敏捷开发模型、迭代模型等等。这些框架提供了描述性和规范性两类建议。描述性建议侧重于阐述软件开发过程中通常会发生的情况,帮助开发团队了解实际的开发流程;规范性建议则更像是一份详细的操作指南,明确规定了每个阶段应该完成的任务和达到的标准。选择哪种建议,取决于组织 SDLC 过程的成熟度。如果一个组织已经在软件开发领域积累了丰富的经验,其 SDLC 流程已经相对成熟,那么可以依据规范性建议进一步优化流程,提高开发效率和软件质量;而如果组织仍处于发展阶段,对软件开发的流程还在不断探索和完善,描述性建议则能提供更灵活的指导,让组织根据自身情况进行调整和改进。

2.尽早开始、频繁测试:测试工作就像是一场赛跑,越早出发就越容易掌握主动权。在软件开发的早期阶段,比如需求分析和设计阶段,就应该启动测试工作,而不是等到开发完成后才匆匆忙忙开始测试。在需求分析阶段,测试人员可以对需求文档进行评审,检查需求是否清晰、完整、一致,有没有潜在的矛盾和漏洞。通过早期的介入,能够及时发现并解决潜在问题,避免问题在后续的开发过程中不断积累和放大。从成本和风险的角度来看,早期测试的优势更是显而易见。如果在软件开发生命周期的初期,也就是代码量还较少、系统架构还相对简单的时候就检测到漏洞,修复工作就如同在一张白纸上修改错误,相对简单,所需成本也较低。但随着开发进程的推进,代码量不断增加,系统架构变得越来越复杂,漏洞修复的难度和成本就会呈指数级增长。例如,在开发后期发现一个由于设计缺陷导致的问题,可能需要对整个模块甚至整个系统的架构进行调整,这不仅需要投入大量的人力、物力和时间,还可能会引入新的问题。因此,持续、频繁的测试就像是给软件的开发过程上了一道道保险,能够确保软件在整个开发过程中始终保持较高的质量水平,减少后期出现大规模问题的风险。

3.选用合适的工具:在软件测试的浩瀚海洋中,虽然不存在一把能够打开所有宝箱的万能钥匙,也就是不存在万能的测试工具,但工具在整体测试计划中所起的作用就如同航海中的指南针和地图,至关重要。当下,软件测试领域发展迅速,有大量丰富多样的开源工具和商业工具可供选择。这些工具就像是一个个得力的助手,能够自动完成许多常规的测试任务,比如功能测试中的界面元素检查、性能测试中的压力模拟等等,帮助测试人员简化繁琐的测试流程,提高测试效率。然而,就像每把钥匙都有其特定的锁孔一样,每种工具都有其独特的功能和局限性。关键在于深入了解这些工具的功能和适用场景,只有选择与测试需求相匹配的工具,才能达到事半功倍的效果。例如,对于自动化功能测试,Selenium 凭借其强大的跨浏览器支持和灵活的脚本编写能力,成为了众多测试人员的首选工具。它可以模拟用户在浏览器中的各种操作,如点击按钮、输入文本、切换页面等,实现对 Web 应用程序功能的自动化测试。而对于性能测试,JMeter 则是一款备受青睐的工具。它能够模拟大量用户并发访问,对服务器的性能指标进行监测和分析,帮助测试人员评估系统在高负载情况下的性能表现。在选择工具前,测试团队需要充分评估项目的特点,比如项目是 Web 应用、移动应用还是桌面应用;测试目标是什么,是功能测试、性能测试还是安全测试;以及团队的技术水平如何,是否有足够的能力掌握和运用所选工具。只有综合考虑这些因素,才能确保所选工具能够满足实际需求,为测试工作提供有力的支持。

图片

4.80/20 原则:在软件测试的世界里,存在着一个神奇的二八定律,也就是大约 80% 的缺陷是由 20% 的原因所引发的。这就好比一座冰山,露在水面上的部分只是一小部分,而隐藏在水下的大部分才是真正的关键所在。这意味着少数特定的原因或模块是导致大多数缺陷的根源。对于测试团队来说,这一原则就像是一盏明灯,为他们指明了工作重点。通过分析过往项目的测试数据,就像侦探寻找线索一样,找出那些容易出现问题的模块和原因。比如,在一个电商系统中,经过数据分析发现,购物车模块和支付模块虽然只占整个系统功能的一小部分,但却产生了大部分的缺陷。那么,在后续的测试工作中,就可以有针对性地对这两个模块进行更加深入、全面的测试和优化。通过对这些关键模块和原因的重点关注,能够有效降低软件的缺陷率,提高软件的质量,同时也能大大提高测试效率,避免在一些不太可能出现问题的地方浪费过多的时间和精力。

5.穷尽测试不可行,基于风险测试很必要:在软件测试的道路上,我们常常会面临一个残酷的现实,那就是由于时间、资源和技术的限制,对软件进行穷尽测试,也就是测试所有可能的输入、输出和场景,是几乎不可能实现的。想象一下,一个稍微复杂一点的软件系统,其可能的输入组合和操作场景就数以百万计,要对每一种情况都进行测试,即使投入再多的人力和时间,也是不现实的。因此,基于风险的测试方法就应运而生,它就像是一个明智的资源分配者,帮助我们在有限的条件下实现最大的价值。这种方法要求测试团队对软件系统中的各个模块和功能进行风险评估,就像医生给病人做全面检查,找出潜在的高风险区域。在进行风险评估时,需要综合考虑多个因素。功能的重要性是一个关键因素,比如对于一个在线银行系统,账户管理和交易功能就是至关重要的,一旦出现问题,可能会给用户带来巨大的损失,所以这些功能的风险等级就比较高。使用频率也不容忽视,经常被用户使用的功能模块,出现问题的概率相对较高,也需要重点关注。复杂度也是评估风险的重要指标,复杂的算法、逻辑和数据结构更容易出现漏洞。此外,还要考虑可能造成的影响,如果一个问题的出现会导致系统崩溃、数据丢失或者用户隐私泄露等严重后果,那么这个问题的风险就非常高。识别出高风险区域后,测试团队就可以优先对这些区域进行测试,通过合理分配测试资源,确保高风险的问题能够被及时发现和解决,从而在有限的资源下实现最大的测试价值。

6.注重细节:在软件测试中,进行表面的应用测试并认为测试任务已完成,就像是只看到了冰山的一角,而忽略了水下隐藏的巨大风险,是一种极其危险的做法。这种做法会产生一种软件质量良好的假象,就像给一个有缺陷的产品贴上了完美的标签,其危害程度与不进行测试无异。仔细审查测试结果,并剔除测试报告中可能存在的错误至关重要,这就好比医生在诊断病情时,要仔细检查每一项检查结果,确保诊断的准确性。测试结果的不准确会破坏报告其余部分的有效信息,就像一颗老鼠屎坏了一锅粥,误导后续的决策。在测试过程中,要确保所有可能的应用逻辑部分都经过了全面测试,对每种使用情况都进行了漏洞检测,不放过任何一个细节。比如,在测试一个文件上传功能时,不仅要测试正常大小、常见格式的文件上传是否成功,还要测试超大文件、特殊格式文件以及文件名为特殊字符等各种边界情况和异常情况,只有这样,才能发现潜在的问题,保证软件的质量。

图片

7.合理运用自动化与手动测试:自动化测试工具就像是不知疲倦的机器人助手,能够有效提高测试效率,尤其适用于重复性高、规律性强的测试任务。比如在每天的回归测试中,自动化测试工具可以快速地执行大量的测试用例,检查软件的基本功能是否正常,大大节省了时间和人力成本。然而,并非所有的测试场景都适合自动化测试,就像不是所有的工作都适合机器人来完成一样。对于一些复杂的、难以自动化的测试场景,手动测试仍然不可或缺。手动测试就像是经验丰富的工匠,能够凭借其敏锐的洞察力和丰富的经验,发现那些自动化测试难以捕捉到的细微问题。例如,对于一些涉及用户体验和业务逻辑的复杂场景,手动测试能够更好地模拟真实用户的操作,感受用户在使用软件过程中的痛点和问题。在测试一个电商 APP 的下单流程时,手动测试人员可以从用户的角度出发,考虑用户在不同网络环境、不同操作习惯下的使用情况,发现一些自动化测试无法发现的问题,如界面交互不友好、操作流程繁琐等。因此,在测试计划中,要合理安排自动化测试和手动测试的比例,充分发挥两者的优势,让它们相互配合,共同为软件质量保驾护航。

8.测试的本身也要被测试:就如同用尺子测量桌子长度,如果尺子本身不准确,那么测量结果必然有误。测试工作同样如此,测试方法、测试工具以及测试用例的准确性和有效性都需要进行验证。测试方法是否科学合理,直接影响到测试结果的可靠性;测试工具是否正常运行,是否能够准确地检测出问题;测试用例是否覆盖了所有关键的功能和场景,是否存在漏洞。只有确保测试的过程和结果可靠,才能为软件质量提供有力的保障。可以通过同行评审、交叉测试等方式对测试工作进行检验。同行评审就像是一场学术研讨会,让不同的测试人员对测试方法、测试用例等进行讨论和评估,发现其中存在的问题和不足之处。交叉测试则是让不同的测试团队或测试人员对同一软件进行测试,通过对比测试结果,发现可能存在的问题。通过这些方式,能够及时发现并纠正测试工作中存在的问题,确保测试的质量。

9.建立正确的思考模式:要成功地测试应用程序并找出安全漏洞,需要具备 “跳出条条框框” 的思维方式。常规的用例测试主要关注用户按预期方式使用时应用程序的正常行为,就像是在一条平坦的道路上行驶,只关注正常的交通规则。而优秀的测试需要具备 “攻其不备” 的思维,像试图攻破应用程序的攻击者一样思考,就像是在黑暗中寻找隐藏的陷阱。通过模拟各种异常情况和恶意操作,能够发现那些隐藏在正常用例测试中难以察觉的安全漏洞。例如,尝试进行 SQL 注入攻击,通过在输入框中输入特殊的 SQL 语句,测试应用程序是否存在 SQL 注入漏洞;进行跨站脚本攻击测试,在网页中插入恶意脚本,看应用程序是否能够有效防范。除了这些常见的攻击方式,还可以从用户权限绕过、文件上传漏洞利用等多个角度进行测试,全面评估应用程序的安全性。只有具备了这种独特的思考模式,才能在测试工作中发现更多潜在的问题,为软件的安全运行提供保障。

作者简介:风随水

一个从事十五年测试和质量管理者

曾经深圳乃至全国最大最活跃软件测试QQ群群主

致力于质量管理和体系规范

相关文章:

测试的基本原则

1.SDLC 才是王道:软件开发生命周期(SDLC)对于软件开发而言,是如同基石般的关键流程,每一位开发人员都应该对其了如指掌。从最初的需求定义,到最终软件上线后的维护,SDLC 的各个阶段环…...

如何建设一个企业级的数据湖

建设一个企业级的数据湖是一项复杂且系统化的工程,需要从需求分析、技术选型、架构设计到实施运维等多个方面进行综合规划和实施。以下是基于我搜索到的资料,详细阐述如何建设企业级数据湖的步骤和关键要点: 一、需求分析与规划 明确业务需…...

Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat

目录 ?编辑 一、Ubuntu22.04介绍 二、Ubuntu与Centos的区别 三、基于VMware安装Ubuntu Server 22.04 下载 VMware安装 1.创建新的虚拟机 2.选择类型配置 3.虚拟机硬件兼容性 4.安装客户机操作系统 5.选择客户机操作系统 6.命名虚拟机 7.处理器配置 8.虚拟机内存…...

springfox-swagger-ui 3.0.0 配置

在3.0中&#xff0c;访问地址URL变了。 http://地址:端口/项目名/swagger-ui/ SpringBoot maven项目引入 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version> </…...

【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM

参考&#xff1a; https://www.youtube.com/watch?veC6Hd1hFvos 目录&#xff1a; 什么是 Fine-tune 为什么需要Fine-tuning 如何进行Fine-tune Fine-tuning- Supervised Fine-tuning 流程 Fine-tuning参数训练的常用方案 LORA 简介 示例代码 一 什么是 Fine-tune …...

Spring无法解决的循环依赖

在Spring框架中&#xff0c;循环依赖是指两个或多个Bean相互依赖&#xff0c;形成一个闭环。例如&#xff0c;Bean A依赖于Bean B&#xff0c;而Bean B又依赖于Bean A。虽然Spring通过三级缓存&#xff08;一级缓存、二级缓存、三级缓存&#xff09;机制解决了大多数情况下的循…...

C++的类Class

文章目录 一、C的struct和C的类的区别二、关于OOP三、举例&#xff1a;一个商品类CGoods四、构造函数和析构函数1、定义一个顺序栈2、用构造和析构代替s.init(5);和s.release();3、在不同内存区域构造对象4、深拷贝和浅拷贝5、构造函数和深拷贝的简单应用6、构造函数的初始化列…...

如何应对离别之:短暂离别

《若道离别》&#xff08;一&#xff09;&#xff1a;如何应对离别之短暂离别 大多数人还是不能很全心愉快地面对离别&#xff0c;哪怕只是短暂&#xff0c;还是从有到无的失落感&#xff0c;有人一天就适应&#xff0c;有人需要很久 不求离别无动于衷&#xff0c;但求使用部分…...

Harmony Next 跨平台开发入门

ArkUI-X 官方介绍 官方文档&#xff1a;https://gitee.com/arkui-x/docs/tree/master/zh-cn ArkUI跨平台框架(ArkUI-X)进一步将ArkUI开发框架扩展到了多个OS平台&#xff1a;目前支持OpenHarmony、Android、 iOS&#xff0c;后续会逐步增加更多平台支持。开发者基于一套主代码…...

笔试-二维数组2

应用 现有M(1<M<10)个端口组&#xff0c;每个端口组是长度为N(1<N<100)&#xff0c;元素均为整数。如果这些端口组间存在2个及以上的元素相同&#xff0c;则认为端口组可以关联合并&#xff1b;若可以关联合并&#xff0c;请用二位数组表示输出结果。其中&#xf…...

/opt安装软件,就可以使用man xx命令是为什么

引言 以neovim的安装过程为例 下载 curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz sudo rm -rf /opt/nvim sudo tar -C /opt -xzf nvim-linux64.tar.gz添加环境变量前&#xff0c;是无法使用man nvim的 Then add this to your sh…...

vue3和vue2的区别有哪些差异点

Vue3 vs Vue2 主要差异对比指南 官网 1. 核心架构差异 1.1 响应式系统 Vue2&#xff1a;使用 Object.defineProperty 实现响应式 // Vue2 响应式实现 Object.defineProperty(obj, key, {get() {// 依赖收集return value},set(newValue) {// 触发更新value newValue} })Vue3…...

记录备战第十六届蓝桥杯的过程

1.学会了原来字符串也有比较方法&#xff0c;也就是字符串987 > 98 等等&#xff0c;可以解决拼最大数问题 题目链接&#xff1a;5.拼数 - 蓝桥云课 (lanqiao.cn) 2.今天又复习了一下bfs&#xff0c;感觉还是很不熟练&#xff0c;可能是那个过程我些许有点不熟悉&#xff…...

【PVE】Proxmox VE8.0+创建LXC容器安装docker

为了不影响PVE宿主机&#xff0c;通常使用套娃的形式安装Docker容器&#xff0c;再安装相关docker应用。首先在CT模板中创建 Linux 容器&#xff0c;推荐使用Debian。开启ssh登录&#xff0c;修改debian配置&#xff0c;安装docker 一、创建 LXC 容器 1、CT模板下载 点击“模…...

Semantic Kernel - Kernel理解

目录 一、关于Kernel 二、案例实战 三、运行截图 一、关于Kernel 微软的 Semantic Kernel 项目中,Semantic Kernel 是一个工具框架,旨在使得开发人员能够更容易地将大语言模型(如GPT)集成到不同的应用中。它通过提供一组接口、任务模板和集成模块,使开发者能够轻松地设计…...

【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南

文章目录 &#x1f30d;一. WEB 开发❄️1. 介绍 ❄️2. BS 与 CS 开发介绍 ❄️3. JavaWeb 服务软件 &#x1f30d;二. Tomcat❄️1. Tomcat 下载和安装 ❄️2. Tomcat 启动 ❄️3. Tomcat 启动故障排除 ❄️4. Tomcat 服务中部署 WEB 应用 ❄️5. 浏览器访问 Web 服务过程详…...

「 机器人 」利用冲程对称性调节实现仿生飞行器姿态与方向控制

前言 在仿生扑翼飞行器中,通过改变冲程对称性这一技术手段,可以在上冲与下冲两个阶段引入不对称性,进而产生额外的力或力矩,用于实现俯仰或其他姿态方向的控制。以下从原理、在仿生飞行器中的应用和典型实验示例等方面进行梳理与阐述。 1. 冲程对称性原理 1.1 概念:上冲与…...

力扣算法题——11.盛最多水的容器

目录 &#x1f495;1.题目 &#x1f495;2.解析思路 本题思路总览 借助双指针探索规律 从规律到代码实现的转化 双指针的具体实现 代码整体流程 &#x1f495;3.代码实现 &#x1f495;4.完结 二十七步也能走完逆流河吗 &#x1f495;1.题目 &#x1f495;2.解析思路…...

企业微信SCRM开创客户管理新纪元推动私域流量高效转化

内容概要 在当今瞬息万变的数字化时代&#xff0c;企业面临着前所未有的客户管理挑战。消费者的需求日益多样化&#xff0c;他们希望能够随时随地与品牌沟通。因此&#xff0c;越来越多的企业意识到&#xff0c;传统的客户管理方式已无法满足市场的需求。在这样的背景下&#…...

C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库

用C实现高性能数据处理&#xff0c;Python实现操作Redshift导入数据文件。 在Visual Studio 2022中用C和ODBC API导出SQL Server数据库中张表中的所有表的数据为CSV文件格式的数据流&#xff0c;用逗号作为分隔符&#xff0c;用双引号包裹每个数据&#xff0c;字符串类型的数据…...

ESP8266 NodeMCU与WS2812灯带:实现多种花样变换

在现代电子创意项目中&#xff0c;LED灯带的应用已经变得极为广泛。通过结合ESP8266 NodeMCU的强大处理能力和FastLED库的高效功能&#xff0c;我们可以轻松实现多达100种灯带变换效果。本文将详细介绍如何使用Arduino IDE编程&#xff0c;实现从基础到高级的灯光效果&#xff…...

OpenAI 发布首个 AI 智能体

OpenAI 发布首个 AI 智能体 当地时间 1 月 23 日&#xff0c;OpenAI 发布了首个 AI 智能体 Operator124。以下是关于它的详细介绍2&#xff1a; 功能用途 操作网页&#xff1a;可模拟人类操作网页浏览器&#xff0c;能进行点击、滚动、输入等操作&#xff0c;例如在 OpenTable…...

【Linux】gcc/g++的使用

目录 一、gcc/g简介 二、编译和链接 预处理 编译 汇编 连接&#xff08;生成可执行文件或库文件&#xff09; 三、动态链接和静态链接 静态库和动态库 gcc其他常用选项 合集传送门&#xff1a;Linux_uyeonashi的博客-CSDN博客 一、gcc/g简介 GCC&#xff08;GNU Com…...

Kmesh v1.0 正式发布!7 大特性提升网络流量管理效率和安全性

Kmesh v1.0 正式发布&#xff01;7 大特性提升网络流量管理效率和安全性 2025 年新年伊始&#xff0c;Kmesh 团队正式发布了 Kmesh v1.0234。以下是 Kmesh v1.0 提升网络流量管理效率和安全性的 7 大特性35&#xff1a; 加密通信&#xff1a;引入 IPsec 协议对节点间流量加密&a…...

Day45:元组的创建

在 Python 中&#xff0c;元组&#xff08;tuple&#xff09;是一种不可变的序列类型。与列表&#xff08;list&#xff09;不同&#xff0c;元组一旦创建就无法修改它们的内容。元组是有序的&#xff0c;可以包含不同类型的元素&#xff0c;支持索引和切片操作&#xff0c;但不…...

Rust:如何动态调用字符串定义的 Rhai 函数?

在 Rust 中使用 Rhai 脚本引擎时&#xff0c;你可以动态地调用传入的字符串表示的 Rhai 函数。Rhai 是一个嵌入式脚本语言&#xff0c;专为嵌入到 Rust 应用中而设计。以下是一个基本示例&#xff0c;展示了如何在 Rust 中调用用字符串传入的 Rhai 函数。 首先&#xff0c;确保…...

在 Ubuntu22.04 上安装 Splunk

ELK感觉太麻烦了&#xff0c;换个日志收集工具 Splunk 是一种 IT 工具&#xff0c;可帮助在任何设备上收集日志、分析、可视化、审计和创建报告。简单来说&#xff0c;它将“机器生成的数据转换为人类可读的数据”。它支持从虚拟机、网络设备、防火墙、基于 Unix 和基于 Windo…...

单片机基础模块学习——数码管(二)

一、数码管模块代码 这部分包括将数码管想要显示的字符转换成对应段码的函数&#xff0c;另外还包括数码管显示函数 值得注意的是对于小数点和不显示部分的处理方式 由于小数点没有单独占一位&#xff0c;所以这里用到了两个变量i,j用于跳过小数点导致的占据其他字符显示在数…...

DAY01 面向对象回顾、继承、抽象类

学习目标 能够写出类的继承格式public class 子类 extends 父类{}public class Cat extends Animal{} 能够说出继承的特点子类继承父类,就会自动拥有父类非私有的成员 能够说出子类调用父类的成员特点1.子类有使用子类自己的2.子类没有使用,继承自父类的3.子类父类都没有编译报…...

LeetCode:40. 组合总和 II(回溯 + 剪枝 Java)

目录 40. 组合总和 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 回溯 剪枝 原理思路&#xff1a; 40. 组合总和 II 题目描述&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target …...

周末总结(2024/01/25)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利…...

解决日志中 `NOT NULL constraint failed` 异常的完整指南

在开发和运维过程中,日志是我们排查问题的重要工具。然而,当日志中出现类似 NOT NULL constraint failed 的异常时,往往意味着数据库约束与代码逻辑不匹配。本文将详细分析此类问题的原因,并提供完整的解决方案。 © ivwdcwso (ID: u012172506) 问题描述 在同步 AWS …...

线性规划:机器学习中的优化利器

一、线性规划的基本概念 线性规划&#xff08;Linear Programming, LP&#xff09;是运筹学中数学规划的一个重要分支&#xff0c;用于在一组线性不等式的约束条件下&#xff0c;找到线性目标函数的最大值或最小值。其问题可以表述为&#xff1a; 在一组线性约束条件 s.t.&am…...

Flutter子页面向父组件传递数据方法

在 Flutter 中&#xff0c;如果父组件需要调用子组件的方法&#xff0c;可以通过以下几种方式实现。以下是常见的几种方法&#xff1a; 方法 1&#xff1a;使用 GlobalKey 和 State 调用子组件方法 这是最直接的方式&#xff0c;通过 GlobalKey 获取子组件的 State&#xff0c…...

乐鑫 ESP32-C6 通过 Thread 1.4 互操作性认证

乐鑫信息科技 (688018.SH) 很高兴地宣布&#xff0c;ESP32-C6 已经成功通过 Thread 1.4 互操作性认证。这一成就标志着乐鑫在提供先进物联网解决方案之路上又迈进了重要一步。ESP32-C6 在 Thread Group 授权实验室的严格测试中&#xff0c;展现了与最新 Thread 1.4 协议的无缝兼…...

机器学习2 (笔记)(朴素贝叶斯,集成学习,KNN和matlab运用)

朴素贝叶斯模型 贝叶斯定理&#xff1a; 常见类型 算法流程 优缺点 集成学习算法 基本原理 常见方法 KNN&#xff08;聚类模型&#xff09; 算法性质&#xff1a; 核心原理&#xff1a; 算法流程 优缺点 matlab中的运用 朴素贝叶斯模型 朴素贝叶斯模型是基于贝叶斯…...

docker安装elk6.7.1-搜集java日志

docker安装elk6.7.1-搜集java日志 如果对运维课程感兴趣&#xff0c;可以在b站上、A站或csdn上搜索我的账号&#xff1a; 运维实战课程&#xff0c;可以关注我&#xff0c;学习更多免费的运维实战技术视频 0.规划 192.168.171.130 tomcat日志filebeat 192.168.171.131 …...

苍穹外卖-day06

[!IMPORTANT] HttpClient 是什么&#xff1f;它的作用是什么&#xff1f;在微信登录流程中&#xff0c;code 是什么&#xff1f;它的作用是什么&#xff1f;微信登录的具体步骤有哪些&#xff1f;在微信登录流程中&#xff0c;token 的作用是什么&#xff1f;在微信登录中&…...

iic、spi以及uart

何为总线&#xff1f; 连接多个部件的信息传输线&#xff0c;是部件共享的传输介质 总线的作用&#xff1f; 实现数据传输&#xff0c;即模块之间的通信 总线如何分类&#xff1f; 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…...

如何高效启动并优化你的Google广告?

在现代数字营销中&#xff0c;Google广告&#xff08;Google Ads&#xff09;已经成为提升品牌曝光、吸引潜在客户和推动销售增长的重要工具。无论你是刚接触广告投放的新手&#xff0c;还是希望优化广告效果的资深营销人员&#xff0c;理解如何有效启动并管理Google广告至关重…...

【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例

目录 说明举例 说明 简单来说&#xff0c;android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要&#xff0c;而是多个控件的属性值之比发挥作用&#xff0c;例如有2个控件&#xff0c;各自的android:layout_weight的值设为0.5和0.5&#xff0…...

低代码系统-产品架构案例介绍、简道云(七)

今天分析另外一个零代码、低代码产品-简道云&#xff0c;跟所有低代码产品的架构图一样&#xff0c;高、大、炫、美。 依然是从下至上&#xff0c;从左到右的顺序。 开发层 搭建中心 表单、流程、报表、用户中心&#xff0c;还是这些内容&#xff0c;自定义打印很多平台都有&am…...

RabbitMQ 分布式高可用

文章目录 前言一、持久化与内存管理1、持久化机制2、内存控制1、命令行2、配置文件 3、内存换页4、磁盘控制 二、集群1、Erlang的分布式特性2、RabbitMQ的节点类型2.1、磁盘节点 (Disk Node)2.2、内存节点 (RAM Node) 3、构建集群3.1 普通集群3.2 镜像队列3.3、高可用实现方案3…...

使用Pytest Fixtures来提升TestCase的可读性、高效性

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 在编写单元测试时&#xff0c;你是否发现自己有很多重复代码&#xff1f; 数据库设…...

qt QUrl详解

1、概述 QUrl是Qt框架中用于处理URL&#xff08;统一资源定位符&#xff09;的类&#xff0c;它提供了构建、解析、编码、解码和处理URL的功能。QUrl支持多种协议&#xff0c;如HTTP、HTTPS、FTP以及文件URL等&#xff0c;并能处理URL的各个组成部分&#xff0c;如协议、主机、…...

从0到1:C++ 开启游戏开发奇幻之旅(一)

目录 为什么选择 C 进行游戏开发 性能卓越 内存管理精细 跨平台兼容性强 搭建 C 游戏开发环境 集成开发环境&#xff08;IDE&#xff09; Visual Studio CLion 图形库 SDL&#xff08;Simple DirectMedia Layer&#xff09; SFML&#xff08;Simple and Fast Multim…...

IGBT的损耗计算的学习【2025/1/24】

可以通过示波器实测IGBT电压电流波形&#xff0c;然后通过示波器的math功能将电压电流波形乘积后积分求损耗。 软开管&#xff1a;给了导通信号&#xff0c;但是电流并没有从此IGBT流过 IGBT&#xff08;绝缘栅双极晶体管&#xff09;的损耗主要分为 导通损耗 和 开关损耗 两部…...

Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…...

Oracle迁移DM数据库

Oracle迁移DM数据库 本文记录使用达梦官方数据迁移工具DTS&#xff0c;将Oracle数据库的数据迁移至达梦数据库。 1 数据准备 2 DTS工具操作步骤 2.1 创建工程 打开DTS迁移工具&#xff0c;点击新建工程&#xff0c;填写好工程信息&#xff0c;如图&#xff1a; 2.2 新建迁…...

通过 NAudio 控制电脑操作系统音量

根据您的需求&#xff0c;以下是通过 NAudio 获取和控制电脑操作系统音量的方法&#xff1a; 一、获取和控制系统音量 &#xff08;一&#xff09;获取系统音量和静音状态 您可以使用 NAudio.CoreAudioApi.MMDeviceEnumerator 来获取系统默认音频设备的音量和静音状态&#…...