<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    邋遢居

    我的Java天堂

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

    #

    寶貝,你離開我快一個多月了。回來吧。我想你了!
    posted @ 2006-08-03 15:47 Jet Geng 閱讀(561) | 評論 (0)編輯 收藏

    ???

    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

    上面內容聽起來很空洞,下面就結合實際的工作環境來簡單描述一下這些強大的功能給我們工作帶來的方便。在開始之前我們來看一幅圖:
    image002.gif

    這個圖中描述了一個bug的生命周期(Life Cycle of a Bug)。從圖中我們可以了解到一個Bug從生到死一般會經過NewàEvaluationàResolvedàVerificationàClose。在這個過程中參與的角色有兩個:測試人員和開發人員。

    我們先從測試人員的角度這個系統。

    測試人員看除了新建Bug以外其實一個很重任務就是回測。也就是上圖Resolved一下的工作。如何安排回測的工作,Bugzilla可以為你提供一個很人性的方式。這種人性的方式得益于Bugzilla強大的搜索能力。
    search.JPG
    這個就是他的搜索界面。這么多搜索條件可以讓你精確的搜索到你所需要的集合。搜索到的集合如下:
    searchresult.jpg
    你可以使用標題中的任何一欄作為排序條件。可不要小看這個排序的順序哦,他可是可以直接作為你工作的順序的。不相信?那好吧來看看下面這個圖
    navgaite.jpg

    直接點擊First,Last,Prev,Next就可以達到在你選擇的Bug中來回游走(其實這個就是你工作的過程)。

    如果你說今天下班前這部分工作可能做不完,明天我又不想在輸入那么多的查詢條件,好辦保存他啊。直接看右下角:
    savesearch.jpg

    如果有一批
    bug我已經回測完了。且他們所作的動作也差不多。直接批量進行,不要猶豫。
    batch.jpg

    看“Change Several Bugs at Once”就是為這個時候的你量身訂做的。Bugzilla還有很多不錯的功能我這里就不多說了。

    <!--[if !supportEmptyParas]-->?<!--[endif]-->

    下面來看看Bugzilla能給開發者帶來什么樣的好處。開發者在整個的bug生命周期中主要處理ResolvedASSIGNED(這個功能項目經理或項目負責人用的比較多)這兩塊功能。但是這兩塊功能是應該算是bug在其生命周期中最輝煌的一段時間。他們就是為這個時候而生。

    好了廢話不多說了。我們來看看一般開發人員如何利用Bug Trace系統。首先登陸到系統à搜索自己的Bug(有的Bug Trace提供了讓用戶一登陸就可以看到自己的Bugà打開開發環境à修改代碼à自測à提交修復。需要不停的在Bug Trace系統和開發環境間不停的切換。

    BugzillaEclipse 給我們提供了一個更人性的解決方案。假設開發人員小J來到了辦公室在開機和倒茶的時候他心里就在盤算著今天可能有些bug需要修復。Ok,可愛的Eclipse起來了。那就先看看今天有沒有自己的bug吧。
    eclipsebugsearch.jpg
    這個就是集成在EclipseMylar)中的Bug搜索頁面。搜索回來的結果你可以用來創建一個Task。有了這個Task那你就會省力多了。可以減少你在大項目中找找文件的痛苦。
    workbench.jpg
    看,現在我的workbench是不是很整潔啊。
    說老實話Bugzilla的界面真的不咋樣。如果評論多了會很長,而且還沒有分頁。不過在Eclipse中這個問題就好多了,因為我們有outline啊。outline.jpg

    看起來很不錯吧。

    除了這個這個Task還有除了能讓你看到整潔的workbench外還可以給你一個整潔的思路。
    shedual.jpg

    通過設定時間讓你有效的管理你的時間。這樣就讓在開發過程中最難掌控的部分管理起來了。

    BugzillaEclipseMylar)的好處我就不一一多說了。如果你不相信我的話可以先去體驗一下。

    其實這個時候Bugzilla可以當成一個項目管理軟件來用了,不光光是Bug了。如果我們能加上報表,這樣就可以為項目管理者提供最準確的項目進度數據。

    <!--[if !supportEmptyParas]-->?<!--[endif]-->

    說道報表Bugzilla為項目管理者們提供了很強大的報表功能。為項目總結等場合提供最有價值的原始資料。

    <!--[if !supportEmptyParas]-->?<!--[endif]-->

    由于Bugzilla采用Mysql做為數據源,所以備份還原數據很方便。這個為系統管理帶來了不少方便。

    參考文獻:

    http://jason.rocklv.net/freesoftware/ar01s06.html

    http://www.bugzilla.org/docs/2.18/html/using.html

    posted @ 2006-07-25 21:42 Jet Geng 閱讀(4803) | 評論 (1)編輯 收藏

    ???

    讀《代碼大全》筆記 -- 保持松散耦合

    在上學的時候就聽老師說,寫程序要做到低耦合。這話是牢牢的記在心里了(我還算是個乖學生)。可是在具體的編程過程中有犯糗了。犯糗原因就是對于常見耦合分辨不清、不知道在我的應用中那些耦合可以接受、那些耦合在特定場合可以接受、那些耦合要盡量避免、最重要的就是不同的耦合在代碼中如何表現會有如何的影響。

    還好這些問題近期在一本叫《代碼大全》的書里面找到了(插一句,如果你還沒有聽說過這本書,趕緊,一定要趕緊打開Google,去Google一下)。

    書中提到(中文版 p101)了常見的耦合的種類有如下幾種:

    l????? 簡單數據參數耦合

    l????? 簡單對象耦合

    l????? 對象參數耦合

    l????? 語義上的耦合

    對于簡單數據參數耦合比對象參數耦合更有靈活性書中在耦合標準-靈活性(p100)中進行了描述。并得出對象參數耦合要比簡單數據參數耦合的耦合程度要高。

    但是在使用的過程中發現很多場合如果使用“簡單數據參數”的話,函數的參賽數列表會很長。這個聲明的時候倒是沒什么,但是在調用的時候就有可能寫錯參數的個數(這個還好 ide會告訴我們),參數寫的順序不正確(這個就比較郁悶了,容易出bug而且還不容易找)。

    我想如果能用“簡單數據參數”就盡量使用,在不同的場合考慮使用“對象參數”。為了這個問題我曾經和我的同事狂吵過。所以印象很深。

    ?

    其實最要命的最難處理的是那些“語義上的耦合”。別人我不知道。看完了書中的定義,在回想自己以前寫過的代碼。很多都犯了“語義上的耦合”,并且給項目帶來了很多不便。丟人啊。
    posted @ 2006-07-15 15:59 Jet Geng 閱讀(679) | 評論 (0)編輯 收藏

    今天用了一下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");
    ????}
    嗯,很簡單吧。但是很有用。
    記下,怕自己忘掉。
    posted @ 2006-07-14 18:02 Jet Geng 閱讀(4676) | 評論 (3)編輯 收藏

    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
    Snap1.jpg
    有了任務后,就可以把你的工作關注到特定的任務上了。這個部分在上面的提到的那個官方的 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

    我想她肯定會有美好的未來的。

    posted @ 2006-07-11 10:12 Jet Geng 閱讀(2084) | 評論 (0)編輯 收藏

    今天把開發環境架好了。我的環境包括以下幾個部分。

    源碼管理: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 。發現給了我下面的錯誤:

    error.jpg

    找了半天在 Byron Jones 寫的《 Installing Bugzilla on Microsoft Windows http://www.bugzilla.org/docs/win32install.html 終于找到原因了。

    產生這個錯誤是因為 MySQL 4.1 及以后的版本使用了新的密碼加密算法,而使用的 Perl DBD::MySql 模塊不夠新,不支持新的加密算法。你可以采取兩種方式來解決這個問題:一是使用 新的 DBD::MySql 模塊 ,不過需要自己編譯;另一種是在 MySQL 中強制使用兼容老版本的密碼加密算法:

    bugalizza.jpg

    這樣就搞定了。

    這個 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 )都可以好好的跑啊。

    為什么到了這兒就不可以了呢。火大。

    后來在論壇中找到一個解決方案:

    1. login as administrator

    2. open regedit

    3. goto HKEY_LOCAL_MACHINE/Software/JavaSoft

    4. create if not exist : subkey "Java Runtime Environment" (the key did not exist before on my computer)

    5. In the new subkey add String value
      CurrentVersion="1.5.0"

    6. In the new subkey, create new subkey "1.5.0"

    7. In the subkey 1.5.0 create the string values JavaHome, MicroVersion, RuntimeLib (read http://java.sun.com/j2se/1.4.2/runtime_win32.html)
      if you installed JDK in c:\program files\java\jdk1.5.0 then set the values to
      JavaHome="c:\program files\java\jdk1.5.0"
      MicroVersion="0"
      RuntimeLib="C:\Program Files\Java\jdk1.5.0\jre\bin\client\jvm.dll"

      根據這個方案我修改了我的注冊表。修改結果如下圖:

    openbench.jpg

      修改了這個以后就能順利啟動。小用了一下,感覺很不錯。基本能滿足我的需求了。

      這樣我的工作臺就完全搞定了。全部開源產品。省錢啊。

    posted @ 2006-06-04 00:58 Jet Geng 閱讀(4179) | 評論 (6)編輯 收藏

    今天發現一個比較好用的工具Foxit。一個很小巧的pdf閱讀器。很小且啟動快。他最大的亮點是有一個Foxit Library的程序。這個是我一直想要的功能。在他這里實現的挺不錯的。

    foxit pdf.jpg

    有了這個功能。我就不用為了找一本書而翻箱倒柜了。呵呵。更好的是老吳(http://www.wuguole.com/)還做了漢化。


    foxit about.jpg

    在這里謝過了。

    只要google一下就可以找到很多下載地址了。

    posted @ 2006-06-03 09:40 Jet Geng 閱讀(726) | 評論 (0)編輯 收藏

    一個不錯的代碼示例網站
    http://www.java2s.com/Code/Java/CatalogJava.htm
    我是想找點關于draw2d的例子才發現它的。
    posted @ 2006-05-27 09:25 Jet Geng 閱讀(613) | 評論 (0)編輯 收藏

    今天有幸碰到關于Connection以及Router使用的問題。覺得有點意思就把它記了下來。以背后查。

    看到一個例子中看到圖 -- 1所示的功能。


    圖-1.JPG

    其中圖-1中的連線是自適應的會保持該線段是最短的(其實他是使用的ShortestPathConnectionRouter,這個時候我還不知道,我是一個新手大家見笑了)。經過一番調查以后發現原來是在EditPart中的refreshVisuals方法中有如下代碼。

    代碼--1

    if ?(spRouter? == ? null )?{
    ????????????ConnectionLayer?cLayer?
    = ?(ConnectionLayer)?getLayer(LayerConstants.CONNECTION_LAYER);
    ????????????FanRouter?router?
    = ? new ?FanRouter();
    ????????????router.setSeparation(
    30 );
    ????????????spRouter?
    = ? new ?ShortestPathConnectionRouter(getFigure());
    ????????????router.setNextRouter(spRouter);
    ????????????cLayer.setConnectionRouter(router);
    ????????}

    當時就猜啊,他肯定是在給一個特定的Layer加上一個什么玩意。然后就通過這個玩意來完成對于路徑的計算(其實這些東西完全是從代碼的字面意思而得到的)。我這些東西加到我的代碼中了。但是我運行的效果還是沒有起作用。他依舊是以前的那幅得行。我抓,抓也沒有用。就是達不到我要的效果。

    抱著試一下的想法我打開了我的ConnectionEditPart(就是連線的那個EditPart),發現在createFigure中我是這么寫的。

    代碼 -- 2

    PolylineConnection?connection? = ?(PolylineConnection) super .createFigure();
    ???????
    ????????connection.setConnectionRouter(
    new ?BendpointConnectionRouter(){
    ????????????
    public ? void ?route(Connection?conn)?{
    ????????????????GraphAnimation.recordInitialState(conn);
    ????????????????
    if ?( ! GraphAnimation.playbackState(conn))
    ????????????????????
    super .route(conn);
    ????????????}
    ????????});

    很明顯我在這里給connection賦了一個ConnectionRouter。最終其效果的是這一個ConnectionRouter起作用了。

    Md剛掉他就萬事大吉了。

    到這里代碼部分其實就完了。但是他背后的還有一點故事。

    這里有三個角色:

    1Connection

    2ConnectionAnchor.

    3 ConnectionRouter

    這個類是用來顯示兩點之間的線段 (Line), 他的起點和終點是通過 ConnectionAnchor 來定義的。至于他的其他點是通過 ConnectionRouter 計算設置的。從這個地方來看 ConnectionRouter 是一個負責計算的工具類。這樣完全可以讓所有的 Connection 使用一個 ConnectionRouter 實例(這就是今天最要記下的部分)。

    gef 中他就為我們提供了這樣的機制。下面的這段話是 Gef help 中的一句話。他就說明了這個道理。

    A convenient way to share the router with all connections and to place connections above the drawing is to use a ConnectionLayer. The layer has a connection router property which it shares with every child that's a connection. You can update this property and easily change every connection's router at once.

    這個道理要轉換成代碼的話就是代碼 – 1 了。

    這個東西很簡單。希望對像我一樣的新手有點幫助。

    posted @ 2006-05-22 22:21 Jet Geng 閱讀(1496) | 評論 (2)編輯 收藏

    特別喜歡那個例子的一點一點添加功能的做法。

    關于這個例子中使用的原理八進制講的很清楚了。我就不啰嗦了。我就把自己讀這部分代碼的筆記記下來。

    GEF 練習圖.jpeg

    posted @ 2006-05-06 10:34 Jet Geng 閱讀(787) | 評論 (0)編輯 收藏

    僅列出標題
    共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
    主站蜘蛛池模板: 亚洲国产高清国产拍精品| 人人爽人人爽人人片A免费 | 本免费AV无码专区一区| 久久亚洲国产精品五月天| 四虎永久在线观看免费网站网址| 亚洲成av人在线观看网站| 亚洲人成人一区二区三区| 成人免费观看一区二区| 一道本在线免费视频| 18gay台湾男同亚洲男同| 国产国产人免费人成免费视频| 中国人免费观看高清在线观看二区 | 亚洲国产精品无码久久| 免费日本黄色网址| 人妻无码一区二区三区免费| 亚洲AV日韩AV永久无码色欲| 亚洲欧洲日产国码av系列天堂| aa级一级天堂片免费观看| 中文字幕不卡免费视频| 亚洲一级特黄特黄的大片| 中文字幕精品亚洲无线码一区| 三年片在线观看免费观看高清电影| 亚洲国产一级在线观看 | 亚洲国产一级在线观看| 国产一卡二卡四卡免费| 韩国免费a级作爱片无码| 伊人久久五月丁香综合中文亚洲| 亚洲国产婷婷六月丁香| 国产一区二区视频免费| 波多野结衣免费在线| a色毛片免费视频| 国产国拍亚洲精品mv在线观看 | 免费福利在线视频| 成人一级免费视频| 亚洲色婷婷一区二区三区| 免费羞羞视频网站| 成人免费视频69| 最近中文字幕大全中文字幕免费| 一区二区视频在线免费观看| 在线观看国产一区亚洲bd| 亚洲中文字幕在线无码一区二区 |