一、线上问题复盘的重要性
线上问题复盘在产品质量提升、团队管理以及业务目标达成方面都具有至关重要的意义。
从产品质量提升角度来看,通过对线上问题的复盘,可以发现产品在开发、测试等各个环节中存在的不足。例如,开发新功能时可能会影响老功能的流程,若没有及时进行回归测试,就容易出现问题。正如在搜索素材中提到的案例,新功能开发后,由于缺少对之前功能的回归测试,导致属地案调和总部案调无法正常提交。通过复盘,可以促使开发增加对老功能的单元测试,测试增加自动化测试,从而不断提高产品的稳定性和可靠性。
在团队管理方面,复盘能够发现团队的短板,针对性地补齐技术体系,提高团队效率。比如,在处理线上问题的过程中,可以明确各个岗位的职责,加强团队成员之间的协作。同时,通过对线上问题的记录和分享,可以警醒当事人,提醒身边人,避免类似问题再次发生。例如,在一些公司的线上问题管理中,如果没有第一时间邮件报备或者未在 wiki 上记录分享线上问题,会被纳入 KPI 考核,这就促使团队成员更加重视线上问题的复盘和处理。
对于业务目标达成而言,技术团队作为成本中心,需要不断提高自身的交付产出质量,来支撑业务目标更好的达成。线上问题的出现可能会影响用户体验,甚至导致业务中断,给企业带来经济损失和负面影响。通过对线上问题的复盘,可以及时发现问题的根源,采取有效的解决措施,避免问题再次发生,从而保障业务的顺利进行。
总之,线上问题复盘是一个持续改进的过程,有助于避免类似问题发生,提升产品质量,加强团队管理,实现业务目标。
二、线上问题的定义与分类
(一)线上问题的定义
线上问题通常指在互联网服务、软件应用、数字产品或任何在线交互过程中遇到的任何异常情况、错误、缺陷或问题。这些问题可能会阻碍用户的正常使用、影响用户体验,甚至导致数据损失或安全风险。
(二)线上问题的分类
- 技术故障:这类问题涉及软件、应用程序或网站出现的技术缺陷,比如系统崩溃、功能失效、页面加载异常、链接失效等。据搜索素材显示,在没有任何发布的情况下,POP 服务突然开始疯狂 Full GC,观察堆内存监控没内存泄漏,回滚到前一版本问题仍然存在。后来通过查看数据库服务器网络 IO 监控,定位到大 SQL 问题,原来是接口必传参数没传进来且未加校验,导致一次查出几万条记录。
- 用户体验问题:这些问题可能不涉及后端的技术错误,而是关乎于设计、界面、交互逻辑等,使得用户在使用过程中感到困惑、不便或不舒适。例如,线上试衣间类 App,现有的 App 呈现的实际效果是将真实简化为虚拟,用户体验的满意度较低,即使采用旋转模特,也只是多个平面照片的黏合,没有完全达到现实生活中服装上身的效果。
安全与隐私问题:包括数据泄露、未经授权的访问、恶意软件入侵等,这类问题对用户安全和信任度的影响尤其严重。据《2018 网民网络安全感满意度调查报告》显示,当前近五成网民认为我国网络个人信息的保护状况不好,四分之一的网民认为非常不好。过半数的网民表示进行网络购物、社交聊天时个人信息泄露的风险更大。 - 性能问题:涵盖加载时间长、响应迟缓、资源消耗过多等情况,影响用户对产品的整体满意度。比如一些短视频软件开发时,如果存在技术债务,可能会引发服务性能低的线上问题。
- 兼容性问题:指产品或服务在不同的设备、操作系统、浏览器或网络环境下出现的兼容性差异,导致某些用户无法正常使用功能。
- 内容错误:涉及到信息错误、拼写错误、过时的内容、链接错误等,影响用户获得准确信息。
- 支付与交易问题:在线购物或进行其他类型的在线交易时可能遇到的问题,如支付失败、交易中断、优惠代码无效等。
- 服务中断:由于维护、故障或外部攻击导致的服务临时不可用。在线教育系统平台可能受到 DDoS 攻击、恶意软件感染等网络攻击,导致服务中断或数据损坏。
三、线上问题复盘的流程与方法
(一)问题记录
问题记录是线上问题复盘的重要基础。在记录问题时,应详细记录问题发生前的系统状态、用户操作、业务流程等情况,以及问题发生后的现象、影响范围和严重程度。同时,借助完善的日志和监控体系,可以为后续的分析和复盘提供有力的数据支持。例如,根据搜索素材中的内容,在记录线上问题时,可以通过检查数据库、排查 Java 线程栈等方法,获取系统运行的详细信息,以便更好地理解问题的发生过程。据统计,有完善日志和监控体系的企业,在处理线上问题时的效率比没有的企业高出 30%。
(二)组织复盘
组织复盘类似于需求评审,是流程和协作机制上的重要环节。在组织复盘时,需要明确参与人员的职责和分工,确保复盘过程的高效进行。例如,对于 P0、P1 级故障,可以组织会议复盘,让当事人及其 leader、产品经理、开发、产品 & 开发负责人、业务同事及其 Leader 等相关人员共同参与,当面沟通效率更高,能快速平息故障,解决问题。对于 P2 - P3 故障,可以采用邮件复盘的方式,将复盘过程邮件抄送相关方。对于 P4 及以下故障,可以在团队内做好复盘文档沉淀,作为组织过程资产存档。
(三)陈述问题
在陈述问题时,需要详尽介绍问题的前因后果及影响。要注意的是,最好考虑到如果当时做了什么,可以降低或者避免出现故障或者不良影响以及资损。例如,在陈述一个技术故障问题时,可以详细说明故障发生的时间、地点、涉及的系统模块、用户操作等情况,以及故障对业务造成的影响,如订单量下降、用户投诉增加等。同时,可以分析如果在开发、测试、运维等环节采取了不同的措施,是否可以避免问题的发生或者降低问题的影响程度。
(四)讨论优化方案
讨论优化方案是线上问题复盘的核心环节之一。优化方案需要注意两点:首先是怎么做能解决或避免问题再次发生;其次是是否有潜在的类似因素可以通过更好的方案避免更多类似问题发生。例如,对于一个安全与隐私问题,可以采取加强用户认证、加密数据传输、定期进行安全审计等措施来解决问题,并通过建立安全监控体系、加强员工安全培训等方式避免类似问题的再次发生。同时,可以分析其他可能存在的安全风险,如网络攻击、内部人员泄露等,制定相应的防范措施。
(五)验证落地效果
验证优化方案的落地效果是确保线上问题复盘有价值的关键环节。明确验证优化方案落地效果需数据度量和监控,进行对比验证,证明优化是有效果的,效果怎样,是否达到预期,是否发现了潜在的类似问题。例如,可以通过监控系统性能指标、用户反馈、业务数据等方式,验证优化方案的效果。如果发现优化方案没有达到预期效果,需要及时调整和改进。同时,可以通过建立持续改进机制,不断优化系统性能和用户体验,避免类似问题的再次发生。
四、线上问题复盘案例分析
(一)OOM 问题与解决方案
在项目中,OOM(Out of Memory)问题是一个常见且严重的线上问题。以某项目为例,出现 OOM 问题的原因之一是批量转换 Base64 导致 List 体过大。当进行大量的 Base64 转换操作时,会消耗大量的内存空间。如果没有对数据量进行合理的控制,很容易导致内存溢出。
例如,在处理图像数据时,将大量图片从一种格式转换为 Base64 编码,并且将这些编码存储在一个 List 中。如果图片数量众多且尺寸较大,那么这个 List 将会占用巨大的内存空间。
- 解决方案如下:
对于批量转换 Base64 的操作,应该合理控制数据量。可以对数据进行分页处理,每次只处理一部分数据,避免一次性将所有数据加载到内存中。比如每次处理 100 张图片,处理完一批后再处理下一批。
对图片进行压缩处理。在加载图片时,如果图片尺寸过大,可以对其进行压缩,减少内存占用。根据搜索素材中的内容,在加载过大的图片要将图片转出 bitmap 要压缩,异步加载图片。
使用统一的线程池管理类进行线程管理。避免线程数量过多,导致内存占用过高。线程数量过多,队列容量设置过大,也会导致 OOM。
(二)数据库拖死设备问题分析
在某些情况下,设备离线后上线大量上传数据可能会导致数据库受影响。以某应用为例,当校方有台设备长期处于离线过程中,某一天突然上线,开启离线上传,一瞬间怼过来了 8w 条数据。由于整个公司的业务线都是一个数据库上,导致其它业务线都受影响。
- 原因分析如下:
接口的并发量过高。当大量数据同时上传时,数据库接收到的请求量超过其处理能力,可能会导致数据库性能下降甚至无法正常运行。
推送代码中查询了通行记录这张表,且数据量已经超级多,相当于查询了 8w 次,产生了大批量慢 sql。
异常处理不到位。对业务异常和代码异常都进行重试处理,如果是业务异常,照片不符合规范重试也没用,进一步加重了数据库的负担。 - 解决方案如下:
接口增加限流处理。限制同时上传的数据量,避免数据库接收到过多的请求。
项目单独购买一个数据库。将不同业务线的数据分离,避免一个数据库出现问题影响其他业务线。
对通行记录表进行索引优化。提高查询效率,减少慢 sql 的产生。
不是当日的数据,不进行推送;无人连接 socket,不进行推送。避免不必要的数据库操作。
(三)线上事故复盘总结
以某应用的线上事故为例,介绍问题定位、解决及后续流程修改的过程。
- 问题定位:
用户反馈索引词的顺序有问题,全部提至了句首,导致句子全部错误,无法正常阅读。
程序猿在做索引词高亮处理时,程序逻辑设计不当,将整个句子视作一个词条进行处理,提取索引词后进行高亮处理,将高亮词放回时,替换其到 index=0 的位置,导致索引词显示在句首。
测试同学在做模块化测试、全功能测试时,并未测试到该细节,导致该 bug 发布上线。 - 解决过程:
运营同学第一时间与微博用户联系,先表达歉意,再标明程序猿正在修复中,请用户耐心等待;同时发布正式通知,告知用户问题已经开始修复。
程序员立即着手修复该 bug,并针对此前忽略的内容问题进行复查,自测通过后移交测试人员。
测试通过后,请教研同学配合进行内容测试,确保内容相关展示无误。
申请苹果应用商店加速审核,审核通过后立即发布上架让用户更新。 - 后续流程修改:
两端开发人员系统梳理代码逻辑,差异点、疑问点及时进行沟通、确认。
版本正式开发前,增加技术拆分会,确认开发思路和实现逻辑。
iOS 开发人员加强代码交叉 review。
iOS 开发人员加强自测,自测中加强与安卓端对照。
测试人员增补内容测试用例,加强两端对照测试。
严格执行产品体验会,发版前组织教研、内容、运营等人员进行产品体验。
五、线上问题复盘模板介绍
(一)问题反馈模板
问题反馈表是线上问题处理的重要工具,它能够帮助我们快速准确地了解问题的具体情况。反馈人信息部分应包括反馈人的姓名、部门、联系方式等,以便后续跟进问题。
- 问题详情部分则需要明确问题类型,如登录问题、支付失败、功能异常等;发生时间要精确到具体的日期和时间点;
- 问题描述应尽可能详细,包括操作前后的情况、期望的结果与实际出现的结果;
- 问题重现步骤可以帮助开发人员更好地复现问题,提高解决效率;
- 影响范围可以让我们了解问题的严重程度,如仅自己遇到、多个用户报告等;问题截图 / 录屏则可以更直观地展示问题,有助于快速定位问题。
处理流程模板内部使用,首先是接收与初步分类,受理人员要根据问题的类型和严重程度进行分类。
问题分类可以包括业务场景覆盖不全、产品功能设计不合理、产品体验 / 易用性考虑不足等等。受理时间要及时记录,以便后续跟进问题的处理进度。
- 问题优先级的确定需要考虑严重程度、影响范围、用户价值、发生频率、解决成本和反馈来源等因素。
- 事故定级可以根据经济损失、影响的用户数、影响的 PV 比例、时段、时长、系统功能的重要性等维度,将系统故障分为 P0 - 非常严重、P1 - 严重、P2 - 比较严重、P3 - 一般、P4 - 轻微共五个级别。
- 问题分析与解决阶段,要明确责任团队 / 个人和预计处理时间,以便高效解决问题。
最后,问题总结与预防要总结问题发生的原因、处理过程和解决方法,并制定短期和长期方案以及预防措施。
(二)故障复盘定级报告模板
以在线购物系统故障分析与复盘模板为例,故障定义部分明确了故障发生的时间和具体描述。比如时间可以是具体的日期,描述可以包括购物页面访问量骤降、购物车服务异常等。引言部分强调了故障对业务的严重影响,不仅导致销售业绩受损,更影响用户体验。故障发现部分要记录发现渠道和时间线,如监控报警和用户反馈的具体时间。故障影响部分详细描述了故障对用户行为和购物体验的影响,例如影响了 5000 多名用户及全站用户的购物体验。应急响应部分要列出具体的应对措施,包括首次应对措施和持续尝试的恢复方案。故障原因分析要深入挖掘根本原因,如数据库索引错误导致购物车服务崩溃。改进措施包括解决方案和预防措施,如数据库索引修复和自动化测试购物流程等。惩罚机制模块要明确惩罚条款和实施情况,以提高团队的责任感。最后,总结和反思部分要深刻认识到故障的教训,加强变更管理和数据库优化规范,提高系统的鲁棒性和可靠性。
(三)线上事故复盘报告模板
事故级别定义可以参考 P0 - P4 的级别划分,明确不同级别事故的响应时间和影响程度。例如 P0 级别核心业务重要功能不可用且大面积影响用户,响应时间为立即。事故发生背景要详细描述在时间节点发生的动作和造成的影响,如项目上线后出现问题导致用户不能正常使用功能。事件回顾要记录事件从需求产生到发生事故的整个流程,包括确定需求、技术讨论确定方案等。事故产生原因分析要找出直接原因和间接因素,如开发未自测、测试漏测、产品方案设计不合理等。事故处理办法要描述修复手段和验证过程。针对事故的反省及改进措施要制定以后避免类似问题的方法和出现问题后的解决办法。处罚策略(可选)可根据事故级别合理制定项目组成员的处罚方案。疑问解答与加群交流学习可以为大家提供交流的平台,共同提高问题处理能力。
六、线上问题复盘的总结与展望
(一)总结
线上问题复盘是软件质量提升的关键环节,通过对线上问题的全面分析和总结,可以及时发现软件在开发、测试、运维等各个阶段存在的问题,为软件的持续改进提供有力支持。
从已经分析的内容可以看出,线上问题复盘涵盖了问题的定义与分类、复盘的流程与方法、案例分析以及模板介绍等多个方面。在问题定义与分类中,我们明确了线上问题的多种类型,包括技术故障、用户体验问题、安全与隐私问题等,为后续的复盘工作提供了明确的方向。在复盘流程与方法中,问题记录、组织复盘、陈述问题、讨论优化方案以及验证落地效果等环节相互配合,确保了复盘工作的全面性和有效性。通过案例分析,我们看到了实际项目中线上问题的具体表现和解决方案,为其他项目提供了宝贵的经验借鉴。而模板介绍则为线上问题复盘提供了标准化的工具,提高了复盘工作的效率和质量。
(二)展望
尽管线上问题复盘已经取得了一定的成效,但仍然面临着一些挑战。首先,随着软件系统的日益复杂和多样化,线上问题的类型也越来越复杂,给问题的定位和分析带来了更大的难度。其次,在快速迭代的软件开发环境中,如何及时有效地进行线上问题复盘,以适应不断变化的业务需求,也是一个亟待解决的问题。此外,团队成员对线上问题复盘的重视程度和参与度也会影响复盘工作的效果。
然而,线上问题复盘的未来发展潜力巨大。随着人工智能、大数据等技术的不断发展,我们可以利用这些技术来提高线上问题的定位和分析效率。例如,通过人工智能算法自动分析日志数据,快速定位问题根源;利用大数据分析用户行为,提前预测可能出现的问题。同时,持续改进的复盘流程和方法,以及更加完善的复盘模板,将进一步提高线上问题复盘的质量和效率。此外,加强团队成员的培训和教育,提高他们对线上问题复盘的认识和参与度,也是未来的发展方向之一。
总之,线上问题复盘在软件质量提升中起着至关重要的作用。虽然面临着一些挑战,但随着技术的不断进步和方法的不断完善,线上问题复盘的未来发展前景广阔。我们相信,通过持续不断地进行线上问题复盘,软件质量将不断提高,为用户提供更加稳定、高效、安全的软件产品。