了解最新技术文章
当听到“区块链”这个词时,大多数人仍然会想到比特币。比特币可能开启了整个区块链革命,但故事并没有就此结束。许多企业正在探索区块链解决方案,其中许多都基于私有区块链,这种技术在几个重要方面与原始比特币区块链不同。
尽管两种类型的区块链都基于相同的技术,但您在这些部署选项之间的选择会对您编写和测试区块链应用程序的方式产生很大影响。让我们探讨一下公共区块链和私有区块链有何不同,以及每种区块链有何不同的特点和要求。
最初的区块链技术提案由一位名叫中本聪(Satoshi Nakamoto )的不知名人士(或一群人)于 2009 年发布,基于一种全新类型的公共数据存储库。这种存储数据的新方法允许多个节点或连接到公共网络的设备共享数据分类帐的副本,即使这些节点彼此不信任。这种“在不信任的环境中进行信任”的功能是革命性的。
第一个区块链实施旨在支持仅作为数字资产存在的新型货币。第一种基于区块链的数字货币,称为加密货币,是比特币。区块链技术为许多节点提供了共享每个节点可以信任的交易账本副本的能力。这意味着随着比特币的引入,用户可以在彼此之间交换加密货币,而不必依赖银行等中介机构来代理交易。消除中介机构可以使加密货币交易更快地进行,并且费用更低。这为许多自助交易打开了大门。
不久之后,人们开始设想区块链技术不仅仅可以管理加密货币。几乎立即,实施者开始将区块链技术用于其他类型的交易。他们发现区块链是将任何有价值的物品从一个所有者转移到另一个所有者的好方法,而无需涉及经纪人或其他中间人。去中介化的整个概念很快被认为是区块链应用程序的核心优势。
虽然区块链技术支持在去信任环境中共享数据的完整性,但它并不直接控制谁可以将数据添加到区块链中。最初的比特币规范提供了一些有限的脚本能力,但各种规模的企业都需要比比特币提供的更有用、更值得信赖的规则来管理交易。
2013年底,Vitalik Buterin提出了一种名为以太坊的新区块链实现,它引入了智能合约来提供区块链网络上所有节点都必须遵循的规则。智能合约提供了使区块链技术适合企业环境的另一个关键组件。
但在区块链真正为企业黄金时段做好准备之前,还有最后一个障碍需要清除:处理敏感数据。比特币被设计为可供任何人公开使用。一些区块链应用程序可以很好地适应这种模式,但许多其他应用程序则不能。一些企业希望使用区块链技术,但也需要限制谁可以访问其区块链上的数据。
这就是私有区块链满足企业需求的地方。
解决您的测试挑战 用于 QA 和开发的测试管理工具
下载免费试用版
最初的比特币区块链被部署为公共的或无需许可的区块链。这意味着任何人都可以访问区块链并可以参与区块链网络。没有中央机构检查身份或限制访问。
当所有数据都是公开的并且其目的是提供透明的账本交易列表时,无需许可的区块链可以很好地工作。事实上,无需许可的区块链可以存储私人数据——用户可以加密他们的数据,然后将其存储在区块链上。只有拥有解密密钥的其他人才能解密数据,因此即使在公共区块链上,也可以保证私有数据的私密性。然而,在大多数情况下,密钥管理问题使得在公共区块链上存储私有数据不是最佳解决方案。
另一方面,企业往往希望利用区块链技术在多个业务部门和合作伙伴之间共享数据,去除中介机构,并建立通用的交易审计追踪。但他们通常不希望这些数据在全球范围内可用。他们希望区块链可供有限数量的节点和用户使用。这种类型的区块链是许可型区块链。
许可区块链是常规区块链,增加了一个限制对网络和区块链数据访问的中央可信机构。中央机构必须向每个节点和用户授予授权或许可,然后才能允许访问数据。这种方法使得在区块链上存储私有数据成为可能,因为可信机构可以限制谁可以访问该数据。
获得许可的区块链可以部署为私有区块链或联盟区块链。私有区块链是在单个组织内完全拥有和部署的区块链。联盟链仍然限制对授权用户的访问,但它允许来自多个组织(通常是彼此的合作伙伴)的用户访问。联盟区块链的一个例子是供应链区块链,生产商、托运商、仓储商和零售商都可以访问该区块链,他们都参与将产品从生产商运送到最终消费者。
每种类型的区块链都满足其用户的特定需求,并且在开发和测试过程中都有自己的特性需要解决。在传统应用程序中,可以操纵数据存储库来修复数据错误。测试很容易,因为应用程序数据库可以综合填充和随意刷新,并且包含错误的软件可以修复和覆盖。测试人员通常不必担心他们使用的数据或他们部署的代码会在测试周期之外持续存在。
区块链则不同。区块链的核心特征之一是区块链上的数据(包括智能合约)据说是不可变的。这意味着一旦您将数据添加到区块链中,它就始终存在。区块链技术不存在“删除”操作,区块链永远不会忘记数据。虽然不变性为交易提供了无与伦比的历史记录和审计跟踪能力,但这也意味着添加到区块链中的任何“坏”数据或代码都会永远保留在那里。
严格来说,区块链实际上并不是一成不变的。任何节点或许可区块链中的任何授权节点都可以更改区块链上的数据。然而,对区块链的任何更改都会使区块链的副本失效,并且对所有人来说都是显而易见的。因此,更准确地说,区块链是防篡改和防篡改的,并且实际上是不可变的。
有效的不变性意味着测试人员必须仔细计划所有测试活动,以正确测试区块链应用程序,并确保部署的代码按照规范正常运行。更糟糕的是,区块链需要付费才能将数据添加到区块链中。传统数据库免费存储数据,但区块链的工作方式是,确保区块完整性的特殊节点会因其工作而获得报酬。这意味着即使在真实环境中测试区块链应用程序也需要花钱。不变性和交易成本意味着您必须计划区块链应用程序测试。
从测试人员的角度来看,无许可区块链和许可区块链之间的最大区别在于如何测试软件。
在未经许可的环境中,无法完全摆脱实时环境中的测试成本。大多数区块链测试人员采用增量方法来测试他们的代码。第一步是使用本地区块链来初步测试核心应用程序功能。例如,在以太坊环境中,许多开发人员使用Ganache等区块链来进行初始测试。下一步是部署到公共测试区块链网络。这样的网络,如 Ropsten、Kovan 或 Rinkeby,可以让您了解您的应用程序如何在具有去中心化智能合约功能的真正分布式环境中运行。
测试网络提供“免费”加密货币,您可以使用它来支付交易费用。这些网络接近实时环境,但并不是真正的实时网络。要执行完整的软件测试,您需要将代码部署到实时区块链并在那里运行您的应用程序。公共区块链上的实时区块链测试需要使用实时加密货币支付交易费用。因此,您可能无法对非区块链应用程序进行尽可能多的测试。
在许可的区块链环境中进行测试可能会有很大不同。虽然您会遇到支付交易费用的相同要求,但您可能不必投入“真实”资金。在许可的区块链环境中,管理机构可以为测试账户提供足够的加密货币来执行测试交易。认可测试使得设计更类似于传统数据库应用程序环境的测试成为可能。
但是,请永远记住,测试区块链应用程序会留下无法挽回的痕迹。由于您无法从区块链中删除测试数据,因此您需要计划让最终测试数据永远存在于区块链上。虽然可以在“上线”之前进行初始测试,然后在测试后使用干净的数据初始化区块链,但对实时区块链的任何测试都会留下痕迹。
成功的区块链应用程序测试和使用的关键是首先了解区块链与数据库的不同之处,然后尊重公共区块链与私有区块链的差异。良好的开发和测试计划将帮助您避免最终在区块链上留下脏数据甚至限制测试量的情况。良好的计划确实很重要。
上一篇:管理支付系统的测试用例