Inter-Context Control-Flow and Data-Flow Test Adequacy Criteria for nesC Applications

Posted by 周东宜 on January 4, 2019

Recently by the same author:


智能合约安全

Inter-Context Control-Flow and Data-Flow Test Adequacy Criteria for nesC Applications

Introduction

​ 一般的支持并发的语言当中子程序的交互的可能性太多,很难进行测试覆盖的研究。而nesC程序中的调度机制对子程序的交互添加了约束,因此可以做测试充分性准则的研究。这篇文章对nesC程序进行了建模,定义了了一种inter-context Flow graph(ICFG),这种图在传统的控制流图的基础上定义了一个闲置节点(表示程序的休眠状态,即没有任何子程序在运行)和四种边,模拟了nesC程序中事件处理程序的抢占行为,事件处理程序运行结束之后的被抢占的子程序的被唤醒的行为,程序在休眠与唤醒两种状态之间的转换,以及抢占程序和其他程序之间可能的运行顺序。基于ICFG定义了两种充分性测试覆盖标准,他们与传统的分支覆盖和数据流覆盖类似,只区别在于传统的分支覆盖和数据流覆盖是基于控制流程图的,而本文提出的是基于ICFG的。作者进行了对比试验,与传统的分支覆盖和数据流覆盖做对比,评估了他们提出的测试充分性准则的有效性,并且探讨了是否这个有效是因为他们的测试充分性准则所需要的测试集中测试用例的个数较多导致的。实验结果表明,他们提出的测试充分性标准比传统的测试充分性标准更有效,而且所需要的测试用例个数也越小。

​ 图1是做作者定义的ICFG,在传统的流程图基础上增加了四种边和一个闲置节点。一个组件C的ICFG图是一个六元组有向图,6个元素:组件C的所有子程序的流程图,一个闲置节点nidle(代表程序的闲置状态),虚线(Phantom)边、抢占(preempted)边、重启(resumption)边、任务顺序(task ordering)边的集合。

Phantom边用来连接不同的context的打断处理程序和任务的FGs。

preempted边模拟中断出现后被推迟的调用context。

resumption边模拟中断处理程序执行完毕之后,之前被延迟的调用context的重启。

taskordering边模拟两个任务发布如何定义相关发布任务的执行顺序。

discussion

1.测试充分性准则是什么?

​ 测试充分性准则是用来判断测试集是否能够充分暴露出软件的问题的标准。

2.测试充分性准则有什么作用?

​ 通常用来作为判断测试用例是否可以结束生成的标准,或者挑选额外测试用例的准则。

3.在论文图9和图10里,准则、测试集和故障率的关系是什么?

​ 测试充分性准则指导测试集合的生成,使用测试集合去运行程序,再统计故障检测率。

4.并发性、共享变量的问题,其他语言也有,nesC有什么特别的?

​ 通常的语言的程序之间的交互的可能性非常多非常复杂,很难覆盖,nesC的调度机制对程序之间的交互有一些限制,因此可以进行测试覆盖的研究。

enlightenment

这篇文章给我们的研究启示:

​ 1.写文章的时候需要描述情景来解释测试的时候要暴露的问题。可以结合代码来分析。

​ 2.可以用类似离散数学的定义的方式来形式化测试充分性准则。可以通过添加节点和边的方式来描述程序中的特定状态和状态转换,对程序建模。

​ 3.可以用图来对程序进行建模,通过添加边的方式改变传统的测试充分性准则覆盖方法所覆盖的内容,并且用离散数学的方法来证明所提出的充分性准则更充分。

​ 4.充分性测试准则的实验,可以通过计算覆盖率和检错率,做对比实验。还可以通过比较在测试用例个数相同的情况下不同充分性标准的检错率。

The End

广州市云计算安全与测评技术重点实验室

华南师大-唯链区块链技术与应用联合实验室

粤港澳大湾区区块链应用推广中心

广东省计算机学会区块链专委会

相关内容分享只作为学术讨论,仅供访问者使用参考。我们尊重相关版权人的权利,但受限于篇幅、技术等客观因素,不保证所有信息、文本、图形、链接及其它项目的绝对准确性、绝对完整性和完整备注他人权利。我们尽最大的努力保证内容的科学性和严谨性等,但我们对使用上述内容而产生的相关后果不承担任何商业和法律责任