qileilove

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

          走進(jìn)單元測(cè)試一:初認(rèn)Unit Test

          走進(jìn)單元測(cè)試一:初認(rèn)Unit Test

           前言:在公司寫單元測(cè)試已經(jīng)有兩個(gè)多月了(思想上有過糾結(jié)),說實(shí)話有點(diǎn)像趕鴨子上架,在項(xiàng)目收尾的時(shí)候才做,很明顯它的作用已經(jīng)是名副其實(shí)了,而且還找像我這樣的新手來寫(一開始我都不怎么熟悉業(yè)務(wù)流程),所以現(xiàn)在一直努力學(xué)好單元測(cè)試,寫好它,把自己的事做好!

            我也是在讀程序員修煉之道 - 單元測(cè)試這本書之后,再閱讀了園子中的各個(gè)文章后的感悟把,寫出來跟大家一起分享!

            電子書下載地址:http://www.kuaipan.cn/file/id_29568238492847284.htm

            測(cè)試是貫穿整個(gè)整個(gè)軟件工程的始末,做好測(cè)試對(duì)軟件的質(zhì)量會(huì)有一個(gè)質(zhì)的保證,減少查找BUG的工作量,所以作為一個(gè)開發(fā)者需要了解各種測(cè)試流程以及核心思想,然而這次的單元測(cè)試是我們開發(fā)者必須要具備的技能,這次就讓我們走進(jìn)單元測(cè)試(Unit Test)!

            1.個(gè)人對(duì)單元測(cè)試的初識(shí)

            ①堅(jiān)持的開發(fā)中編寫單元測(cè)試,并把它培養(yǎng)成一種習(xí)慣!

            ②寫出高效的單元測(cè)試,這種能力需要在實(shí)踐中慢慢積累!

            ③提高對(duì)單元測(cè)試的認(rèn)識(shí)高度,把它和編碼工作同等對(duì)待!

            2.什么是單元測(cè)試?

            通俗講單元測(cè)試就是檢查一個(gè)函數(shù)執(zhí)行后它的返回結(jié)果或者它對(duì)系統(tǒng)數(shù)據(jù)造成的影響(或者其它方面的影響)是否跟你的期望一致,也就是為了證明代碼的行為和我期望的一致!

            3.我們?yōu)槭裁匆褂脝卧獪y(cè)試?

            ①最直接的原因是保證我們函數(shù)的正確性,如果這個(gè)函數(shù)在沒有保證正確的情況下就被上層代碼調(diào)用,那么隨著項(xiàng)目的深入,調(diào)用層次會(huì)越來越深,就很容易產(chǎn)生嚴(yán)重的BUG問題,從而增加開發(fā)難度,降低開發(fā)效率!

            ②根本原因是減輕我們開發(fā)人員的工作量,使我們的工作變的輕松(這只是一個(gè)相對(duì)說法)!

            4.單元測(cè)試的內(nèi)涵

            如果把單元測(cè)試上升到一定程度后,它可以把我們的代碼變的更加完美和簡(jiǎn)潔!

            5.單元測(cè)試的本質(zhì)

            請(qǐng)記住一點(diǎn),不是為工作而編寫單元測(cè)試,單元測(cè)試是方便我們開發(fā)人員的,可以使我們的工作變的輕松!

            單元測(cè)試可以減少我們花在解決不必要的BUG之上(并不是說沒有BUG,而是說減少不必要的BUG),而把大量時(shí)間專注于業(yè)務(wù)需求上!

            6.函數(shù)的行為和預(yù)期的一致嗎?

            如果測(cè)試只考慮在正確的環(huán)境下造成正確的影響,那么這樣的單元測(cè)試是不及格的!

            做測(cè)試就要考慮全面,各個(gè)方面都要涉及的到,如:環(huán)境因素(也可以是系統(tǒng)所處在的環(huán)境),各種異常,邊界值等等,所以盡可能的考慮特殊情況,做到做到百密而無一疏(盡自己的最大努力達(dá)到)!

           7.需要依賴單元測(cè)試嗎?

            答案是肯定的!

            當(dāng)你很自信的認(rèn)為你寫的函數(shù)是絕對(duì)正確的且沒有測(cè)試代碼做為依據(jù)的時(shí)候往往會(huì)出現(xiàn)意想不到的錯(cuò)誤,因?yàn)槟銜?huì)疏忽了其它的一些情況,所以編寫單元測(cè)試來保證我們函數(shù)的準(zhǔn)確性是非常有必要的!

            注:后面會(huì)說明測(cè)試應(yīng)該測(cè)哪些情況!

            8.單元測(cè)試干了什么,作用是什么?

            ①最直接的是保證了函數(shù)的正確性(這個(gè)大家都知道)!

            ②還有我們可以根據(jù)單元測(cè)試來判斷此函數(shù)是用來干什么的,也就說單元測(cè)試類似于一個(gè)可執(zhí)行文檔,其它開發(fā)人員可以通過看單元測(cè)試就會(huì)明白你測(cè)試的函數(shù)是用來干嘛的!

            9.如何進(jìn)行單元測(cè)試?

            這邊我們使用的VS2008,2010自帶的單元測(cè)試框架!

            ①  使用VS自帶的Unit Test,簡(jiǎn)單易學(xué)!

            ②  測(cè)試要全面!

            ③  保證所有測(cè)試都能通過,不管舊的還是新的測(cè)試代碼,都要通過!

            ④  保證所有測(cè)試沒有對(duì)系統(tǒng)中任何模塊產(chǎn)生影響(這個(gè)很重要)!

            ⑤  及時(shí)運(yùn)行測(cè)試代碼,查看運(yùn)行結(jié)果,保證系統(tǒng)的運(yùn)行正常!

            10.不要為沒寫測(cè)試代碼找借口

            一般情況的看來當(dāng)你寫的一個(gè)函數(shù)已經(jīng)不太需要修改了,你就應(yīng)該編寫這個(gè)函數(shù)的單元測(cè)試代碼!

            大多數(shù)情況下開發(fā)人員的大量時(shí)間都是修改BUG,如果能盡早的做單元測(cè)試將會(huì)減輕你的工作量(雖然不可能沒有BUG,但寫Unit Test卻對(duì)你是有益無害的),即使在以后的時(shí)間里出現(xiàn)BUG,我想你能很快的定位產(chǎn)生BUG的位置!

            最后寫Unit Test千萬不要放在項(xiàng)目末期,如果此時(shí)寫單元測(cè)試的人還是一個(gè)剛進(jìn)項(xiàng)目新手的話,寫單元測(cè)試就是扯淡,這樣的方式是不能體現(xiàn)單元測(cè)試的核心觀念的,而我就剛好處于這個(gè)狀態(tài),真的很后怕,所以還需要多多加油,努力了解系統(tǒng)流程!

            11.如果真的沒有時(shí)間寫單元測(cè)試,請(qǐng)思考下面幾個(gè)問題?

            ①對(duì)于你所編寫的代碼,你花在調(diào)試上面的時(shí)間有多少?

            ②你目前認(rèn)為你的代碼正確無比,但很有可能在系統(tǒng)中卻存在嚴(yán)重隱患,你是否花了很多時(shí)間來查找這些隱患?

            ③對(duì)于一個(gè)新的BUG,你花了多長(zhǎng)時(shí)間來定位這個(gè)BUG在源碼中的位置?

            總結(jié):隨著項(xiàng)目的深入,你的函數(shù)會(huì)被調(diào)用的越來越深,那么特殊情況就會(huì)經(jīng)常發(fā)生,萬一出現(xiàn)什么情況你將會(huì)耗費(fèi)很多的精力來解決它,另一方面,適當(dāng)?shù)膯卧獪y(cè)試代碼會(huì)很大程度上減少你的工作量,這是經(jīng)過實(shí)踐檢驗(yàn)的!

            總結(jié):好了基本的單元測(cè)試思想就這么多了,希望園友們能指點(diǎn)一二,單元測(cè)試系列將持續(xù)更新中!

          相關(guān)文章:

          走進(jìn)單元測(cè)試二:測(cè)試需要從哪些方面著手

          posted on 2013-08-09 10:08 順其自然EVO 閱讀(186) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2013年8月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 井研县| 沽源县| 大英县| 南陵县| 班玛县| 巴楚县| 达尔| 保靖县| 屏东县| 湘潭县| 综艺| 通江县| 乌兰浩特市| 通榆县| 洪湖市| 惠安县| 许昌市| 日照市| 桦南县| 盘山县| 罗城| 丰宁| 商城县| 大石桥市| 高雄市| 棋牌| 安化县| 赤峰市| 兰坪| 登封市| 且末县| 全椒县| 溆浦县| 靖远县| 宜丰县| 伽师县| 杭州市| 英山县| 若尔盖县| 勐海县| 从江县|