热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何修复无法复制的错误

20,000英尺的梦m是有史以来最具标志性的暮光区剧集之一。它讲述了一个神经质的推销员鲍勃威尔逊(BobWilson)的故事。鲍勃从飞机窗外凝视着。他看

20,000英尺的梦m有史以来最具标志性的暮光区剧集之一。 它讲述了一个神经质的推销员鲍勃·威尔逊(Bob Wilson)的故事。 鲍勃从飞机窗外凝视着。 他看到机翼上飞来飞去的葛雷姆林,感到有些惊讶。

鲍勃(Bob)越来越疯狂地尝试向其他乘客展示葛拉姆林。 这是没有用的。 当其他人透过窗户看时,小鬼怪消失了。 更糟的是,它显然开始拆卸飞机引擎,使所有人都处于致命的危险中。

有时,担任软件工程师的感觉就像是驾驶带有数百个机翼的飞机。 每个用户都不断地告诉您有关他们可以通过窗口看到的不同的gremlin的信息。 但是,当您寻找自己时,您不会发现任何异常。

我们需要修复错误,即使它们仅在某些情况下会发生在某些人身上。 即使我们不知道这些情况如何。 我们对创建的系统负全部责任。

修复这些无法复制的错误很困难,但通常是可以实现的。 这是您的怪物指南生存指南。

1.始终组织调查

作为工程师,至关重要的是您明智地花时间在工作上。 许多工程团队使用深入的方法来管理他们所做的新功能开发工作。 团队负责人通常会立即知道给定项目花费的时间超过预期的时间。 而且我们不希望工程师在单个sprint中处理整个待办事项。

但是,这些相同的团队经常无法应用这些相同的原理来解决错误。 许多工程师没有明确的期望就开始工作。 他们想知道,“我应该修复我最重要的错误,还是研究我最重要的用户故事?” 结果是工程师经常无法满足及时解决错误的期望。 很多时候,这些期望开始都是不现实的。

工程师最终对自己收件箱中放置了一个月甚至六个月的错误感到内。

写下你的假设

当无法复制错误时,您将无法期望知道需要花费多长时间才能修复该错误。 但是,你可以估算一个给定的调查将持续多久。

例如,您可能假设您的错误的浏览器兼容性有问题。 在Firefox中打开您的应用程序以检查此过程只需几分钟。

明确写下您的假设可提供您流程的可见性。 其他人可以很容易地看到您实际上正在处理错误。 在Asana,我们在调查时使用子任务跟踪有关错误的假设。

有时,假设不仅需要本地调试来解决。 另一个强大的技术是使用日志记录和断言来使您的假设更加清晰。

例如,您的错误可能是由值意外为空引起的。 在这种情况下,您可以在操纵值的地方周围添加日志,以获取更多的清晰度。

以这种方式使用日志记录可能是有效的,但它也是一个非常慢的迭代周期。 为了解决这个问题,请始终尝试同时为多个假设添加日志记录。

2.利用您的队友

我们认为工程是一种孤立的行为。 流行文化将工程师描述为孤独者,这部分定义了这一点。 我认为这也受到人们对工程的早期经验的影响。 大多数人通过从事单独项目来学习编码。 工程师的许多早期学习和成功经验都是关于独自工作的经验。

但是与几个团队成员一起进行大型项目是一个完全不同的世界。 这是您无法独自导航的一种。 要了解系统的行为方式,您最终需要了解系统工作人员的行为。

我们每个人都想成为独自解决错误的英雄。 但是,当我们选择花大量时间研究无法解决的复杂错误时,这种趋势适得其反。

逐步提高知名度

当您花时间处理无法重现的错误时,请考虑如何在工作时逐步提高错误的可见性。

例如,您首先看了1个小时,然后将您的技术主管包括在任务中。 然后,在错误处理了4个小时之后,请尝试招募3名可能知道正在发生什么的工程师。

您在这里寻找的不是让某人负责此错误。 如果已将错误分配给您,至关重要的是要保持明确的责任。 相反,您正在寻找让人们记住与您的搜索相关的重要信息的人。

最明显的形式是“哦,我上周打破了。” 另一种形式是“这让我想起了我去年解决的另一个问题……您是否尝试过检查广告阻止程序是否引起了此问题?”

不断升级的漏洞可见性所面临的最大挑战是您自己对无法自行修复该漏洞的不安全感。 如果您确实不确定,建议您咨询经理。 他们可能会告诉您,找到可以帮助您的人是您的工作

成为历史学家

充分利用队友已经创建的书面语境。

您的团队进行的每个代码更改可能已经有一个提交消息,描述了它的作用。 如果错误最近才开始出现,请考虑扫描您团队在过去几天中所做的所有代码更改。 他们可能会指出您不知道的代码库中活跃的开发领域。

上下文还有其他来源。 检查这些内容,以了解代码库中正在发生的事情。

  • 拉取请求评论
  • 闲聊
  • 任务注释

当然,这里的危险是这些信息源是完全无底的。 不要期望自己对正在发生的一切熟悉。 如果通读最新更改的15分钟没有产生任何效果,那么再花一个小时的时间不太可能会有所帮助。

3.进行现实检查

错误进入错误跟踪器。 错误跟踪器统计错误。 我们希望有零个错误,对吗?

我将不得不请你放弃那个梦想。 基本上没有没有错误的系统。 并非所有的错误都重要到可以修复。

是的,这包括标记为“重要”的错误。

不要专注于修复最后的错误。 与为您带来bug的人们建立清晰的沟通关系。 这样,您就可以找到解决技术问题的创造性解决方案,并了解用户的真正需求。

细细了解内部错误报告

“在这家公司,我们吃自己的狗食!” 在某个可以使用所创建软件的地方工作真是太棒了。 Dogfooding对于质量保证,动机和用户同理心具有不可思议的好处。 它还是无意义的内部错误报告的无穷来源。

细细记录内部报告。 内部报告通常是我们发现错误的第一种方式,当它们准确无误时,它们可以在用户完全体验到错误之前就捕获它们。

我们自然会努力帮助我们认识的人并直接与他们互动。 因此,即使是一个人的内部报告,也常常感觉像是最紧急,最重要的错误类型。

但是请记住内部用户有多怪异。 他们对应用程序的使用可能不是典型的。 他们使用的软件版本可能与生产版本不同。 而且它们可能具有一整套功能标志,导致它们触及的代码路径与用户发生的情况完全不同。

因此,当内部错误报告针对用户发生而无法复制时,有时,最好等待真正的用户点击它。 而且,当然,随时准备减少生产。

并且请记住,外部用户也很奇怪。 我认为等待深入研究之前,至少要等一下至少三个真实用户是否遇到了错误,这是可以接受的。 (当然,这很大程度上取决于错误的严重程度)。

许多用户拥有奇怪的软件配置,侵入性浏览器扩展以及异常的网络状况。 这些通常会产生无法重现的问题。 通常,这些问题值得解决。 当然,我假设您还有其他重要事情要做。

让人们保持联系是您的工作

对此类错误进行处理可能会给所有相关人员带来烦恼和负担。 这包括客户支持代理和您的经理。 在不告知任何人的情况下,不要犯下努力解决棘手问题的错误。

我们只喜欢传递好消息,例如:

  • “更新:我已经修复了该错误,现在已经发布!”

但是请记住,这也是个好消息:

  • “我还没有解决这个问题,但是我同意这很重要,并且花了一些时间来解决它。”

对于在业务方面的员工来说,这种沟通模式是必不可少的工具。 他们需要与客户频繁且清晰地沟通。 不要通过保持沉默来阻止他们。 如果您花任何时间从事某项任务,请不要离开它而不先写一些有关该任务的信息。

以这种方式建立沟通信任也很重要,这样您就可以公开关闭或延迟错误报告。 如果计划在某一天完成某项工作,并且该截止日期没有到来,请不要让它默默地过去。 如果您主动对该错误做出评论,说明您为何更改截止日期,那么您将显得更加值得信赖。 如果您的延误决定有误,这也为您提供了获得反馈的机会。

建立您的错误管理心态

处理不可复制的错误很烂。 但这不是必须的。 通过好奇心,协作和横向思考来解决这些问题。 您可能会发现自己确实喜欢挑战。 关于我们所使用的系统,有太多的知识要学习,一路挑战和惊喜。 专注于这一点,您将有望成为团队中最佳的漏洞修补程序。

如果您想帮助世界各地的团队解决诸如此类的难题,那么您应该在Asana与我合作 !

特别感谢Justin Churchill,Bella Kazwell,Steven Rybicki和Mark Yao在本文中的帮助。

From: https://hackernoon.com/how-to-fix-bugs-that-you-cant-reproduce-1478c2eafb20



推荐阅读
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
author-avatar
pet宠物情缘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有