基于区块链的软件工程

基于区块链的软件工程

14.1 引用

Beller, Moritz & Hejderup, Joseph. (2019). Blockchain-Based Software Engineering. 53-56. 10.1109/ICSE-NIER.2019.00022.

14.2 摘要

区块链技术已经发现了大量应用,从银行业务到物联网(IoT)。但是,尚未设想软件工程(SE)区块链技术中的问题和解决方案是否可以解决。在本文中,我们将这个领域称为“基于区块链的软件工程”,并举例说明了区块链技术如何解决两个核心SE问题:Travis CI等持续集成(CI)服务和apt-get等软件包管理器。我们相信区块链技术可以帮助(1)软件工程基础设施的民主化和专业化,目前只依赖于少数志愿者的免费工作,(2)提高产品和服务的质量,以及(3)增加对GitHub或Travis CI等普遍使用的系统的信任。

14.3 介绍

区块链技术的出现,即依赖于多方共享的分布式防篡改分类账的系统,据说可以全面彻底改变行业,并且部分已经完成:比特币,世界上第一个加密货币,允许一个人在没有中央中间人的情况下以同行的方式汇款,从而扰乱了银行业。以太坊,一种通常被称为“区块链2.0”的区块链协议,允许各方参与智能合约,这是一种在交易中编纂货物交换或执行其他预定义行为的方式。智能合约的内容可以很灵活,因为它们是用编程语言编写的。智能合约可以被视为各方之间自动执行合同。所有合同和交易都存储起来供所有人在区块链上进行检查,既可作为历史档案,也可作为防范欺诈行为的保护机制。尽管公众可见,但区块链上的交易的发送者和接收者都可以保持假名。

然而,区块链技术比这两个广为人知的无许可区块链的例子具有更多的应用,即区块链协议,其中没有先前信任的任何一方可以简单地参与。公司正在探索获得许可的区块链,以便更安全地开展相互业务,这对外人来说是不可见的。例如,启动Provenance提供消费品的供应链审核。政府正在寻求与其公民正式交易; 甚至物联网设备也可以利用它。

鉴于像IBM这样的大型软件公司已经开始大量投资区块链技术,区块链技术的应用可能性尚未扩展到我们自己制作软件的方式,这有点令人惊讶。在这篇有远见的论文中,我们想探讨区块链技术如何在基于区块链的软件工程(BBSE)这一术语中彻底改变软件工程(SE):我们首先描述了区块链技术提供的核心原则和保证,以及哪些对于SE。然后,我们探讨了一些现有的SE问题,并概述了我们如何使用区块链技术来解决这些问题。虽然本文不能(并且不旨在)提供区块链支持所带来的SE问题的完整列表,但我们概述了BBSE如何解决困扰SE作为工艺的基本问题:专业化,质量和信任。

14.4 区块链启蒙

在本节中,我们将介绍Blockchain技术背后的一些核心思想。我们的意思是为不熟悉该技术的读者提供基本思路,并专注于我们认为与SE相关的概念。

正式地,Blockchain,我们指的是一个单独的文件,代表一组相互关联的块,每个块以菊花链形式连接到其父节点。区块链协议(“规范”)管理构成有效区块的内容。协议的实现表现为客户端。

原则上,我们区分两种形式的区块链协议:需要许可和无需许可的区块链。需要许可的区块链仅限于一组已知的角色,这意味着需要识别和验证自己(例如,大多数企业对企业应用程序)。无权或开放的区块链允许任何人作为矿工或常规节点参与。

由于没有可信赖的中央权限,基于区块链的解决方案不提供单点故障类型方案。但是,当提供两个不同的有效区块链时,客户如何知道哪个区域链?这就是Paxos等共识协议的问题,它早在区块链的概念出现之前就存在了。在比特币的情况下,它的共识是通过选择最长的链来实现的,即大多数计算工作已经进入的链。达成共识是一个难题,尤其是在存在对抗性节点(所谓的拜占庭行为)的情况下,但比特币或以太坊等实用解决方案表明它是可行的。

我们可以总结出基于区块链的技术允许我们构建健壮的分布式系统,包括付费机制(货币,例如比特币),预定义行为的执行(通过智能合约),共识协议和防篡改历史。每笔交易。这种系统中的参与者可以是匿名的,伪匿名的或已知的。我们认为这些特征对某些SE问题具有重要意义。其中的核心是承诺分散的信任和可靠性。

