首頁(yè) 培訓(xùn)網(wǎng) 最新資訊 熱門問(wèn)答

軟件測(cè)試

免費(fèi)試聽 在線客服

您的位置: 深圳培訓(xùn)網(wǎng) > 軟件測(cè)試培訓(xùn)資訊 > 為什么要測(cè)試,測(cè)試是如何令人更快樂(lè)的?(一)

為什么要測(cè)試,測(cè)試是如何令人更快樂(lè)的?(一)

來(lái)源:教育聯(lián)展網(wǎng) | 發(fā)布時(shí)間: | 編輯:佚名

        來(lái)源:51Testing軟件測(cè)試網(wǎng)


        我曾經(jīng)是一個(gè)不測(cè)試主義者,因?yàn)槲铱床坏綔y(cè)試的價(jià)值。然后,我試了一段時(shí)間,變得對(duì)它深信不疑。我收集了一些經(jīng)驗(yàn),當(dāng)然還遠(yuǎn)遠(yuǎn)不夠。這篇文章總結(jié)了一些我知道的以及我認(rèn)為我知道的內(nèi)容。
        “我不總測(cè)試我的代碼,但是當(dāng)我測(cè)試的時(shí)候,感覺(jué)更好?!?/span>—— 我
        這是怎么一回事呢?
        這,全是因?yàn)榇a:
        本文主要關(guān)于單元測(cè)試,而不是集成測(cè)試或端至端的測(cè)試,但在某些方面也可用于其他測(cè)試。在實(shí)踐中,測(cè)試很少是單一的或非此即彼的,并且這也不是目的。
        單元測(cè)試成本低廉,因此應(yīng)該成為測(cè)試工作中極大的組成部分。編寫和運(yùn)行單元測(cè)試都很便宜。因?yàn)樗徊榭创a的特定部分。集成測(cè)試則相反,它們包含的代碼更大。
        為什么這很重要?
        測(cè)試可幫助你對(duì)你的代碼放心。對(duì)一個(gè)稍復(fù)雜的問(wèn)題寫一個(gè)解決方案,然后手動(dòng)測(cè)試,你只需要這么做就可以了。有著一定經(jīng)驗(yàn)的你當(dāng)然可以自信地發(fā)布代碼,但是結(jié)果卻往往是拋棄了發(fā)現(xiàn)錯(cuò)誤的首次機(jī)會(huì)。
        測(cè)試能讓你體驗(yàn)?zāi)愕拇a中在極端的條件下是什么樣的。要是傳遞的數(shù)字是負(fù)數(shù),會(huì)怎么樣,在我們總是假定數(shù)值為正的情況下?要是傳遞的根本就不是數(shù)字,會(huì)怎么樣?
        “每個(gè)人都會(huì)寫出 bug,我們都寫過(guò) bug。因此,這不是“你能正確地編寫代碼或一次性寫出正確代碼?”的問(wèn)題,我們都寫過(guò)不正確的代碼。這就是我們所做的一切,我們寫的都是不正確的代碼?!?/span>——Joe Eames《JavaScript. Air 004》
        編碼是辛苦,我們都應(yīng)該承認(rèn)這一點(diǎn)。其中的主要原因之一就是,你需要測(cè)試代碼,以獲得它能如期表現(xiàn)的信心,不管是什么代碼。
        不相信?這里給出了一些附加參數(shù):
        測(cè)試過(guò)的代碼更好
        許多人會(huì)告訴你,代碼測(cè)試會(huì)導(dǎo)致更好的代碼質(zhì)量。這在使用單元測(cè)試,并且至少在測(cè)試驅(qū)動(dòng)開發(fā)上有所行動(dòng),即使這些行動(dòng)甚為草率時(shí),尤其如此。原因如下:
        如果你的代碼難以測(cè)試,那么可能是你代碼沒(méi)有寫好。好代碼的定義是什么,這是一個(gè)大問(wèn)題,但這里要強(qiáng)調(diào)的一句話是一個(gè)很好的經(jīng)驗(yàn)法則,也是大多數(shù)人所贊同的,那就是,好的代碼會(huì)分離關(guān)注點(diǎn)。有經(jīng)驗(yàn)的程序員限制功能體以便于只做一件邏輯上的事情就是這個(gè)原因。
        目標(biāo)對(duì)齊
        代碼很難測(cè)試可能要么是因?yàn)橛刑嗟氖虑橐^續(xù),要么是因?yàn)橛刑嗟囊蕾嚕ɑ騼烧呓杂校???紤]將此視為協(xié)調(diào)利益的一個(gè)問(wèn)題:在編寫未經(jīng)測(cè)試的代碼時(shí),在速度(或懶惰)和關(guān)注點(diǎn)分離之間存在著利益沖突,并且短期內(nèi)你的代碼是如何被組織的并沒(méi)有那么重要。當(dāng)代碼必須測(cè)試時(shí),你的目標(biāo)更一致,因?yàn)閷?duì)于寫得好的代碼,更易于寫測(cè)試!
        像消費(fèi)者一樣思考
        當(dāng)你首次編寫測(cè)試時(shí),你首先要設(shè)計(jì)代碼的 API。測(cè)試讓你進(jìn)入代碼消費(fèi)模式,在這種模式下,你的代碼需要面對(duì)其他東西的接口。設(shè)計(jì) API,而不那么關(guān)注內(nèi)部運(yùn)作將導(dǎo)致一個(gè)更佳的 API 設(shè)計(jì),這會(huì)導(dǎo)致模塊的更易消耗,從而促進(jìn)項(xiàng)目代碼的更干凈。
        靈感突現(xiàn)
        測(cè)試會(huì)讓你靈機(jī)一現(xiàn)。通常情況下,因?yàn)樗仁鼓闳ニ伎歼吘壡闆r——零值,10 ^ 12,null 或 undefined。這使得你有機(jī)會(huì)來(lái)思考。去反省,以及了解在陌生的環(huán)境下會(huì)發(fā)生什么。僅僅是思考這些的過(guò)程,或代碼將面對(duì)的其他情況,都經(jīng)常會(huì)讓你意識(shí)到代碼可以簡(jiǎn)化(以及代碼需要如何保護(hù)自我)。
        這些靈感突現(xiàn)的時(shí)刻也可能來(lái)自特別令人沮喪的情況之一:當(dāng)你的代碼和測(cè)試不一致的時(shí)候。你正處于不知道哪個(gè)才正確的兩難境地。如果你碰到這種情況,那么設(shè)計(jì)可能有問(wèn)題,或者你的前提假設(shè)發(fā)生了變化。把它看成是一個(gè)好兆頭!你的代碼將會(huì)更滿意。
        測(cè)試可以說(shuō)明代碼做了什么
        沒(méi)有人喜歡寫文檔,但當(dāng)你繼承(從一年前的自己,或其他人)或接口的模塊文檔齊全的時(shí)候,絕對(duì)是好的。測(cè)試可以成為這樣一種途徑,并且還有一個(gè)額外的好處是:測(cè)試用實(shí)際行動(dòng)證實(shí)代碼。就如同極佳的科學(xué)教師,他們不只是用嘴巴告訴你,氫氣易燃,而是充了一個(gè)氫氣球,讓它升到天花板上,然后在棍子上放一根點(diǎn)燃的火柴靠近氣球(這是我五年級(jí)時(shí)特別難忘的時(shí)刻之一)。
        你知道所有 bug 的共同點(diǎn)嗎?那就是它們經(jīng)過(guò)了所有的測(cè)試。所以,當(dāng)你找到一個(gè) bug 的時(shí)候,就等于知道測(cè)試哪里還需要改進(jìn)。
        測(cè)試可以使得更容易地加入項(xiàng)目,因?yàn)樗鼈兘沂玖舜a實(shí)際上應(yīng)該做什么。它們告訴你設(shè)計(jì)決策,以及初始的開發(fā)人員心里在想什么。
        不要擔(dān)心,去重構(gòu)吧
        也曾看到過(guò)烏七八糟的代碼,但不敢去清理干凈?我在這種情況下要做的首件事是創(chuàng)建測(cè)試來(lái)找出代碼要做什么。測(cè)試可以鎖定功能,用一種很好的方式,使得我們能夠?qū)W⒂凇按髵叱?,而不是?dān)心破壞什么東西。
        我見過(guò)一些糟糕到讓人不知道它們是做什么的代碼片段。同樣的,人人避之唯恐不及,不但要擔(dān)心會(huì)破壞預(yù)期的功能,而且還要擔(dān)心破壞 bug。我認(rèn)為基于過(guò)去的I/ O 的大型測(cè)試集是非常值得的投資。
        有趣的是,擔(dān)心和快樂(lè)的心情是成反比的??傊且环N此消彼長(zhǎng)的狀態(tài)。
        自信地創(chuàng)造價(jià)值和正確的產(chǎn)品
        正確的代碼比不正確的代碼更有價(jià)值。一切幫助你的代碼比以前更正確的東西都值得看一看,就這么簡(jiǎn)單。發(fā)布正確的代碼隨著時(shí)間的推移會(huì)構(gòu)建起信任,而信任是一筆寶貴的財(cái)富。
        魚與熊掌不可得兼
        這里有一個(gè)技巧:不要在試圖解決問(wèn)題的同時(shí),設(shè)計(jì)一個(gè)很好的解決方案。來(lái)自于 Ian Cooper 關(guān)于 TDD 演講中的秘訣是:
        編寫紅色測(cè)試。解個(gè)問(wèn)題,盡快讓它變綠。設(shè)計(jì)一個(gè)很好的解決方案,重構(gòu)成你為之驕傲的一個(gè)東西。
        這里要掌握的一個(gè)重要內(nèi)容是,在你的大腦中要分離關(guān)注點(diǎn)。不要試圖同時(shí)完成步驟 2 和步驟3。編程的主要限制之一是你的大腦一次能思考多少,并且在你敲代碼時(shí),你需要思考得越少,你寫的代碼越好。
        在解決問(wèn)題時(shí),不要去想代碼實(shí)際上應(yīng)該如何。復(fù)制粘貼代碼,寫低效的循環(huán),重復(fù)內(nèi)容,不論是什么只要能盡快讓測(cè)試變綠就去做。然后再考慮如何改進(jìn)。
        分離關(guān)注點(diǎn)是首先要測(cè)試的原因之一,這種方法有助于實(shí)踐中行為。當(dāng)你不擇手段地想要快速達(dá)成一個(gè)解決方案時(shí),你不必去考慮它看上去怎么樣或者運(yùn)行起來(lái)快不快。當(dāng)你進(jìn)行到完善設(shè)計(jì)和改善解決方案的時(shí)候,你就不必?fù)?dān)心解決方法行不通了。


