如何使用 Issue 管理軟體專案?

阮一峰發表於2017-08-29

軟體開發(尤其是商業軟體)離不開專案管理,Issue 是最通用的管理工具之一。

本文介紹 Issue 的基本用法。

一、Issue 是什麼?

Issue 指的是一項待完成的工作,通常與系統的改進相關,中文可以譯為"問題"或"事務"。下面這些都是 Issue 的例子。

  • 一個軟體的 bug
  • 一項功能建議
  • 一項待完成的任務
  • 文件缺失的報告

每個 Issue 應該包含該問題的所有資訊和歷史,使得後來的人只看這個 Issue,就能瞭解問題的所有方面和過程。

歷史上,Issue 起源於客服部門。使用者打電話反映問題,客服就建立一個工單(ticket),後續的每一個處理步驟、每一次與使用者的交流,都要更新工單,記錄全部資訊。這就是 Issue 的前身。

因此,Issue 的原始功能是問題追蹤和工單管理,後來不斷擴充套件,逐漸演變成全功能的專案管理工具,還可以用於制定和實施軟體的開發計劃。

除了軟體,其他專案也可以使用 Issue,比如有人把自己住宅的改善計劃都做成了 Issue。

二、Issue 跟蹤管理系統

專門管理 Issue 的軟體,叫做 Issue 跟蹤管理系統(Issue tracking system)。它面向所有人,普通使用者也可以使用。

還有一種 Bug 跟蹤管理系統,通常只面向開發者,比如下圖的 Bugzilla。它和 Issue 系統可以同時使用,但是也可以被 Issue 系統取代。

一般來說,Issue 跟蹤管理系統應該具有以下功能。

  • 專案管理
      - 指定 Issue 的優先順序
      - 指定 Issue 所在的階段
      - 分配負責 Issue 的處理人員
      - 制定日程
      - 監控進度,提供統計
  • 團隊合作
      - 討論
      - 郵件通知
  • 程式碼管理
      - 將 Issue 關聯原始碼
      - 將 Issue 關聯程式碼提交與合併

三、Github Issues

目前,最出名的 Issue 跟蹤管理系統是 JIRA。它是一個收費軟體,這裡就不介紹了。下面通過免費的 Github Issues,來介紹如何使用 Issue。

3.1 基本用法

每個 Github 程式碼倉庫都有一個 Issues 皮膚。

進入該皮膚,點選"New Issue"按鈕,就可以新建 Issue。

上圖是新建 Issue 的介面,左側填入 Issue 的標題和內容,右側是四個配置項(只有專案管理者才能看到)。

  • Assignees:人員
  • Labels:標籤
  • Projects:專案
  • Milestone:里程碑

下面,一個個介紹這些配置項。

3.2 Assignee

Assignee 選擇框用於從當前倉庫的所有成員之中,指派某個 Issue 的處理人員。

下拉框裡面單擊人名即可。

3.3 Labels

Issue 可以貼上標籤,這樣有利於分類管理和過濾檢視。

新建標籤,要在 Issues 皮膚的首頁,點選 Labels 按鈕。

這時,會顯示六個預設的標籤。

如果想新建更多的標籤,可以點選 New label 按鈕。然後,填寫標籤名,選擇標籤顏色。

3.4 常用 Label

對於大型專案, 每個 Issue 至少應該有兩個 Label ,一個表示性質,另一個表示優先順序。

表示性質的 Label,可以參考這篇文章的範例。

表示優先順序的 Label,可以採用下面的級別。

  • 高優先順序(High):對系統有重大影響,只有解決它之後,才能去完成其他任務。
  • 普通優先順序(Medium):對系統的某個部分有影響,使用者的一部分操作會達不到預期效果。
  • 低優先順序(Low):對系統的某個部分有影響,使用者幾乎感知不到。
  • 微不足道(Trivial):對系統的功能沒有影響,通常是視覺效果不理想,比如字型和顏色不滿意。

3.5 Milestone

Milestone 叫做"里程碑",用作 Issue 的容器,相關 Issue 可以放在一個 Milestone 裡面。常見的例子是不同的版本(version)和迭代(sprint),都可以做成 Milestone。

新建 Milestone,要在 Issues 皮膚的首頁,點選 Milestones 按鈕。