14.5 基于区块链的持续集成

如果持续集成是SE中的成功案例,则Travis CI是成功案例的缩影:超过一半的所有项目在GitHub上进行CI,使用Travis CI进行。Travis CI为开发人员提供了构建环境,以测试和部署他们的代码更改。Travis CI通过从AWS租用计算能力来实现这一目标。此外,Travis提供了先前执行的构建的历史视图,该日志适用于区块链应用程序。

在图1中,我们提出了一种名为BCI的基于区块链的CI系统。在开发人员在mempool(1)中输入构建及其奖励价格(类似于Etherum的Gas限制)之后,然后将其广播到BCI网络(2)。有兴趣的工人执行构建(3)并相互报告结果(4)。如果他们达成共识(例如,“通过”),他们将构建添加到区块链(5)。受以太坊执行功能的启发,我们的节点在类似于EVM的屏蔽环境中执行构建任务(例如,Docker镜像将构建与主机系统隔离)。通过散列和签署构建日志输出,构建任务的执行可以作为可行的工作证明,比比特币目前使用的浪费的工作证明更有用。此外,具有许多构建和测试执行环境的CI的高度并行性质有助于通过大量工作节点加速。

图1 BCI的一个例子

该设计缓解了传统CI(TCI)服务的许多问题。首先,作为单一系统,每次TCI中断都会破坏其用户的工作流程。作为在区块链上运行的分布式系统实施,不再存在单点故障。其次,作为一种垄断市场,TCI决定私人托管价格。BCI打开了一个计算能力市场,每个人都可以参与并以闲置资源赚钱。这反过来也意味着需求和供给的经济规则规定了价格,而不是单一的公司。大多数TCI提供商仅向其用户提供固定数量的n(n≤4)构建工作者。没有灵活性来升级它以测试和释放紧急错误。基于区块链的CI将允许开发人员在此一个版本上指定高交易成本。节点因其高利润率而优先执行此构建作业。开发人员会更灵活,但只需支付他们目前所需的费用。

如果Travis CI或其他TCI破产,我们可能会失去对其构建历史的访问权限。另一方面,CI构建的区块链将自我服务作为分布式存档。

14.6 基于区块链的包管理工具

重用是SE的核心要素。我们不仅使用Debian的apt-get等软件包存储库来管理二进制文件,而且还使用Java的Maven Central或JavaScript的npm这样的库存储库驱动软件开发本身。npm过去基本上没有审查新版本的质量。这在左栏事件中非常明显,其中一个开源恶意的开源软件(OSS)开发人员通过删除其他数千个npm软件包所依赖的简单程序包在社区中引起了很大的干扰。

已经存在有限的措施以避免破坏释放的这种连锁反应。例如,Debian使用依赖于个人连接的信任网络。Debian维护人员通过他们的签名验证他们已经对包进行了适当的集成测试。即便如此,这1)也无法防止随机的恶意行为,2)在很少的人力上投入大量的工作,

为了解决这些问题,我们提出了BAPT,一个基于Blockchain的软件包存储库。BAPT为包存储库封装了一个可验证的社区驱动的回归测试框架。与BCI类似,BAPT的每个参与者都可以从mempool中选择一个新的候选版本,证明该版本按预期工作,并且不会破坏与下游客户端的兼容性。

14.7 本文主要贡献

虽然围绕区块链的大量炒作,但噪音背后可能是突破性技术。本文只能抓住基于Blockchain的SE(BBSE)可以实现的机会的冰山一角。我们已经举例说明我们可以使用BBSE来解决SE中的基本问题。特别是,我们已经设计了草图

分布式民主化构建服务,称为BCI,用户运行的包管理系统,称为BAPT。

正如这些例子所示,区块链似乎特别有希望解决集中化和信任问题。许多例子包括货币组成部分,这是SE中经常提出的一个问题(“但是如何通过这种方式赚钱?”)。我们认为,支付少量资金,而不是依靠OSS社区中的少数志愿者免费工作来完成微型任务,例如验证新版本,对SE基础设施的专业化产生了深远的影响。虽然我们概述了如何使用区块链技术解决SE挑战的想法,但许多研究机会及其实施仍然适用于未来的工作,例如,区块链上的Git的真正分布式版本,或者从BCI(分散式计算平台)中抽象出来。

本文由南京大学软件学院2018硕士王新宇翻译转述。