如何创建出没有缺陷代码的区块链应用程序
扫描二维码
随时随地手机看文章
虽然所有开发人员都在努力寻找无漏洞代码,但在区块链部署中,在交换敏感数据或其他机密信息(如医疗保健或金融领域)时,这一点尤其重要。然而,一些企业以惨痛的代价吸取了这一教训。最近,加密货币交易所Binance最近披露了一个毁灭性的安全漏洞,造成了超过4000万美元的损失。虽然这是个大数目,但对于那些丢失私人信息、机密合同等的公司来说,安全漏洞的代价可能更大。
组织不应该把时间花在重建(和重新获得客户信任)上。更好的方法是公司领导层从一开始就强制实行区块链测试自动化策略。
虽然大多数软件测试人员都熟悉测试网络应用程序,但他们可能不确定如何处理区块链测试。好消息是,web测试的一些相同的焦点领域也适用于区块链测试(功能、性能和安全性)。然而,区块链涉及更多的测试、工作和焦点领域,例如基础结构编排、在分布式环境中执行和模拟场景,这需要更高水平的专业知识。
因为有了这些添加,在区块链应用中修复漏洞需要几个额外的步骤,因此比修复其他应用程序中的漏洞花费更多的时间和成本。例如,要复制错误或验证代码,开发人员应该多次执行以下步骤:
形成一个新的端点。
将新代码部署到新端点。
将当前数据迁移到新的后端。
将旧的后端挂起。
将所有前端更新到当前版本。
之后,验证由测试人员或持续集成(CI)工具执行的漏洞修复将再次需要这些步骤。这种复杂性使得发布无漏洞的区块链应用程序很困难,但这样做会使组织及其客户面临财务损失的风险。由于部署区块链应用程序的高风险性,将测试包含在管理远景和策略中至关重要。
要发布没有缺陷代码的区块链应用程序,企业应该遵循以下准则:
测试自动化可以减轻测试人员手工执行数千个编排测试的负担,这既困难又低效。一个好的系统架构应该是可伸缩的、可维护的和可测试的,这样团队就可以独立地测试组件和模拟组件。如果一个测试需要一个不同的环境或基础设施,那么作为代码的基础设施(IaC,如Puppet、Chef、Ansible和AWS)在设置适当的测试环境时非常有用。该策略的另一个关键部分是为基础设施提供声明性定义,并允许开发人员实现支持测试自动化的代码。
运行单元和集成测试以覆盖后端和前端代码
区块链应用程序至少包含一个后端(一组在区块链上运行的智能契约或链码)和一个前端(用户可以在前端与存储在区块链中的数据交互)。执行单元测试将涵盖后端和前端代码,并且,由于其对区块链应用程序的关键作用,其主要焦点应该是链码。但是,集成测试应该涵盖各种类型的oracle和前端应用程序。通过验证UI和链码之间的集成,执行额外的测试将消除任何可能威胁后端的漏洞。
在本地基础架构中执行测试
虽然公共区块链(如比特币或以太坊)有多个测试网,但最好是在本地基础设施中执行测试。对于单元测试和集成测试来说,本地基础设施是轻量级的、更快的和更稳定的。例如,在一个Ganache本地基础架构中,可以在5个以太坊智能契约上运行1000多个单元测试,一个小时内部署大约3000个。
持续更新安全系统测试套件
区块链是一个多方基础设施,在某些情况下,它是一个公共网络。因此,这些应用程序对于许多利益相关者来说都是可见的,甚至可以向全世界开放源代码。这种程度的透明度意味着黑客能够研究程序,并根据特定的系统来计划攻击。持续更新安全系统测试套件将确保应用程序受到保护,免受所有常见安全漏洞的影响。
为开发过程的每个阶段最小化连续测试管道
在本地基础结构中的分层集成和单元测试通过对安全系统测试套件的持续更新创建一个连续的测试管道,这对于高质量的块链代码来说是必不可少的。在本地块链和测试网等多种环境中持续验证代码更改,确保将高质量的代码交付给生产区块链。但是,这些测试可以为每个代码更改持续几个小时或几天,因此对于团队来说,最大限度地减少和创建精益管道非常重要,这些管道关注测试阶段、测试类型和测试环境,并在开发过程的每个阶段开发多个代码管道。
构建定制的测试套件以消除潜在的欺骗漏洞
测试团队还需要定制管道中的测试套件,以涵盖功能测试和安全性测试。涵盖安全性案例是很重要的,但是单元测试模块也应该执行智能契约单元的潜在安全威胁,例如溢出和重入,以尽可能多地消除潜在的欺骗漏洞。
由于底层基础结构的去中心化和编排的特性,为区块链应用程序开发无缺陷代码比其他应用程序带来了更多的挑战。通过从传统软件测试,特别是测试自动化中汲取最佳实践,并将它们定制为区块链开发,企业可以实现无错误的区块链编码,并保护他们最脆弱的应用程序。