论文:Beller, Moritz, and Joseph Hejderup. “Blockchain-based Software Engineering.”
论文摘要:
介绍:
基于区块链的持续集成:
如果持续集成是SE的成功案例,那么Travis CI就是成功案例的缩影:超过一半的项目在使用Travis CI。 Travis CI使用AWS服务为开发人员提供构建环境,以测试和部署他们的代码变更。此外,Travis提供了构建历史视图,该日志适用于区块链应用程序。
图1:BCI示例
图1中,我们提出我们提出了一种名为BCI(Blockchain-based CI)的基于区块链的CI系统。开发人员发起一次构建交易并付出相应的费用(类似以太坊中的gas)后,执行构建的工作节点会根据费用或快或慢地执行构建任务。节点间互相 告构建结果,如果它们找到共识(如“通过”),则将交易添加到区块链中。受以太坊的启发,我们的节点在类似EVM的受保护的环境中执行构建任务。构建任务的执行可作为一种有效的工作证明,取代比特币目前这种浪费资源的工作证明概念。由于CI高度并行的特质,节点的增加可大大提高构建速度。
该设计改善了许多传统CI中存在的问题。首先,传统CI是单一系统,每次发生故障都会中断用户的工作流程,而运行在区块链上的分布式系统不再存在单点故障。传统CI作为一种准垄断服务,可以决定私人托管项目的价格,BCI则打开了一个算力市场,每个人都可以参与并利用闲置资源赚钱,这反过来也意味着可以由市场而不是某一家公司来决定构建服务的价格。大多数传统CI提供商仅向用户提供固定数量n (n<=4) 个工作节点,没有足够的灵活性来应对紧急情况,BCI允许开发人员为某一次构建任务付出更高的价格,这样所有的工作节点为了获取更高的利润会优先执行这一任务,为开发人员提供了更高的灵活性,并可以按需付费。最后,在传统CI中,如果CI提供商破产会导致历史数据的丢失,而BCI的区块链自动充当了构建日志的分布式归档。
实现BCI存在的实际挑战:
- 如何存储构建日志?如果将完整日志写入区块链会导致区块链数据快速膨胀,很快就会超过比特币150GB的账本。一个可能的解决方案是使用轻量级客户端,例如以太坊中的轻量级节点,可以不持有完整的账本数据,利用Merkle树验证交易。其它的解决方案可能是重压缩,在链外存储信息,或依赖现有的基于区块链的文件共享方案,如FileCoin。
- 如何处理不确定的构建?如果需要其它节点验证一次构建,那么构建过程必须是可重现的。一个明显的方案是在容器中执行构建,但会削弱拥有多种不同的构建环境这一优势。
基于区块链的包管理:
重用是软件工程的核心要素。我们使用Debian的apt-get等包存储库来管理二进制文件,使用Java的Maven Central或JavaScript的npm等包管理工具辅助软件开发。在left-pad事件中一位恶意的开源软件开发者从npm仓库中删除了一个被很多项目依赖的包,在 区中引发了巨大的混乱。由此可以看出npm过去基本没有对新版本进行质量审查。
目前已经存在一些有限的措施避免这种事故。例如Debian使用依赖个人连接的信任 络,可以利用他们的签名来验证Debian的维护人员是否已经对包进行了适当的集成测试。即便如此,这也1)无法避免随机恶意行为,2)把太多的测试工作交给了极少数人,3)无法避免包的损坏,而且4)意味着包的测试工作只有包的维护者可以做。
为了解决这些问题,我们提出BAPT,一个机遇区块链的软件包存储库。BAPT为包存储库封装了一个可验证的、 区驱动的回归测试框架。与BCI类似,BAPT的每个参与者都可以选取一个待验证的包进行回归测试,验证其是否按照预期工作且不破坏与下游客户端的兼容性。
实现BAPT要解决的重要问题:
- 如何就什么是“好的发布”找到共识?如果按照传统的基于多数的共识投票,意味着程序包通过51%的节点的验证就足够了,对于仅在某些环境中出现的bug来说,这种机制显然不合适。但是如果使用基于否决的共识机制意味着一个恶意节点就可以阻止发布。我们需要找到正确的中间立场,可能的方法是在同样的环境中复现集成过程并对比它们的结果。需要对对新的共识协议进行研究。
- 如何测试软件包?像Debian一样依赖手工测试吗?这种情况下工作证明是什么?对于语义上的版本升级,我们可以让依赖该程序包的下游客户端运行它们的测试,以验证所有声称非破坏性的变更确实没有破坏性。这增加了第三方的信任层,更民主化地让使用软件包的用户决定一个包是否正确,赋予了用户权力的同时,也并没有剥夺包发布者的权力,因为他们仍然可以按照自己的意愿发布软件——他们只需遵循正确的语义版本。
BBSE能为软件工程带来什么:
图2:区块链为软件工程带来什么
- 职业化。在软件工程中存在很多细微的工作,它们本身并不困难,但是需要很多人力。例如维护软件包和执行构建。Debian使用的是由开源 区的志愿者维护的包存储库,开源软件的这一核心原则本身并不坏,但是由于维护人员不够活跃,导致大量外围软件包因无人维护而过时。相反,在BAPT中,开放式的软件包市场可以蓬勃发展,每个人都可以参与其中,发布包、验证其他人的工作。参与这一透明和开放流程的 酬以小额付款的形式提供,市场机制可以推动紧急的发布或构建提供更高的费用。
- 提高质量。除了过时之外,软件包也经常在不同的集成环境中崩溃。而在分布式系统中,由于测试人员和设备、环境的多样性,能通验证的发布和构建的质量可以更高。此外,至关重要的是这些结果是可重现的。可重现是Debian 区努力的目标,但是在 区中经常被违反。
- 信任。只要存在垄断就存在信任问题。Left-pad事件表明了Debian的维护系统无法防范恶意行为。使用区块链技术,我们可以用人人可参与的去中心化系统替代集中式系统,同时还可以提供更高的可用性。
致谢
此文由南京大学软件学院2017级硕士唐珊珊翻译转述。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!