1、移动端代码质量观测实践沈柯哔哩哔哩 质量保障中心 资深开发工程师沈柯负责C端社区&基础架构业务质量保障、质量提效、团队技术架构、测试技术创新等工作,参与团队质量保障体系优化,推进业务灰度、质量分级、移动端稳定性建设等,十余年移动端相关测试经验,有丰富的移动端自动化测试、专项测试、持续集成、稳定性治理经验,毕业后曾就职于搜狗、阿里巴巴,参与著作阿里测试之道。哔哩哔哩 质量保障中心 资深开发工程师目录CONTENTS移动端质量01 移动端代码测试的挑战02 移动端静态代码质量观测03 移动端动态代码质量观测04 业务落地实践05 01移动端质量常见移动端质量评估体系质量验证方案UI 自动化测试智能
2、遍历测试适配测试启动耗时测试页面兼容性测试性能测试弱网测试显性质量从使用者角度查看应用是否有缺陷、是否稳定、是否有性能问题,比如页面加载是否快速、信息流滑动是否顺畅、页面交互是否卡顿等常见技术方案:Xcode Instrument、PerfDog、录屏分帧、Monkey 等隐性质量软件系统内部的质量状态,代码质量、模块架构、代码效率、代码可读性、代码可扩展性,可统称为代码质量,大量低质量代码容易积累过多的技术债常见技术方案:code review、结对编程、静态代码检查(SonarQube)、动态代码检查问题1:代码隐性质量缺少有效检查工具质量内建自动化测试:单元测试、组件测试、端到端测试,部
3、署流水线,每次提交应用程序代码、配置或环境以及运行时所需要软件发生变化时,都要执行这些测试手工测试:需求评审、需求验证、演示、可用性测试、探索性测试、测试用例管理关于移动端自动化测试性能测试-FPS、内存、CPU埋点自动化测试问题2:移动端 Android、iOS 打包时间+自动化测试时间超过 30 分钟,测试效率低下02移动端代码测试的挑战移动端代码测试标准方案AndroidLocal Tests:JVM 可直接执行的测试用例,不依赖真实或者虚拟设备Instrumented Tests:在真实或虚拟设备上运行的测试,此类测试包括集成测试、端到端测试,以及仅靠 JVM 无法完成应用功能验证的其
4、他测试iOSUnit Tests:基于 XCTest 框架,测试代码编译通过后直接在 Mac 本地执行UI Tests:在真实或虚拟设备上运行的测试,此类测试包括集成测试,需要执行整包编译流程移动端测试环境配置复杂性Xcode、CocoaPods、Android Studio、Gradle、Maven 等工种工具花式编译报错,排查成本高移动端代码测试挑战 代码量价值标准成本代码量(行)Java+Kotlin 百万级OC+Swift百万级存量代码客户端早期注重功能迭代,忽视单元测试、可测性,历史包袱重单元测试构建时间无限期往后推迟,可测改造存量代码风险高客户端代码迭代周期快,代码仓日均更新代码量
5、级大重度依赖集成测试,代码变更影响范围评估能力有限UI 渲染逻辑与业务逻辑耦合,程序状态控制困难;缺少单测最佳实践业务交替频繁,文档化不足,新接手开发/测试同学不熟悉代码逻辑增量代码业务逻辑日均改动代码行数增加/删除近万行增加/删除近万行周均需求数量几十个需求几十个需求如何大规模降低白盒测试成本?如何编写有效的白盒测试用例?如何体现白盒测试带来的价值?如何有效设计函数逻辑的断言?行业内缺少移动端白盒测试最佳实践方案,目前还没有看到移动端大规模执行白盒测试 CI/CD 成功的案例移动端代码测试挑战 可测性程序有一个 Google IO 大会活动详情页,点击“+”按钮用户可以将会话添加到他们的日历
6、中,如果他们已将会话添加到他们的日历中,则该加号按钮将变为“签到”按钮。如果他们再次点击“签到”按钮,会话将从他们的日历中删除移动端代码测试挑战 可测性UI 自动化-Android Instrumented TestsActivityTestRule:此规则提供单个 Activity 的功能测试-带有 Test 函数会被执行-带有 Before 注释的所有方法运行之前启动测试完成并-带有 After 注释的所有方法结束后终止操作步骤:脚本点击+文本,点击以后断言按钮状态是否成功切换成 check 状态单元测试:Arrange Act and AssertPost-Act-State Asser