文档章节

Issue Tracker 帮你管理GitHub的问题单

问题终结者
 问题终结者
发布于 2017/08/27 17:02
字数 1938
阅读 20
收藏 0
点赞 0
评论 0
导读 对于大多数开源项目来讲,问题追踪系统Issue-tracking system是至关重要的。虽然有非常多的开源工具提供了这样的功能,但是大量项目还是选择了 GitHub 自带的问题追踪器Issue Tracker。

Issue Tracker 帮你管理GitHub的问题单Issue Tracker 帮你管理GitHub的问题单

对于大多数开源项目来讲,问题追踪系统Issue-tracking system是至关重要的。虽然有非常多的开源工具提供了这样的功能,但是大量项目还是选择了 GitHub 自带的问题追踪器Issue Tracker。

它结构简单,可以让其他人可以非常轻松地参与进来,但这才仅仅是开始。

如果没有适当的处理,你的储存库repository会变得很庞大,挤满重复的问题单、模糊不明的特性需求单、含混的 bug 报告单。项目维护者会被大量工作压得喘不过气来,新的贡献者也搞不清楚项目当前的工作重点是什么。

接下来,我们一起研究下,如何玩转 GitHub 的问题单。

问题单就是用户的故事

我的团队曾经和开源专家 Jono Bacon 做过一次对话,他是《社区艺术》The Art of Community一书的作者、一位战略顾问、前 GitHub 社区总监。他告诉我们,高质量的问题单是项目成功的关键。有些人把问题单仅仅看作是一堆你不得不去处理的问题列表,但是如果这些问题单管理完善,进行了分类并打上标签,会令人意想不到的提升我们对代码和社区的了解程度,也让我们更清楚问题的关键点在哪里。

“在提交问题单时,用户不太会有耐心或者有兴趣把问题的细节描述清楚。在这种情况下,你应当努力花最短的时间,尽量多的获取有用的信息。”,Jono Bacon 说。

统一的问题单模板可以大大减轻项目维护者的负担,尤其是开源项目的维护者。我们发现,让用户讲故事的方法总是可以把问题描述的非常清楚。用户讲故事时需要说明“是谁,做了什么,为什么而做”,也就是:我是【何种用户】,为了【达到何种目的】,我要【做何种操作】。

实际操作起来,大概是这样的:

我是一名顾客,我想购买东西,所以我想创建个账户。我们建议,问题单的标题始终使用这样的用户故事形式。你可以设置问题单模板来保证一致性。

Issue Tracker 帮你管理GitHub的问题单Issue Tracker 帮你管理GitHub的问题单

问题单模板让特性需求单保持统一的形式这个做法的核心点在于,问题单要清晰的呈现给它涉及的每一个人:它要尽量简单的指明受众(或者说用户),操作(或者说任务),和输出(或者说目标)。不过,不需要过分拘泥于这个模板,只要能把故事里的是什么事情或者是什么原因说清楚,就达到目的了。

高质量的问题单

问题单的质量是参差不齐的,这一点任何一个开源软件的贡献者或维护者都能证实。在《The Agile Samurai》中概述过一个良好的问题单所应具备的素质。

好的问题单尽量满足如下条件:

  • 客户价值所在
  • 避免使用术语或晦涩的文字,就算不是专家也能看懂
  • 可以切分,也就是说我们可以逐步解决问题
  • 尽量跟其他问题单没有瓜葛,依赖其它问题会降低处理的灵活性
  • 可以协商,也就说我们有好几种办法达到目标
  • 问题足够小,可以非常容易的评估出所需时间和资源
  • 可衡量,我们可以对结果进行测试

不满足上述条件的问题单呢? 要有约束 

如果一个问题单很难衡量,或者很难在短时间内完成,你也一样有办法搞定它。有些人把这种办法叫做“约束”(constraints)。

例如,“这个产品要快”,这种问题单不符合故事模板,而且是没办法协商的。多快才是快呢?这种模糊的需求没有达到“好问题单”的标准,但是如果你进一步定义一下,例如“每个页面都需要在 0.5 秒内加载完”,那我们就能更轻松地解决它了。我们可以把“约束”看作是成功的标尺,或者要实现的里程碑。每个团队都应该定期的对“约束”进行测试。

问题单里面有什么?

敏捷方法中,用户故事里通常要包含验收指标或者标准。在 GitHub 里,建议大家使用 markdown 格式的清单来概括解决这个问题单需要完成的任务。优先级越高的问题单应当包含更多的细节。

比如说,你打算提交一个关于新版网站主页的问题单。那这个问题单的子任务列表可能就是这样的:

