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