薮猫科技对稳定性的思考与实践

作者: 薮猫科技发布时间: 12/12/2023

在游戏世界中,比起不合作的队友,更令人沮丧的是网络不稳定或程序崩溃的问题。除了让玩家感到沮丧和无法进行游戏外,这样的问题往往会导致失败,并可能引发队友的抱怨和举报。

 

若这种情况出现在我们工作场景中,想象一下,如果稳定性问题频繁出现,我们可能会面临从投诉和举报到更严重的业务损失等一系列问题。这种想象只要稍微一思考,就足以让人恐惧。

 

稳定性对于任何产品或服务都具有至关重要的意义。一个稳定的系统可以提供良好的用户体验,提高用户满意度,并构建可靠的品牌形象。薮猫科技深知稳定性的重要性,并将其视为保护客户价值的关键要素。本文将分享薮猫科技在提升产品稳定性方面的一些思考和实践。

 

对稳定性的投入

 

产品的鲁棒性是影响稳定性的最重要的因素。通俗地说,稳定性就是要尽可能减少线上问题,尽可能不影响业务的正常运作。如果用技术语言来解释,那就是在任何情况下都不会出现服务异常中断或资源泄露,同时在非正常输入和非正常压力下,服务在可接受的延迟范围内的正确响应率不会低于一定的比例。

 

>>>设计层面保障

终端安全整体在往 Security All in One 的趋势发展,相比较于之前多个安全终端软件打架,在一个终端塞进所有功能的初衷是美好的,出了问题,只需要找一家乙方排查即可。对开发者来说,需要对整体软件架构进行更全面的设计,而不是简单粗暴的多个进程糅杂在一起。

 

代码层面整体以「插件化」与「模块化」为主,将能力与业务逻辑进行合理的拆分与解耦。功能层面对每个模块做成开关式启停、冲突的驱动或者异常均要进行打点、关键 Crash 信息远程上报等。

  • 插件化设计:通过插件化设计,我们将系统的各个功能模块独立开发和维护,降低了模块间的耦合度,提高了系统的可扩展性和稳定性。

  • 模块化设计:采用模块化设计可以将系统拆分成多个独立的模块,使得每个模块的功能清晰明确,易于测试和维护。

 

过往经验来看,从初始就对稳定性及时并持续投入会比事后补救导致的各种fix会舒服很多,但落实稳定性投入远比要求代码质量难很多。

 

>>>流程层面保障

三个基本共识:

01、尊重一个基本事实:是人一定会犯错,是人写的代码就会有漏洞。

02、贯彻一个基本意识:敬畏发布,敬畏风险,虽然我们尊重人性,但不能任由人性自由发挥,不能视客户价值于无物。

03、遵守一个基本原则:不犯低级错误,不犯重复性错误,不犯重大错误。

 

基于以上共识,我们设计了符合自身诉求的研发流程,保证:变更强管控、无测试不上线、发布必有卡口。

  • 变更强管:我们严格控制系统的变更过程,确保每次变更都经过充分的测试和评估,以减少潜在的风险。

  • 无测试不上线:我们坚持在上线前进行全面的测试,确保系统在发布前达到预期的稳定性水平。

  • 发布必有卡口:我们设立了发布卡口,对每次发布进行严格的审核和验证,以确保系统的稳定性和可用性。

 

 

在开发&自测阶段,通过用例评审、高频 CI(主干定时,持续触发 TC),尽量收敛问题在提测之前。

 

 

在测试阶段,通过构建丰富的完整测试流程,充分发现问题。

 

兼容性测试中⾯临的难点

  • 设备覆盖:设备类型、系统版本

  • ⽆⾃动化:消耗⼤量⼈⼒劳⼒,效率低下

 

新老版本升级

  1. 1 ---升级---> Vn(最新)
  2. V2 ---升级---> Vn(最新)
  3. V3 ---升级---> Vn(最新)
  4. ...
  5. Vx ---升级---> Vn(最新)

 

  • 保存历史⾥程碑版本

  • 按顺序批量执⾏覆盖升级

  • 执⾏升级后的测试,并校验是否符合预期

 

自动化目标

  • 多设备⾃动化稳定运⾏,运⾏数据沉淀可分

  • 测试报告易读,⾃动化场景覆盖全(结合线上场景度量)

 

 

如何保障持续投入?

 

>>>把「稳定性」写进老板的OKR

拒绝走马观花式的做稳定性,将其变成常态化的工作项。

 

将稳定性直接写到产研线最高负责人的 OKR 中,拆解不同 KR 到质量团队、研发团队与运维团队,设定不同事项的第一责任人,在定期进度沟通中及时同步。

 

 

>>>保障实打实的资源投入

说一千,道一万,都不如实打实的资源投入。

 

  • 独立测试团队,具备发布否决权

  • 迭代内的独立测试周期时间保障

  • 周期性的质量 Review 会,对问题进行汇总与分类,明确下一阶段的重点投入部分

 

 

写在最后

 

敏捷高效一直是推动薮猫科技不断自我迭代的动力,而稳定且易用则是我们对客户的承诺和追求。如果我们要对稳定性进行一个普遍的定义,薮猫科技的观点是:稳定性是优秀的架构设计实现、迭代过程的质量保证、持续的在线应急机制和方法、高效专业的技术团队,以及优秀的项目管理和团队协作的综合体现。

 

稳定性是一个动态的概念,需要我们持续的探索和投入。