边界值测试需覆盖最小值、略高于最小值、正常值、略低于最大值、最大值、最小值−1、最大值+1等临界点,确保系统正确处理上下限及越界情况。

边界值测试要覆盖哪些条件判断点
边界值测试不是笼统地“测整个函数”,而是针对每个有明确取值范围的输入变量,逐个验证其临界行为。比如 a 的合法范围是 1 ,那就要分别测试 <code>a == 1、a == 100、a == 0、a == 101 这四个值——它们会触发不同的分支逻辑,尤其是 if 中的比较运算符是否写反、是否漏掉等号。
常见条件判断错误导致的边界失效
实际代码里,边界判断出错往往不是因为逻辑复杂,而是几个低级但致命的习惯:
-
if (a 100)是对的;写成if (a = 100)就会让a == 1和a == 100被误判为非法 - 多个变量联合约束时(如三角形的
a ),只测单个变量边界不够,必须组合:比如 <code>a == 100, b == 1, c == 1会直接触发a >= b + c分支 - 用
unsigned int声明变量却做减法判断(如if (x - 1 ),此时 <code>x == 0会导致无符号回绕,条件永远为假
如何用 Cppcheck 快速暴露边界判断漏洞
Cppcheck 的 containerOutOfBounds 检查器能抓到数组下标越界,但它对普通条件判断无能为力。真正管用的是它的 knownConditionTrueFalse 检查项——它会静态分析 if 条件在已知变量范围下是否恒真或恒假。
例如这段代码:
int a = 5;
if (a > 10) {
// 这个分支永远不执行,Cppcheck 会警告
}
要启用它,加参数:cppcheck --enable=warning,style,information --inconclusive your_file.cpp。注意 --inconclusive 才能触发这类推断型检查。
手动构造边界测试用例的关键动作
别依赖“差不多覆盖了”,边界测试必须显式枚举并验证每种组合的结果。以三角形问题为例,验证 a 这一条件时,应固定两个变量取极值,第三个变量扫过临界点:
-
a == 1, b == 1, c == 1→ 应通过(1 -
a == 100, b == 50, c == 49→ 应失败(100 >= 50+49) -
a == 100, b == 50, c == 51→ 应通过(100 - 再补一个负数场景:
a == -1→ 应被前置范围检查拦住,不能进入三角形判定逻辑
真正容易被忽略的,是“前置校验”和“主逻辑”之间的衔接:前一个 if 拦住了非法输入,后面的分支就永远收不到它;但一旦前置条件写错,非法输入就会漏过去,直接冲击后续更脆弱的计算逻辑。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











