蚁群算法在验证用例自动化回归中的应用有哪些?

电子说

1.2w人已加入

描述

背景:如今的芯片规模越来越大,功能也愈加复杂。相应的验证用例也越来越复杂,用例动态仿真耗时也随之增加,而且个数有时动辄上百个。

在验证回归过程中,如何提高效率成为广大验证工程师不得不考虑的问题。

本文尝试在验证工作中,通过蚁群算法优化用例回归序列,尽量缩短回归时间,同时提高用例回归的自动化程度。

(一)问题描述

假设当前有108个用例需要回归,并且我们有先前用例仿真的日志文件:日志文件中有该用例仿真的耗时信息。

按照传统做法,我们可能首先打开十多个terminal(比如15个),平均每个terminal分配若干用例(比如7个),根据用例名的字典序回归用例。

在大多数情况下,会有个别terminal中分配的用例很快或较快的回归完,而其余几个terminal时间却又很长,迟迟不能完成,时间最长的那个terminal决定了一次回归所用的总时间。

那么,是否可以找到更好的回归队列分配给各个terminal, ***使得回归总时间最短*** ?

(二)问题转化

现在,问题就可以转化为:108个耗时不等的任务,分配给15个并行队列,求15个队列的任务序列组合,使得15个队列的总耗时最小;这个任务分配问题可以进一步引申为**负载调度**问题,108个任务分配给15台性能各异(或同等)的服务器。

上面是从时间角度进行的问题转化,也可以从空间角度考虑,把用例耗时对应空间大小,把问题转化为 **存储问题** ,本文暂不研究。

(三)问题解决

我们参考作者的JavaScript代码,考虑用perl实现算法的核心代码。具体步骤如下:

1)提取时间信息:即从仿真日志里提取时间信息,分两步①粗提取,这个使用shell命令即可,可以放到makefile中;②准确提取,在刚刚的makefile中调用perl脚本,在perl脚本中利用perl强大的文本处理能力提取准确的时间信息,存入一个哈希%Case_hash(键-用例名,值-用例对应的时间)中。

2)蚁群算法的perl实现:除了刚刚得到的哈希数组%Case_hash,我们还要给定队列数目QueneNum,这是蚁群算法的输入。同时,蚁群算法还涉及蚂蚁数量AntNum,迭代次数ItNum,随机因子等参数,参考文献[1]中有详细说明,这里不再赘述。 最终,蚁群算法会得到最优的任务分配矩阵,我们通过这个矩阵就可以知道每个队列分配了那几个用例。

3)回归队列生成:得到用例回归队列后,将这些队列以target形式写入新的makefile中(sub_makefile,在主makefile中include这个sub_makefile)。

4)自动回归:刚刚生成了sub_makefile,我们再新建一个脚本,实现“自动打开指定个数terminal,在每个terminal自动输入相应回归命令(make)即可”。

(四)问题的问题

在perl实现蚁群算法时,矩阵的处理可能会稍微麻烦一些,这里使用了哈希嵌套的做法[2]。

另外,在实际应用中,蚁群算法有以下问题①在有限迭代次数内,算法不收敛;②算法收敛,但得到的最优解是**局部最优解**,非全局最优解。局部最优解是传统蚁群算法的缺点之一。实际使用时可以折衷考虑,适当 *增大迭代次数* ,同时提高蚁群的 *随机性* ,在有限的迭代次数内*持续搜寻最短时间的任务分配方案。*






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分