边界值分析:软件测试中如何精准捕获临界点Bug

1. 看清边界值分析的真面目

1.1 一个让我记忆犹新的线上事故

先讲一次真实的工作经历。某次版本上线后,运营反馈用户提交的资料总是“莫名丢失”。排查到最后,问题出在一个看起来人畜无害的字段校验上——一个文本输入框,需求文档写着“长度1到50”,开发按这个做了限制。结果用户从别处复制了一段恰好50个字符的文本,提交后整个表单竟然被后端拦下,返回一个让人摸不着头脑的“数据异常”。

为什么50个字符不行?因为后端的校验逻辑写的是length > 50,也就是50本身也属于“过长”,而前端文本框设置的是“最多50个字符”,允许输入50。前后端对“50”这个边界值理解不一致,一个当成合法,一个当成非法,用户就被卡在中间。

这件事让我彻底意识到,一个字段最常见的翻车点根本不在中间值,就在那几个临界点上。而专门和这些临界点打交道的测试方法,就是边界值分析(Boundary Value Analysis)。

1.2 边界值分析到底在干什么

边界值分析是一种黑盒测试用例设计方法,核心思路是:把输入或输出条件的边界值挑出来重点测试。所谓边界值,就是最小值、最大值,以及刚刚越过最小值和最大值的那些点。比如输入范围是1到100,那0、1、2、99、100、101就是典型的边界值。

为什么是这些值?因为在真实开发中,大量缺陷都集中在边界附近。贪吃蛇游戏的蛇头刚好走到棋盘边缘时最容易撞墙,程序里的Bug也差不多——数据在临界点最容易出现判断失误、越界、溢出、空指针等问题。你可以把边界值分析理解成一种“精准打击”:不用把所有可能的输入都测一遍,只需盯住最容易出问题的几条“交界线”,用最少的用例覆盖最高的风险密度。

这个方法背后的逻辑并不复杂。程序里最常见的逻辑判断无非是大小比较、范围判断、计数循环、长度截取,而这些逻辑天然依赖“边界”来区分行为。一旦判断条件写错一个符号,把<写成<=,把>写成>=,或者循环少了一次多了一次,出问题的位置几乎都在边界上。中间值大多是安全的,因为离边界足够远,即使判断条件有些偏差也不太会影响到它们。

1.3 适合谁学、能解决什么问题

如果你是一个软件测试工程师,边界值分析是你测试用例设计的基本功,面试考、工作用、写自动化测试也能用上。如果你是开发工程师,理解边界值分析能帮你写出更健壮的代码,至少在自测时知道该测哪些数。如果你是测试负责人,掌握了它就能在需求评审时一针见血地指出那些被遗漏的临界场景。

边界值分析能解决的问题很具体:表单校验老是被绕过、接口偶尔报出奇怪的参数错误、数据处理在满和空之间切换时出Bug、时间日期在月末年关时计算错误、数组和集合在临界长度时溢出。这些问题单靠功能测试很难稳定复现,但用边界值分析设计的用例,基本一测一个准。

2. 边界值分析的底牌:为什么Bug都爱挤在临界点上

2.1 “差一位就对了”的经典偏差

要理解边界值分析为什么有效,得先搞清楚程序员写代码时的常见失误模式。最典型的叫作“差一位错误”,也就是Off-by-One错误。某系统里要判断“年龄在18到65岁之间”,开发写成了if (age > 18 && age < 65),那18岁和65岁的人就被错误地排除了。这种错误在写<=还是<的时候特别容易出现,而它只会在边界值上暴露出来。如果你测试用例只挑了25岁、38岁这种中间值,永远发现不了问题。

还有一种常见情况是“开闭区间理解不一致”。需求文档里写“最多输入20个字符”,到底是“不能超过20”还是“不能等于20”?前端按照“等于20也允许”实现,后端按照“等于20也拒绝”实现,就会造成两边行为不一致。这类问题同样只会在边界值上现形。

循环语句是差一位错误的重灾区。遍历一个长度为n的数组,下标应该从0到n-1,但如果循环条件写成了i <= n,最后一次循环就越界了。很多集合越界异常、空指针错误,本质上都是循环边界差了一位。而这类错误,你用中间下标怎么测都测不出来,非得到最后一个元素和越界的第一个位置才行。

