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

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

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

    BlogJava 聯(lián)系 聚合 管理  

    Blog Stats

    隨筆分類(196)

    隨筆檔案(209)

    文章檔案(4)

    相冊(cè)

    CRM&ERP

    Google

    SOA


    BlackStone SOA Group

    Driven By Test…

    程啟健(Kelvin)

    前兩天Eric說搞個(gè)讀書協(xié)會(huì),那就讓我來寫第一篇吧。第一篇是關(guān)于Test-Driven Development的。

    TDD(Test-Driven Development)顧名思義就是測(cè)試驅(qū)動(dòng)的開發(fā)。以測(cè)試驅(qū)動(dòng)并不是代表以測(cè)試人員為中心進(jìn)行開發(fā),而是把要測(cè)試的內(nèi)容作為軟件開發(fā)的目標(biāo)來開發(fā)。測(cè)試的Case就是我們要達(dá)到的目標(biāo)。其原則如下:

    • ?絕對(duì)沒有未進(jìn)行過測(cè)試的代碼。
    • 沒有進(jìn)行關(guān)聯(lián)測(cè)試的代碼不會(huì)進(jìn)入產(chǎn)品中。
    • 你必須寫測(cè)試代碼先。
    • 測(cè)試決定了你要寫的代碼。

    TDD和Refactoring成為XP中最重要的實(shí)踐。兩者相輔相成,重構(gòu)就是不改變程序內(nèi)在功能的前提下更改代碼的結(jié)構(gòu)。測(cè)試才能驗(yàn)證你的重構(gòu)沒有改變其功能。

    TDD的具體流程是怎樣的呢?為何測(cè)試可以在編碼先呢?

    以下是簡(jiǎn)單的TDD的Sample(摘自TDD a practical guide by David Astels):

    本Sample假設(shè)你已了解JUnit等測(cè)試軟件。

    GOAL:做個(gè)電影的平均評(píng)分的函數(shù)。給個(gè)例子,假如觀眾甲給3分,觀眾乙給5分,平均分為4分。

    1.把目標(biāo)做成測(cè)試用例。

    public void testRating() {

    assertEquals("Bad average rating.",4,starWars.getAverageRating());

    }

    Make it Simple。就讓平均評(píng)分為4分先吧。

    2.但是總不能都是4分,而且評(píng)分的人可是觀眾阿。加個(gè)添加評(píng)分的函數(shù)。

    public void testRating() {

    starWars.addRating(3);

    starWars.addRating(5);

    assertEquals("Bad average rating.",4,starWars.getAverageRating());

    }

    3.什么電影呢?是星球大戰(zhàn)!

    public void testRating() {

    Movie starWars = new Movie("Star Wars");

    starWars.addRating(3);

    starWars.addRating(5);

    assertEquals("Bad average rating.",4,starWars.getAverageRating());

    }

    4.編譯這些代碼的時(shí)候發(fā)現(xiàn)addRating(int)和getAverageRating()沒有定義。趕緊在Movie類中寫這些函數(shù)。

    public void addRating(int newRating) {

    }

    public int getAverageRating() {

    return 0;

    }

    測(cè)試失敗?Bad average rating. expected:<4> but was:<0>

    5.應(yīng)該返回4而不是0!那就返回4吧。

    public int getAverageRating() {

    return 4;

    }

    重新編譯,綠條出現(xiàn)。Yeah。下面我們進(jìn)入重構(gòu)階段了。

    6.評(píng)分是由3分+5分的和后除以2才得的。直接返回4不符合要求阿。改。

    public int getAverageRating() {

    return (3 + 5) / 2;

    }

    7.編譯成功。又出綠條。但是算法上應(yīng)該是總分除以個(gè)數(shù)才可以阿。繼續(xù)該吧。

    private int totalRating = 0;

    private int numberOfRatings = 0;

    public void addRating(int newRating) {

    totalRating += newRating;

    numberOfRatings++;

    }

    public int getAverageRating() {

    return totalRating / numberOfRatings;

    }

    8.編譯運(yùn)行。綠色的.yeah.成功。寫多些用例測(cè)試下。大家來評(píng)評(píng)《哥斯拉》這部電影。

    public void testLotsOfRatings()

    {

    Moviegodzilla = new Movie("Godzilla");

    godzilla.addRating(1);

    godzilla.addRating(5);

    godzilla.addRating(1);

    godzilla.addRating(2);

    assertEquals("Bad average rating.",2,godzilla.getAverageRating());

    }

    TDD就是這樣一個(gè)編寫測(cè)試、編寫代碼、再測(cè)試、重構(gòu)、再測(cè)試的過程。實(shí)現(xiàn)盡量少的功能,不斷地對(duì)代碼進(jìn)行重構(gòu)。利用TDD開發(fā)出來的代碼將會(huì)更干凈、更安全、更易于重構(gòu)的。


    posted on 2006-06-28 15:09 BlackStone SOA 閱讀(259) 評(píng)論(0)  編輯  收藏 所屬分類: Book Club

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲午夜久久久久妓女影院| 国产一区视频在线免费观看| 亚洲精品无码午夜福利中文字幕 | 亚洲av麻豆aⅴ无码电影 | 国产AV无码专区亚洲AWWW| 精品久久久久久亚洲中文字幕| 成人免费福利电影| 亚洲国产精品免费观看| 性色av免费观看| 亚洲AV成人精品日韩一区| 免费很黄很色裸乳在线观看| 特级毛片A级毛片免费播放| 免费中文字幕在线观看| h视频在线观看免费| 国产V亚洲V天堂无码| 特级精品毛片免费观看| 亚洲婷婷综合色高清在线| 国产精品成人免费一区二区| 亚洲欧美日韩中文字幕在线一区| 国产免费小视频在线观看| 特级无码毛片免费视频| 成人人免费夜夜视频观看| 亚洲国产综合AV在线观看| 国产裸模视频免费区无码| 二级毛片免费观看全程| 亚洲小说区图片区另类春色| 国产一区二区免费视频| 亚洲精品美女在线观看| 天天摸天天操免费播放小视频| 免费人成动漫在线播放r18| 亚洲成a人片在线观看日本| 国产黄色免费网站| 亚洲av永久无码| 亚洲夜夜欢A∨一区二区三区| 精品久久8x国产免费观看| 亚洲高清国产拍精品熟女| 亚洲一区爱区精品无码| 99爱在线精品免费观看| 免费又黄又爽又猛大片午夜 | 国产麻豆剧传媒精品国产免费| 国产免费AV片在线观看播放|