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

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

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

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

    單元測(cè)試實(shí)踐的主要問題與解決(1)

     本文是我在“第十屆中國(guó)系統(tǒng)與軟件過程改進(jìn)年會(huì)廣東會(huì)場(chǎng)”所作演講的整理稿,主要分享單元測(cè)試的一些要點(diǎn)、單元測(cè)試實(shí)踐的主要問題,以及如何來(lái)解決這些問題。

      一、單元測(cè)試概述

      1.1 什么是單元測(cè)試

      單元測(cè)試,就是針對(duì)代碼單元的獨(dú)立測(cè)試。為什么需要單元測(cè)試呢?這是代碼的基本特性決定了的。代碼有一個(gè)基本特性,就是對(duì)數(shù)據(jù)分類處理。

      代碼通常會(huì)有很多的判定。一個(gè)判定,就是一次分類。嵌套的判定,會(huì)使分類次數(shù)的翻倍。

      如果我們?cè)趯懘a的時(shí)候,有一個(gè)分類漏掉了,就會(huì)產(chǎn)生一個(gè)Bug;如果一個(gè)分類,雖然寫了代碼,但是處理不正確,也會(huì)產(chǎn)生一個(gè)Bug。一個(gè)函數(shù)要沒有錯(cuò)誤,必須做到兩點(diǎn):1,對(duì)數(shù)據(jù)的分類必須完整;2,每一個(gè)分類的處理必須正確。做到了這兩點(diǎn),就可以說(shuō),代碼的功能邏輯是正確的。

      那么,如何檢測(cè)代碼的功能邏輯是否正確呢?

      調(diào)試,是臨時(shí)的,且不完整的,例如,一個(gè)函數(shù)有十種輸入,調(diào)試能覆蓋五六種就不錯(cuò)了。而系統(tǒng)測(cè)試,并不針對(duì)某個(gè)具體的函數(shù),不關(guān)注某個(gè)函數(shù)的功能邏輯是否正確。

      要檢測(cè)某個(gè)函數(shù)的功能邏輯,就必須要依照分類列出數(shù)據(jù),檢測(cè)代碼是否對(duì)每一個(gè)分類都做了處理,而且每一個(gè)分類的處理是否正確。

      ——這就是單元測(cè)試。

      1.2 單元測(cè)試的基本方法

      由上面的分析可以看出,單元測(cè)試的基本方法就是:依數(shù)據(jù)的分類列出輸入,執(zhí)行被測(cè)試程序,然后,判斷輸出是否符合預(yù)期。

      單元測(cè)試能達(dá)到什么樣的效果呢?那就是:無(wú)論別人怎么樣,我總是對(duì)的!

     這里的“別人”,是指關(guān)聯(lián)代碼。“我”,是指當(dāng)前正在編寫或測(cè)試的代碼。單元測(cè)試要做到的是,無(wú)論關(guān)聯(lián)代碼是否有錯(cuò),都要保證我是對(duì)的。具體來(lái)說(shuō),我要考慮關(guān)聯(lián)代碼會(huì)產(chǎn)生什么樣的數(shù)據(jù),這些數(shù)據(jù)要如何分類處理,只要我的分類和處理是正確的,那么,無(wú)論別人怎么樣,我總是對(duì)的。

      1.3 單元測(cè)試的效益

      單元測(cè)試的效益可以說(shuō)是立竿見影,并且會(huì)推動(dòng)整個(gè)開發(fā)過程的改進(jìn)。

      首先,單元測(cè)試可以保證代碼的質(zhì)量。因?yàn)橹挥袉卧獪y(cè)試,能夠全面檢測(cè)代碼單元的功能邏輯,排除代碼中大量的、細(xì)小的錯(cuò)誤。

      其次,排錯(cuò)成本最小。如果在編碼階段同時(shí)進(jìn)行單元測(cè)試,排錯(cuò)成本可以忽略不計(jì)。但若到了后期,排錯(cuò)成本可能會(huì)增長(zhǎng)上百倍,要是產(chǎn)品已經(jīng)到了用戶手里,那造成的損失就更難說(shuō)了。


     第三,提升開發(fā)效率。單元測(cè)試可以讓程序行為一目了然,也就是程序行為可視化。什么叫程序行為呢?就是什么輸入下,會(huì)執(zhí)行哪些代碼,會(huì)產(chǎn)生什么輸出。如下圖,黑色的代碼是當(dāng)前輸入下所執(zhí)行代碼。

      如果我們寫幾行代碼,就可以看到程序的行為,相當(dāng)于寫文章時(shí)上下文可見,這可以促進(jìn)我們的開發(fā)思維。如果我們的思維有了偏差,也可以及時(shí)發(fā)現(xiàn)。如果代碼中有了錯(cuò)誤,也可以隨時(shí)排除。

      那么,是不是整個(gè)項(xiàng)目的所有代碼都做了單元測(cè)試,才能得到這些效益呢?不是的。80:20規(guī)則,在軟件開發(fā)過程中也存在。也就是說(shuō),80%的代碼錯(cuò)誤,可能存在于20%的代碼中;80%的編碼、調(diào)試成本,可能會(huì)消耗在20%的代碼上。這20%,就是算法密集度高的代碼,也就是功能邏輯復(fù)雜的代碼。

      這些代碼可能只有20%,但是卻可能包含了80%的錯(cuò)誤,消耗了80%的編碼、調(diào)試時(shí)間,即使只對(duì)這部分代碼進(jìn)行單元測(cè)試,在提升產(chǎn)品的質(zhì)量和開發(fā)效率方面,也會(huì)產(chǎn)生立竿見影的效果。

     第四,自動(dòng)回歸。如果沒有單元測(cè)試,系統(tǒng)測(cè)試發(fā)現(xiàn)了錯(cuò)誤,當(dāng)然要修改代碼,而修改代碼可能引入新的錯(cuò)誤,又要進(jìn)行全面的系統(tǒng)測(cè)試,這樣就可能陷入循環(huán),這通常也是項(xiàng)目延期的主要原因。

      如果有了單元測(cè)試,修改代碼時(shí)可以通過回歸測(cè)試馬上檢測(cè)是否引入了新的錯(cuò)誤。所謂回歸,就是回復(fù)到原來(lái)正確的狀態(tài)。

      正是回歸測(cè)試,使單元測(cè)試對(duì)整個(gè)開發(fā)過程的改進(jìn)都產(chǎn)生積極影響,使項(xiàng)目適應(yīng)頻繁變化的需求。單元測(cè)試是敏捷開發(fā)的基礎(chǔ)和核心,反過來(lái)說(shuō),有了單元測(cè)試,開發(fā)過程會(huì)自動(dòng)趨于敏捷。單元測(cè)試也降低了后期測(cè)試的壓力。

    \



    posted on 2011-12-09 16:37 順其自然EVO 閱讀(142) 評(píng)論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     
    <2011年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲国产美女精品久久久久| 在线免费观看一级毛片| 国产线视频精品免费观看视频| 美女无遮挡免费视频网站| 亚洲码和欧洲码一码二码三码| 亚洲中文字幕精品久久| 在线综合亚洲中文精品| 亚洲熟女www一区二区三区| 亚洲男人的天堂久久精品| 亚洲综合久久精品无码色欲| 亚洲AV无码无限在线观看不卡| 亚洲日韩亚洲另类激情文学| 亚洲欧美第一成人网站7777| 亚洲AV无码一区二区乱子仑| 美国毛片亚洲社区在线观看| 美女视频黄a视频全免费网站色| 黄色网址大全免费| 亚洲精品偷拍视频免费观看| 伊人免费在线观看| 99久久久国产精品免费蜜臀| 在线观看成人免费视频不卡| 毛片免费视频观看| 国产免费人视频在线观看免费| 亚洲A丁香五香天堂网 | 猫咪免费人成网站在线观看入口| 欧洲乱码伦视频免费国产| 中文字幕视频免费在线观看| 日韩av无码久久精品免费| 噼里啪啦电影在线观看免费高清| 免费无码又爽又刺激毛片| 亚洲色偷偷综合亚洲AV伊人| 久久精品国产精品亚洲色婷婷 | 国产又大又长又粗又硬的免费视频| 免费无遮挡无码永久在线观看视频| 国产精品亚洲不卡一区二区三区| 久久精品国产亚洲av四虎| 91丁香亚洲综合社区| 一区二区三区免费在线视频 | 亚洲欧洲无码一区二区三区| 黄色三级三级三级免费看| 日本三级在线观看免费|