教育聯(lián)展————專業(yè)的軟件測(cè)試咨詢服務(wù)平臺(tái)。
詳詢:王萍老師18988787201
詳詢:小文老師18988787201
深圳軟件測(cè)試培訓(xùn) 深圳軟件測(cè)試培訓(xùn)班
王萍老師 小文老師


課程精選:

中華考試網(wǎng)軟件測(cè)試培訓(xùn)》
教育軟件測(cè)試培訓(xùn)頻道》
《軟件測(cè)試培訓(xùn)課程——深圳川石
《深圳川石軟件性能測(cè)試培訓(xùn)》
《深圳川石企業(yè)性能測(cè)試(PL&LR)提升班
《持續(xù)集成自動(dòng)化測(cè)試UFT Selenium提升班》
《深圳源昊寶安軟件測(cè)試培訓(xùn)班》
《深圳凌岳軟件自動(dòng)化測(cè)試培訓(xùn)班》
《深圳博睿軟件安全測(cè)試培訓(xùn)》
深圳達(dá)內(nèi)軟件測(cè)試培訓(xùn)學(xué)?!?/a>

熱門機(jī)構(gòu)推薦
軟件測(cè)試

免費(fèi)體驗(yàn)課開班倒計(jì)時(shí)

11: 41: 09

