Bug管理的經(jīng)驗和實踐(中)
發(fā)表在《程序員》雜志2005年第2期38~42頁的訪談文章未刪節(jié)稿 孟巖:劉振飛,你好。上一期文章里,我們談到了Bug管理的理念和經(jīng)驗。按照我的體會,Bug的控制是一個管理與技術(shù)相結(jié)合的課題。做好Bug的管理,一方面需要有完善的管理體系和制度,另一方面更需要有一個堅實的基礎(chǔ)平臺來支撐。確切地說,就是要有一個比較完善適用的軟件,充當(dāng)Bug管理的中樞神經(jīng)。顯然你是很看重這個軟件系統(tǒng)的。我想問你一個問題,如果沒有這樣的軟件系統(tǒng),而是單方面強(qiáng)化管理,比如制定完善的流程和制度來管理Bug,你看這樣可行嗎? 劉振飛:從我的經(jīng)驗來講,只靠制度而沒有良好的Bug管理軟件,根本無法確保Bug管理的有效性,因為僅靠這些規(guī)章制度很可能流于形式、走過場。正如源代碼管理一樣,如果沒有類似CVS或VSS的工具,很難想象一個較大項目中的源代碼僅僅靠公司的源代碼管理制度和大家的自覺性,就可以讓多個程序員之間的不同版本源程序保持同步、不沖突。光有制度是不行的,必須有配套工具來保證這些制度落到實處! 還有,做好 Bug 的管理,應(yīng)該是從高層領(lǐng)導(dǎo)到中間管理層再到基層人員,都從內(nèi)心認(rèn)同其重要性,然后根據(jù)自己公司的實際情況制定相關(guān)的管理體系和制度,切實執(zhí)行并逐步形成自己的風(fēng)格。要實用、不要隨波逐流。不能今天一個ISO、明天一個CMM、后天又來個6西格碼。工具是思想的載體,再好的管理思想還是要通過工具來實現(xiàn)。購買也好、自己開發(fā)也好,必須有個 Bug 管理工具作為基礎(chǔ)支撐平臺。 孟巖:一個企業(yè)如果有意建立自己的“Bug管理神經(jīng)系統(tǒng)”,大致可以有三種選擇,一是購買成熟的商業(yè)產(chǎn)品,二是選擇類似BugFree那樣的開源軟件,三是自己開發(fā)符合本公司現(xiàn)有架構(gòu)的Bug管理軟件。對于某些公司來說,最后一種模式應(yīng)該是很有吸引力的。你主持了BugFree的開發(fā),能否告訴我們,開發(fā)一個Bug管理系統(tǒng)難不難? 劉振飛:應(yīng)該說不難,想自己開發(fā)一個Bug管理系統(tǒng)的朋友,你首先要明確本公司真正的需求是什么,再就是根據(jù)你的需求做出來后一定要在實際產(chǎn)品研發(fā)中真正應(yīng)用起來,根據(jù)大家的反饋不斷去完善。 像我們開發(fā)BugFree,從開始動手寫代碼到真正能夠在公司里使用,前后也就兩個月時間。為什么能夠這么快做出來呢?最重要的原因是我把 BugFree的需求真正掌握了。我在微軟天天使用Raid、時時刻刻和Bug管理打交道。我是站在微軟這個巨人的肩上去深刻理解其20多年研發(fā)所總結(jié)出來的經(jīng)驗,所以四年下來,不讓我熟悉Bug管理都難J 當(dāng)我決定做 BugFree 的時候,腦子里很清楚為什么要做、做成什么模樣、應(yīng)該怎么做、做出來后大家怎么用,每個環(huán)節(jié)都考慮清楚了。這樣真正實現(xiàn)的時候就很快了。 當(dāng)然僅僅做出來是不夠的,還要在實際工作真正使用起來,并根據(jù)大家的實踐去不斷完善這個系統(tǒng)。之所以敢于把 BugFree 開源出來展示給更多的朋友,是因為經(jīng)過我們近20人的團(tuán)隊10個多月的實際應(yīng)用,大家一致覺得它是個難得的好工具、是日常工作的好幫手,大家工作都離不開了。 不過,現(xiàn)在有不少成熟的Bug管理軟件可以買的到,也有很多開源軟件讓你自由挑選。BugFree 是免費并且開發(fā)源代碼的,你可以體驗到微軟的Bug管理精髓,按自己的需要自由地增加功能、修改代碼而不用擔(dān)心版權(quán)問題,為什么不試一試?實在不滿意再動手自己造也不遲J 孟巖:那么去買一個成熟的商業(yè)產(chǎn)品如何?有什么比較好的選擇嗎?我聽說科泰世紀(jì)公司在陳榕的領(lǐng)導(dǎo)下也開發(fā)了一個類似微軟內(nèi)部使用的Bug管理系統(tǒng),你了解嗎?還有開源社區(qū)里很流行的Bugzilla!,你怎么看? 劉振飛:成熟的Bug管理商業(yè)產(chǎn)品應(yīng)該有不少,比如,IBM提供的Rational ClearQuest、微軟將在VS.NET 2005(Whidbey)中集成的Bug管理系統(tǒng)、上海微創(chuàng)提供的BMS、科泰世紀(jì)《和欣軟件工程管理工具》套裝軟件中的Bug管理系統(tǒng)等等,都應(yīng)該不錯。開源社區(qū)中,你可以選擇Bugzilla!、Mantis等Bug管理系統(tǒng)。 老實講,除了微軟相關(guān)的Bug管理系統(tǒng)之外,其它的我都不熟悉。不過我認(rèn)為不同的Bug管理系統(tǒng)之間功能上應(yīng)該不會差別太大,因為大家都是從軟件實踐中總結(jié)出來的經(jīng)驗結(jié)晶,不會說某家有特別獨到、別家根本想不到的地方。差別之處主要在于價格、安裝配置、易用性、可定制、能修改源程序等方面。 在我決定做 BugFree 之前,曾經(jīng)考察過上面提到的開源社區(qū)Bug管理系統(tǒng),但是簡單研究之后,覺得和我在微軟用的Raid差別太大、不習(xí)慣;陳榕在微軟工作時間更長,他們做的系統(tǒng)也是借鑒微軟、最接近我的使用習(xí)慣,但是得花錢購買(盡管比起其它商業(yè)化Bug管理系統(tǒng)而言,價格不算貴),而且不能根據(jù)我自己的要求隨便更改,所以干脆自己做一個算了。不管怎么樣,我覺得多樣性是一件好事,給了大家更多的選擇機(jī)會。每家公司、項目、人員的狀況都不一樣,都可以根據(jù)自己的具體情況挑選自己喜愛的Bug管理系統(tǒng)。 順便說一句,通過我自己做BugFree開源的經(jīng)歷,覺得自由軟件的真正魅力不在于其零價格,而是其源代碼的完全開放,你可以根據(jù)自己的具體情況自由的去修改、去定制,完整的控制整個系統(tǒng)。 孟巖:如果有這么一家公司,它接受不了整套的Bug管理制度,打算自己開發(fā)一個Bug管理系統(tǒng),以適應(yīng)自己企業(yè)的需求,讓你給參謀參謀,你覺得一個良好可用的Bug管理系統(tǒng),需要有哪些基本功能? 劉振飛:我覺得一個Bug管理系統(tǒng)需要具備以下外部特征: 1.可以完備的記錄、跟蹤Bug 的一生:從出生(創(chuàng)建新的Bug)、不斷成長(記錄相關(guān)人員尋找產(chǎn)生Bug的原因的討論過程)、發(fā)育成熟(找到了一個處理辦法)到最后死亡(關(guān)閉),同時也要允許Bug的復(fù)活(問題重現(xiàn)),繼續(xù)其生長過程。 2.方便的查詢功能,快速找到你關(guān)心的 Bug。比如: a). 最近N個指派給我的 Bug b). 最近N個由我創(chuàng)建的 Bug c). 各種自定義條件的查詢 3.提供各種Bug統(tǒng)計信息。比如每個人頭上有多少個Bug、到目前為止Bug總數(shù)的統(tǒng)計、最近一周Bug曲線圖等等,視具體需要可以有很多種統(tǒng)計。 4.方便的項目和模塊管理,可以有很多項目、每個項目有多個模塊,要能夠很方便的增加、刪除、修改。 5.簡單的用戶管理。作為一個可獨立使用的系統(tǒng),需要能夠增加、刪除用戶。當(dāng)然最好的是直接使用公司已有的管理系統(tǒng)中的用戶認(rèn)證。比如在微軟,只要你登錄公司內(nèi)部網(wǎng)(域)后,你就可以直接使用Raid了,它直接集成了公司的用戶認(rèn)證,不需要單獨一套用戶認(rèn)證系統(tǒng),那樣對使用者就很不方便,管理起來也會比較混亂。 孟巖:你結(jié)合BugFree具體談?wù)劊@些功能是如何協(xié)同的?開發(fā)者、測試工程師和PM在整個開發(fā)過程中,是如何圍繞這個系統(tǒng)運(yùn)轉(zhuǎn)的? 劉振飛:先從基礎(chǔ)設(shè)施說起。首先BugFree有一個獨立且簡單的用戶管理,可以方便的增刪用戶: 然后是簡單的項目/模塊管理,管理員可以方便的增加新的項目、新的模塊,或者更改已有項目/模塊的顯示名字: 因為僅僅有管理員才可以進(jìn)入后臺管理,所以這兩個后臺功能做的比較簡單。 這樣定義了項目/模塊和用戶后,BugFree的用戶就可以進(jìn)行Bug的跟蹤處理了。舉個虛擬的場景,林燕鋒、你、我三個人在一家公司做網(wǎng)站,他是測試工程師(Tester)、你是開發(fā)工程師(Developer)、我是需求定義者(PM),我們?nèi)齻€負(fù)責(zé)公司網(wǎng)站的新聞頻道: [1]. 林燕鋒發(fā)現(xiàn)新聞頻道的后臺管理中“編輯”功能打開速度非常的緩慢,無法忍受。于是他新建一個Bug說明這個問題,然后指派給我; [2]. 我看到這個Bug后,趕快到新聞頻道的后臺試用一下,果然很慢。于是我把這個Bug指派給你,加上我的注釋:“孟巖,這項功能使用很頻繁,速度太慢直接影響了我們信息編輯的工作效率。請你研究一下這部分代碼,看如何調(diào)整程序,以加快打開速度。” [3]. 你看到這個Bug后,作為這部分功能的實現(xiàn)者,去認(rèn)真地研究了當(dāng)時的代碼,經(jīng)過調(diào)試,發(fā)現(xiàn)是數(shù)據(jù)庫查詢方式的問題,采用不同的方式之后,新聞編輯功能的速度大大提高了,于是你解掉(Fixed)這個Bug,并把你發(fā)現(xiàn)的問題原因和解決方法做了描述:“不好意思,以前的查詢方法有點笨,現(xiàn)在已經(jīng)修改了數(shù)據(jù)庫查詢方式,加快了瀏覽速度,具體改動請參見附件EditNews.php。”因為問題被解決,這個Bug會被自動指派給創(chuàng)建者林燕鋒頭上。 [4]. 林燕鋒看到這個Bug被Fixed了,趕快去驗證了一下,發(fā)現(xiàn)問題真的消失了,于是他關(guān)閉這個Bug,并加上注釋:“太好了,剛才用了一下,速度確實快了很多。我代表信息編輯感謝你老兄的工作?。?/SPAN>:-)” 你看這樣做,BugFree就非常完整地記錄了Bug的一生:如何發(fā)現(xiàn)(創(chuàng)建Bug)、不斷討論(編輯Bug)、找到原因(解決Bug)到最后關(guān)閉它。這樣開發(fā)工程師、測試工程師和PM在整個開發(fā)過程中,都被一個個情況各異的Bug們牽著鼻子,密切配合,不斷發(fā)現(xiàn)問題、研究可能的原因、找到處理辦法、驗證解決方法是否真的湊效。BugFree 讓所有項目/產(chǎn)品的研發(fā)參與者圍著它轉(zhuǎn),忠實的記錄了所有被發(fā)現(xiàn)問題的討論處理過程,即使時間過了很久、我們?nèi)齻€都離開了這家公司,但當(dāng)時我們處理的思路被保留下來了,后面接手的同事可以完整無誤的看到全部的討論過程,就像有臺錄像機(jī)把這個過程錄下來一樣。 孟巖:從內(nèi)部來看,BugFree的架構(gòu)是怎么樣的? 劉振飛:BugFree 是用 PHP+MySQL 寫成的。首先我們定義了七個相關(guān)數(shù)據(jù)表: - BugProject: 項目表 - BugModule: 項目中的模塊表 - BugInfo: Bug基本信息表 - BugHistory: Bug處理過程的歷史記錄表 - BugFile: Bug相關(guān)附件表 - BugQuery: Bug查詢條件表 - BugUser: Bug的簡單用戶表 程序代碼也是按照前面介紹的Bug管理功能展開的,基本上一個功能對應(yīng)一個PHP文件,比如: ● Bug的處理過程 - AddBug.php: 加入一個新Bug - EditBugForm.php: 編輯一個Bug的信息 - ResolveBug.php: 解決一個Bug - ActivateBug.php: 激活一個Bug - CloseBug.php: 關(guān)閉一個Bug ● Bug的查詢 - QueryBug.php: 查詢符合條件的Bug - SaveQuery.php: 保存用戶定義的查詢條件 - DelQuery.php: 刪除一個用戶定義的查詢條件 ● Bug的統(tǒng)計自動通知 - NoticeBug.php: 發(fā)信通知每個用戶的Bug情況 - StatBug.php: 發(fā)信給所有人告知當(dāng)前Bug統(tǒng)計情況 BugFree 中使用Smarty技術(shù)把PHP代碼和HTML隔離開,每個涉及到界面的.php文件,都有一個對應(yīng)的在Template目錄下的.tpl文件,這樣代碼結(jié)構(gòu)就非常清晰,很容易看懂、維護(hù)和添加新的功能。 主要目錄結(jié)構(gòu)如下: \ - 根目錄下主要存放上述Bug一生處理流程、查詢等功能文件 Admin\ - 后臺管理對應(yīng)的文件 BugFile\ - 存放Bug中的附件 Compile\ - 存放Smarty編譯后的文件 Document\ - BugFree 的各種說明文檔 Image\ - BugFree 中用到的各種圖片 Include\ - 公用文件 JS\ - 用到的JavaScript文件 Shell\ - 存放需要定時執(zhí)行的文件 Template\ - 所有界面模板文件(.tpl) 除去ADO、Smarty等第三方文件,BugFree 自身也就是由30多個PHP文件組成。更詳細(xì)的說明請參看Document\FileList.txt (代碼文件結(jié)構(gòu))。 所以你看,BugFree 的架構(gòu)其實非常簡單,代碼量也不大。想探個究竟的朋友,只要明白了表的結(jié)構(gòu),然后按圖索驥,根據(jù)功能逐個查看對應(yīng)的代碼文件就可以了。PHP 程序的復(fù)雜度要遠(yuǎn)小于C/C++,很直觀。我覺得一個中等水平的 PHP程序員就可以在1~2周內(nèi)看懂所有的代碼,然后就可以根據(jù)需要做相應(yīng)的定制了。BugFree 僅僅是個小工具而已,沒有什么神秘的。 孟巖:看來BugFree的設(shè)計考慮是相當(dāng)細(xì)致的。不過很多人都抱怨這個用PHP編寫的軟件不容易配置,尤其是在Windows環(huán)境下。你能否簡單地給大家介紹一下BugFree的配置和部署方法? 劉振飛:上一期文章發(fā)表后陸續(xù)收到一些網(wǎng)友的Email,反映的主要問題是 BugFree 在 Windows平臺上的安裝問題,而Linux平臺上似乎很少人抱怨。這從一個側(cè)面說明在Linux上大家已經(jīng)習(xí)慣自己動手配置、有問題自己能找到解決辦法J 坦率的講,因為時間、精力、資源有限,目前我們對 BugFree的安裝配置這一塊的測試做的很不夠,所以還要請網(wǎng)友諒解。我也是通過這個軟件,覺得做好開源項目真的很不容易,需要付出巨大的努力,因而很佩服那些為開源社區(qū)貢獻(xiàn)優(yōu)秀軟件的人們。 從反饋的情況來看,我想主要的原因有三個: [1]. 運(yùn)行環(huán)境的版本問題,比如PHP、MySQL的版本 [2]. 程序路徑問題 [3]. PHP 的配置參數(shù) 目前經(jīng)過我們實際測試的工作環(huán)境有: ● PH ● EasyPHP 1.7 (我自己在Windows上測試過) 其他環(huán)境,如IIS、Apache2、PHP5等,還沒有測試過。在Window上使用BugFree需要改動PHP.ini中的下述參數(shù): allow_call_time_pass_reference = On error_reporting = E_ALL & ~E_NOTICE register_globals = On 根據(jù)大家的意見,我特別寫了一份文檔“在 Windows 平臺上安裝 BugFree 的詳細(xì)步驟”,公布在 http://www.okooo.com/OpenSource,供大家參考。 若有朋友成功嘗試過其他版本的運(yùn)行環(huán)境,歡迎你把詳細(xì)步驟整理出來發(fā)送給我,這樣我可以共享給所有網(wǎng)友。這就是開源的好處:和感興趣的熱心朋友們一起不斷完善 BugFree。 孟巖:我記得BugFree 1.0開發(fā)出來以后,你特別興奮,跟我說這個系統(tǒng)已經(jīng)達(dá)到了微軟內(nèi)部系統(tǒng)的水準(zhǔn)。不過馬上你就開始做2.0版。2.0有什么大的改進(jìn)嗎?是你的1.0版還不夠完善,還是說你對于Bug管理有了新的認(rèn)識? 劉振飛:前面提過,BugFree 僅僅是個小小的Bug管理工具而已,所以第一版發(fā)布后我覺得從1.0計數(shù)有點不好意思,那么龐大的Apache才到2.0了嘛。所以我決定 BugFree 的版本從0.1計數(shù),慢慢往上加J BugFree 0.1版是在 [1]. 最初的代碼是10個月前寫的,有很多不規(guī)范之處。而且PHP代碼和HTML代碼混在一起,很難閱讀和維護(hù); [2]. 原先的界面看起來不是很美觀,感覺有點局促。所以我和負(fù)責(zé)編程的朋友王春生認(rèn)真討論后,決定重新書寫 BugFree 的代碼,解決已知的若干小Bug,并增加了很多新功能。王春生寫了程序,同時在我們內(nèi)部不斷測試使用。終于我可以按計劃在 Ver 0.2的主要的改動有: n 用Smarty技術(shù)把HTML和PHP代碼分開,代碼很清晰,易于維護(hù) n 多語言支持,目前你可以選擇英文界面。增加一個新語言也很容易,就是增加一個對應(yīng)的文件包含所有的字符串而已(由此BugFree可以走出國門了J) n 系統(tǒng)配置很靈活,可以根據(jù)使用情況自己定義 n 全新的界面,顯示空間更大,更加大氣 n 增加BugFree的簡單用戶管理 n 符合你自定義查詢條件的Bug改動時,會自動給你發(fā)信 n Bug信息中增加了兩個字段:操作系統(tǒng)、抄送。“抄送”的功能表示這個Bug有變化時,也會發(fā)送給這些人 n 增強(qiáng)BugFree的查詢功能 n 增加Bug的多任務(wù)分派功能,新建一個Bug時可以同時指派給多個人,這對事務(wù)跟蹤和數(shù)據(jù)校對類問題非常有用 n 可以添加多個附件 n 改變Severity的顯示方式 n 有快捷鍵支持 n 用Pear中標(biāo)準(zhǔn)的樹狀列表TreeMenu n 使用ADO訪問數(shù)據(jù)庫 目前這個0.2版的代碼質(zhì)量和用戶界面都有了很大改進(jìn),但其中的Bug管理思想和0.1版相比沒有任何變化,只不過代碼更清晰、界面更漂亮、使用起來更方便了。 |
|
來自: 心之所指 > 《客戶:我可是上帝》