同一套嵌入式软件经常要交付多个产品版本。拿温度检测来说,基础版和扩展版都要测正常读数、上下限和传感器异常,扩展版还多了一组告警逻辑。如果每个版本都单独维护一套用例,后来在基础版补了一条边界测试,其他版本很容易漏掉。TESSY的派生模块可以继承公共用例,同时保留各版本自己的测试数据。创建时要选对父模块,后续同步时则要分清哪些数据继续继承,哪些已经在派生模块里改过。
一、TESSY派生模块怎么创建
TESSY的菜单把派生模块称为变体模块。已有测试模块可以作为父模块,存放多个产品版本共用的测试对象和用例。以下菜单名称以TESSY 4.2为例。
1、在目标文件夹中选择父模块
创建命令从准备存放派生模块的文件夹进入。比如基础模块放在公共测试目录里,扩展版的模块就可以单独放在扩展版目录下。
①打开【Overview】中的【Test Project】视图,找到已有测试对象和公共用例的模块,确认它就是本次要选的父模块。
②在项目树中选中准备存放派生模块的【目标文件夹】。如果目录还没建好,先用【New Folder】建立,再右键单击该文件夹,选择【New Variant Modules...】。
③在弹出的选择窗口中勾选要作为父模块的【基础模块】,点击【OK】。回到【Test Project】展开目标文件夹,确认新模块带有变体模块标记。
2、检查继承用例并补上版本专用测试
①展开【派生模块】下的测试对象,在【Test Items】中检查用例和测试步骤。带小三角标记的条目来自父模块。
②如果扩展版只在某个边界值上与基础版不同,在派生模块的【TDE】中修改对应输入或预期结果。修改后回到【Test Items】,确认该条目显示为继承数据已被覆盖。
③如果扩展版新增了告警逻辑,在派生模块的【Test Items】中添加专用用例,并在【TDE】中填写输入和预期结果。
公共测试集中放在父模块,派生模块里只保留各版本有差别的部分,后来查用例时会省事一些。看到某条测试的预期值与基础版不同,也能从条目标记判断它是否被单独改过。
二、TESSY派生模块如何同步基础模块变更
基础模块补了用例,或者改了派生模块所依赖的测试数据,TESSY可能会把派生模块标记为过期。这时可以执行模块同步。同步前先确认变更内容,因为新增用例和函数接口变化,后续要查的地方不一样。
1、从派生模块发起同步
①在【Test Project】中找到需要更新的派生模块。如果模块标记为【OUT OF DATE】,将鼠标移到模块上,查看是否提示需要与父模块同步。
②右键单击该模块,选择【Synchronize Module】。在同步窗口中核对父模块和列出的子模块,确认本次要处理的范围。涉及多个派生模块时,可以在同一个窗口中执行同步。
③同步结束后,展开相应的【测试对象】,到【Test Items】查看父模块新增的公共用例,再抽查一条原有用例的数据。
2、核对父子模块的接口对应关系
父模块只改了输入值时,原来的接口对应关系可能还能沿用。如果函数参数改了名字、类型或用途,就要看看旧数据还能不能放进派生模块的对应字段。
①同步过程中如果打开【IDA】界面,核对父模块和派生模块中的测试对象及接口项。遇到同名变量时,也检查类型、输入输出方向和实际用途。
②对无法自动对应的【接口项】手动确认映射。新旧字段含义不同的,按派生版本的测试需求重新填写测试数据。
③如果要重新检查之前保存的映射,右键单击派生模块并执行【Analyze Module】,再运行【Synchronize Module】,在重新出现的【IDA】界面中核对对应关系。
TESSY会保存已经建立的接口映射,后续同步时可以沿用。所以这次没有弹出映射界面,仍可以在测试数据编辑器里抽查受影响的字段。比如参数名称沿用、单位却由毫秒改成了秒,就要按新接口核对继承值和本地预期值。
三、TESSY派生模块同步后怎么检查用例
同步结束后,可以先挑三类用例来看。父模块刚加的用例用来确认变更有没有传下来,派生模块改过的用例用来核对版本差异,曾经在派生模块中删除的用例则要看这次是否应该恢复。
1、按条目标记检查本地改动
①在【Test Items】中查看继承条目。带小三角的条目可以与父模块对照,带实心三角的条目则到【TDE】中检查被覆盖的输入和预期结果。
②找到标记为新增的【测试用例】,核对它是否仍符合派生版本的需求。以扩展版告警为例,要检查触发条件和预期输出是否仍与当前代码一致。
③如果某条继承用例曾在派生模块里删除,现在需要重新启用,右键单击该条目,选择【Restore Deleted】,再核对恢复后的测试数据。
这里的删除发生在派生模块中,对应条目会在该模块中淡化显示。比如扩展版原来屏蔽了一条公共告警测试,后来需求改了,就可以恢复这条继承用例,并按扩展版的要求核对预期值。
2、按派生版本重新执行受影响的测试
用例同步完成后,回归结果还要在派生模块自己的代码和配置下取得。尤其是改了接口的模块,输入值能显示出来,也要实际跑一次才能确认调用和结果是否符合预期。
①在【Test Project】中选中派生模块,核对本次测试使用的源文件和编译配置。选中受影响的测试对象或模块,执行【Execute Test】。
②在【TDE】中检查执行结果。若基础模块通过、派生模块失败,回查失败步骤的输入、预期结果和接口映射,再结合该版本的需求判断差异来自测试数据还是程序行为。
总结
派生模块用得顺手,前提是团队对公共用例和版本差异有一致的判断。碰到同一个问题在多个版本里都要防回归,可以把用例补在父模块。遇到只有某款产品才有的边界条件,就把预期留在对应的派生模块里。下次看见一条被覆盖的用例,不妨问一句当初为什么改它,这个理由往往比用例编号更能帮助判断它该不该继续保留。