2 溪塔科技 区块链系统质量保障体系建设 陈昊

  • 18 浏览

阿木的花园

2020/11/30 发布于 编程 分类

测试 

文字内容
2. 区块链系统质量保障体系建设 陈昊
3. 目录 1 区块链测试现状 2 区块链质量保障体系建设 3 愿景
4. 区块链测试现状 背景 2020年4月20日,国家发改委明确将“区块链”纳入新型基础 设施中的信息基础设施 据慢雾数据统计,2019 年全年区块链行业发生安全事件超 130 起,累计损失资金超50亿美金 区块链作为一门新技术,认知门槛较高,专业测试人员较少
5. 区块链测试现状 痛点 区块链底层是去中心化的分布式网络,线上情况复杂, 难以覆盖全面 线上恶意攻击方案难以穷举,测试难度较大 区块链系统一旦上线,BUG 修复和系统升级成本极 高,且需要对历史数据兼容
6. 目录 6 1 区块链测试现状 2 区块链质量保障体系建设 3 愿景
7. 区块链质量保障体系 团队策略 稳定性测试 功能测试 兼容性测试 性能测试 安全性测试 发版策略
8. 区块链质量保障体系 -- 团队策略 践行 DevOps 敏捷开发 使用 GitHub Flow 进行代码管理
9. 区块链质量保障体系 -- 团队策略 使用 CI/CD 流水线进行自动化构建、测试、发布、部署。 •在开发区块链软件时,软件代码用 CI 进 行自动化代码质检、测试、构建以及发布 •在测试区块链软件时,测试代码用 CI 进 行冒烟、回归、性能、稳定性测试 •在运维区块链服务时,用自建的监控工具 进行主动监控、被动告警
10. 区块链质量保障体系 -- 功能测试 业务测试主要项: 1. 起链、出块 2. 节点管理 3. 权限管理 4. 转账、存证 5. 合约部署及交易 6. 紧急制动 7. 账户体系 8. 区块同步 9. 升级
11. 区块链质量保障体系 -- 功能测试 运行环境统一 测试对象放入基础 Docker Image 做版本管理 测试环境隔离 测试环境使用 Docker Container 隔离 测试自动化 基于 Docker + Jenkins + TestNG,实现测试用例自动 化并行执行
12. 区块链质量保障体系 -- 功能测试 自动化优化技巧 • 使用 Docker Image Tag 环境变量,控制测试对象 • 使用随机数命名容器,避免容器名冲突 • 使用变量控制中间件 CITA-SDK CITA-CLI 版本 • 出错之后自动重试用例 • 测试用例并行执行 • 多条流水线,实现不同目的 • 输出直观的测试报告 自动化成效 • 500+条P1用例完全实现自动化 • 手动执行20人时,自动化执行耗时90分钟,自动化 提效特别显著
13. 区块链质量保障体系 -- 性能测试 测试项 测试场景 RPC 读/写接口性能 合约交易性能 存证交易性能 共识达成性能 区块同步性能 测试方法 使用 Jmeter 软件配置不同 硬件配置不同 节点个数不同 网络拓扑不同 CA 配置不同 前置数据不同 自研脚本 自研脚本 自研脚本 自研脚本 CI 1. 通过 Jenkins 持续集成, 每晚定时执行性能测试,及 时跟踪代码变更对性能的影 响 2. CI 可配置不同的测试场 景 3. 性能结果直观可视化
14. 区块链质量保障体系 -- 性能测试 性能测试报告
15. 区块链质量保障体系 -- 稳定性测试 异常场景下,链的稳定性 硬盘、内 存不足 断电断网 共识延迟 节点重复 关起 恶意访问 非法、重 复交易 恢复
16. 区块链质量保障体系 -- 稳定性测试 •压力访问条件下,链的稳定性 •在对链进行一定强度的压力访问下,链的出块、合约部署及执行、存证发送和转账等功 能能够保持稳定正常 •构建 CI ,实现完全自动化
17. 区块链质量保障体系 -- 稳定性测试 •长时间运行,链的稳定性 •构建测试链,长时间运行 •构建 CI 每天对该链进行测试,包括合约交易、发送存证、转账、 历史交易查询和历史合约调用等,保证链能稳定正常运行 •团队研发并开源了 CITA-Monitor 监控系统,配备了数据可视化面 板,用于监控 CITA 区块链服务的运状态 •明确链长时间运行稳定性指标(最近365天中,系统可用时长 / 总 时长),需要达到4个9以上
18. 区块链质量保障体系 -- 兼容性测试 测试项 •升级测试,保障升级后功能一切正常 •保障升级后,链新老数据的访问和新老合约的执行正常 测试方案 •构建并维护一条开放的测试链,根据产品的迭代进行升级;并通过 CI 每天对该链进行测 试,包括合约交易、发送存证、转账、历史交易查询和历史合约调用等,测试其能一直正 常运行 •发布新版本时,测试所有老版本到新版本的升级测试,保障升级后基本功能正常,通过 CI 实现完全自动化
19. 区块链质量保障体系 -- 安全性测试 •代码安全审查 • 区块链底层代码使用的 Rust 编程语言,使用开源 的 rust-clippy 对底层代码进行审查 • 使用自建的 SonarQube 服务对代码对区块链中间 件进行审查 • 使用 OWASP Dependency-Check 对 Java 的第三 方依赖库进行审查 •使用 npm audit 对 javascript 第三方库进行审查
20. 区块链质量保障体系 -- 安全性测试 •Docker 基础镜像的安全审查 •JFrog Xray 提供专业的 Docker 镜像漏洞检测服务,并提供详细的测试报告
21. 区块链质量保障体系 -- 安全性测试 •链共识协议的安全 •共识协议支持拜占庭容错,恶意节点的个数不超过总数的三分 之一,最终非恶意节点能够达成共识 •拜占庭测试,比较著名的测试方案是 libra 的 Twins 方案,通过 复制相同的共识实例制造恶意节点 ,指定节点数下穷举不同的 网络拓扑,进行拜占庭测试 •编写可测试、测试友好的程序,CITA 支持通过修改配置文件控 制节点投空票或拒绝投票,进而支持实现拜占庭测试的自动化
22. 区块链质量保障体系 -- 安全性测试 •智能合约的安全 •使用安全模板,比如 OpenZeppelin •进行代码审查 •使用三方审查服务,比如 Mythx 、OpenZeppelin •自建安全审查服务,比如 Mythril
23. 区块链质量保障体系 -- 安全性测试 •软件数据的安全 •数据不可篡改性测试,测试修改落盘数据后,节点运行失败 •TLS 测试,测试节点间的通讯加密 •CA 测试,测试仅通过 CA 验证的节点间才可进行通信 •人的安全 •所有发布件均由 CI 生成,减少人为干预 •所有的发布件,必须要通过 CI 检测,避免人的失误 •软件的版本号信息,带上软件代码的 Commit Id,版本发布前需确认和代码 Commit Id 一致 •对发布件生成 sha256 数字指纹,发布前需确认发布件的 sha256数字指纹和测试件的 sha256 数字指纹一致
24. 区块链质量保障体系 -- 发版策略 •经过功能、性能、稳定性和安全测试,发布 RC 版本 •RC 版本经实验性项目验证无问题后,再正式发版 •安全第一,绝不带着安全隐患发版 •已发布的版本,线上有问题即日即跟即定位
25. 目录 1 区块链测试现状 2 区块链质量保障体系建设 3 愿景 25
26. 愿景 CI、 CD 能够更大程度的解放人力 喝着茶,坐着就把版本发了