简介
大家好,我是红茶。过去有人问我,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的生命线,而它作为一个复杂的系统性问题,需要具体体系化的专业知识,后续我会介绍各个维度的知识和建设方法,欢迎交流。
欢迎交流和加入我们的团队
团队和招聘介绍