定製 bugzilla 進行專案管理
Apache Harmony 專案是 IBM 中國開發中心上海,近年來參加的一個開源專案。在這個專案中我們使用了開源軟體開發中普遍使用的缺陷跟蹤系統 —— Bugzilla。Bugzilla 是一個開源的缺陷跟蹤系統(Bug-Tracking System),它可以管理軟體開發中缺陷的提交(new),修復(resolve),關閉(close)等整個生命週期。針對專案的特性,我們將 Bugzilla 做為整個專案開發過程中的唯一管理工具。通過這種獨特的使用方式,積累了一些經驗,希望可以和廣大開發人員一起分享。
Apache Harmony 的提案在 2005 年 5 月被 Apache 軟體基金會(ASF)接受,並且按照 ASF 慣例成為一個孵化(incubator)專案。作為一個開源專案,所有參與的開發者需要遵循一個不同於一般產品開發的開發流程。在 Harmony 專案的主頁上有一個連結 Get Involved,點開這個連結,您可以看到參與該專案的一些基本規則。
專案由廣大的開發者提供的很多不同的捐獻(contribution)推動,捐獻包括程式碼,文件,反饋意見。該專案的一個主要特徵是,希望所有的開發均發生在社群(透明性)。Harmony 專案提供了以下的基礎設施保證了專案的透明性(圖1):
- 專案開發中產生的任何正式的想法和討論均發表到 harmony 郵件組上。
- 任何非正式的討論發表到 freenode.net 網路上的 #harmony IRC channel 頻道。
- 所有的專案原始碼由一個公共的 svn 伺服器控制。該伺服器進行了嚴格的許可權控制,以接受程式碼的捐贈。
- 新功能的提交,包括專案開發中產生的缺陷(bug)均會被提交到 JIRA 系統上,並且隨後提交補丁。最後由具有許可權的開發者將這些補丁提交到 svn 伺服器上。
- 其他的一些相關的文件和討論發表在 wiki 系統上。
圖1:Harmony 專案透明的開發流程
可以看到,在這個開發流程中,任何關於專案的想法或是討論均發生在專案的郵件組上。專案中所有程式碼包括文件等資產均通過提交補丁的形式,通過 JIRA 系統提交。然後由 committer 將 JIRA 系統中的補丁安裝到 svn 程式碼庫中。
在我們的開發團隊中,大部分人扮演的是 Contributor 的角色,負責的主要工作是:
- 在郵件組上討論需要開發的內容,獲取郵件組上其他開發人員的意見,形成一個設計決定。
- 根據郵件組上形成的設計決定,開發並提交補丁。
補丁是開發小組的主要產品,而 bugzilla 系統正是面向補丁設計的系統。為了提高程式碼的質量,結合 bugzilla 系統提供的功能,開發小組在內部制定了一套自己的開發流程(圖2)。
圖 2 開發小組內部的開發流程
在這樣一個流程中,小組成員被分為了兩種角色,分別是開發者(DEV)和質量保證人(QA)。開發者如果有任何程式碼需要提交到 JIRA 系統中,他的這些程式碼就需要先經過小組內部流程的檢驗。開發者首先在 bugzilla 系統上新建一個 bug 報告(下文中將這種 bug 稱為程式碼審查請求),將該 bug 的所有人(owner)設定為他自己,並將該 bug 分配給質量保證人(下文簡稱 QA)。這時程式碼審查請求的狀態變為 ‘已分配’。這時如果開發者滿懷信心的覺得自己的程式碼已經相當優美,他就將自己的程式碼作為當前 bug 的附件,上傳到 bugzilla 系統中。當 QA 發現新的程式碼審查請求,他/她會按照特定的標準(程式碼和測試用例是否有邏輯錯誤,程式碼風格是否合適)進行程式碼稽核。如果沒有發現任何問題,QA 將程式碼審查請求的狀態改為 ‘已解決’。這表示程式碼通過稽核,可以被提交到社群裡去了。
當然一般來說,程式碼總會出現一些小的問題。這時 QA 就會針對這些問題報告新的 bug,並將這些 bug 分配給開發者。這些 bug 不同於之前的程式碼審查請求,他們真正表示程式碼中的缺陷。這些程式碼缺陷會阻塞住原先的程式碼審查請求(通過 bugzilla 提供的功能),保證如果這些缺陷不被修復(狀態不轉變為 closed),則程式碼審查請求的狀態就不能變為 ‘已修復’。當 QA 認為所有的缺陷都已經找出來之後,他/她會將程式碼審查請求分配給開發者。這時,開發者針對 QA 報告的缺陷,修正自己的程式碼,並提交新的程式碼補丁(將前一個程式碼補丁設定為廢舊),將程式碼審查請求重新分配給 QA。這個過程將被重複,直到開發者提交的程式碼不會再被檢查出缺陷為止。
下面的文章將結合上面介紹的流程,描述 bugzilla 的相應功能。
鑑於 Harmony 專案的特性,對程式碼質量的要求非常嚴格,僅僅通過一些程式碼審查(Review)工具無法完全保證其質量,所以開發中除了實際的開發人員,還增加了QA(Quality Assurance)的角色來保證程式碼質量。所有程式碼必須經過從開發人員到 QA 的反覆檢查才能釋出。Bugzilla 為這個迭代過程提供了很好的支援。問題請求系統允許開發人員為一個補丁設定標籤(flag)來請求對當前程式碼的複查。Bugzilla 共提供了兩種型別的標籤,分別用來表示 bug 和補丁的狀態,我們在開發中只使用了補丁的標籤功能。對於 QA 來說,他可以設定標籤來表示接受或者拒絕這個補丁。通過這個標籤無論是開發人員或是 QA 都可以及時掌握一個補丁當前所處的狀態。以下我們詳細展示如何通過 Bugzilla 的問題請求系統來進行程式碼開發的過程。
1. Bugzilla 管理員安裝完 bugzilla 系統後,為當前開發的專案新建一個複查標籤(圖3)。
圖 3 管理標記型別
2. 開發人員通過 Eclipse 的 Subclipse 外掛生成基於當前伺服器上程式碼的增量補丁,詳見應用補丁部分。
3. 開發人員在 Bugzilla 上新建一個優先順序為“開發”型別的新記錄(圖4),作為本開發流程的基點。
圖 4 提交 Bug:TestProduct
4. 開發人員將補丁上傳到“開發”記錄的附件中(在附件中遞交補丁將在後面介紹),並開啟補丁的標籤功能,比如開發人員張三與 QA 李四搭檔開發,張三在設定標籤的時候就會指定李四來複查,在下拉選單中選中‘?’,並在後面的欄位填上李四(圖5)。
圖 5 標記
此時,補丁的狀態欄位就會顯示為 —— zhangsan:複查?(lisi)(圖6)。如果開發人員重新想置空標籤或者不指定具體的 QA,只需在下拉選單中選中空格即可。
圖6 標記為需要複查
5. 對於 QA 來說,他可以利用標籤的另外兩個值來表明補丁的狀態。如果 QA 發現補丁中存在缺陷或者 bug,就將標籤置為‘-’,表示沒有通過複查(圖7)。
圖7 標記為拒絕
然後,針對補丁,報告 bug(在 bugzilla 上建立優先順序為“複查”的新記錄來報告補丁的 bug),並將它(們)指派給開發者張三。同時,設定這條記錄的阻塞(block)欄位,將它置為程式碼審查請求記錄的編號(圖8)。如果這裡報的 bug 沒有修復的話,程式碼審查請求記錄是無法被關閉(closed)的。
圖8 阻塞記錄
6. 開發者修復了 QA 報告的 bug 之後,製作新版本的補丁檔案上傳。
7. QA 檢視新補丁是否仍存在問題,若確認無誤,可以關閉“複查”記錄(圖9)。
圖9 關閉
8. QA 重複上述過程,直到補丁中沒有缺陷。當李四認為複查已通過,便可將標籤置為‘+’,表明補丁通過了複查,這時附件狀態就會顯示為——李四:複查+。然後,QA 將相應的“開發”記錄狀態置為“已解決”,解決方案置為“修復”(圖10),告訴 committer 這個補丁已經可以遞交到伺服器。
圖10 標記為已修復
9. 最後,專案組內的 committer 會搜尋所有已解決(Resolved)的“開發”記錄,把通過的補丁遞交到 Harmony 的伺服器上,再關閉相應的“開發”記錄。
開發過程中,會產生大量的 bug 報告,如何從這些資料中獲得我們需要的記錄?bugzilla 提供了兩種不同複雜度的搜尋方式,第一種方式僅提供了狀態、產品和關鍵字三個欄位來進行搜尋,它只能進行最基本的搜尋功能,方便開發人員進行一些快速的搜尋。Bugzilla 同時也提供了更為強大和全面的搜尋功能,支援對搜尋的定製。無論是開發人員還是 QA 都可以針對自己關注的問題,選擇相關的欄位,設定搜尋條件(圖11)。對於搜尋的關鍵字,無需輸入完整資訊,系統會返回所有以該關鍵字為子串的匹配結果。
圖11 萬用字元搜尋
Bugzilla 的搜尋還提供了一個非常有價值的功能,它可以儲存每次的搜尋配置,只要你為當前的搜尋設定一個易記名字(圖12),就能儲存當前搜尋配置供下次使用,省去了無謂瑣碎的重複配置。如果條件有變動,還能編輯搜尋條件。
圖12 搜尋結果
當需要重複相同的搜尋時,無需再次設定搜尋條件,只需點選儲存的名字就可以獲得同樣的搜尋結果(圖13),為開發人員提供了巨大的便利。
圖13 儲存搜尋結果
開發中我們還可以通過 RSS 閱讀器來訂閱搜尋結果,定製搜尋條件獲得資料時,在搜尋的 http 地址後面加上"&ctype=rss"便可獲取符合 RSS 標準的 XML 資料。通過 RSS 客戶端軟體訂閱,便可與資料保持同步,無需通過 sendmail 來通知最新的變化。
開發進行了一段時間後,專案經理需要對專案進展以及所有開發人員的工作狀況進行彙總,bugzilla 報表統計功能省去了枯燥的資料錄入,方便彙總統計。Bugzilla 可以生成兩種形式的報表(Report)進行統計。一種是以表格的形式,這是預設支援的。還有一種形式是通過直方圖來表示結果,更加直觀,它需要在編譯 bugzilla 前,新增圖形模組。兩種形式報表的生成過程大致相同,我們以表格形式生成專案彙總報告為例,來介紹該功能。生成報表過程中條件的篩選類似高階搜尋中搜尋條件的定製。Bugzilla 報表生成功能提供了較大靈活性,使用者可以設定三個座標軸的欄位值(圖14)。
舉簡單的例子,我們開發總結時需要比較各個開發小組所有“開發”記錄的總數,就可以通過如下方式來產生彙總資料
- 縱座標:選擇報告人,即開發人員資料。
- 橫座標:選擇開發人員負責的專案元件。
然後在篩選條件的優先順序中選擇“開發”,如果想統計 QA 的工作,只需把優先順序改為“複查”即可。如果不想在同一張表格中生成資料,還可在“多表顯示”中選擇報告人,這樣就會為每個開發人員生產一個表格。
圖14 生成表格形式的報表
開發中,補丁是通過附件的方式遞交的(圖15)。
圖15 提交補丁
- 點選建立新附件連結,轉入建立新的附件頁面(圖16)。
- 輸入附件的檔案路徑。
- Bugzilla 在伺服器端提供兩種附件的存放方式。對於大檔案,只在資料庫中儲存檔案路徑、檔名等定位資訊,而把檔案儲存在本地的檔案系統中,這樣可減少資料庫讀寫次數,增加效率。對於小檔案,bugzilla 直接將檔案寫入資料庫中。為了減少複雜度,補丁一般都不會很大,只有在補丁特別大的時候,才有需要選擇大檔案(BigFile)選框。
- 補丁檔案的描述,可以在這裡簡潔的介紹補丁新增的功能。
- 附件檔案型別選擇。Bugzilla 支援多種檔案型別附件上傳,系統能自動檢測,使用者也可以指定檔案型別。當選擇了補丁框後,下面選擇其他檔案型別的輸入框就會變成灰色,無需進行設定。因為我們遞交的附件都是補丁(patch)形式,所以只需選中補丁選框。
- 當不想公開補丁內容時,可選中隱私(Privacy)框。
- 如果想廢棄原先遞交的附件,可以在廢棄(Obsoletes)中選擇先前遞交的某一附件。
- 由於補丁是分派給 QA 的,所以開發人員遞交補丁時無需設定重新分派(Reassignment)。
- 為補丁設定複查標籤,將複查標籤的狀態置為‘?’,並在後面的輸入框輸入配對的 QA 使用者名稱,指派對應的 QA 進行復查。
- 當補丁完成的任務比較複雜的時候,可以在註釋(Comment)框中為補丁新增更加詳細的介紹,這個選項是可選的。
圖16 新增補丁
開發中,如果安裝 bugzilla 的時候新增了 PatchReader 模組(這個 Perl 模組是可選的),使用者可在 bugzilla 中直接預覽補丁內容,只要補丁是通過 CVS 或者 Subversion 生成。點選區別(diff)連結,bugzilla 便會自動生成補丁修改前後的對比頁面。(圖17)。
圖17 檢視補丁
在開發過程中,開發人員通過 Subclipse(支援 subversion 操作的 eclipse 的外掛)製作補丁,然後 QA 將其應用到 eclipse 執行,只有通過了所有的單元測試,補丁才能通過。
- 在 eclipse 的 workspace 點右鍵,選擇 Subclipse 提供的 Team 選單選項。
- 應用補丁(Apply patch)的方式有兩種,一種是通過檔案打補丁。還可以直接開啟補丁檔案,然後將其內容複製到記憶體的剪貼簿(Clipboard)中(圖18),再從剪貼簿中打補丁。
- 選中需要打補丁的專案。
- 選擇讓系統自動猜測(Guess)正確的目錄層次,也可以通過忽略補丁路徑靠前部分來手工調整(圖19)。
圖18 應用補丁
圖19 驗證補丁
Bugzilla 系統為本地化保留了開放的介面,只要提供符合規範的本地語言模板即可讓你的 bugzilla 系統支援你的本地語言,在 SourceForge 上可以找到由第三方提供的模板支援,無需自行開發新的模板。這個第三方庫還提供了 css 指令碼,可以定製自己介面,為更好的檢視 bug 提供方便。本地化 bugzilla 的過程非常方便,只需按照下面所示步驟即可:
- 從 SourceForge 下載工具包,解壓。
- 從解壓出來的兩種編碼方式中選一種模板(UTF8 格式和 GB2312 格式)複製到 %bugzilla 根目錄 %/template/,並將資料夾改名為 cn(預設英文模板名字 en)。
- 以管理員身份登入系統,進入引數配置頁面(圖20)
- 將 language 改為 cn(圖21),系統便會自動去提取新加的模板來格式化介面,如果想重新恢復英文,只需重新改回 en 即可。
圖20 引數設定
圖21 本地化
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-436087/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 專案管理如何有效進行?專案管理
- 使用Project進行專案管理Project專案管理
- 探索大型專案怎麼進行專案管理?專案管理
- 專案經理如何更有效進行專案成本管理?
- 在開發專案中進行有效的專案管理(轉)專案管理
- 透過 OKR 進行專案過程管理OKR
- 使用Git進行小專案程式碼管理Git
- 專案進度管理
- 如何使用Zoho專案管理軟體進行廣告投放管理?專案管理
- 如何透過文件協作進行專案管理?專案管理
- 企業進行專案化管理四要素(轉)
- 如何製作專案管理列表專案管理
- 透過線上的文件協作進行專案管理專案管理
- 如何有效管理專案進度
- 黑猴子的家:IDEA 使用 Git 進行專案管理IdeaGit專案管理
- 探究如何使用敏捷專案管理進行團隊協作?敏捷專案管理
- 為什麼選擇使用 OKR 進行專案過程管理OKR
- 從三方面保障專案管理有效進行專案管理
- git篇--入職初期如何使用Git進行專案管理--01Git專案管理
- 新藥研發專案管理方案:PM專案提供製藥行業四大功能專案管理行業
- 進行佛家專案開發
- [BI專案記]-對專案檔案進行規劃
- IT專案管理者常用的專案管理工具(國產VS進口)?專案管理
- 從事專案管理的朋友們,是如何有效管理專案進度的?專案管理
- java版工程專案管理系統原始碼+系統管理+系統設定+專案管理Java專案管理原始碼
- 對軟體專案中產生的需求進行分級管理
- 做好製造專案管理的5個技巧專案管理
- 採購專案管理:定義和流程專案管理
- 軟體專案管理 7.5.專案進度模型(SPSP)專案管理模型
- 軟體專案管理 7.1.專案進度基本概念專案管理
- 如何利用專案管理軟體制定專案進度計劃?專案管理
- 專案管理過程之進度控制 (轉)專案管理
- 【zz】IT專案如何做好進度管理
- 與時俱進的專案管理(轉)專案管理
- 專案管理過程之進度控制(轉)專案管理
- 以專案的方式進行管理(轉)
- 專案管理最佳實踐,企業如何進行有效的專案管理專案管理
- 也談“任何管理皆專案”及專案管理的執行工具(轉)專案管理