Android稳定性-09-Android 稳定性测试方案怎么设计

做 Android 稳定性测试方案,最怕写成一份漂亮但无法执行的文档。标题里有“整机稳定性”“高负载”“长稳”“专项覆盖”,表格里有一长串设备和场景,真正开跑时却发现三个问题:设备不够,日志抓不全,异常发生后没人知道下一步该做什么。

方案设计不是把所有测试类型罗列一遍,而是把版本风险翻译成一组可以调度、可以复查、可以决策的验证活动。它要回答几个非常朴素的问题:这个版本最可能在哪里坏,什么样的测试能更早发现,发现以后如何保留现场,哪些结果足以阻止发布,哪些问题可以带风险继续。

下面按一个真实项目的写法,把 Android 稳定性测试方案拆开讲。假设项目是一台 Android 14 车载中控,新增了相机倒车影像、蓝牙电话、在线导航、媒体播放和 OTA 组件,版本准备进入 Beta 冻结。这个背景会贯穿全文,因为脱离项目条件谈方案,很容易变成空话。

一、方案从风险开始,不从用例开始

稳定性方案的第一版通常不是用例表,而是风险表。车载中控的风险和手机不一样,手机更关注前后台切换、功耗、通信和三方应用兼容,车机还要考虑点火熄火、倒车影像抢占、蓝牙通话、导航持续运行、CAN 信号唤醒、长时间高温座舱。测试方案如果不先把这些风险列出来,后面再多任务也可能打偏。

风险表要写到可以行动的粒度。例如“系统卡顿”太宽,“导航播报时倒车影像弹出导致 SurfaceFlinger 合成压力上升,出现黑屏或触控延迟”就能转成测试场景。“蓝牙不稳定”也太宽,“手机 A2DP 播放时 HFP 来电,再切到倒车影像,电话结束后音频焦点没有恢复”才是可执行场景。

我习惯在方案首页放三列:版本变化、可能影响的系统链路、验证方式。这样评审时不会陷入谁想加什么用例,而是先确认风险有没有遗漏。测试资源永远有限,风险排序比用例堆叠更重要。

二、把版本变化翻译成测试对象

Android 稳定性不是单纯测 APK,也不是只测系统服务。一个版本可能改了 kernel、HAL、framework、系统应用、预装应用和配置文件。方案里必须把变化分层,否则问题出现后无法判断该找谁。

如果相机 HAL 更新了,倒车影像、相机预览、扫码、视频通话都要纳入影响面;如果 PowerManager 或 suspend 策略改了,熄屏唤醒、充电待机、闹钟、蓝牙保持连接都要受影响;如果只升级了导航 App,也不能只跑导航路径,因为它会持有定位、网络、音频焦点和前台服务。

方案里的对象建议按“系统层、能力层、业务层”写。系统层看重启、Watchdog、Native crash、内存泄漏;能力层看相机、音频、定位、蓝牙、Wi-Fi;业务层看用户路径和场景组合。这样研发评审时能对应到模块,项目管理看时也能对应到功能风险。

三、明确准入前提和退出条件

很多稳定性测试失败,不是因为脚本写得差,而是前提没守住。版本刚能开机就开始三天长稳,最后得到一堆重复 crash;设备频繁离线却把离线时间算进通过率;测试过程中临时刷了补丁,报告里却仍然写同一个版本。方案必须写明什么时候可以开始,什么时候必须暂停。

准入前提至少包括:基本冒烟通过、关键业务能闭环、日志权限可用、debug 入口没有被关闭、设备供电和网络可控、问题单通道畅通。退出条件包括:阻断问题达到阈值、同类系统级异常重复出现、设备环境无法保障、版本被替换、核心日志缺失。

退出条件不是为了少跑测试,而是为了避免制造无效数据。稳定性测试一旦进入长周期,最贵的是时间。明知版本已经被 Watchdog 打穿还继续跑 72 小时,只会把问题列表变长,却不会让结论更准确。

四、测试范围要覆盖层次而不是覆盖名词

