???
Bugzilla是一款很專業的Bugzilla跟蹤工具。他有具有一般Bug Trace軟件所必須的功能。 1.??? 提供一個開發和測試交互的平臺,將測試和改錯程序化。不需要測試人員就每一個問題和開發人員直接交流,也避免了發生錯誤被遺忘的問題。 2.??? 提供錯誤檢索功能,供PM和測試經理掌握測試和改錯情況 除了基本功能外,Bugzilla還有如下強大功能: 1.??? 基于Web的訪問方式,不需要安裝客戶端 2.??Email自動通知錯誤相關人員 3.??任意數量,類型的附件。如屏幕截圖,日志文件 4.??豐富的字段,如產品名,組件名,版本號,錯誤發生的平臺等等,可以精確的描述錯誤。 5.???強大的檢索功能,可以根據錯誤的所有特性進行檢索。如日期,責任人,提交人,所屬版本,所屬組件,狀態,等等。 6.??? 強大的即時報表和歷史報表 7.??? 可以定制的權限管理機制,實現對權限的精確控制。如只有Test Manager才能關閉錯誤。 8.??? 使用MySql作為后臺數據庫,穩定,數據遷移也很方便。 9.??? 完全開放的Perl代碼,如果需要,可以自己實現特定功能 (以上文字摘自http://jason.rocklv.net/freesoftware/ar01s06.html) ![]() 這個圖中描述了一個bug的生命周期(Life Cycle of a Bug)。從圖中我們可以了解到一個Bug從生到死一般會經過NewàEvaluationàResolvedàVerificationàClose。在這個過程中參與的角色有兩個:測試人員和開發人員。 我們先從測試人員的角度這個系統。 測試人員看除了新建Bug以外其實一個很重任務就是回測。也就是上圖Resolved一下的工作。如何安排回測的工作,Bugzilla可以為你提供一個很人性的方式。這種人性的方式得益于Bugzilla強大的搜索能力。這個就是他的搜索界面。這么多搜索條件可以讓你精確的搜索到你所需要的集合。搜索到的集合如下: ![]() 你可以使用標題中的任何一欄作為排序條件。可不要小看這個排序的順序哦,他可是可以直接作為你工作的順序的。不相信?那好吧來看看下面這個圖 ![]() 直接點擊First,Last,Prev,Next就可以達到在你選擇的Bug中來回游走(其實這個就是你工作的過程)。 如果你說今天下班前這部分工作可能做不完,明天我又不想在輸入那么多的查詢條件,好辦保存他啊。直接看右下角:![]() 如果有一批bug我已經回測完了。且他們所作的動作也差不多。直接批量進行,不要猶豫。 ![]() 看“Change Several Bugs at Once”就是為這個時候的你量身訂做的。Bugzilla還有很多不錯的功能我這里就不多說了。 <!--[if !supportEmptyParas]-->?<!--[endif]--> 下面來看看Bugzilla能給開發者帶來什么樣的好處。開發者在整個的bug生命周期中主要處理Resolved和ASSIGNED(這個功能項目經理或項目負責人用的比較多)這兩塊功能。但是這兩塊功能是應該算是bug在其生命周期中最輝煌的一段時間。他們就是為這個時候而生。 好了廢話不多說了。我們來看看一般開發人員如何利用Bug Trace系統。首先登陸到系統à搜索自己的Bug(有的Bug Trace提供了讓用戶一登陸就可以看到自己的Bug)à打開開發環境à修改代碼à自測à提交修復。需要不停的在Bug Trace系統和開發環境間不停的切換。 Bugzilla和Eclipse 給我們提供了一個更人性的解決方案。假設開發人員小J來到了辦公室在開機和倒茶的時候他心里就在盤算著今天可能有些bug需要修復。Ok,可愛的Eclipse起來了。那就先看看今天有沒有自己的bug吧。![]() 這個就是集成在Eclipse(Mylar)中的Bug搜索頁面。搜索回來的結果你可以用來創建一個Task。有了這個Task那你就會省力多了。可以減少你在大項目中找找文件的痛苦。 ![]() 看,現在我的workbench是不是很整潔啊。 說老實話Bugzilla的界面真的不咋樣。如果評論多了會很長,而且還沒有分頁。不過在Eclipse中這個問題就好多了,因為我們有outline啊。 ![]() 看起來很不錯吧。 除了這個這個Task還有除了能讓你看到整潔的workbench外還可以給你一個整潔的思路。![]() 通過設定時間讓你有效的管理你的時間。這樣就讓在開發過程中最難掌控的部分管理起來了。 Bugzilla和Eclipse(Mylar)的好處我就不一一多說了。如果你不相信我的話可以先去體驗一下。 其實這個時候Bugzilla可以當成一個項目管理軟件來用了,不光光是Bug了。如果我們能加上報表,這樣就可以為項目管理者提供最準確的項目進度數據。 <!--[if !supportEmptyParas]-->?<!--[endif]--> 說道報表Bugzilla為項目管理者們提供了很強大的報表功能。為項目總結等場合提供最有價值的原始資料。 <!--[if !supportEmptyParas]-->?<!--[endif]--> 參考文獻:http://jason.rocklv.net/freesoftware/ar01s06.htmlhttp://www.bugzilla.org/docs/2.18/html/using.html
???
讀《代碼大全》筆記 -- 保持松散耦合 在上學的時候就聽老師說,寫程序要做到低耦合。這話是牢牢的記在心里了(我還算是個乖學生)。可是在具體的編程過程中有犯糗了。犯糗原因就是對于常見耦合分辨不清、不知道在我的應用中那些耦合可以接受、那些耦合在特定場合可以接受、那些耦合要盡量避免、最重要的就是不同的耦合在代碼中如何表現會有如何的影響。 還好這些問題近期在一本叫《代碼大全》的書里面找到了(插一句,如果你還沒有聽說過這本書,趕緊,一定要趕緊打開Google,去Google一下)。 書中提到(中文版 p101)了常見的耦合的種類有如下幾種: l????? 簡單數據參數耦合 l????? 簡單對象耦合 l????? 對象參數耦合 l????? 語義上的耦合 對于簡單數據參數耦合比對象參數耦合更有靈活性書中在耦合標準-靈活性(p100)中進行了描述。并得出對象參數耦合要比簡單數據參數耦合的耦合程度要高。 但是在使用的過程中發現很多場合如果使用“簡單數據參數”的話,函數的參賽數列表會很長。這個聲明的時候倒是沒什么,但是在調用的時候就有可能寫錯參數的個數(這個還好 ide會告訴我們),參數寫的順序不正確(這個就比較郁悶了,容易出bug而且還不容易找)。 我想如果能用“簡單數據參數”就盡量使用,在不同的場合考慮使用“對象參數”。為了這個問題我曾經和我的同事狂吵過。所以印象很深。 ?
今天用了一下spring-mock來測試系統中的dao.感覺真的不錯。這個很簡單,記下來得原因是怕自己會忘。
你的測試用例必須從AbstractDependencyInjectionSpringContextTests繼承。他會幫你創建beanfactory以及beans.但是你必須告訴他到那去找配置文件。這個工作就是通過getConfigLocations方法來完成。一般情況下,這個方法都很簡單。 看看我的就知道他要干些什么了。 @Override 好了,這樣就配置完成了。下面的工作就是獲取你要測試的對象,并對他測試了。????protected?String[]?getConfigLocations()?{ ????????//?TODO?Auto-generated?method?stub ????????return?new?String[]{?"/springContext-hibernate.xml"?}; ????} public?ShipMasterDao?getShipMasterDao()?{ 嗯,很簡單吧。但是很有用。????????if(shipMasterDao?==?null?){ ????????????shipMasterDao?=?(ShipMasterDao)this.applicationContext.getBean("shipMasterDao"); ????????} ????????return?shipMasterDao; ????} ???? ????public?void?testGetUser(){ ????????ShipMaster?shipMaster?=?this.getShipMasterDao().getShipMaster(1); ????????this.assertEquals(shipMaster.getImono(),?"imo01"); ????} 記下,怕自己忘掉。 Mylar 簡介--開源工作平臺續
1.????
引子
??
很久很久以前有一個木匠,不但粗心而且還健忘。雖然在每天工作開始前,會考慮以下大概需要做的工作。但是在實施的過程中經常會出現這樣的狀況。看有一天他需要下一塊1.2m
的料。這個木匠就甩著膀子過來了。在動手前肯定是要量一下得,把手往口袋里一摸。卷尺是摸到,摸到了昨天晚上吃花生時留下得殼(還挺講究公德,沒有到處亂
扔。)。放哪兒呢,放哪兒呢……。經過了半個小時,終于在一個角落找到了卷尺。那個興奮啊。興沖沖的跑到木料前,愣了一下罵了一句“tmd鋸子又不知道跑
那去了!”。繼續去找鋸子去了……。
??????
其實在我們的軟件開發中也會類似的情景。我就不再啰嗦了。
1.?????
解決方案
我要說的這個解決方案就是Eclipse + Mylar。Eclipse就不用多說了。但是Mylar卻是不得不說。
Mylar
最大的亮點就是讓你只關注于你當前的工作(Active
Task)。在整個工作區中只是顯示和你工作相關的內容。這樣在Mylar中就有了一個核心的概念任務(Task)。這個任務我們完全可以對應到工作中的
一個任務,如你的頭給你分配得一個任務、測試組的同仁提交的一個需要你修改得bug等等。
我們每天的工作應該由這些任務組成。
在
Mylar
中首先提供了一個對于任務管理的功能。圖
– 1
顯示了一個
Mylar
的任務管理頁面。關于如何創建使用
Mylar
中的任務可以參考官方提供的一個
flash demo
我就不啰嗦了
(
http://www.eclipse.org/mylar/doc/demo/mylar-demo-04.html
)
。![]() 有了任務后,就可以把你的工作關注到特定的任務上了。這個部分在上面的提到的那個官方的 Flash 中也有描述。另外還有一個老外的 blog 也作了點說明。 http://weblogs.java.net/blog/kirillcool/archive/2005/11/mylar_a_very_us.html 。 說到任務, Mylar 提供了兩種任務。一個是本地任務還有一個就是知識庫任務(這個我翻譯的不好原文是 repository task )。本地任務很好理解就是任務的數據是以文件的形式保存在本地的。一般情況下只有本人可以使用。知識庫任務是從 BugTrace 系統(目前支持 Bugzilla 、 JIRA )里面獲取 Task. 這樣就可以在一個團隊中使用了。關于這個功能的使用可以參考 http://eclipse.org/mylar/doc/demo/mylar-demo-04-reports.html. 從個人角度來說,我是最喜歡這個塊的功能。想一想啊, QA 組的人測出 bug 紀錄到 bug Trace 系統中。開發人員可以在他自己的開發環境中。繼續想,項目管理人員把 Project 管理軟件中的 task 以 bug 的形式存放于 bugtrace 系統中(其實這個時候的 BugTrace 系統不光管理的是 Bug 了,可以把它認為識一個簡單的項目管理)。 關于這個項目的整體全局的介紹可以參考 : http://www.eclipsezone.com/articles/mylar/?source=archives 我想她肯定會有美好的未來的。 今天把開發環境架好了。我的環境包括以下幾個部分。 源碼管理:cvs bug管理:bugzilla 項目管理:open workbench。 Cvs沒什么好說的。 不過在安裝bugzilla的過程中有點小問題。 我是根據http://www.websina.com/cn/bugzilla-install-windows.html一文進行安裝的。 Bugzilla Version 2.20.1 MySql version 4.1 Perl version 5.8.7 為了減少安裝 perl 模塊的麻煩。我使用了 漢化 Bugzilla 中收集的模塊 BugzillaModules-2.20 。這個在 http://sourceforge.net/projects/bugzilla-cn 可以找到。 所有都就緒后,我 再次運行 Bugzilla 的安裝檢查程序( CheckSetup.pl ) 。發現給了我下面的錯誤:
找了半天在 Byron Jones 寫的《 Installing Bugzilla on Microsoft Windows 》 http://www.bugzilla.org/docs/win32install.html 終于找到原因了。 產生這個錯誤是因為 MySQL 4.1 及以后的版本使用了新的密碼加密算法,而使用的 Perl 的 DBD::MySql 模塊不夠新,不支持新的加密算法。你可以采取兩種方式來解決這個問題:一是使用 新的 DBD::MySql 模塊 ,不過需要自己編譯;另一種是在 MySQL 中強制使用兼容老版本的密碼加密算法: ![]() 這樣就搞定了。 這個 open workbench 。通過看它的簡介發現他也是一個類似于很有趣的軟件。核心部分是 java 實現。而界面卻是 MFC 做的。不可思議吧。 http://www.openworkbench.org/ 可以下載。 我下載以后不能跑。給我報錯是說“ Here's the fix for the JRE[n] not found. My specs is Windows 2000 w/ JDK1.5.0 and private JRE (in JDK dir). ” 我想啊,想啊。我明明安裝了 JDK1.5.0_04 了啊。其他使用 java 的程序( Eclipse )都可以好好的跑啊。 為什么到了這兒就不可以了呢。火大。 后來在論壇中找到一個解決方案:
![]() 修改了這個以后就能順利啟動。小用了一下,感覺很不錯。基本能滿足我的需求了。 這樣我的工作臺就完全搞定了。全部開源產品。省錢啊。 今天發現一個比較好用的工具Foxit。一個很小巧的pdf閱讀器。很小且啟動快。他最大的亮點是有一個Foxit Library的程序。這個是我一直想要的功能。在他這里實現的挺不錯的。
有了這個功能。我就不用為了找一本書而翻箱倒柜了。呵呵。更好的是老吳(http://www.wuguole.com/)還做了漢化。
在這里謝過了。 只要google一下就可以找到很多下載地址了。
一個不錯的代碼示例網站
http://www.java2s.com/Code/Java/CatalogJava.htm 我是想找點關于draw2d的例子才發現它的。 今天有幸碰到關于Connection以及Router使用的問題。覺得有點意思就把它記了下來。以背后查。 看到一個例子中看到圖 -- 1所示的功能。
其中圖-1中的連線是自適應的會保持該線段是最短的(其實他是使用的ShortestPathConnectionRouter,這個時候我還不知道,我是一個新手大家見笑了)。經過一番調查以后發現原來是在EditPart中的refreshVisuals方法中有如下代碼。 代碼--1
當時就猜啊,他肯定是在給一個特定的Layer加上一個什么玩意。然后就通過這個玩意來完成對于路徑的計算(其實這些東西完全是從代碼的字面意思而得到的)。我這些東西加到我的代碼中了。但是我運行的效果還是沒有起作用。他依舊是以前的那幅得行。我抓,抓也沒有用。就是達不到我要的效果。 抱著試一下的想法我打開了我的ConnectionEditPart(就是連線的那個EditPart),發現在createFigure中我是這么寫的。 代碼 -- 2
很明顯我在這里給connection賦了一個ConnectionRouter。最終其效果的是這一個ConnectionRouter起作用了。 Md剛掉他就萬事大吉了。 到這里代碼部分其實就完了。但是他背后的還有一點故事。 這里有三個角色:
1、Connection 2、ConnectionAnchor.
3
、
特別喜歡那個例子的一點一點添加功能的做法。 關于這個例子中使用的原理八進制講的很清楚了。我就不啰嗦了。我就把自己讀這部分代碼的筆記記下來。
|