前端质量利器-马可代码覆盖率平台
如果无法正常显示,请先停止浏览器的去广告插件。
1. 2021 vivo开发者大会
互联网技术专场
vivo商城前端专家
2. 2021.12.16 vivo开发者大会-互联网技术专场
3. 2021.12.16 vivo开发者大会-互联网技术专场
4. 小步快跑、快速迭代、拥抱变化,不追求一开始就尽善尽美,而是
把最核心的东西先交付MVP
Short Cycle
项目特点
根据市场反馈来对需求进行验证和矫正,以灵活敏捷的改变调整去
适应变化,在一次次持续迭代中达到最终目标
Frequent Change
High Complexity
分布式、微服务、高性能、高可用等各种架构让本就复杂的业务变
得更加复杂
2021.12.16 vivo开发者大会-互联网技术专场
5. 面临挑战
保险起见,把相关功能都回归一遍吧
测了半天,到底还有哪些代码没覆盖到
有没有偷偷改了一些我不知道的地方
改了好多,改回归哪些功能
项目越来越大,到底哪些代码是没用的
改了那么多,测试都回归到了吗
自动化测试开发成本好大
2021.12.16 vivo开发者大会-互联网技术专场
6. 无法准确的识别
很难用
来提升测试效率,从而降低项目成本
的测试方案,
面临挑战
无法全面的知道 ,很难通过执行数据,
来 从而提升项目质量
2021.12.16 vivo开发者大会-互联网技术专场
7. 解决方案
在集成测试 [1] 期间,采集代码覆盖率 [2] ,并上
报到平台中进行合并展示
1. 是单元测试后软件测试过程的第二个层次。将所有模块按照设计
要求组装成为子系统或系统,进行集成测试
2. 是一种通过计算测试过程中被执行的源代码占全部源代码的比例,
进而间接度量软件质量的方法
2021.12.16 vivo开发者大会-互联网技术专场
8. 前端所有的测试都是在各端进行的,测试产生的数据留着各个终端,
很难准确合并,不像JaCoCo所有人访问的数据都统计在一个服务器
技术难点
前端代码发版非常频繁,在测试的时候,每天可能发版好多次,
代码的变更导致覆盖率数据完全失效
2021.12.16 vivo开发者大会-互联网技术专场
9. 2021.12.16 vivo开发者大会-互联网技术专场
10. 不挑业务,框架,对现有
代码零侵入,一键即可接入
马可平台
支持多用户,多报告实时
合并与查看
支持增量报告,更加精准
的了解代码覆盖率情况
支持多种编程语言
多种拓展工具方便用户使用,比
如代码对比,git blame等等
通过大盘实时查看覆盖率
走势,了解项目质量趋势
马可平台
打通IM软件,定时推送
项目覆盖率情况
不仅支持直接接入,还支
持一键私有化部署
2021.12.16 vivo开发者大会-互联网技术专场
11. 马可平台
改动了哪些文件
是否被测试验证
改动了哪些地方
2021.12.16 vivo开发者大会-互联网技术专场
12. 2021.12.16 vivo开发者大会-互联网技术专场
13. 技术方案
2021.12.16 vivo开发者大会-互联网技术专场
14. Web —— 已完成
接入层
一键接入
马可平台
服务层
展现层
其他技术栈——适配中
其他语言——预研中
Vue React 各种小程序 Node Java Go
Angular …… Typescript …… Python ……
多语言适配
区分环境
智能上报
报告管理 项目管理 用户管理
消息管理 任务管理 代码管理
问题管理 历史管理 接入管理
登录/登出 全局概览 产品文档
问题反馈 在线客服 项目管理
报告管理 报告趋势 报告展示
2021.12.16 vivo开发者大会-互联网技术专场
15. 服务层(处理数据)
接入层(采集数据)
源文件
报告1-N
插桩方式
数据流向图
编译时插桩
Vue/React/ng.
展现层(展示数据)
系统功能
OAuth登录
是否存在
旧报告
运行时插桩
Node
是
预处理文件
读取报告hash
添加SDK
用户管理
目标文件
hash是否变化
部署CDN
否
http下载
项目管理
是
最终文件
http上传
终端
Gitlab获取文
件对比信息
版本管理
Diff算法
行偏移算法
报告管理
……
合并算法
系统集成
保持新报告
报告1
报告2
报告3
报告4
报告5
报告N
2021.12.16 vivo开发者大会-互联网技术专场
16. 技术方案
技术架构
服务层
展现层
2021.12.16 vivo开发者大会-互联网技术专场
17. 提供各语言
各语言
提供各语言
各语言
接入
提供各语言
上报
各语言
2021.12.16 vivo开发者大会-互联网技术专场
18. 所有语句的执行率
接入层-插桩-维度
所有有效代码行的执行率,和语
句类似,但是计算方式略有差别
所有函数的被调用率
马可平台
所有代码分支如 if、
三目运算的执行率
2021.12.16 vivo开发者大会-互联网技术专场
19. 编译时
babel
接入层-插桩-过程
源码
AST
运行时
node
语句
维度标记
分支
输出标记源码
函数
行
2021.12.16 vivo开发者大会-互联网技术专场
20. 获取相对路径
接入层-插桩-实现
1
2
调用istanbul-lib-instrument插桩
添加自定义参数
3
2021.12.16 vivo开发者大会-互联网技术专场
21. ( Visibilitychange 事件)
( window(global)._coverage_ )
接入层-上报
( onShow onHide )
( window (global).make )
(定时任务)
2021.12.16 vivo开发者大会-互联网技术专场
22. 技术方案
技术架构
接入层
展现层
2021.12.16 vivo开发者大会-互联网技术专场
23. 马可平台
服务层
报告管理 项目管理 用户管理
消息管理 任务管理 代码管理
问题管理 历史管理 接入管理
2021.12.16 vivo开发者大会-互联网技术专场
24. 报告三要素
覆盖率信息 语句覆盖率
分支覆盖率
函数覆盖率
行覆盖率
项目信息 项目信息
分支信息
文件hash
构建时间
报告管理
通过接入层采集的覆盖率信息,和项目
信息,然后关联Git平台的文件信息,
这样才能展示一个完整的覆盖率报告
文件地址
文件信息
文件内容
Git信息
2021.12.16 vivo开发者大会-互联网技术专场
25. main.js
报告合并流程
1
2
3
4
5
6
7
8
9
10
11
main.js
let a = 1
let b = -2
function abs(n) {
if (n < 0) {
return -n
} else {
return n
}
}
console.log(abs(a))
console.log(abs(b))
小美
let a = 1
let b = -2
function abs(n) {
return Math.abs(aaa);
}
console.log(abs(a))
console.log(abs(b))
小花
1
2
3
4
5
6
7
8
9
10
11
小美
2021.12.16 vivo开发者大会-互联网技术专场
26. 开始
接受报告
否
是否存在老
报告
获取老报告
保存新报告
结束
是
获取新老报告构
建时间
报告合并流程
对比报告构
建时间
OAuth
本地代码未更新
新报告构建时间 < 老报告构建时间
git
放弃报告
新老报告版本一致
新报告构建时间 = 老报告构建时间
直接合并
合并算法
否
新版本发布
新报告构建时间 > 老报告构建时间
获取文件变
更信息
遍历文件
判断文件
是否变更
是
Diff算法
行对应算法
2021.12.16 vivo开发者大会-互联网技术专场
27. 马可平台
GET /projects/:id/repository/compare?from=master&to=feature
增量报告-变更内容
解析 @@ ......... @@ 里面的内容,+/-表
示变更前后,两个数字分别表示从哪一行开始,
总共改了几行
-2,6: 修改前文件从2行开始,直到第 7 行
+3,8: 修改后文件从3行开始,直到第 10 行
2021.12.16 vivo开发者大会-互联网技术专场
28. 增量报告-计算增量覆盖
2021.12.16 vivo开发者大会-互联网技术专场
29. 用户管理
马可平台
主流 Git 管理平台全部打通
2021.12.16 vivo开发者大会-互联网技术专场
30. 技术方案
技术架构
接入层
服务层
2021.12.16 vivo开发者大会-互联网技术专场
31. • 支持实时报告
• 支持代码对比
2021.12.16 vivo开发者大会-互联网技术专场
32. A javascript text differencing
implementation.
Based on the algorithm
代码对比
proposed in "An O(ND)
Difference Algorithm and its
Variations" (Myers, 1986).
2021.12.16 vivo开发者大会-互联网技术专场
33. count:行数
对象数组
value:具体代码
added:是否新增
removed:是否删除
代码对比
2021.12.16 vivo开发者大会-互联网技术专场
34. 2021.12.16 vivo开发者大会-互联网技术专场
35. 总结规划
前端包括小程序,node
语言包括JAVA,GO等
马可平台
整体打包开源
拥抱社区
2021.12.16 vivo开发者大会-互联网技术专场
36. 2021.12.16 vivo开发者大会-互联网技术专场
37. 2021 vivo开发者大会
互联网技术专场
宋加超 | vivo商城前端专家
相关技术文章后续
将在公众号发布
敬请关注