2.2 数学视角下的边界值逻辑

从数学上看,边界值分析有一个朴素的假设:程序的输入空间可以被划分为若干个区域,每个区域内的行为是一致的,而区域交界处的行为最容易发生突变。

拿一个校验“月份1到12”的输入来说,1到12的内部,不管输入3还是7,程序的逻辑几乎一模一样;但在0到1的过渡处、12到13的过渡处,程序要做出“非法/合法”的切换,这个切换逻辑一旦写错,边界值就是唯一的暴露点。

由此延伸,边界值分析有两种常用取法。一种叫“两点法”,只取边界本身和刚越过边界的值,适合对边界行为非常明确的场景;另一种叫“三点法”,取边界左侧、边界本身、边界右侧三个值,适合边界本身行为不确定、需要同时观察两侧行为的场景。实际工作中我更多用三点法,因为“边界本身到底算合法还是非法”经常是需求的模糊地带,三个值一组,开闭区间的问题就能直接被测出来。

2.3 注意:边界不只是“输入框里的数字”

大多数人对边界值分析的理解停留在“数值输入框的范围测试”,这其实低估了它。边界值的概念完全可以延伸到更多维度。

字符串长度是一种边界:空字符串、1个字符、最大长度减一、最大长度、最大长度加一,这些都是边界点。数组和集合的边界:空集合、只有1个元素、最后一个索引元素、越界的下一个索引。循环的边界:第0次、第1次、倒数第1次、最后一次、再加1次。时间日期的边界:23:59:59与00:00:00的切换、月末最后一天与下月第一天的切换、闰年的2月28日与29日、非闰年的2月28日与3月1日。状态的边界:队列从空变为非空、从满变为不满、从有库存变为无库存、从待支付变为已支付。

这些都是边界值分析的用武之地。我的经验是,只要一个对象存在“数量、大小、时间、序号、容量、状态”任何一个维度,就必然存在边界,就值得为它单独设计用例。

3. 边界值分析的操作方法:从需求到用例的完整拆解

3.1 五个经典用例是怎么来的

标准边界值分析对一个取值范围为[min, max]的输入条件,通常设计以下5个用例:

用例编号输入值设计意图
1min验证下边界本身是否按预期处理
2min+1验证越过下边界后的第一个合法值
3正常值验证中间区域的常规行为
4max-1验证接近上边界的合法值
5max验证上边界本身是否按预期处理

但这里有一个细节常被忽略:上面的5个用例其实只覆盖了“合法范围内”的边界。如果还要验证系统对非法值的容错能力,就需要在两边各加一个越界值,即min-1和max+1。这就是“健壮性边界值测试”,一共7个用例。

举个例子。某接口接收年龄参数,需求规定取值范围是1到120。标准边界值分析的用例就是1、2、60、119、120,健壮性测试再加0和121。这7个用例基本能把“年龄判断”这条逻辑的风险吃透。有人会问,为什么不测3岁、45岁?不是不能测,而是从投入产出比看,中间值的风险远低于边界值,用少量中间值确认主流程通畅即可,重点火力应该集中在边界上。

3.2 多变量的最坏情况分析

单变量的边界值分析很简单,麻烦的是多个输入条件同时存在。假设一个接口有三个参数,每个参数都是[1,100]的范围,那标准边界值分析为每个参数产生5个用例,三个参数就可能有5的三次方即125种组合。全测下来用例量不小,而且很多组合的实际价值很低。

这时候通常有两种策略。一种是“单变量遍历、多变量正常值”的策略,就是一次只让一个变量取边界值,其他变量都取正常值。这样用例数量从指数级降为线性级,适合大多数常规接口测试。另一种是“最坏情况测试”,把所有变量的边界值做笛卡尔积组合,适合对安全性要求极高的系统,比如金额计算、权限判断、核销逻辑等。这两种策略的取舍本质上是在“覆盖率”和“用例成本”之间找平衡。我的习惯是:常规功能用单变量遍历,核心资产用最坏情况分析。

此外还有一个实用技巧:当变量之间存在约束关系时,边界值要放到一起看。比如“折扣比例在0到0.9之间”和“订单金额必须大于0”,组合起来可能产生“折后金额低于0”的边界。这类跨变量的边界,单测一个参数测不出来,必须结合业务规则一起设计用例。