一个完整方案通常包含整机随机、业务遍历、专项稳定性、长稳、高负载、极限场景和回归复测。它们的目的不同,不能用一套通过率解释所有结果。整机随机更适合暴露广谱异常,业务遍历更适合验证真实路径,专项稳定性盯模块边界,长稳看资源漂移,高负载看系统余量,极限场景看恢复能力。

范围设计时要避免“每类都来一点”的平均主义。车载项目早期应该把倒车影像、蓝牙电话、导航、媒体和熄火唤醒放在高优先级;平板项目可能更关注多窗口、横竖屏、键盘鼠标、视频会议;手机项目要看蜂窝、Wi-Fi、相机、支付、通知和后台保活。

方案评审时可以问一个问题:如果这类测试失败,我们能据此做什么决策?如果回答不上来,说明这项测试可能只是为了让表格好看。

五、完整案例:车载 Beta 版本稳定性方案

项目背景:Android 14,四核中端 SoC,4GB 内存,64GB eMMC,双屏显示,支持倒车影像、蓝牙电话、在线导航、USB 媒体和 OTA。Beta 版本相对 Alpha 新增了相机 HAL 优化、蓝牙协议栈补丁、导航 SDK 升级和系统休眠策略调整。

方案把风险拆成六组。第一组是系统基础稳定性,验证开机、重启、黑屏、ANR、Native crash 和 Watchdog。第二组是倒车影像专项,验证频繁挂倒挡、导航运行中挂倒挡、电话中挂倒挡。第三组是蓝牙通信,验证配对、回连、通话、媒体音频焦点。第四组是导航长时间运行,验证定位、网络、TTS 和前后台切换。第五组是高负载,组合 CPU、I/O、网络下载、媒体播放和温升。第六组是极限恢复,验证低电压、存储接近满、弱网、USB 频繁插拔和休眠唤醒。

最终计划不是写成“跑 100 小时”这么粗,而是拆成五天:第一天冒烟和环境校验;第二天整机随机与业务遍历并行;第三天专项稳定性;第四天长稳与高负载;第五天极限场景和问题复跑。每晚自动归档 logcat、bugreport、dropbox、tombstone、dumpsys 和任务心跳,第二天早上出日报。

六、任务设计要写清输入、动作、观测和恢复

稳定性任务不是一句“运行 Monkey 12 小时”。它至少包含输入条件、执行动作、采样频率、异常判据、现场保存和恢复流程。比如倒车影像专项,输入条件包括导航正在播报、媒体正在播放、蓝牙已连接;动作是模拟倒挡信号 200 次;观测包括首帧时间、黑屏、SurfaceFlinger 错误、camera provider 状态、音频焦点恢复;恢复包括退出倒挡、停止媒体、重启 camera provider 或整机重启。

方案写到这个程度,执行者即使不是作者也能跑。更重要的是,问题复现时能保持同样条件。很多团队的问题单无法复现,不是因为问题随机,而是第一次运行时的输入条件根本没有被记录。

1
2
3
4
5
6
7
8
adb wait-for-device
adb shell getprop ro.build.fingerprint
adb shell settings put system screen_off_timeout 1800000
adb logcat -G 64M
adb bugreport ./evidence/${SERIAL}_${BUILD}_pre.zip
adb shell dumpsys activity activities > evidence/activity_pre.txt
adb shell dumpsys SurfaceFlinger --latency-clear
adb shell cmd package resolve-activity android.intent.action.MAIN

七、指标不要只写数量,还要写解释方式

方案里的指标分两类:硬指标和解释性指标。硬指标包括系统重启、Watchdog、Native crash、system_server crash、核心业务不可恢复、数据丢失。解释性指标包括 ANR 次数、应用 crash 次数、首帧耗时、内存增长、温度、掉帧、网络恢复时间。硬指标通常直接影响准入,解释性指标要结合场景和趋势。

