区块链资讯
数字货币行情

区块链系统 Bug 特征描述:大规模实证研究

区块链系统 Bug 特征描述:大规模实证研究

论文:Wan, Z. , Lo, D. , Xia, X. , & Cai, L. . (2017). Bug Characteristics in Blockchain Systems: A Large-Scale Empirical Study. IEEE/ACM International Conference on Mining Software Repositories. IEEE.

https://ink.library.smu.edu.sg/cgi/viewcontent.cgi?article=4697&context=sis_research

论文摘要:

Bugs 严重损害了区块链系统的可靠性。需要彻底了解区块链 bug 特征,以设计有效的工具来预防、检测和缓解 bug。我们对八个有代表性的开源区块链系统中的 bug 特征进行了实证研究。首先,我们人工检查了 1108 份 bug 报告,以了解报告的 bug 的性质。其次,我们利用卡片分类来标记 bug 报告,并在区块链系统中获得 10 个 bug 类别。我们进一步研究了跨项目和编程语言的 bug 类别的频率分布。最后,我们研究了 bug 类别和 bug 修复时间之间的关系。研究结果包括:(1)语义 bug 是主要的运行时 bug 类别; (2)bug 类型的频率分布在不同的项目和编程语言中表现出类似的趋势; (3)安全 bug 修复需要最长的中位时间; (4)35.71%的性能 bug 在一年以上内修复;性能 bug 需要最长的平均修复时间。

研究问题:

本文是一篇实证研究性论文,从以下四个研究问题出发,展开详细的研究。

研究问题1:区块链系统中出现了哪些类别的 bug?该问题的研究有助于理解区块链系统的弱点,可以付出更多努力来解决主要的bug类别。

研究问题2:不同区块链项目中 bug 类型的频率分布是否相似?如果 bug 类型的频率分布在项目中显示相似的趋势,我们可以将 bug 类型从最常见到最不常见排序,然后总结每种 bug 类型的特征。

研究问题3:不同编程语言中 bug 类型的频率分布是否存在很大差异?我们想知道不同的编程语言是否会影响区块链系统中 bug 类型的频率分布。

研究问题4:修复各种类型的 bug 需要多长时间?我们打算调查bug类型和bug修复时间之间的关系。结果可能表明应该更多地关注特定的bug类型。

研究对象:

本研究通过以下四个步骤收集有效数据集:

  1. 检索代表性区块链项目;
  2. 检索 bug 报告和相关信息;
  3. 识别项目使用的主要语言;
  4. 计算 bug 修复持续时间。

通过以上四个步骤,得到本文的研究对象,研究对象包括 8 个具有代表性的区块链项目。

区块链系统 Bug 特征描述:大规模实证研究

实验方法:

步骤1:卡片分类。我们为每个 bug 报告创建一张卡片。该卡包含来自多个数据源的bug 信息,例如 bug 报告标题、正文和注释、拉取请求和提交。来自浙江大学的第一作者和一名研究生共同找出了 bug 报告的标签。具体步骤如下:

第一次迭代。我们首先随机选择 ethereum/go-ethereum 项目并人工检查 bug 报告。 然后我们根据 bug 的根本原因将 bug 报告分类到不同的 bug 集合中。一些 bug 报告的根本原因尚不清楚,我们从卡片类别中忽略了它们。最后,我们讨论每个bug 集合,并通过参考Tan等人[14]的研究中定义的类别来命名它。得到的分类方案包含6个类别,如表II所示(除了GUI、build、compatibility and hard fork categories)。

第二次迭代。我们发现语义 bug 在项目ethereum/go-ethereum 中占很大比例。因此,我们进一步将语义 bug 分类为表III中所示的 9 个子类别。子类别基于 [14] 中的语义bug 子类别。此外,我们创建了两个新的子类别inputoutput

第三次迭代。首先,我们人工检查其他两个以太坊项目中的 bug 报告,ethereum/mist 和ethereum/cpp-herehereum,并遇到新的 bug 类型。因此,我们创建两个新类别 GUI build,如表II所述。然后我们查看AugurProject/augur和steemit/steem 项目中的 bug 报告。我们进一步创建了两个新类别 compatibility 和 hard fork

区块链系统 Bug 特征描述:大规模实证研究
区块链系统 Bug 特征描述:大规模实证研究

步骤2:标记。第一作者和一个研究生独立标记 8 个区块链系统的 1108 份 bug 报告。我们使用 Fleiss Kappa 度量两个标记者之间的一致性。在完成人工标记过程之后,两个标记者讨论不一致的标记以达到统一的决策。一些 bug 报告缺少充分的描述细节,很难分析出根本原因,因此将这些 bug 报告标记为“未知”。同时,我们排出哪些重复的、重新打开的和不是一个具体 bug 的报告。

Bug类别分析:

本节回答研究问题1。我们完全从 1108 个bug报告中识别出 946 个唯一的bug。表 5 中显示了基于这三个类别的bug的总体分布。

区块链系统 Bug 特征描述:大规模实证研究

在所研究的系统的1108个关闭的 bug 报告中,946 个独特的错误可以分为10类。语义错误是主要的运行时 bug 类型。23.9% 的语义错误是由缺失的用例引起的。环境和配置 bug 是发生次数第二高。

Bug分布分析:

本部分回答研究问题2、3。为了回答研究问题 2,我们分析了八个区块链项目的 bug 类型的频率分布。在图2中示出了每个项目的不同类别上的频率分布。我们可以观察到类似的频率分布的bug类型在八个项目。研究发现 bug 类型的频率分布在研究项目中有相似的趋势。

区块链系统 Bug 特征描述:大规模实证研究

为了回答研究问题 3,我们收集了八个基于它们的主要语言的区块链系统。我们分析了三种主要语言的 bug 类型的频率分布,即C++、GO和JavaScript。图3中示出了每个语言的不同类别的 bug 分布。我们可以观察到跨越三种语言的错误类型的相似分布。Bug 类型的频率分布在编程语言中共享相似的趋势。

区块链系统 Bug 特征描述:大规模实证研究

Bug修复时间分析:

本部分回答研究问题 4。为了回答研究问题 4,我们调查 bug 类别和 bug 修复时间之间的关系。我们用直到 bug 报告关闭并且不重新打开(至少直到我们在2016年11月爬过存储库时)所经过的天数来度量 bug 修复时间。表 VI 显示了修复各种类别的 bug 之前的最小天数、最大天数、平均天数和中位数。

区块链系统 Bug 特征描述:大规模实证研究

在中位数 bug 修复时间方面,安全漏洞花费最长的时间来修复。35.71% 的 bug 缺陷在一年以上的时间内被修复;就平均修复时间而言,性能 bug 修复的时间最长。

本文的主要贡献:

  1. 我们是第一个对区块链系统中的 bug进行大规模实证研究的人。
  2. 我们通过使用卡片分类法人工的将8个研究的区块链系统中的946个 bug 分类为各种类型。
  3. 我们分析了不同项目和编程语言中 bug 类型的频率分布。
  4. 我们调查了 bug 类别和 bug 修复时间之间的关系。

致谢

此文由南京大学软件学院2017级硕士孙伟松翻译转述。

赞(0) 打赏

华为系团队打造,不花一分钱,每天躺赚200元
未经允许不得转载:三氪猫数字货币媒体 » 区块链系统 Bug 特征描述:大规模实证研究

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