這時,再接著點選 New milestone 按鈕,然後填寫 Milestone 的名稱和內容,還可以指定到期時間。

3.6 全域性檢視

Issues 皮膚只能檢視和操作當前倉庫,Github 還提供全域性檢視,讓使用者檢視和操作所有與自己相關的 Issue。

訪問 github.com/issues 這個網址,就可以開啟全域性檢視。裡面的 Issue 分成三類。

  • Created:你建立的 Issue
  • Assigned:分配給你的 Issue
  • Mentioned:提及你的 Issue

Created 和 Assigned 的含義顯而易見,Mentioned 是指他人在 Issue 裡面 @ 了你。下面是一個例子。

It looks like the new widget form is broken on Safari. When I try and create the widget, Safari crashes. This is reproducible on 10.8, but not 10.9. Maybe a browser bug?

/cc @kneath @jresig

全域性檢視還提供了搜尋、過濾和排序功能。

四、看板功能

4.1 看板是什麼?

看板(kanban)是敏捷開發的重要手段,主要用於專案的進度管理。所有需要完成的任務,都做成卡片,貼在一塊白板上面,這就是看板。

按照不同的階段,看板分成若干列。上圖是一種常見的分法,將專案週期分成三列。

  • Todo (待開發)
  • Doing (開發中)
  • Done (已完成)

你可以根據實際情況,分出更多的列。

  • Todo (待安排)
  • Plan (計劃)
  • Develop (開發)
  • Test (測試)
  • Deploy (部署)
  • Done (已完成)

4.2 Github 的看板功能

Github 提供 Issue 看板。首先,在倉庫首頁進入 Projects 皮膚。

然後,點選 New Project 按鈕,新建一個 Project,比如"2.0 版"。

接著,點選 Add column 按鈕,為該專案新建若干列。

最後,將 Issue 分配到對應的列,就新建成功了一個看板檢視。

Issue 可以從一列拖到另一列,表示從一個階段進入另一個階段。

許多第三方工具可以增強 Github 的看板功能,最著名的是 Zenhub,這裡就不詳細介紹了。

五、碼雲的 Issue 系統

除了 Github 以外,Gitlab 也提供免費的 Issues 管理系統,而且 比前者更易用。但是,我不打算介紹它,而是想介紹開源中國社群推出的程式碼託管服務碼雲Gitee.com)。

碼雲是 Gitlab 的深度定製,提供漢語介面,符合國人的使用習慣,並且訪問速度極快,我感覺比 Gitlab 快了一個數量級。另一方面,開源中國的紅薯老大一直支援我,我也想借這個機會,推廣一下他們的產品,讓更多的人知道這個優秀的國產 SaaS 服務。

5.1 新建 Issue

碼雲的每個倉庫都有一個 Issues 皮膚。進入後,點選新建 Issue,就可以建立 Issue 了,裡面的設定項比 Github 豐富好多。(注意,只有倉庫的管理員才能看到設定項。)

其中的"負責人"(Assignee)、"標籤"(Label)、"里程碑"(Milestone)與 Github 完全一致。"關聯分支"指定 Issue 歸屬於哪一個分支,"開始時間"和"結束時間"指定處理日程。"置頂選項"指定哪些 Issue 出現在最前面,而且還分成高中低三檔。

由於設定多,所以 Issue 列表提供的過濾開關也多。

5.2 看板功能

碼雲的看板功能比 Github 更友好,直接提供四個現成的看板。

  • 待處理
  • 進行中
  • 已完成
  • 已驗收

所有 Issue 的初始狀態都是"待處理",使用者可以手動把它們拖到其他列。

5.3 企業版

碼雲跟 Gitlab 一樣,也提供企業版。裡面的"任務"模組有一個強大的 Issue 全域性檢視,分成四種瀏覽模式。

  • 指派給我的
  • 我釋出的
  • 我參與的
  • 全部任務

這是預設的列表檢視,可以點選右上角,切換成全域性的"看板檢視"。

這個介面還可以直接新建任務,而不用進入倉庫主頁。新建任務時,允許指定"關聯專案"、"負責人"和"預計工時"。

新建任務以後,還可以對任務進行再次編輯,這時可以設定"優先順序"、"關聯專案"和"子專案"等。

我就介紹到這裡了,接下來你可以點選進入 Demo,體驗一下上面介紹的各項功能。

(完)

相關文章