- 只有测试人员可以创建问题。
- 开发人员必须通过电子邮件向测试人员发送请求来创建问题。
- 对于他们认为自己能够解决的问题,开发人员将电子邮件发送给技术主管,请求由技术主管将问题分配给自己。
- 开发人员不能将问题分配给另一个开发人员(必须发送电子邮件给技术主管)。
- 如果开发人员的问题被其他开发人员的代码阻塞,则她必须在错误跟踪系统之外解决此问题。
- 只有测试人员可以关闭由自己打开的问题。
- 所有任务都必须经过技术主管处理,以便他能够跟踪问题。
- 与用户界面无直接关系的漏洞不会输入到系统中(必须通过外部解决)。
我们使用BugZilla进行bug跟踪,有如下规则:
任何人都可以报告bug,所有的微小改变都应该通过bug跟踪系统进行。如果是产品的增强功能,则应将bug标记为增强,并遵循bug跟踪系统。
任何人都可以将bug分配给其他人,这意味着如果bug存在于其他人的代码中,则可以轻松地将问题路由到其他人那里。可能会出现一种情况,即需要在多个位置修复bug,即需要先修复其他人的代码才能修复bug,然后再将bug分配给第一个需要执行工作的人,并通过重新分配将其转发给适当的人员。
如果问题出现在多个位置且背后的代码不同但问题显然相同,则克隆bug以便可以保留所有更改的单独追踪。
技术主管负责根据该特定修复的要求对bug进行优先排序。
测试员/QAE负责为bug分配严重性级别,例如:Critical/Major/Minor等。
所有bug都经过bug跟踪系统,来自客户的bug通过自定义标志分类以指示客户bug,客户bug大多数在旧版本中发布,因此将它们保持分离。
这样我们就可以确保同时在源代码控制系统(顺便说一下,我们的源代码控制系统是TFS)和Bugzilla中跟踪所有更改,以便将来需要时可以追溯到原始代码更改/所有者。
听起来相当复杂。我们大致使用以下过程:
这是一个轻量级的过程,鼓励开发人员对其问题负责。
除此之外,无论更改请求的来源和类型如何,我们都采取了一些质量保证措施来更改软件的过程。尤其包括:
我使用过很多问题追踪系统,包括gnats(呕吐!),Bugzilla(稍微好一点),Trac,Jira和现在的FogBugz。 我最喜欢Trac,但这可能是因为我不是FogBugz上的管理员,而且它在当前版本中被悲惨地滥用。
正确地设置工作流程非常重要,有趣的是它始于决定将什么放入您的缺陷跟踪器以及如何标记放入其中的内容。 一旦您有了客户,所有开发团队都会跟踪三种问题:
由实际客户指出的问题(真正的错误)。
当前正在开发的新软件的问题(开发中的错误)。
我们希望在未来做的事情(功能)。
当然,这三类问题每个都有自己的优先级。 “真正的错误”只是一个按钮的拼写错误可能比阻止公开发布或其他开发、测试等方面的“开发中的错误”更加不重要。
问题的严重程度描述了副作用有多可怕。 根据我的经验,这可以归纳为:
程序正在破坏某些东西。数据,客户被错误计费,分配错误的药品。这是最严重的。我曾经在一个系统上工作,其中一个软件命令通过维修人员的中心收回了液压臂。这是最严重的。
程序正在崩溃,我们没有解决方法,但在此期间它不会破坏任何东西(除了宕机)。如果停机导致某些东西被破坏,请使用严重性#1。
程序正在发生错误,但我们已经找到了可以实际使用的解决方法。
程序以影响结果的方式出现问题,但并不影响结果。
程序需要在某些明确定义的方面变得更好:更易于使用,实现新功能,运行更快等。
这些系统中经常出现的另一个问题是“角色”的概念。 在应用于问题追踪系统时,“角色”归结为谁被允许做什么。 谁有权创建问题? 谁有权更改状态,谁有权将其重新分配给其他用户,谁有权关闭它们等。
在我密切合作过的小型到中型团队中,这些通用规则已经运作良好:
任何人都可以创建问题。创建者在创建过程中可以将问题分配给任何(或大多数)收件人。默认收件人是问题分类小组。开发人员可以通过这种方式记录他们在代码上工作时发现的错误,并将错误分配给自己,以跟踪他们更改代码的原因。
问题分类小组定期会面(指定间隔时间)以评估和分配问题。问题分类小组专门寻找重复报告,在这种情况下,新问题将“合并”到现有问题链中;对于无法从现场复制的问题,它们将被分配给QA进行复制;以及来自客户的严重问题。
缺陷的发起者是唯一可以关闭它的人。QA或CSR发起的错误报告不能由开发人员关闭。是的,这意味着CS和开发团队意见不一致的错误仍未解决。如果您想要一个数字谎言库,那就看C-SPAN吧,为什么让问题跟踪器报告问题已解决?
一些团队可能希望保留将问题从一个部门移动到另一个部门的权利,而其他团队则允许任何团队成员将问题移到(或返回)另一个团队。这可能归结为管理怀疑,或者仅仅是谁被允许分配工作时间。
问题分类过程是关键。问题分类小组实际上就是您的组织中决定谁做什么、下一步做什么的人。定期安排会议有助于确保不会漏掉真正重要的事情,并且由于注意力不足而失去了平凡的东西。如果问题分类队列中没有任何内容,则会议(电话会议、网络会议或其他实现方式)可以由主持人取消。
如果使用Scrum,则问题分类小组可能是Scrum Master,决定是否将问题拉入当前Sprint并适当分配优先级,如果将其放入待办事项列表。
等一下,你写道:
如果开发人员的问题被另一个开发人员的代码所阻塞,她必须在错误跟踪系统之外解决这个问题。
因此,有些错误不属于正常的错误流程。那么你是否有第二个系统来跟踪这些错误,或者这些都是临时处理的?
听起来你的错误跟踪系统实际上是一个用户缺陷跟踪系统。
它对你来说工作得很好吗,还是你正在寻找替代方案?
我认为客户也应该能够创建问题,没有将错误报告和功能请求分开。
问题的分配不应由开发人员自行执行:决定哪些问题必须在下一个版本中修复应由客户和经理承担责任。
Joel Spolsky在他的 Painless Bug Tracking 中提出了其他实践方法。
在过去的十年中,我使用过几种不同类型的缺陷跟踪系统,包括没有系统、Word文档、FogBugz、Bugzilla和Remedy。其中,FogBugz是最好的一个。在那份工作中,任何人都可以输入缺陷,也可以将其分配给其他人。我发现这样做很有效,特别是当我在代码中发现了一个小bug时。我可以快速记录我找到并修复了这个问题,而不必花费一小时写电子邮件、填表格并让其他几个人参与进来。这鼓励我录入所有我发现的缺陷并快速修复它们。如果一个缺陷需要大量工作,则我会将其分配给我的经理,以便他可以将其与我的其他工作进行优先排序。
在使用Bugzilla的工作中,每当创建、分配或更改缺陷时,所有开发人员和经理都会收到一封电子邮件。这产生了相反的效果,它使我不愿意在系统中查找和输入缺陷。
我的小店使用了一个相当简单的工作流程:
这样,所有事情都被记录在错误跟踪系统中,并且通过不限制更新来保持效率。这样可能会导致一些“错误垃圾邮件”,但根据我的经验,这比创建瓶颈要好。
我们使用JIRA作为我们的错误跟踪器——在JIRA中可以设置各种自定义工作流程以强制执行您的特定过程,但在较小的组织中,我从未发现有必要这样做。