3.3 一套可复用的执行流程

我日常工作里,边界值分析很少单独使用,它通常是测试用例设计流程中的一环。完整的操作流程大致是这样的:

第一步,从需求文档和接口定义中列出所有输入条件,包括显式参数和隐式参数。显式参数比如用户名、密码、年龄、金额;隐式参数比如请求时间、并发数量、数据长度、文件大小。

第二步,对每个条件确定取值范围和开闭区间。这里最容易踩坑,因为需求文档很少会把“开区间还是闭区间”写清楚,需要和产品、开发确认,或者查看代码实现。

第三步,提取边界值。记住一个规则:每个边界点要取三个值,边界本身、边界左邻值、边界右邻值。如果不确定左邻还是右邻是合法值,就都测。

第四步,设计用例并写入测试管理系统,标注“边界值”标签,方便后续回归时快速调用。

第五步,把边界值用例固化为自动化测试的数据源。这是效率提升最明显的一步,之后每次版本迭代,边界值用例自动跟着回归,不会出现“上周改了个判断条件,这周边界就坏了”的尴尬。

4. 实操示范:用边界值分析抓出三类经典Bug

4.1 案例一:登录密码长度校验的攻防

先看一个最常见的场景。某系统的注册功能,需求要求“密码长度为8到20个字符”。从需求评审阶段我就开始列边界值:空值、7个字符、8个字符、9个字符、19个字符、20个字符、21个字符、全空格、包含中文、包含emoji。

测试执行时果然发现问题。前端的maxlength属性设置为20,但用户从外部粘贴一段21个字符的密码时,某些浏览器的粘贴行为不受maxlength限制,会把21个字符全部传入接口。后端校验只判断了“长度小于8拒绝”,却忘了“大于20拒绝”,导致21位密码被当作合法数据存入数据库。这个Bug用正常输入根本测不出来,因为正常人手输到20位就会停止,只有用边界值刻意构造21位输入才能暴露。

如果你觉得这个问题只在长度上,那就想简单了。类似校验在中文和emoji场景下还有更隐蔽的变种:有些后端用字节长度计算,一个中文按3字节算,一个emoji按4字节算,于是“20个字符”的规则会因为编码差异变成“最多6个中文”。处理方式是明确规则是按字符数还是字节数,然后分别取边界值测试。我的经验是,这种规则含糊必须在测试用例里用边界值“逼”出来,否则上线后人家的emoji昵称就会让你见识什么叫数据截断。

4.2 案例二:日期函数里的“世纪大坑”

日期计算是边界值分析的高频应用场景,因为日历本身就是一套复杂的边界系统。某系统里需要校验“用户输入的日期是否为合法日期”,需求描述就一句话,“输入YYYY-MM-DD格式的日期”。

按照边界值思路,我准备了这些用例:非闰年的2月28日和2月29日、闰年的2月28日和2月29日、2月30日、4月30日和4月31日、12月31日和1月1日、0月和13月、1月0日。第一轮测试就抓到一个经典Bug:系统判断日期合法性时,对“日”的校验只查了一张写死的月份天数表[31,28,31,30,31,30,31,31,30,31,30,31],完全没有闰年逻辑。于是2019年2月29日被当成合法日期保存,2020年2月29日反而被拒绝——因为2月只有28天的那张表里有29日吗?没有。年份判断逻辑倒是有闰年函数,但根本没用在这个校验上。这类Bug只有在2月29日这个临界点上才会暴露。

日期边界还有一个经典场景是“月末加一天”。某订单系统实现“自动延后一个月”的功能,开发图省事直接写了day + 1然后拼接为新日期,结果1月31日延后一个月得到了“2月32日”。边界值用例每月月底、每季度末、每年年末各给一组,这个问题立刻显形。时间边界测试建议放在回归测试的必测集里,因为日期逻辑往往改动频率不高,一改就出问题,而且一出就是生产事故级别的。

4.3 案例三:缓冲区和并发状态的临界阻塞

边界值的“状态”维度最容易被忽略,但一旦触发,排查难度极高。某次我参与测试一个内部消息队列组件,容量设置为100,达到容量时生产者需要阻塞等待消费者消费后再继续发送。