稍后會(huì)有專業(yè)老師給您回電,請(qǐng)保持電話暢通

咨詢電話:

本周熱門資訊

全國(guó)分站 熱門機(jī)構(gòu)

北京軟件測(cè)試培訓(xùn) 上海軟件測(cè)試培訓(xùn) 廣州軟件測(cè)試培訓(xùn) 深圳軟件測(cè)試培訓(xùn) 杭州軟件測(cè)試培訓(xùn) 蘇州軟件測(cè)試培訓(xùn) 南京軟件測(cè)試培訓(xùn) 天津軟件測(cè)試培訓(xùn) 佛山軟件測(cè)試培訓(xùn) 南寧軟件測(cè)試培訓(xùn) 長(zhǎng)沙軟件測(cè)試培訓(xùn) 重慶軟件測(cè)試培訓(xùn) 太原軟件測(cè)試培訓(xùn) 青島軟件測(cè)試培訓(xùn) 寧波軟件測(cè)試培訓(xùn) 鄭州軟件測(cè)試培訓(xùn) 西安軟件測(cè)試培訓(xùn) 廈門軟件測(cè)試培訓(xùn) 武漢軟件測(cè)試培訓(xùn) 成都軟件測(cè)試培訓(xùn) 無(wú)錫軟件測(cè)試培訓(xùn) 濟(jì)南軟件測(cè)試培訓(xùn) 昆明軟件測(cè)試培訓(xùn) 貴陽(yáng)軟件測(cè)試培訓(xùn) 揚(yáng)州軟件測(cè)試培訓(xùn) 徐州軟件測(cè)試培訓(xùn) 珠海軟件測(cè)試培訓(xùn) 合肥軟件測(cè)試培訓(xùn) 長(zhǎng)春軟件測(cè)試培訓(xùn)

深圳博為峰教育廣州博為峰教育深圳中公優(yōu)就業(yè)南京博為峰教育

申請(qǐng)?jiān)嚶犆~

QQ:
加盟合作:0755-83654572