Issue Tracker 帮你管理GitHub的问题单Issue Tracker 帮你管理GitHub的问题单

使用 markdown 的清单把复杂问题拆分成多个部分在必要的情况下,你还可以链接到其他问题单,以进一步明确任务。(GitHub 里做这个挺方便的)

将特性定义的越细化,越容易跟踪进度、测试,最终能更高效的发布有价值的代码。

以问题单的形式收到到问题所在后,还可以用 API 更深入的了解软件的健康度。

“在统计问题单的类型和趋势时,GitHub API 可以发挥巨大作用”,Bacon 告诉我们,“如果再做些数据挖掘工作,你就能发现代码里的问题点、社区里的活跃成员,或者其他有用的信息。”

有些问题单管理工具提供的 API 可以提高额外信息,比如预估时间或者历史进度。

团队协同一致

团队决定使用某种问题单模板后,如何让所有人都照做?存储库里的 ReadMe.md 其实也可以是你们项目的 “How-to” 文档。这个文档应描述清楚这个项目是做什么的(最好是用可以搜索的语言),以及其他贡献者应当如何参与进来(比如提交需求单、bug 报告、建议,或者直接贡献代码)。

Issue Tracker 帮你管理GitHub的问题单Issue Tracker 帮你管理GitHub的问题单

在 ReadMe 文件里增加清晰的说明,供新协作者参考ReadMe 文件是提供“问题单指引”的完美场所。如果希望特性需求单遵循“用户讲故事”的格式,那就把格式写在 ReadMe 里。如果使用某种跟踪工具来管理待办事项,那就标记在 ReadMe 里,这样别人也能看到。

“问题单模板、合理的标签、提交问题单的指导文档、确保问题单被分类并及时回应,这些对于开源项目都至关重要”,Bacon 说。

记住一点:这不是为了完成工作而做的工作。这是让其他人更轻松的发现、了解、融入你的社区而设立的规则。

"关注社区的成长,不仅要关注参与开发者的的数量增长,也要关注那些在问题单上帮助我们的人,他们让问题单更加明确、保持更新,这是活跃沟通和高效解决问题的力量源泉",Bacon 说。

原文来自:http://os.51cto.com/art/201612/525297.htm

本文地址:http://www.linuxprobe.com/github-issue-tracker.html

本文转载自:

共有 人打赏支持
问题终结者
粉丝 10
博文 588
码字总数 71407
作品 0
运维
Artificer 1.0.0.Alpha2 发布,S-RAMP 开源实现

Artificer 1.0.0.Alpha2 发布了,该版本包含一些新特性改进和bug修复,这也是 1.0 版本的功能冻结版本,接下来的版本主要是 bug 的修复。该版本值得关注的内容有: [ARTIF-464] Docker image...

红薯 ⋅ 2015/03/28 ⋅ 0

Artificer 1.0.0.Beta2 发布,S-RAMP 的开源实现

Artificer 是 JBoss 旗下的一个 SOA Repository Artifact Model and Protocol (S-RAMP) 的开源实现。 Artificer 1.0.0.Beta2 发布,此版本包括一些改进,下一个 beta 版本还在进行中,计划下...

叶秀兰 ⋅ 2015/06/27 ⋅ 0

How to Easily Track Time Spent on GitHub Issues

We all know that time equals money. And, with the plethora of time management tools out there, our productivity woes should all but have disappeared. Right? Accept that, staying......

Parth Misra ⋅ 2017/11/15 ⋅ 0

Artificer 1.0.0.Beta1 发布,S-RAMP 开源实现

Artificer 是 JBoss 旗下的一个 SOA Repository Artifact Model and Protocol (S-RAMP) 的开源实现。 Artificer 1.0.0.Beta1 发布,此版本更新内容如下: [ARTIF-683] Switch to RDBMS, JPA......

叶秀兰 ⋅ 2015/06/11 ⋅ 0

学会提问,玩转 GitHub 的问题单(issue)

对于大多数开源项目来讲,问题追踪系统Issue-tracking system是至关重要的。虽然有非常多的开源工具提供了这样的功能,但是大量项目还是选择了 GitHub 自带的问题追踪器Issue Tracker。 它结...

局长 ⋅ 2016/12/02 ⋅ 4

[译]重大的libgdx问题跟踪和Wiki Github迁移

A little less than a year ago, we moved all our code from Google Code to Github. That was a nerve racking but ultimately beneficial task. Since our move, we had almost 600 pull ......

maiyang ⋅ 2013/09/15 ⋅ 0

Redmine 插件安装

