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