测试用例设计时,状态边界比数值边界更关键:队列为空时发送第1条(0到1的转变)、队列99条时发送第100条(99到100的转变,队列变满)、队列100条时发送第101条(触发阻塞或拒绝)、消费者消费1条后队列从100变为99时生产者立刻发送(满到不满的转变)、消费者消费最后1条后队列从1变为0时生产者继续发送(非空到空的转变)。

并发测试执行时,这个组件的问题暴露得很典型:生产者的阻塞唤醒条件用的是if (!isEmpty)而不是while (!isEmpty),多个生产者同时被唤醒时,只有一个能成功入队,其余的直接越过临界区并发写入,队列里出现了超过100条的数据。这种Bug在低并发下完全正常,只有在“队列恰好满了”和“消费者刚好消费了一条”的边界时刻高并发触发才会出问题。如果你只测功能不测并发边界,这类“幽灵线”的Bug通常要等到线上流量高峰才现身。

5. 边界值分析的边界:它解决不了什么

5.1 无法覆盖复杂逻辑组合

边界值分析擅长处理“单条件取值范围”的问题,但一旦遇到多个条件之间的逻辑组合,它的优势就减弱了。比如一个规则是“当用户等级大于5且订单金额大于1000时,享受优惠;当用户等级小于等于5但订单金额大于5000时,也享受优惠”。这种组合逻辑里的条件各自有边界值,但“边界值和边界值之间的组合关系”光靠边界值分析远远不够,得配合判定表法或因果图法,把每个条件的真/假组合穷举出来。

打个比方,边界值分析像是检查每一扇门窗的锁是否合格,但房屋的整体安全还要看门窗之间的配合。某系统里库存充足、用户已支付、商品未下架三个条件互相联动,任何一个边界判断失误都可能引起资金差错,这时我把三个条件的边界值分别找出来,再用判定表把组合全部列出来。这两个方法配合使用,才能既抓单点边界问题,又抓组合逻辑问题。

5.2 处理不了状态的完整流转

系统里边界值分析另一个明显的短板,是难以覆盖“状态机”场景。订单从“待支付”到“已支付”到“已发货”再到“已完成”的状态流转,触发每个状态的转换条件可能有边界问题,但状态机本身的核心风险在于“非法流转”和“状态一致性”,这些都是状态迁移法的主场。

那边界值分析在状态场景下还有用吗?有用,但要换一种用法——把每个状态转换的“触发条件”先做边界值提取,比如“金额大于0才能支付”“库存大于0才能下单”“取消订单时订单必须处于待支付状态”。条件满足与否的边界点还是可以用;但状态之间能不能转、转了之后数据是否一致,就要靠状态迁移图和状态测试用例来补位了。

5.3 正确看待边界值分析的价值边界

边界值分析本质上是一种“高性价比”的测试设计方法,它的价值是帮你在有限资源内快速锁定高风险区域。但是有三个天然限制需要清醒认识。

第一,它假设系统行为在边界处可能出错,但不保证边界之外的逻辑没有问题。比如一个排序算法,输入数组长度正好是100的时候行为正常,但数组内部的数据分布极端(全部相同、逆序、只有一个元素)时的逻辑错误,边界值分析覆盖不到。

第二,它对布尔值、枚举类型、字符串内容等非连续取值的场景帮助有限。“性别”只有两个取值,“是否同意协议”只有真和假,这些没有传统意义上的“边界值”。

第三,边界值分析不能替代探索性测试。很多真实的线上问题来源于多系统交互、数据脏乱、网络抖动、权限组合等复杂因素,这些是边界值分析力所不及的地方。我的建议是,边界值分析作为测试设计的标配动作,但绝不是唯一动作,必须和其他测试方法、自动化回归、线上监控一起形成组合拳。

6. 常见问题与排查技巧实录

6.1 问题速查表

我把日常实践中遇到的典型问题整理成了下面这张表,基本覆盖了边界值测试的主要障碍:

问题类型具体表现解决办法
边界定义模糊需求文档写“1到50”,没说是否包含1和50需求评审时逐条追问,明确开闭区间
前后端边界不一致前端允许输入50,后端把50也拒绝用边界值同时测前端和后端,抓接口层差异
边界值常被中间值替代测试用例只写“输入正常值”测试设计中强制要求提取min/max/max+1
多参数组合爆炸5个参数各取5个边界值,用例过多用单变量遍历为主,核心场景再做最坏情况分析
非数值边界被忽略只测数字输入,不测字符串长度、数组长度、状态容量把边界值分析扩展到字符串、集合、日期、状态等维度
类型转换边界漏测大整数输入导致溢出或精度丢失对数值类型补充最大最小值、溢出值测试

6.2 实战排查心得

先说说需求文档本身的问题。有一次我拿到一个需求,里面写“昵称长度限制为2-20个字符”,但没有说明2和20是否包含在内。问产品,产品说“不大于20就行”,问开发,开发说“我按<20写的”,两边差一位。这类“边界值到底算不算数”的分歧,在需求文档里几乎天天出现。最好的办法是别靠猜,直接在用例里把“等于边界”和“越过边界”各设计一个用例,通过测试结果来确认行为,然后把这个结论写回需求文档。

再说说“实际行为边界”和“文档边界”不一致的排查思路。某接口文档说“limit最大值为100”,传给101却被正常处理,返回了数据。这时候先不要断言是Bug,要确认是“开发没限制”还是“产品故意放开”。我用过一个笨但有效的方法:从1开始逐步加大limit值,观察系统在每个值上的实际行为,找到真实的“行为分界点”,再决定测试预期。这个方法在排查线上复杂系统时特别管用,因为实际边界往往和文档差一点,但谁也不知道差在哪,只能一点点探测。

最后聊聊自动化回归里的边界值维护。我的建议是把边界值测试的数据集中到一份配置或数据表里,自动化用例从数据源读取参数,这样边界调整时不用改代码,只要改数据。某个项目里,我把历史踩过的所有边界值(密码7/8/21、日期2月29、金额0.01/最大额度)都沉淀成一列回归数据,每次跑自动化测试时自动执行一遍。有一次开发重构了校验逻辑,断言把>=改成了>,边界回归数据立刻报了红,整个过程没有浪费一点人力。这种“用数据驱动边界测试”的做法,成熟之后非常值得推广。

7. 写在最后的一点私人经验

做了这么多年测试,我养成了一个习惯:拿到任何功能需求,第一件事不是看主流程怎么走,而是先画一张“边界地图”。这个输入字段的范围是多少?边界值有没有歧义?越界之后系统是报错、截断、取默认值还是抛出异常?状态切换的临界点在哪里?这张地图画完,心里就有底了,主流程测试反而可以往后放放。

边界值分析真正让人着迷的地方,在于它用很少的用例,集中攻击了软件里最脆弱的地带。那些“差一位就对了”的逻辑错误、前后端规则不一致、日期计算偏差、并发状态混乱,几乎都能在临界点上被捕获。它不是万能的,却是性价比最高的测试手法之一。

最后分享一个实操中的小诀窍。如果你不确定某条边界该怎么测,就把边界值两边的三个值都测一遍,然后再加一个“极限值”测试。所谓极限值,不是边界附近的值,而是系统能接受的真正极限,比如int类型的最大值、字符串的理论最大长度、数据库表能容纳的记录数。很多系统在常规边界值测试下安然无恙,一到极限值就原形毕露。把常规边界值和极限值搭配起来,这套测试方案的杀伤力才会真正拉满。

相关新闻

Mac下JMeter入门:从Java环境到性能压测全流程

Mac下JMeter入门:从Java环境到性能压测全流程

"Mac下Jmeter的入门级操作"——说实话&#xff0c;第一次在Mac上打开JMeter的人&#xff0c;十个有九个会卡在安装或Java版本上&#xff0c;剩下那一个卡在界面看不懂。作为一个踩过不少坑的测试老兵&#xff0c;我来把从零开始到跑通第一个压测脚本的全过程捋一遍&a…

2026/10/20 16:44:46 阅读更多 →
5分钟粒度时间序列预测:ARIMA全流程实战与坑点解析

5分钟粒度时间序列预测:ARIMA全流程实战与坑点解析