例如导航 App 在 48 小时长稳中 crash 一次,不能马上和相机 HAL native crash 一次等价。前者要看是否自动恢复、是否影响驾驶路径、是否同一栈重复;后者要看是否造成倒车黑屏、camera provider 是否被系统拉起、是否影响其他进程。指标必须服务于风险判断,而不是把所有异常压成一个分数。

建议在方案中写明“红线、黄线、观察项”。红线阻断发布,黄线需要负责人签字接受,观察项进入后续版本跟踪。这样报告不是简单通过或失败,而是能给版本会议提供决策材料。

八、设备和环境设计决定结论可信度

同一个 Android 版本在不同内存、存储、屏幕、区域配置和外设组合上的稳定性可能差很多。方案不能只写“10 台设备”,要写清为什么是这 10 台。低内存机更容易暴露 LMK 和后台恢复问题,低速存储更容易暴露 I/O 阻塞,高温环境更容易触发降频和相机异常,运营商卡会影响蜂窝注册和短信电话路径。

环境也要写进方案。供电是直流稳压还是普通插排,网络是办公 Wi-Fi 还是独立 AP,蓝牙对端手机型号是什么,USB 盘文件系统是什么,是否使用散热风扇,是否允许自动 OTA,是否有门禁或屏保干扰。这些细节看似琐碎,实际会决定异常是否能复现。

我见过一次“整机夜间重启”的问题,最后发现是实验室插排定时断电。报告如果没有记录供电拓扑,研发会被带偏很久。稳定性方案对环境的描述越具体,后面排除干扰越省时间。

九、日志和证据策略要提前写进方案

日志不是出问题后临时想起来抓的。稳定性任务通常持续数小时到数天,等人工发现时关键日志可能已经滚掉。方案里要提前写清 logcat 缓冲区大小、dropbox 拉取频率、bugreport 触发时机、tombstone 目录归档方式、Perfetto 或 systrace 是否启用。

证据目录建议按 project/build/serial/task/run_id/timestamp 组织。每个任务生成一个 meta.json,记录设备、版本、脚本参数、开始结束时间、异常类型和文件列表。这样日报、问题单、复跑记录都能引用同一个路径,不需要到处找压缩包。

1
2
3
4
5
6
7
8
adb shell logcat -b all -v threadtime -T 1 > logs/live.log
adb shell ls -lt /data/tombstones
adb shell dumpsys dropbox --print > logs/dropbox.txt
adb shell dumpsys batterystats --charged > logs/batterystats.txt
adb shell dumpsys meminfo system_server > logs/meminfo_system_server.txt
adb shell dumpsys window displays > logs/window_displays.txt
adb shell dumpsys power > logs/power.txt
adb bugreport logs/bugreport_after.zip

十、人员分工写到动作层

稳定性方案常常写了负责人,却没写每个人负责什么动作。执行同学负责跑任务和看心跳,平台同学负责设备和归档,模块测试负责专项复现,研发负责首轮归因,项目经理负责阻断决策。分工如果只停留在姓名,问题发生后会互相等待。

建议给每类异常指定默认处理路径。系统重启由系统稳定性负责人先看 pstore、last_kmsg 和 reboot reason;ANR 由业务测试先确认路径,再交对应应用或 system_server 服务负责人;Native crash 由专项负责人确认进程和 tombstone;黑屏由显示链路负责人看 Window、SurfaceFlinger、Display 和 Power。

这不是把测试变成研发,而是让第一轮信息整理更高效。稳定性测试最大的价值之一,是把混乱现场整理成研发能直接进入的入口。

十一、测试节奏要和版本节奏绑定

方案必须说明它运行在版本流程的哪个位置。开发频繁合入阶段适合短周期随机和专项冒烟;转测后适合 24 小时整机和业务遍历;冻结前适合 72 小时长稳、高负载和极限恢复;发布前适合 Top 问题复跑和低风险抽样。

如果所有测试都堆到最后一周,长稳发现的问题很难修完,修完也没有时间复跑。更合理的做法是把稳定性测试前移:每个候选版本都跑短任务,问题趋势稳定后再投入长任务。长稳不是第一次发现基础崩溃的地方,而是确认资源漂移和低频异常的地方。

节奏设计还要考虑设备冷却、日志上传、人工分析和复跑时间。看起来 72 小时任务只占三天,实际从准备到结论至少需要四到五天。方案如果不预留分析窗口,最终报告只能草草写结论。

十二、方案评审表

下面这张表适合放进评审材料。它不是完整用例表,而是让所有人快速看到测试意图、证据和准入关系。

测试块 主要风险 执行方式 关键证据 准入关系
整机随机 广谱 Crash、ANR、黑屏、重启 多设备 Monkey 与轻业务混跑 logcat、bugreport、dropbox、tombstone 系统级异常阻断
业务遍历 真实路径恢复失败、状态错乱 导航、电话、媒体、设置路径循环 路径日志、截图、dumpsys activity 核心路径失败阻断
倒车影像专项 黑屏、首帧慢、相机服务异常 倒挡信号高频切换叠加导航电话 SurfaceFlinger、camera dumpsys、视频证据 安全相关阻断
长稳 内存泄漏、资源耗尽、后台退化 48 到 72 小时混合业务 资源趋势、周期 bugreport 趋势恶化黄线或阻断
高负载 系统余量不足、温升降频 CPU/I/O/网络/媒体组合 top、thermal、perfetto、帧率 不可恢复阻断
极限恢复 低电、弱网、满存储、插拔恢复差 边界条件下注入动作 恢复时间、错误码、系统日志 核心能力不可恢复阻断

十三、常见误判

第一种误判,是把“没有发现问题”写成“版本稳定”。如果任务只覆盖了少量设备、短时间和单一路径,结论只能说本轮未触发目标异常,不能扩大到整个版本。稳定性结论必须和覆盖范围一起出现。

第二种误判,是把环境问题全部剔除。供电、网络、脚本、设备老化确实可能造成干扰,但如果用户现场也会遇到类似边界,完全剔除会让风险被低估。正确做法是标记来源,再判断是否需要产品增强恢复能力。

第三种误判,是把 crash 次数当作唯一排序。一次倒车黑屏可能比十次可自动恢复的三方应用 crash 更严重。排序要看影响路径、恢复能力、出现条件、复现概率和是否涉及安全或核心体验。

第四种误判,是用长稳替代专项。长稳能发现时间相关问题,但不能保证覆盖倒车、通话、蓝牙回连、弱网恢复等模块边界。专项缺失时,长稳通过也不能说明关键能力可靠。

十四、从方案到日报的衔接

方案不是写完就结束,它应该直接生成日报结构。日报里应当继承方案的测试块、设备组、任务编号和准入规则。这样项目每天看到的是计划执行进度,而不是零散异常。

日报建议包含四块:今日执行、异常新增、问题推进、明日计划。今日执行对应任务完成度,异常新增按严重级别和模块归类,问题推进写复现、归因、修复和验证状态,明日计划说明资源调整。

当日报连续几天使用同一套任务编号,趋势才看得出来。例如 LONG-03 连续三轮都出现 system_server PSS 增长,即使还没崩溃,也应该进入风险列表。没有编号体系,趋势只能靠人记忆,稳定性管理会很快失控。

十五、方案变更要留记录

稳定性测试过程中经常要调整方案:版本换包、设备损坏、脚本修复、临时增加专项、删除无效任务。这些调整可以做,但要记录原因和影响。否则最后报告里的执行结果会和最初计划对不上。

变更记录至少写清变更时间、发起人、变更内容、影响范围和是否需要补跑。比如第三天发现蓝牙回连问题,临时增加 6 小时蓝牙专项,这会占用原计划的高负载设备,就要在报告中说明高负载覆盖减少,并给出补跑安排。

方案是项目里的工作契约。契约可以变,但不能悄悄变。稳定性测试越长,变更记录越重要。

方案评审检查清单

方案评审不要只看用例数量,而要逐项确认输入、环境、观测、停止条件和交付物是否闭合。下面这份清单适合在版本转测前、冒烟结束后、稳定性大跑前各过一次。每一项都需要能指向具体负责人和证据保存位置。

  • 版本信息、编译时间、指纹、补丁分支已经记录。
  • 设备型号、内存档位、存储档位、区域配置、运营商卡和外设组合已经列清。
  • 每类任务都有启动命令、停止命令、异常抓取命令和恢复命令。
  • 日志目录按设备、任务、轮次分开,能从问题单反查到原始文件。
  • 准入、暂停、复跑、降级发布的规则已经写明。
  • 失败样本不只保留截图,还保留 logcat、bugreport、dropbox、tombstone 或对应专项证据。
  • 脚本误触、环境断电、网络抖动、设备离线这些非产品问题有单独标记。
  • 结论页能看出剩余风险,而不是只有通过率。

输出物模板

稳定性输出物需要让研发、项目、测试和质量负责人看到同一件事。建议固定成一页摘要加若干附件,摘要讲结论,附件保存可复查证据。

1
2
3
4
5
6
7
8
9
10
11
12
稳定性验证摘要
项目/版本:<project>/<build fingerprint>
测试周期:<start> - <end>
设备组合:<model>/<sku>/<region>/<carrier>/<memory>
任务范围:<整机/专项/高负载/极限/长稳/业务遍历>
执行概况:计划 <N> 项,完成 <N> 项,中断 <N> 项,阻断 <N> 项
核心异常:Crash <N>,ANR <N>,Native crash <N>,Watchdog <N>,重启 <N>,黑屏 <N>
Top 风险:
1. <现象> / <影响范围> / <证据目录> / <当前状态>
2. <现象> / <影响范围> / <证据目录> / <当前状态>
准入建议:<通过/有条件通过/暂停/退回>
附件:任务清单、原始日志索引、问题单列表、复跑记录、环境异常记录

执行前的基线记录

测试方案设计在真正开跑之前,需要先建立一份基线。基线不是形式化截图,而是把整机和关键业务链路当时的状态固定下来:版本指纹、启动时间、账号状态、网络状态、权限状态、后台进程、外设连接、温度、电量和存储余量都要留下。后续出现黑屏、重启、ANR 或业务不可恢复时,分析人员才能判断这是任务引入的变化,还是设备在任务开始前已经处于异常边缘。

基线记录还有一个作用,是让不同轮次可比较。比如同样是倒车影像、导航、蓝牙电话和媒体播放组合,第一轮在 38 摄氏度、Wi-Fi 满格、存储剩余 20GB 下运行,第二轮在 47 摄氏度、弱信号、存储剩余 800MB 下运行,两轮结果不能直接并排解释。稳定性结论最怕把不同条件下的数据混在一起,最后看似样本很多,实际每个样本都不可比。

执行同学可以把基线做成固定脚本,但脚本输出不能只扔在日志目录里。日报和问题单至少要引用基线摘要:设备、版本、环境、关键开关和任务入口。系统稳定性负责人拿到问题后,第一眼应当知道这台设备在进入任务时是否健康。

运行中的心跳和哨兵

测试方案设计运行时间越长,越需要心跳。心跳不是简单打印“脚本还活着”,而是周期性确认整机和关键业务链路仍在执行预期工作。对于倒车影像、导航、蓝牙电话和媒体播放组合,心跳可以包含前台包名、关键服务状态、网络连通性、最近一次业务动作、最近一次截图和设备在线状态。

哨兵指标用于提前发现坏趋势。任务完成率、系统异常数和资源趋势如果连续多个采样点朝坏方向移动,就算还没有形成最终失败,也应当在日报里标黄。很多严重问题不是突然出现的,而是先有资源斜率、恢复变慢、错误码增多、温度升高或重试次数变多。把这些早期信号记下来,问题定位会比事后翻大包快很多。

心跳还负责区分脚本失败和产品失败。脚本进程退出但设备业务仍正常,这通常是自动化问题;设备输入无响应、服务异常、日志出现系统错误,而脚本只是最后感知到失败,这就不能简单归为脚本问题。稳定性执行需要这种区分,否则真实风险会被噪声掩盖。

异常发生后的第一分钟

黑屏、重启、ANR 或业务不可恢复刚出现后的第一分钟最宝贵。此时日志还没有被大量覆盖,系统状态也没有被人为操作改变。执行规范里应该要求先保存现场,再尝试恢复。现场保存包括截图、录屏、logcat 时间窗口、bugreport、dropbox、tombstone 和专项 dumpsys、前台 Activity、关键 dumpsys、进程列表和任务控制台输出。

不要一看到异常就重启设备。重启确实能让下一轮继续跑,但也会抹掉很多状态:进程关系、窗口层级、binder 等待、音频焦点、网络连接、挂载状态都可能消失。除非设备已经完全无法连接,否则先抓证据,再恢复任务。

第一分钟还要写清人工动作。如果执行者点击了返回、插拔了外设、切了网络、接了电话,必须写进记录。否则研发看到日志时会误以为这些动作来自系统或脚本。稳定性现场的每个人工干预都可能改变因果链。

复跑策略和样本解释

复跑不是机械重复。测试方案设计的复跑至少分三类:同条件复跑、缩小范围复跑、交叉条件复跑。同条件复跑确认问题是否稳定;缩小范围复跑找最小触发路径;交叉条件复跑判断是否和设备、区域、外设、网络或温度相关。

如果问题只出现一次,也不能直接删除。要看它的影响面和证据强度。一次黑屏、重启、ANR 或业务不可恢复如果涉及系统重启、数据丢失、核心能力不可恢复,就值得进入风险列表;反过来,某个轻微 UI 问题重复很多次,也未必比一次系统级异常更严重。样本解释要看影响,不只看次数。

复跑结论建议写成四种状态:已稳定复现、条件相关复现、暂未复现但证据有效、证据不足关闭。这样比简单写“复现/不复现”更适合稳定性问题,因为许多问题本来就依赖长时间、环境和状态累积。

问题单应该怎么写

测试方案设计发现的问题单要让系统稳定性负责人能直接进入分析。标题里写清现象和场景,不要只写“稳定性异常”。正文第一段说明版本、设备、任务、轮次、发生时间和用户可见影响;第二段列出复现路径或触发条件;第三段给证据索引;最后写当前恢复方式和复跑状态。

证据索引要比附件名更细。比如 bugreport.zip 太粗,应该写 bugreport.zip: SYSTEM LOG 14:32:10 附近出现 mediaserver native crash,或者 traces.txt: main thread waiting binder reply。这样研发不用先花半小时找入口。

问题单也要避免过度归因。测试侧可以提出怀疑方向,例如bugreport、dropbox、tombstone 和专项 dumpsys显示异常集中在某个服务,但不要在证据不足时直接写“某模块代码错误”。好的问题单给入口、给影响、给条件、给证据,让模块负责人继续收敛。

数据看板该展示什么

测试方案设计的数据看板不应只展示通过率。通过率适合管理视角,但稳定性分析还需要异常类型分布、设备分布、版本分布、任务分布、发生时间分布和复跑状态。特别是任务完成率、系统异常数和资源趋势,最好用趋势线展示,而不是只给平均值。

看板的第一屏可以放阻断问题、今日新增、长期未关闭、复跑失败和环境异常。第二屏放任务覆盖和资源趋势。第三屏放证据归档完整率。如果证据归档完整率很低,异常数量再漂亮也不值得相信。

对于车载中控项目,还建议加一个“现场相似度”字段:实验室条件和用户现场差多少。比如车载高温、海外运营商、仓库弱网、会议室蓝牙密集环境都可能让实验室结论偏离真实使用。看板能提醒团队补足这些差距。

和研发评审时的沟通方式

