暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何快速响应问题

EffectiveCoding 2018-05-21
1172

    开发过程中难免会遇到问题,问题的原因各式各样,呈现结果大致是相似的(功能非正常运作或不运作)。我们需要根据这些呈现的形式及常见的工具去定位这些bug,分析bug原因,然后去解决它。

    具体响应的过程也就是 定位、分析、解决。

    实际的线上环境与生产环境的处理略微不同,但大致思路是相同的,相对于开发过程中的问题来说,线上问题通常需要更加快速的响应及恢复。


第一步:

    故障恢复(若无法保证 非常短的时间内解决并不引发其他的问题,首先要做的是恢复具体故障,把损失及想象范围降到最低)

    1、在限定时间内,恢复故障。(若是临时进行中的类似于抢购活动等,分析问题回滚后具体的影响范围,联系运营人员制定紧急响应策略)

    保存问题现场(问题现场的保存,直接决定了问题定位的速度及具体产生原因)

    2、保存问题现场。记录线上环境及对应log记录,具体功能发生场景。(问题发生时的用户数量,机器或其他服务运作情况,网络是否出现波动等)

    3、综合运维人员反馈信息、上线前测试信息、开发人员详细设计信息及自测信息。

    信息采集(多方的综合信息能够保证 问题正确定位及相关的影响因素)

    4、查看本项目上线信息

    5、检查本项目所直接依赖的项目上线信息,及对应日志中相关log

    6、检查本项目直接相关项目的上线信息,及对应业务中log


第二步:

    定位

    保存对应的现场信息及其他第三方信息之后

    1、如果是具体业务模块的开发者(如果不是尽快联系),应该能凭自己的记忆直观的对问题产生结果的推测,然后查看对应log判断是否与自己的推测一致,如果推测正确,根据问题现场实现测试环境下的问题重现。(因为记忆和直觉虽然这种情况下通常是快速且准确的,但切记根据log进行分析验证,且进行测试环境下的问题重现)

    2、如果推测失误,首先分析问题发生是否由于代码逻辑外因素影响导致(1、硬件问题 2、网络问题 ),如果是,联系相关人员解决。

    3、上述并未定位问题的话,根据对应逻辑及接口信息结合对应问题现场的log信息进行问题的仔细排查。具体排查过程为:(首先缩小引发问题的异常点所在的范围,然后分析引发异常的原因)

          0、结合对应上线信息(线上异常通常是由最近上线代码导致的,生产环境中可对应为最近修改的代码)

          1、分析问题现场的各接口数据,确定正确信息的接口,确定异常信息的接口。根据具体逻辑 将问题定位到具体的模块中。

          2、根据具体逻辑信息,以函数为单位进行验证分析,常见的工具例如mock 再进一步缩小问题范围。

          3、根据业务逻辑信息及相关使用的技术信息进行异常点分析,得出最终结论。(结论得出过程中 需要进行大量的结论的正确性验证,如关键的测试用例及问题现场的信息进行异常点的验证)


    与此同时测试人员,分析现有测试方案为何存在纰漏,测试用例是否完备,进一步完善对应的方案。


    分析

确定引发问题的异常点之后

     1、根据详细设计的阐述,相关代码的注释等,对代码的业务逻辑进行对应的分析,判断是否由代码逻辑导致。

     2、检查代码的检查项、异常处理等方式是否正常等

    解决

确定异常点及异常原因后,对代码进行修改。

     1、确定初步修改方案,是否能对问题达到修复效果

     2、确定方案不会产生其他影响(根据对应接口中的详细设计通常能够确定)

     3、编码

     4、单元测试,保证修改后代码块的正确性。模块的功能测试,检查是否解决问题,并且是否引发其他问题。

     5、确定修改后代码的影响范围后,根据改进后的测试方案进行对应测试。

     6、重新上线


第三步

    case study

    对问题进行综合的归纳及分析,检查是否存在相同的可能引发问题但未发现的代码。


附录:

常见技能:

1、log 日志

     1、打印规范的日志信息

     2、熟练使用日志分析工具

     3、使用awk等对于小规模数据进行手动分析(正则表达式什么的必须要非常熟练啊,直接决定你的效率)

2、数据分析

     1、接口数据

     2、数据库数据

     3、网络数据(抓包啦什么的)

     4、debug 过程中的参数数据

3、养成问题记录的习惯

     别让相似的问题绊倒两次,得学会举一反三,避免以后发生,且检查先有隐藏bug。

4、养成自己排查问题的综合方案,虽然大家大致相似,但仍然会有差异,有自己习惯的且高效的方式很重要。


ps:

1、断言、log什么的一定要规范使用啊。

2、一定要关注代码最近产生的变化,问题通常就出在这里。

日常的一点建议:

1、扩展自己的知识面及深度,对问题能产生下意识直观的反应。

2、熟知自己维护模块的业务逻辑,详细设计大量看,根据逻辑多看看代码。对非自己维护的相关模块,最好也要了解相关接口信息及最近产生的变动,保持沟通。

3、开发过程中碰到相关技术问题时,善于利用搜索引擎,90%这个问题别人也遇到过。事后记住深入对应技术点,没事儿看看源码,深入下原理,带着问题学习效率更高。

4、对于有经验的同事,多沟通多请教,不管是技术上还是逻辑上。


文章转载自EffectiveCoding,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论