数据准备&#xff1a;5分钟数据的“脏活累活” 2.1 采集与落库&#xff0c;先解决有没有的问题 2.2 缺失值处理&#xff0c;别让“空洞”骗了模型 2.3 异常值甄别&#xff0c;业务噪声与真实波动的边界 2.4 重采样与对齐&#xff0c;把时间轴捋直了 数据是一切时序建模的地…

2026/10/20 16:43:46 阅读更多 →
降AIGC软件横评:9类工具原理、避坑与实操流程

降AIGC软件横评:9类工具原理、避坑与实操流程

最近这段时间&#xff0c;被问得最多的问题就是“到底有没有靠谱的降AIGC软件”。经常是头像一换&#xff0c;那边甩过一张截图&#xff0c;问“这种标红要怎么办”。尤其专科生群体&#xff0c;课程报告、实训总结、毕业设计说明一摊开&#xff0c;全是AI生成常见句式&#xf…

2026/10/20 16:43:46 阅读更多 →

最新新闻

Ubuntu下PostgreSQL安装配置与Navicat连接指南

Ubuntu下PostgreSQL安装配置与Navicat连接指南

做后端开发或者数据相关工作的朋友&#xff0c;应该都经历过这么一幕&#xff1a;好不容易在 Ubuntu 上把 PostgreSQL 装好了&#xff0c;却发现命令行操作没问题&#xff0c;客户端工具却怎么都连不上&#xff1b;或者反过来&#xff0c;Navicat 装好了&#xff0c;连接时报一…

2026/10/20 17:33:06 阅读更多 →
uniCloud Serverless 实战:英语学习小程序全链路开发

uniCloud Serverless 实战:英语学习小程序全链路开发

简介&#xff1a;这是一套面向英语学习者与小程序开发者的完整项目源码&#xff0c;基于uniapp与uniCloud Serverless架构构建&#xff0c;可直接在微信环境中运行。项目集生词本记录、拍照识别单词、内置词典查询、AI语音翻译、跟读打分评测于一体&#xff0c;并针对考研人群补…

2026/10/20 17:33:06 阅读更多 →
WiFi指纹室内定位实战:从原理到Demo搭建

WiFi指纹室内定位实战:从原理到Demo搭建

1. 室内定位的现实困境与WiFi方案的破局点实话实说&#xff0c;第一次接手“基于WiFi的室内定位”这个方向时&#xff0c;我心里是打鼓的。日常大家用GPS导航已经习惯了&#xff0c;掏出手机就能知道自己在哪&#xff0c;但一旦走进大型商场、地下车库、机场航站楼&#xff0c;…

2026/10/20 17:33:06 阅读更多 →
大模型后端长对话记忆架构全解析:从无状态到有状态

大模型后端长对话记忆架构全解析:从无状态到有状态

做后端的人都有过这种体验&#xff1a;用户和AI助手聊了三十轮&#xff0c;前二十轮里明明已经把需求背景、偏好、禁忌都交代清楚了&#xff0c;结果聊到第三十一轮&#xff0c;AI突然反问一句“您刚刚提到的那个项目背景&#xff0c;方便再描述一下吗&#xff1f;”当场血压就…

2026/10/20 17:33:06 阅读更多 →
D435相机+OpenCV快速上手:彩色图与深度图实时显示全攻略

D435相机+OpenCV快速上手:彩色图与深度图实时显示全攻略

最近不少做视觉入门的朋友卡在第一关——把D435相机的画面真正“看”到屏幕上。很多人买了一台Intel D435深度相机&#xff0c;兴冲冲插上USB线&#xff0c;结果CPU占用飙高、程序报错、画面黑屏&#xff0c;折腾一晚上就劝退了。其实用D435搭配OpenCV显示彩色图和深度图&#…

2026/10/20 17:33:06 阅读更多 →
自考论文降AI率实战:智能体改写与人工复核全流程

自考论文降AI率实战:智能体改写与人工复核全流程

自考论文写到提交前&#xff0c;最让人血压升高的往往不是查重率&#xff0c;而是学校突然要求提交一份AI检测报告。A同学就是这种状况&#xff1a;论文初稿在查重系统里已经降到合格线&#xff0c;结果学院的通知里多了一句“AI疑似率不得超过20%”。他拿自己的稿子去测了一下…

2026/10/20 17:32:04 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →