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

如何以聪明的方式报告错误-HowtoReportBugstheSmartWay

Iwanttowrite(orfind)aguidetoeffectivebugreportinginastylesimilartoESRsHowToAsk

I want to write (or find) a guide to effective bug reporting in a style similar to ESR's How To Ask Questions The Smart Way

我想以类似于ESR的方式编写(或找到)有效错误报告指南。如何提出问题智能方式

What are your top tips for effective bug reports?

有效的错误报告的主要技巧是什么?

8 个解决方案

#1


7  

  • Step-by-step instructions on how to recreate the bug
  • 有关如何重新创建错误的分步说明

  • Make sure you've attempted to isolate the bug to what you are actually writing a bug against, instead of something else that could be the cause.
  • 确保您已经尝试将错误隔离到您实际编写的错误中,而不是可能是其他原因。

  • List attempts to isolate the bug to something other than the software you are writing a bug against
  • 列表尝试将错误隔离到您正在编写错误的软件之外的其他内容

  • Make yourself available to answer questions and be available to help troubleshoot/recreate the bug
  • 让自己可以回答问题,并可以帮助解决/重新创建错误

The bottom line is you have to engage some level of critical thinking when the bug is encountered. Once you've exhausted all possibilities that it could be your fault, write up a bug. If you find out its your fault, but the software you are using/testing could have done something more usable to indicate its your fault, still write a bug.

最重要的是,当遇到错误时,你必须要有一定程度的批判性思维。一旦你已经用尽了所有可能的错误,那就写一个错误吧。如果你发现它的错,但是你正在使用/测试的软件可能已经做了一些更有用的东西来表明你的错,那还是写错了。

Also, to be a truly great bug-reporter, you must avail yourself to those testing the bug to help them recreate it. Its likely you've just "got the knack" for recreating that bug and there may be steps you are not conscious of. You can't just complain and walk away, participate in the process and help the team out by testing, recreating, and troubleshooting.

此外,要成为一个真正伟大的bug报告者,你必须利用那些测试bug来帮助他们重新创建它。你很可能只是“掌握了”重建那个bug的诀窍,并且可能有一些你没有意识到的步骤。您不仅可以抱怨和离开,参与流程并通过测试,重新创建和故障排除来帮助团队。

#2


3  

Report the observable facts and then your interpretation of those facts.

报告可观察的事实,然后报告您对这些事实的解释。

Sometimes the best bug reports include something that is a gut feel of an understanding of the problem. Facts-only bug reporting discounts this valuable human resource.

有时最好的错误报告包含了对问题理解的直觉。只有事实的错误报告可以为这个宝贵的人力资源打折。

#3


