动态数据竞争验证方法(二)

之前提到的动态数据竞争验证方法尽管相比RaceFuzzer提高了验证的效率,但是仍然存在一个比较致命的问题就是执行程序一次只能够验证很少的一部分数据竞争。

  • 图(a)中存在两个数据竞争[S1,S3]和[S2,S4],S1在S2之前执行,S3在S4之前执行,因此如果对这两个数据竞争进行验证,那么都能够被验证成为数据竞争。
  • 图(b)中同样也是存在两个数据竞争[S1,S4]和[S2,S3],S1在S2之前执行,S3在S4之前执行,因此这两个数据竞争之间存在相互干扰。当线程T1阻塞并被中止在S1时,线程T2也会被阻塞中止在S3。此时就必须随机唤醒其中一个线程,如果T1被唤醒继续执行,那么最终只有[S2,S3]会被验证成功,[S1,S4]就被遗漏了;如果T2被唤醒继续执行,那么最终只有[S1,S4]会被验证成功,[S2,S3]就被遗漏了。
  • 图(c)中存在两个数据竞争[S1,S2]和[S1,S3],S2在S3之前执行,这两个数据竞争有相同的一个竞争语句,因此也存在相互干扰。当[S1,S2]被验证为数据竞争之后,如果随机选择线程T1继续执行,那么最终[S1,S3]就会被遗漏。 事实上,程序中存在的数据竞争绝大部分都是相互干扰的,有些是类似于上图中简单的干扰,有些则是依赖于输入或是控制条件存在的比较复杂的干扰。如果仅仅使用前面提到的动态数据竞争验证方法那么就会有大量的漏报。 为了能够找到在验证过程中遗漏的数据竞争,我们提出了一种简单的动态数据竞争验证和检测方法。该方法的核心就是在动态数据竞争验证之后,利用比较精确地动态数据竞争检测方法找到被遗漏的数据竞争。

我们可以完全在之前提出的动态数据竞争验证的方法框架上加入动态数据竞争检测,根据前面的文章对于动态数据竞争检测方法进行的实验分析,我们选择ML作为动态数据竞争检测方法。这样的话,如果在验证过程中被遗漏的数据竞争,就会通过ML进行数据竞争检测。ML作为比较精确地动态数据竞争检测器,因此基本不会遗漏数据竞争。 本质上,动态数据竞争验证和检测方法是利用动态数据竞争验证来改变线程调度触发一些隐藏的数据竞争条件,验证一部分数据竞争,而对于不能验证的数据竞争或是遗漏的数据竞争,则交给动态数据竞争检测来分析。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏喔家ArchiSelf

IOT语义交互性之交叉

这个系列文章描述了一个单一的语义数据模型来支持物联网和建筑、企业和消费者的数据转换。 这种模型必须简单可扩展, 以便能够在各行业领域之间实现插件化和互操作性。 ...

762
来自专栏编程

软件测试之Fuzzing和基于属性的测试

基于属性的测试技术,是指编写对你的代码来说为真的逻辑语句(即“属性”),然后使用自动化工具来生成测试输入(一般来说,是指某种特定类型的随机生成输入数据),并观察...

2160
来自专栏Spark学习技巧

第1篇:数据库需求与ER建模

数据库需求与ER建模 前言 在数据库建设过程中,哪一步最重要?绝大多数资料会告诉你,是需求分析阶段。这一步的好坏甚至直接决定数据库项目的成败。 需求分析阶段,也...

4367
来自专栏大数据文摘

手把手 | 数据科学速成课:给Python新手的实操指南

1665
来自专栏程序员的碎碎念

分享几个我经常用到的函数

同上一个推送一样,为了提高php开发的效率,在学习完一些零零碎碎的知识外,我们要学会的那就是总结与分享,学会封装类和函数,方便下次你再次敲此功能代码。在...

3646
来自专栏数据派THU

独家 | 2种数据科学编程中的思维模式,了解一下(附代码)

通常而言,在同一个文件中覆盖完整的流程将会导致Jupyter Notebook、脚本变成一团乱麻。此外,大多数的数据科学问题都要求我们在数据收集、数据清洗、数据...

833
来自专栏云计算D1net

干货:如何计算用户行为大数据

用户行为类数据是最常见的大数据形式,比如电信的通话记录、网站的访问日志、应用商店的app下载记录、银行的账户信息、机顶盒的观看记录、股票的交易记录、保险业的...

3375
来自专栏令仔很忙

UML之用例图

  在UML实践中,用例图(Usecasediagrams)就是软件外部特性描述的视图,是以用户的角度、以一种可视化的方式来描述软件产品的需求,分析软件的功能和...

951
来自专栏GopherCoder

『Go 语言学习专栏』-- 第十三期

1992
来自专栏MyBlog

软件工程攻略

由于软件的开发存在这么多的问题, 其主要原因是规模太大并且缺少一种有效的方法来进行整个软件的开发 从而引出软件工程

952

扫码关注云+社区