如果系统化建设iOS稳定性领域?

1,499 阅读3分钟

简介

大家好,我是红茶。过去有人问我,iOS哪个领域最有技术深度?我的回答是“稳定性”。App的稳定性是最重要的技术要求,App保持稳定可用,用户才能持续操作,否则再好的体验和功能都体现不了价值。衡量稳定性的指标是Crash率,一般Crash率做到0.1%就是良好的水平,如果可以维持在0.01%就非常优秀了。

系统的复杂度

维持App的稳定性是一个复杂的系统性问题,下面有几个典型的复杂度。

代码存量大

大型项目通常要维护几十万行代码,还有几十万行三方库代码,很多代码没人看过,里面埋着许多雷。

代码变更多

一个蓬勃发展的产品,每个版本新增的代码量很大,很难有充足时间做Code Review,新版本的Crash层出不穷。

系统升级幅度大

苹果做事向来大刀阔斧。iOS每年9月份会做系统大版本升级,系统库内部逻辑的改动会很大,许多原来没问题的调用方式,特别是私有API的使用,可能突然暴雷。

系统库Bug多

iOS系统库其实也埋了很多雷,系统库的雷你要是遇到了可能会怀疑人生,除非你掌握了屠龙之技,熟读系统源码,熟练ARM汇编调试。

语言复杂度高

iOS工程至少要用OC和Swfit,不少中间件和系统库是C和C++实现,Flutter或Weex框架还会用到Dart和JS。

跨端技术多

现在跨端业务框架盛行,RN、H5、小程序、Flutter可能同时存在一个工程里,Flutter带来超过Native3倍的内存压力。

还有许多就不一一描述...

复杂度建模

我归纳了一个复杂度模型,将复杂度分为三个维度来描述

软件系统维度

一行简单业务代码,经过跨语言转化,中间件调用、系统库的调用,语义的解析,编译器的处理,最后变成CPU能识别的指令。每一层都有自己的异常定义,这就像玩跑酷游戏一样,你的代码必须绕过所有异常陷阱,才能安全到达目的地。

你要绕过所有陷阱,就需要了解每个层面的技术知识,都有哪些异常定义,怎么避免触发这些异常。

研发环境维度

软件研发是精细的分工合作,产品负责想清楚业务价值,业务开发负责把业务逻辑写对,测试要负责做质量把关、稳定性专家要负责排查疑难问题。

每个迭代那么多的业务代码要上线,我们希望系统保持稳定性,不能凭一己之力。作为稳定性负责人,你需要建设自动化的测试流程、安全生产规范,培养能产出高质量代码的开发人才。

运行环境维度

生产环境特别复杂,会出现很多实验室无法复现的问题。用户遍布世界各地,网络环境差异很大,业务数据庞大,不同的用户使用,会带来差异巨大的数据输入。

只有深刻掌握用户环境的特点,才能在实验室中进行更充分的覆盖测试,在代码逻辑上针对不同的环境特点进行适配。

稳定性建设方法

综述

稳定性建设是App的生命线,而它作为一个复杂的系统性问题,需要具体体系化的专业知识,后续我会介绍各个维度的知识和建设方法,欢迎交流。

欢迎交流和加入我们的团队

团队和招聘介绍