2  

  • Procedure used to re-create the bug including what was being done, what area of the application was being used and what event was happening at the time.
  • 用于重新创建错误的过程,包括正在执行的操作,正在使用的应用程序的哪个区域以及当时正在发生的事件。

  • Statement of reproduceability (reliably, not) - helps the developer know how hard it should be to reproduce so they don't give up to quickly
  • 可重现性声明(可靠,不可) - 帮助开发人员了解复制应该有多难,因此他们不会快速放弃

  • Screen shots or documentation of error message / stack trace produced
  • 生成错误消息/堆栈跟踪的屏幕截图或文档

  • Criticality/Priority of the bug (can it be avoid, avoidance steps, is it catastropic, does it have a business impact, what's the business risk, etc)
  • 错误的重要性/优先级(可以避免,避免步骤,是灾难性的,是否有业务影响,业务风险是什么等)

  • Environment - which environment was the bug found in. Remote, local, etc.
  • 环境 - 发现的错误环境。远程,本地等。

Too often, our QA people think they can just put in a ticket saying, here's my exception without any backup documentation. Its near impossible to reproduce let alone fix the issue without more information.

很多时候,我们的质量保证人员认为他们可以直接订票,这是我的例外,没有任何备份文档。它几乎不可能重现,更不用说在没有更多信息的情况下修复问题了。

#4


2  

Don't assume the reader of your bug report knows the software as well as you do. Even the person who wrote the software may not know what you are talking about if enough time has passed since they wrote it. Write it so that anyone can understand and reproduce the problem.

不要认为您的错误报告的读者和您一样了解软件。即使编写软件的人可能也不知道你在说什么,如果他们写完后已经过了足够的时间。写下来,以便任何人都能理解并重现问题。

#5


2  

Recommend this article: How to Report Bugs Effectively

推荐这篇文章:如何有效地报告错误

#6


1  

For all the people who won't look at something without steps to reproduce:
My first programming co-op job I was assigned a bug that was essentially a random race condition that was making the system unstable. It happened at any point in the system execution, and all we had were a few stack traces pointing to a section of code that was pretty obviously fine. Somewhere another thread was mucking about with data it shouldn't be and if this thread was at the right point it would crash. Our QA got crashes about once a month. It took two weeks of combing through the system to find the culprit (yup, unchecked access to shared resources, about a 2 line fix) and fix it. There never was a decent steps to reproduce because there was no general way to reproduce it (save shoving a bunch of yield()'s in the right spot). If you're going to work on a multithreaded system, you better be ready to deal with bugs that can't be reproduced reliably, may not have stable steps to reproduce, and not just whine to QA because you couldn't reproduce the bug.

对于所有不会在没有重复步骤的情况下查看的人:我的第一个编程合作作业我被分配了一个基本上是随机竞争条件的错误,这使得系统不稳定。它发生在系统执行的任何一点,我们所有的都是一些指向代码段的堆栈跟踪,显然很好。在另一个线程的另一个线程正在捣乱它不应该是数据,如果这个线程在正确的点它会崩溃。我们的QA每个月都会发生一次坠机事故。花了两周的时间梳理系统才找到罪魁祸首(是的,未经检查的共享资源访问,大约2行修复)并修复它。从来没有一个像样的步骤来重现,因为没有一般的方法来重现它(除了在一个正确的位置推一堆yield())。如果你打算在多线程系统上工作,你最好准备好处理无法可靠复制的bug,可能没有稳定的重现步骤,而不仅仅是因为你无法重现这个bug而抱怨QA 。

Note that the above is no excuse for QA to not include as much detail as they can when possible, just pointing out that it isn't always possible on modern software.

请注意,上述情况并不是QA在可能的情况下不包含尽可能多的详细信息的借口,只是指出在现代软件上并不总是可行。

#7


0  

Write the steps to reproduce the bug. If you can't reproduce it, it won't get fixed.

编写重现错误的步骤。如果你无法重现它,它将无法修复。

#8


0  

  • Always report version number of software under test
  • 始终报告待测软件的版本号

  • Always report versions of any other software (browser, OS, etc.)
  • 始终报告任何其他软件的版本(浏览器,操作系统等)

  • Always list all hardware
  • 始终列出所有硬件

  • Steps to reproduce
  • 重现步骤

  • Symptoms of bug
  • bug的症状

  • Screenshots, traces, logs, other attachments (if any)
  • 截图,跟踪,日志,其他附件(如果有)

  • How critical -- crash, UI, etc.
  • 多么重要 - 崩溃,用户界面等

  • Report whether reproducible
  • 报告是否可重复

  • Anything else tried, that did or did not reproduce the bug
  • 还有其他尝试过的,是否重现了这个bug


推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • Java编程实现邻接矩阵表示稠密图的方法及实现类介绍
    本文介绍了Java编程如何实现邻接矩阵表示稠密图的方法,通过一个名为AMWGraph.java的类来构造邻接矩阵表示的图,并提供了插入结点、插入边、获取邻接结点等功能。通过使用二维数组来表示结点之间的关系,并通过元素的值来表示权值的大小,实现了稠密图的表示和操作。对于对稠密图的表示和操作感兴趣的读者可以参考本文。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
author-avatar
huangjia6688_862
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有