测试一个超温判断函数,输入已经设为阈值以上,报警分支却没有执行。继续把数值调大,往往也找不到原因:函数可能尚未进入运行状态,也可能读取的是桩函数返回值,而非测试人员修改的变量。使用TESSY设计边界用例时,需要明确数值从哪里进入、经过哪些处理,以及什么结果能够证明判断正确。
一、TESSY怎么设计边界值测试用例
边界值应从需求中的范围和切换条件提取。只测试数据类型的最大值、最小值,容易漏掉真正影响业务判断的临界点。
1、把端点是否有效写清楚
①阅读对应需求,列出有效范围、端点包含关系,以及超出范围后的处理要求。
②对整数临界点选择边界值及相邻值,再补充一个普通有效值。
③分别写出预期返回值、输出变量或外部调用结果,说明用例要验证什么。
假设需求规定温度达到90时报警,89、90、91就是需要检查的一组值。若需求写的是“超过90”,90对应的预期结果便不同。预期值应依据需求填写,不能照着当前代码推算,否则比较符号写错时,用例也可能全部通过。
2、在TIE中确认数据入口
①打开【TIE】,找到被测函数的参数、全局变量和输出,核对传递方向。
②将用于驱动函数的数据设为【IN】,需要检查的输出设为【OUT】等适当方向;对于指针,继续检查其目标对象。
③若温度来自外部读取函数,设置相应测试桩,并准备它返回给被测函数的值。
变量名称相似并不代表作用相同。参数中的温度、全局缓存和传感器接口返回值可能同时存在,需要沿代码确认哪一个参与了判断。
3、在TDE中建立边界用例
①切换【TDE】,在【Test Items】建立用例和步骤,在【Test Data】中填写输入及预期结果。
②先把使能、模式和数据有效标志设置为允许执行目标判断的状态,再分别输入89、90、91。
③保存后执行测试,检查输出结果,并记录每条用例对应的需求和测试目的。
浮点数不能一律采用“边界加减1”的方式选值,应结合变量精度及量化规则确定邻近输入。数组长度、计数次数等边界,还要考虑缓冲区和调用顺序,不能仅改变一个数值。
二、TESSY边界输入未触发预期分支如何分析
先单独运行问题用例,保留它的输入、实际结果和覆盖记录。混在整组测试中反复执行,容易把其他用例产生的覆盖当成本条用例的结果。
1、查看函数在哪里改变了路径
①打开【Coverage Viewer】,找到目标判断,结合流程图和源码检查执行路径。
②沿路径向前查看,确认函数是否因模式错误、数据无效或其他检查而提前返回。
③对复合条件逐项检查,先满足其他条件,再改变需要验证的边界输入。
例如,判断要求“设备运行中且温度达到90”,输入91但设备状态为停止,就不会进入报警路径。如果表达式采用短路求值,前一项不成立,后一项甚至不会被计算。此时需要修正前置状态,而非继续提高温度。
2、检查录入值是否被覆盖
①回到【Test Data】,确认修改的是当前执行步骤,核对【TIE】中的变量方向及指针目标。
②查看【Usercode】和桩函数设置,检查初始化或调用前处理是否重新赋值。
③对外部函数的连续调用,核对每次返回的数据,确认目标判断使用的是哪一次结果。
假如初始化代码把温度重置为默认值,表格中填91也无法代表判断时的值。函数内部若重新调用传感器接口,则应检查桩返回值,而不是只盯着全局变量。定位时应顺着赋值过程检查,直到找到实际比较的操作数。
3、重新计算中间值
①检查变量的位宽、符号属性和类型转换,确认输入能够被目标类型表示。
②查看整数除法、缩放、限幅和单位转换,算出到达判断点时的值。
③对浮点输入检查舍入影响,确认边界两侧的数据在目标精度下仍可区分。
假设程序先把采样值除以10,再与90比较,原始输入900和901经过整数运算后都可能得到90。用这两个值测试“超过90”,自然不能跨过判断边界。应先确定需求约束的是原始值还是换算结果,再选择输入。
4、核对历史状态与执行配置
①检查函数是否要求连续多次超限,或存在进入、退出阈值不同的滞回逻辑。
②核对全局变量、静态变量及初始化安排,补齐目标路径需要的历史状态。
③确认代码变体、编译宏和测试运行记录,修改设置后重新构建、执行。
状态型函数的一次调用,未必足以触发输出。另一方面,旧测试结果、不同变体的阈值,也会造成“输入正确却走错分支”的错觉。查看覆盖时,应确认记录对应本次构建和具体测试步骤。
三、TESSY边界测试如何检查用例是否有效
分支终于执行后,还要确认用例能够发现边界判断错误。仅看到覆盖率增加,不能说明结果评价已经充分。
1、让端点用例具有区分能力
①在【Test Data】检查临界点及两侧输入的预期结果,确认端点包含关系得到了单独评价。
②核对返回值之外的可观察结果,例如报警标志、状态变化或对外调用参数。
③在【Coverage Viewer】查看对应路径;项目要求检查复合条件独立影响时,再核对MC/DC等适用结果。
若89、90、91三条用例都只检查一个始终不变的返回值,即使执行路径不同,也可能发现不了错误。应选择能反映需求行为的输出作为评价依据。
2、保留可重复的初始条件
独立边界用例应从明确状态开始;验证连续超限、去抖或滞回时,则需要有意保留状态并安排连续步骤。把初始化方式、桩返回序列和检查位置一起记录,后续回归才能重复同一个场景。正常输入确实无法到达的路径,应留下可达性分析;采用故障注入时,也要与普通边界测试的结论区分清楚。
总结
边界值填进TESSY后,还需要确认函数真正使用了这个值,以及其他条件是否允许执行目标判断。遇到分支未命中,可以从覆盖路径往前找,再检查初始化、桩返回值和中间换算,逐步还原判断发生时的状态。用例设计则应让端点及两侧结果具有区分能力,避免覆盖到了却检查不出错误。希望这些方法能帮助大家把边界输入与程序行为对应起来,让问题定位和回归测试更有依据。如果您有相关需求,也欢迎联系我们交流咨询。