区块链技术最近热的发紫,大多数的文章都在普及区块链概念。区块链可能会成为将来10年互联应用的一个底层技术,会应用于各行各业的各类项目。好比:商品溯源,传统溯源系统采用集中数据存储数据,其实这样的数据对持有者来讲,想怎么修改,就怎么修改,那它的数据可信度有多少?以前甚至出现过某银行储户的资金不知去向的状况。既然区块链会易用到各类系统,QA同窗固然有必要了解下区块链该怎么测了。本文结合实际整理了下区块链测试相关内容,一块儿来看看吧。前端
区块链的特性回顾:安全
● 去中介化/中心化的信任。服务器
● 稳定性、可靠性、持续性。由于它是一个分布式的网络架构,没有一个中心节点能够被打击或者攻击,因此在总体的技术布置方面有着更强的稳定性、可靠性和持续性。网络
● 强安全、共识机制不须要第三方的进入,而是经过一个技术来达到,先前预约的一个技术来达到整个交易的完成。数据结构
● 交易的公开透明和不可篡改性。架构
简单归纳:去中心化,不可篡改、全部节点公开全帐本、帐户信息持续可追踪、对等网络,没有上帝角色(系统管理员等)。分布式
2.1 区块链测试的难点性能
区块链测试与传统的软件测试有很大的不一样,主要体如今如下几点:区块链
●系统边界模糊测试
传统的软件,不论是是独立的应用程序,仍是客户端/服务器模式的应用程序,都有明显的系统边界,能够经过UI用户界面或者客户端去进行测试。区块链底层,则是一个彻底去中心化的分布式网络。这个网络有可能跨越多个子网、多个数据中心、多个运营商、甚至多个国家,其边界是模糊的。对于区块链底层的测试,不只仅是前端API与某个区块链节点之间的测试,还涉及大量区块链节点与节点之间的测试。
●故障类型复杂
通常软件故障包括3类: a.宕机故障(Crash Failure); b.宕机-恢复故障 (Crash-Recovery Failures); c.拜占庭故障 (Byzantine Failures)。
所谓拜占庭故障,来自一个著名的“拜占庭将军问题”,指系统存在某些恶意节点,用一个形象的比喻就是“叛变的Byzantine将军”。从不一样观察者角度看这类节点,表现出不一致的症状,这在须要共识的系统中,每每会致使系统服务失效。
通常软件最多只须要解决前两种故障,而区块链系统,则须要同时处理所 有的故障,确保系统的可靠运行。
●区块链类型不一样
区块链自己包含公有链、私有链、联盟链等多种类型,不一样类型在管理、用户身份、最大节点数等平台自身特征方面均有不一样,测评须要考虑全部的模式,致使测试方案更加复杂。(以下表)
2.2 测试点的考量
根据目前行业发布的白皮书,区块链的评测标准包括:
技术要求
区块链相关的落地系统,也可能包括咱们熟悉的传统架构软件的测试内容。好比以前某些厂商的带宽共享、共享云,也会有独立的APP支持在线查询管理等;对于区块链底层的测试,则须要掌握的技术包括以下几点:
1.首先要掌握密码学的基本知识(例如对称加密、非对称加密、数字签名的原理);
2.理解数据结构中的链表概念,树的概念;
3.区块链的交易记帐模型(如何实现转帐的,如何避免双花的,如何实现全部权验证的);
4.如果基于以太坊代码作,那还得理解虚拟机运行原理;
区块链项目重点测试以下内容:
1.转帐,向单/多签名地址转帐,向脚本转帐;
2.若是对币的机制有修改,双花攻击测试;
3.智能合约功能及安全测试;
4.打包及交易确认效率。
其实,任何软件的测试,都是能够基于“输入-输出-行为”模型(又叫IBO模型)来作测试分析和设计。
3.1 业务场景
咱们以金融业务为例,一般分为实施业务、和非实时业务,两种业务的特色在于:
1.实时业务:秒级支付、私有链、无单点故障和高扩展性;
2.非实时业务:去中心化、联盟链、防篡改、数据零丢失;
具体以下图:
3.2 关于性能测试的一些思考
对于性能评测部分,主要关注一下4个指标:
对于不一样的性能指标,几点思考:
●延迟:P2P系统中都是虚拟连接,实际路由可能每次都不同。
●共识率:系统中设定一些节点,故意篡改释放假数据,看是否成功。
●吞吐率:检查矿工的效率,即整个系统每秒的有效交易数。
●目前性能评测中,常见的是脱离网络规模和区块大小谈每秒交易数(TPS)
a.实际中,网络规模越大,须要达成共识的节点越多,达成共识的进度,越慢,吞吐量(TPS)就越低;
b.区块越大,可扩展性越大,吞吐量可能发生抖动,大几率是变低。
目前对于区块链的测试内容上,短时间还会出现针对不一样行业的差别性,但最终会走向融合和统一。测试手段上,也将随着时间逐步由人工测试,转向自动化测试,有周边的功能深刻到底层。
内容来源:Qtest之道
做者:高学文
线下活动推荐
技术工坊|解密区块链DApp的代码逻辑,从请求到数据存储都要经历什么?(上海)
技术沙龙|利用IPFS,去中心化存储如何让钱包更安全?(南京)