iOS代码染色原理及技术实践

2020 年 9 月 08 日

iOS代码染色原理及技术实践

背景

随着业务的迅速发展,业务代码逻辑的复杂度增加。QA 测试的质量对于产品上线后的稳定性更加重要。一般 QA 测试的工作流程分为两大项:自动化测试和人工测试。这两种测试后都需要得到代码覆盖率。自动化测试的覆盖率,在双端都有比较成熟的方案。

本文着重介绍人工测试过程中,怎么得到对应的代码覆盖率。涉及到的技术主要是代码染色。以下会先介绍整体的工作流程,再对涉及到的技术一一阐述。

染色流程

流程图中涉及到了双端的关键节点以及技术点。我们重点介绍编译阶段。

  • 编译阶段:生成染色包 (对 IR 文件插桩)

需要在编译中增加编译选项,编译后会为每个可执行文件生成对应的 .gcno 文件。

  • 运行阶段:生成二进制覆盖率文件。

在测试代码中调用覆盖率分发函数,会生成对应的 .gcda 文件。

  • 解析阶段:将二进制覆盖率文件可视化。

编译阶段

在上文可以看出,编译阶段最核心的操作是对 IR 文件进行插桩。

什么是 IR 文件?插桩逻辑是什么?我们往下看。

语言处理系统

一个完整的语言处理系统中,从源程序到可执行的机器代码,如下图所示,历经几个重要模块。而我们上文提到的 IR 文件,是编译器模块中的产物,插桩处理也是在这个模块中进行。这里重点讨论下编译器。

编译器

说起编译器,我们了解到的传统编译器架构分为前端、优化器和后端。

原文链接:【 https://www.infoq.cn/article/ryQ12MGtS0KdxafgZgxl 】。未经作者许可,禁止转载。

登录后可解锁全站优质内容

免费畅享技术公开课、顶尖技术团队访谈、一线互联网大厂技术实践

文章
视频
电子书
研究报告
立即登录
2020 年 9 月 08 日 10:04 915

评论

发布
暂无评论
发现更多内容

React TypeScript 项目基本构建2

JackWangGeek

React

React TypeScript项目基本构建

JackWangGeek

前端科普系列(1):前端简史

vivo互联网技术

html 前端 Web

超市趣味游戏关卡设计

孙志平

架构师0期第十周命题作业

何伟敏

HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第9章FlexBox实战有路网

Geek_8dbdc1

肯耐珂萨D1轮融资资方阵营揭晓,跟投方为中南资本、青发集团

人称T客

安卓移动应用代码安全加固系统设计及实现

几维安全

android 安全评估 移动应用安全

拼多多员工曝离职黑幕:要走可以,要离职证明,没有!

程序员生活志

职场 互联网公司

怎么写一个超棒的 README 文档

程序员生活志

经验总结 文档

云图说丨手把手教你为容器应用配置弹性伸缩策略

华为云开发者社区

Docker 云计算 Kubernetes 容器 云容器引擎

OpenTSDB 数据存储详解

vivo互联网技术

数据库 时序数据库

HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局

Geek_8dbdc1

面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》

小傅哥

Java 小傅哥 hashmap 面经 红黑树

Week10总结

熊威

合约跟单软件开发app,跟单系统开发功能和优势

WX13823153201

区块链 数字货币

HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第7章定位

Geek_8dbdc1

HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第11章有路网移动端主页实战

Geek_8dbdc1

架构师训练营 第 10 周 作业&总结

Jam

作业

Jeff先生

Week10作业1

熊威

智能汽车安全风险及防护技术分析

几维安全

移动应用安全

哈希算法的设计要点、应用场景

多选参数

哈希 hash 哈希算法

为什么需要企业架构师?

周金根

libuv 异步网络编程之 TCP 源码分析

Huayra

网络编程 libuv libuv 源码分析

巴黎世家土味病毒营销,B端创业初期,如何用营销壮大种子用户?

北柯

创业 营销 tob

有限数据量如何最大化提升模型效果?百度工程师构建数据增强服务

百度大脑

人工智能 数据 模型训练 百度大脑

如何让“哑”终端进化,你知道吗?

华为云开发者社区

操作系统 物联网 IoT 华为云 LiteOS

Spark优化之小文件是否需要合并?

华为云开发者社区

spark 数据 cpu 内存 Spark调优

工业互联网网络安全渗透测试技术研究

几维安全

网络安全 数据安全;工业互联网 移动应用安全 渗透测试

HTML5CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第10章有路网PC端主页实战整合

Geek_8dbdc1

跨越计算鸿沟:如何靠软硬件协同突破算力瓶颈?

跨越计算鸿沟:如何靠软硬件协同突破算力瓶颈?

iOS代码染色原理及技术实践-InfoQ