无知是福,但是在处理软件bug的时候,这句话并不适用。

  软件质量专家会告诉我们,那些努力找出bug并且提高软件质量的公司可以得到客户更多的信任,得到更高的利润,降低开发和维护的费用,简化交付的流程,同时还可以避免客户的流失。

  软件质量是个大工程

  如果你觉得软件质量没有什么大不了的,那么来看看Capers Jones在2011年6月软件质量杂志上发表的文章(这份杂志由美国质量协会主办):

  高质量软件的发布周期比低质量软件短15%。

  高质量软件从第一个版本发布到之后五年的周期里花费的总费用比低质量软件低30%。

  高质量软件每年的维护费用比低质量软件低40%。

  规模越大的软件,质量越是一个重要的因素。

  根据Jones的观点,软件测试在查找bug时的有效性有限,还不到35%。

  考虑到软件质量对公司业务的影响,开发团队都在寻找新的提高软件质量的方法。其中有前景的方法是自动化错误报告(Automated Error Reporting),这种方法以用户为基础来确定软件的错误和异常。


  我们的目标是让错误报告变得易用、完整和可自定义

  有许多让用户参与到软件纠错当中的方法,比如邮件和论坛社区,自定义的软件功能,Windows Error Reporting(WER)和各种现成的解决方案。

  但是这些方法都不一定比自动错误报告有效:有的方法会让用户承担过多的责任;有的方法不能收集到精确的信息;有的方法不能捕捉关键的特征,如变量运行时的赋值可能是一种关键特征;有的方法不能把错误提交到通用的错误跟踪系统里面。

  我们的目标是让错误报告变得易用、完整和可自定义,这要求用户可以方便地提交错误报告,开发人员也可以方便地理解错误报告。这可不是一件简单的事情,每个错误报告都应该包括完整的堆栈追踪信息和有助于查找、修复bug的上下文信息。自动错误报告还应该可以和bug追踪工具整合在一起。

  Andrew Neville表示:“自动化错误报告让用户可以十分方便地提交错误报告。只要用户按发送键,我们可以收到修正错误所需的所有信息。使用了自动化错误报告之后,我们让用户可以更方便地与我们沟通。”Andrew Neville是Neville&Rowe的一名软件工程师,在Red Gate的SmartAssembly中使用了自动化错误报告,从而使商业智能分析软件ImpactEdge可以很好地追踪bug。

  认识自动化错误报告

  自动化错误报告的价值在于让开发团队了解到未知异常的详细信息。它从五个方面为软件开发带来了好处:

  它为用户提供了一种有效的反馈途径,增加了用户和开发团队之间的沟通效率。

  它让开发团队了解到哪些bug是容易发生的,让开发团队可以根据事实情况而不是猜测来修正bug。

  它让开发团队可以更快的修复bug。

  它可以以更低的代价确认和修复bug。

  它可以让开发团队在发布软件之前获得更多的前期用户反馈。如果开发团队正在使用敏捷开发,自动化错误报告可以让开发团队根据用户的反馈快速制定出迭代的计划,从而缩短迭代的周期。

  微软MVP和IT顾问Ed Blankenship解释说:“知道异常发生的频率对于修复异常来说是非常有帮助的。知道bug的详细信息对于修复bug也是必不可缺的。“

  自动化错误报告是怎样工作的

  一个理想的自动化错误报告系统可以让用户方便地告诉开发团队软件产品的问题在哪里。在理想状态下,当软件发生异常的时候,用户应该可以得到一个简单明了的错误提示并且可以通过用户界面发送错误报告。这可以大大节省用户花在描述和反馈错误上的时间。所有的必要信息都应该被自动收集,而不需要用户操心。


  一个错误报告应该包括了完整的堆栈信息和异常上下文信息,包括运行时变量的值。

  另外一个特性是用户可以在异常报告中添加额外的自定义信息。这些信息包括日志文件,截图,或者是用户的联系信息。


  隐私问题和不合理的错误报告

  发送错误报告的时候经常会出现下面三个问题:

  错误报告会附带用户的隐私信息。

  用户反复遇到相同的错误,但是每次系统都要求用户重新发送一次错误报告。

  开发团队不停地收到相同的错误报告。

  第一个问题涉及到用户的信任程度。再好的错误报告系统也不可能保证不会把用户的隐私信息传送给开发团队。好的错误报告系统应该考虑到敏感信息的问题,这样可以尽量避免发送敏感信息。如果开发团队没有能够控制敏感信息的传送与否,那么错误报告系统应该可以让用户选择是否信任开发团队并且把敏感信息发送给开发团队。

  第二个问题的解决方法是用户应该可以自定义错误报告发送系统。

  Red Gate的程序员Alex Davies说他总是会在合适的时候才显示错误报告提示,并且给用户“不要再提醒了。总是发送报告。”的选项。

  针对第三个问题,开发团队应该把错误报告进行分类。Davies告诉我们应该把收到的错误报告与bug追踪系统进行同步以甄别是否是一个有效的错误报告。

  使日常工作更加方便

  随着时间的推移,自动化错误报告的好处会显现出来。其中有一条是重要的,那是可以让用户和开发团队都可以更方便地工作。一个IT决策者讲的话很好的概括了这一点:

  “用户只需要点一下按钮可以把信息反馈给开发团队。这避免了不停地电话或者邮件以及不完整的错误报告。这的确可以让用户和开发团队都更方便地工作。“

  作者简介

  Laila Lotfi职于Red Gate Software的.NET工具组,同时也是Simple-Talk网站的贡献者之一。Red Gate开发的软件工具在全球有超过50万个用户,主要是.NET开发者和SQL Server专家。该公司通过自由的网络社群网站、技术刊物以及会议赞助等行为进行市场活动,每年影响到上百万人群。