Redmine 插件安装 1. Code Review 可对开发人员提交的代码进行在线review, 对指摘项目进行管理, 是目前对我帮助最大的插件。 2. Advanced Roadmap 对roadmap view进行了功能强化,可显示每个...

xiaoxin ⋅ 2014/07/30 ⋅ 0

GitLab 7.8.4 发布,代码托管平台

GitLab 7.8.4 发布,更新内容如下: v 7.8.4 - Fix issuetrackerid substitution in custom issue trackers - Fix path and name duplication in namespaces v 7.8.3 - Bump version of git......

oschina ⋅ 2015/03/12 ⋅ 9

如何使用 Issue 管理软件项目?

软件开发(尤其是商业软件)离不开项目管理,Issue 是最通用的管理工具之一。 本文介绍 Issue 的基本用法。 一、Issue 是什么? Issue 指的是一项待完成的工作,通常与系统的改进相关,中文可...

阮一峰 ⋅ 2017/08/29 ⋅ 0

PhoneGap 2.8.0 发布

我们刚刚发布了 PhoneGap 2.8.0! 该版本包含大量的 bug 修复。此外我们将在7月19日的 PhoneGap Day US 宣布一些大的改进。完整的改进记录请看 GitHub. Joe Bowser 也写了一篇汇总文章介绍 wh...

oschina ⋅ 2013/06/08 ⋅ 15

没有更多内容

加载失败,请刷新页面

加载更多

下一页

容器之重命名镜像

使用docker tag命令来重命名镜像名称,先执行help,查看如何使用如下 mjduan@mjduandeMacBook-Pro:~/Docker % docker tag --helpUsage:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TA...

汉斯-冯-拉特 ⋅ 8分钟前 ⋅ 0

with 的高级用法

那么 上下文管理器 又是什么呢? 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法。with 语句开始运行时,会在上下文管理器对象上调用 __enter__ 方法。with 语句运行结束后,会在上下...

阿豪boy ⋅ 27分钟前 ⋅ 0

使用 jsoup 模拟登录 urp 教务系统

需要的 jsoup 相关 jar包:https://www.lanzous.com/i1abckj 1、首先打开教务系统的登录页面,F12 开启浏览器调试,注意一下 Request Headers 一栏的 Cookie 选项,我们一会需要拿这个 Cook...

大灰狼时间 ⋅ 27分钟前 ⋅ 0

关于线程的创建

转自自己的笔记: http://note.youdao.com/noteshare?id=87584d4874acdeaf4aa027bdc9cb7324&sub=B49E8956E145476191C3FD1E4AB40DFA 1.创建线程的方法 Java使用Thread类代表线程,所有的线程对......

MarinJ_Shao ⋅ 38分钟前 ⋅ 0

工厂模式学习

1. 参考资料 工厂模式-伯乐在线 三种工厂-思否 深入理解工厂模式 2. 知识点理解 2.1 java三种工厂 简单工厂 工厂模式 抽象工厂 2.2 异同点 逐级复杂 简单工厂通过构造时传入的标识来生产产品...

liuyan_lc ⋅ 50分钟前 ⋅ 0

Java NIO

1.目录 Java IO的历史 Java NIO之Channel Java NIO之Buffer Java NIO之Selector Java NIO之文件处理 Java NIO之Charset Java 可扩展IO 2.简介 “IO的历史”讲述了Java IO API从开始到现在的发...

士别三日 ⋅ 55分钟前 ⋅ 0

[Err] ORA-24344: success with compilation error

从txt文本复制出创建function的脚本,直接执行,然后报错:[Err] ORA-24344: success with compilation error。 突然发现脚本的关键字,居然不是高亮显示。 然后我把脚本前面的空格去掉,执行...

wenzhizhon ⋅ 今天 ⋅ 0

Spring Security授权过程

前言 本文是接上一章Spring Security认证过程进一步分析Spring Security用户名密码登录授权是如何实现得; 类图 调试过程 使用debug方式启动https://github.com/longfeizheng/logback该项目,...

hutaishi ⋅ 今天 ⋅ 0

HAProxy基于KeepAlived实现Web高可用及动静分离

前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现 基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。 ...

寰宇01 ⋅ 今天 ⋅ 0

微软自研处理器的小动作:已经开始移植其他平台的工具链

微软将 Windows 10 、Linux 以及工具链如 C/C++ 和 .NET Core 运行时库、Visual C++ 2017 命令行工具、RyuJIT 编辑器等移植到其自主研发的处理器架构 E2。微软还移植了广泛使用的 LLVM C/C++...

linux-tao ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部