稳定性问题评审不要从“谁负责”开始,而要从时间线开始。把倒车影像、导航、蓝牙电话和媒体播放组合中的动作、系统状态、异常日志和用户现象按时间排出来,先让所有人看到同一条线。时间线清楚后,再讨论可能归属。

评审时测试需要坚持两件事:一是用户影响不能被技术细节稀释,二是证据边界不能被猜测扩大。比如黑屏、重启、ANR 或业务不可恢复可能只出现一次,但如果用户需要重启才能恢复,它就是高风险;同时,如果现有日志只能说明某服务异常,就不要把根因直接推到驱动。

每次评审结束都要留下动作项:谁看哪份日志,谁补哪轮复跑,谁提供带符号栈,谁确认是否已有补丁,下一次同步时间是什么。没有动作项的评审只是在交换观点,不会推动版本风险下降。

发布决策中的表达边界

测试方案设计最终服务于发布决策,但测试结论要有边界。可以说“在这些设备、这些场景、这些时长内未再触发同类异常”,不要把结论扩大到所有用户、所有地区和所有外设。边界写得清楚,项目管理才能知道哪些风险已覆盖,哪些风险只是接受。

如果仍有未关闭问题,报告要写影响路径、触发条件、规避方式、修复计划和灰度建议。比如黑屏、重启、ANR 或业务不可恢复只在某个低频组合出现,且有明确规避,可以进入有条件发布;如果它影响核心路径且无恢复手段,就应当暂停。稳定性测试不是替项目做商业决定,而是把技术风险讲清楚。

发布会上的表达要避免两种极端:一种是只报喜,另一种是把所有观察项都说成阻断。成熟做法是把问题分成阻断、需签字接受、继续观察和已关闭四类,并给出证据链接。

现场经验:小问题如何变成大事故

很多车载中控事故最初都像小问题。一次偶发日志写入失败、一次音频焦点没有恢复、一次网络切换后重试慢、一次进程被杀后页面空白,如果只看单次,都容易被认为影响有限。但稳定性测试要问的是:它在长时间、多设备、多人使用和边界条件下会不会放大。

例如倒车影像、导航、蓝牙电话和媒体播放组合中某个后台任务失败,如果用户马上重试能恢复,风险不高;如果失败会堆积队列、占满存储、拖慢启动,几小时后就可能演变成系统级问题。稳定性分析要关心这种链式后果。

所以报告里最好写“后续影响”。异常发生后系统是否自动恢复,是否留下脏状态,是否影响下一轮任务,是否需要清数据或重启,是否会让日志和存储继续膨胀。这些内容比单纯描述弹窗更有决策价值。

把经验固化成资产

每轮测试方案设计结束后,都应该沉淀三类资产。第一类是可复用脚本,包括任务启动、采样、异常抓取和清理。第二类是案例库,包括黑屏、重启、ANR 或业务不可恢复的时间线、证据和根因。第三类是规则库,包括准入条件、停止条件、阈值和误判处理。

资产沉淀的关键是可检索。问题标题、模块、设备、版本、关键词、日志特征和修复提交都要能被搜索。下一次出现相似日志时,测试和研发可以迅速查到历史案例,而不是重新走一遍弯路。

稳定性体系不是靠某一次大测试建立的,而是靠每个版本把经验留下来。方案模板和风险库如果能持续积累,团队会越来越快地区分新问题、已知问题、环境问题和可接受风险。

小结

稳定性测试写成文章容易显得抽象,真正落到项目里却很具体:谁来跑、跑什么设备、用什么负载、出了问题抓哪些证据、什么时候停、怎样复跑、最后谁能据此做发布判断。只要这些问题没有写清,测试规模越大,后期返工越多。

09 到 16 这一组内容分别覆盖方案、矩阵、Monkey、业务路径、长稳、高负载、极限和专项。它们不是互相替代的关系,而是从不同角度压同一个系统。一个成熟团队会把这些能力组合起来,让随机问题、路径问题、资源问题、边界问题和模块问题都能被看见,并且能被带回到可复查的证据链里。