论文部分内容阅读
[摘 要]借助代码规则检查问题单来逐一排查动态验证,通过逻辑覆盖测试来设计用例到达每一条,以验证故障的方法。在编码规则检查时,存在规则问题,在用例设计后,进行动态验证。缓存队列在加入指令时,未考虑队列满时需要释放队列,导致,在间接指令队列满后,继续插入指令时,因隊列未释放导致软件复位。
[关键词]嵌入式软件 测试工具 TESTBED 缓存队列 未释放 编码规则 ada语言
中图分类号:TS339 文献标识码:A 文章编号:1009-914X(2018)32-0112-02
1 引言
编码规则是程序编码所要遵循的规则,首先就要注意代码的正确性、稳定性和可读性。遵照代码规则也是一种良好的编码习惯。作为测试人员可以依据代码规则检查工具来检测代码是否遵循规则来编写,还可以借助代码规则检查问题单来逐一排查动态测试问题。
2 编码规则检查
某嵌入式大型软件,具有实行多任务、实时控制特点。
软件通过接收遥控指令进行数据解析,若遥控包数据内容为间接指令,将间接指令插入间接指令队列,然后再通过周期调用发送间接指令函数依次将队列中间接指令按照时间顺序发送至遥控终端。
在规则检查时,利用TESTBED工具进行编译,选取最重要强制项代码形成LDRA Testbed Code Review Report。如表1所示。
其中在函数JinsertQueue里发现了一个规则错误:
Violation Number : 7 - Procedure has more than one exit point(一个函数最好只包含一个return语句,且位于函数的最后。)
Location : INDIRCMDQUE.JINSERTQUEUE
在代码审查时,根据TESTBED提示的规则错误进行排查,发现当间接队列满时,程序直接RETUEN返回,并没有释放队列“Queue_Mux.Release;”。
3 动态验证方法
根据指令数据的格式表2,指令数据分为2种,一种是立即指令,时间码全填充为0x00,另一种是延迟指令,时间码填充为需要发送指令的时间。
嵌入式软件先读取指令数据包缓存区指令进行处理,如果是立即指令的就直接串口发送,如果是延迟指令的存入指令队列缓存区。在另一任务中,实时读取指令队列缓存区,如果基准时间等于指令时间,则立即进行串口发送,如果基准时间小于指令时间,则不作处理。
根据队列的结构特点和发送队列指令的时序考虑,如果需要动态验证以上错误分支,必须通过逻辑覆盖遍历。判定覆盖或分支覆盖时较强的逻辑覆盖准则。该准侧要求必须编写出足够的测试用例,使得每一个判断都至少有一个为真或为假的输出结果。换句话说,也就是每条分支路径都必须至少遍历一次。
图1中有N1、N2、N3、N4四个节点,如果都要遍历到,其路径如下:
所以要测试所有分支,必须满足五种情况:
1、队列满时
2、当前队列中未有指令
3、当插入指令为最后一条指令
4、当插入指令指令不为最后一条指令,需要将指令队列中指令向后挪一个空间
5、当插入指令指令不为最后一条指令,不需要将指令队列中指令向后挪一个空间
如果要走入错误分支,则必须遍历ab分支。对指令队列进行测试,在时间码处填上时间,嵌入式软件在运行时,会根据基准时间进行判断,晚于基准时间的指令会存入指令队列,当基准时间与发送指令时间一致时,会从队列中读取指令并发送。持续不断向嵌入式软件发送延迟指令,使指令发送时间晚于当前时间,持续发送511条,将缓存区填满,遥测下传的间接指令队列深度为1FF。然后,再发送一条间接延迟指令给嵌入式软件,预期结果是,间接指令队列深度不变,队列内容不变,此间接延迟指令丢弃。
实际结果时,软件复位,间接指令队列深度清零。
4 故障排查分析
当进入模块是指令的队列进行锁定操作,然后根据当前指令的插入时间进行顺序插入队列,最后进行队列释放操作。当队列未满时,流程未出现错误。当队列满时,流程直接退出模块,导致指令队列锁定后未释放。当再次发送指令给嵌入式软件,就会发生因队列未释放导致缓存区错误引起软件复位问题。
5 故障纠正措施
基于编码规则,锁定和释放操作是要成对出现。现在只要将队列锁定和队列释放操作在整个判断队列满的条件之外,确保不论队列满还是队列不满时,锁定和释放操作时成对出现的。将队列满的条件加在整个插入队列。
6 总结
阅读代码对于构成完善的软件测试和调试手段的价值是非常大的,人工测试技术结合代码规则检查,在查找错误方面非常有效。同样在测试用例设计时,通过不同的测试要素组合起来得到一种合理的测试策略也是非常关键的。
参考文献
[1] 姜静波,Ada程序设计语言高级编程,解放军出版社,1999.
[2] Tucker S.Taft,综合ADA参考手册,Oversea Publishing House,2002.
[3] GlenFord J.Myers,软件测试的艺术,机械工业出版社,2007.
作者简介
严漪敏,上海航天电子技术研究所,工程师。
曹斌,上海航天控制技术研究所,高级工程师。
陈琦,上海航天电子技术研究所,工程师。
[关键词]嵌入式软件 测试工具 TESTBED 缓存队列 未释放 编码规则 ada语言
中图分类号:TS339 文献标识码:A 文章编号:1009-914X(2018)32-0112-02
1 引言
编码规则是程序编码所要遵循的规则,首先就要注意代码的正确性、稳定性和可读性。遵照代码规则也是一种良好的编码习惯。作为测试人员可以依据代码规则检查工具来检测代码是否遵循规则来编写,还可以借助代码规则检查问题单来逐一排查动态测试问题。
2 编码规则检查
某嵌入式大型软件,具有实行多任务、实时控制特点。
软件通过接收遥控指令进行数据解析,若遥控包数据内容为间接指令,将间接指令插入间接指令队列,然后再通过周期调用发送间接指令函数依次将队列中间接指令按照时间顺序发送至遥控终端。
在规则检查时,利用TESTBED工具进行编译,选取最重要强制项代码形成LDRA Testbed Code Review Report。如表1所示。
其中在函数JinsertQueue里发现了一个规则错误:
Violation Number : 7 - Procedure has more than one exit point(一个函数最好只包含一个return语句,且位于函数的最后。)
Location : INDIRCMDQUE.JINSERTQUEUE
在代码审查时,根据TESTBED提示的规则错误进行排查,发现当间接队列满时,程序直接RETUEN返回,并没有释放队列“Queue_Mux.Release;”。
3 动态验证方法
根据指令数据的格式表2,指令数据分为2种,一种是立即指令,时间码全填充为0x00,另一种是延迟指令,时间码填充为需要发送指令的时间。
嵌入式软件先读取指令数据包缓存区指令进行处理,如果是立即指令的就直接串口发送,如果是延迟指令的存入指令队列缓存区。在另一任务中,实时读取指令队列缓存区,如果基准时间等于指令时间,则立即进行串口发送,如果基准时间小于指令时间,则不作处理。
根据队列的结构特点和发送队列指令的时序考虑,如果需要动态验证以上错误分支,必须通过逻辑覆盖遍历。判定覆盖或分支覆盖时较强的逻辑覆盖准则。该准侧要求必须编写出足够的测试用例,使得每一个判断都至少有一个为真或为假的输出结果。换句话说,也就是每条分支路径都必须至少遍历一次。
图1中有N1、N2、N3、N4四个节点,如果都要遍历到,其路径如下:
所以要测试所有分支,必须满足五种情况:
1、队列满时
2、当前队列中未有指令
3、当插入指令为最后一条指令
4、当插入指令指令不为最后一条指令,需要将指令队列中指令向后挪一个空间
5、当插入指令指令不为最后一条指令,不需要将指令队列中指令向后挪一个空间
如果要走入错误分支,则必须遍历ab分支。对指令队列进行测试,在时间码处填上时间,嵌入式软件在运行时,会根据基准时间进行判断,晚于基准时间的指令会存入指令队列,当基准时间与发送指令时间一致时,会从队列中读取指令并发送。持续不断向嵌入式软件发送延迟指令,使指令发送时间晚于当前时间,持续发送511条,将缓存区填满,遥测下传的间接指令队列深度为1FF。然后,再发送一条间接延迟指令给嵌入式软件,预期结果是,间接指令队列深度不变,队列内容不变,此间接延迟指令丢弃。
实际结果时,软件复位,间接指令队列深度清零。
4 故障排查分析
当进入模块是指令的队列进行锁定操作,然后根据当前指令的插入时间进行顺序插入队列,最后进行队列释放操作。当队列未满时,流程未出现错误。当队列满时,流程直接退出模块,导致指令队列锁定后未释放。当再次发送指令给嵌入式软件,就会发生因队列未释放导致缓存区错误引起软件复位问题。
5 故障纠正措施
基于编码规则,锁定和释放操作是要成对出现。现在只要将队列锁定和队列释放操作在整个判断队列满的条件之外,确保不论队列满还是队列不满时,锁定和释放操作时成对出现的。将队列满的条件加在整个插入队列。
6 总结
阅读代码对于构成完善的软件测试和调试手段的价值是非常大的,人工测试技术结合代码规则检查,在查找错误方面非常有效。同样在测试用例设计时,通过不同的测试要素组合起来得到一种合理的测试策略也是非常关键的。
参考文献
[1] 姜静波,Ada程序设计语言高级编程,解放军出版社,1999.
[2] Tucker S.Taft,综合ADA参考手册,Oversea Publishing House,2002.
[3] GlenFord J.Myers,软件测试的艺术,机械工业出版社,2007.
作者简介
严漪敏,上海航天电子技术研究所,工程师。
曹斌,上海航天控制技术研究所,高级工程师。
陈琦,上海航天电子技术研究所,工程师。