單元測試不僅僅是給老板帶來了高質(zhì)量的軟件,還會讓你(程序員)體驗一個愉快的過程,信不购桑?
即時反饋
人產(chǎn)生一個行為(做了一個動作、一件事)萧求,總是期望知道這個行為是否產(chǎn)生了預(yù)期的效果其兴、達到了預(yù)期目的,以便調(diào)整行為(若未達到預(yù)期)或進行下一步(已達到預(yù)期)夸政。
如果能馬上知道,人的心理就比較輕松榴徐;如果持續(xù)這種 行為--反饋 的過程守问,人的心理就會有一些快感,從而讓人喜歡上這個過程坑资。這就是即時反饋的魔力
相反耗帕,如果一個行為產(chǎn)生之后,需要較長時間才能知道結(jié)果袱贮,那這個等待的過程中人的心理就有疑慮仿便、有負擔(dān)——懸而未決的事總是會讓人產(chǎn)生這樣的負擔(dān)。如果持續(xù)面對這樣的 行為--等待--反饋,就會對這個過程產(chǎn)生厭倦嗽仪,進而抗拒荒勇。
列舉一些日常生活和編程中可以用這個機制來解釋的現(xiàn)象:
- 一個App的按鈕響應(yīng)很迅速,用戶體驗就好
- 網(wǎng)頁加載時闻坚,loading時間太長沽翔,人就很煩躁
- 寫代碼時,一般是寫幾句之后就會編譯一下窿凤,看有沒有語法錯誤(編譯型語言仅偎;或重新加載一下,看是否是預(yù)期的樣子(腳本語言)
- 調(diào)試時不能設(shè)斷點雳殊、不能單步調(diào)試橘沥,是不是很痛苦?
想象一下夯秃,寫代碼時讓你“盲寫”——沒有調(diào)試途徑座咆,直到你完成全部功能,才給你調(diào)試的機會寝并。這樣的開發(fā)模式是不是會讓人瘋掉箫措?再想一下是什么東西讓你瘋掉的?是不是你根本不知道你寫的每一行代碼有沒有語法錯誤衬潦、邏輯對不對斤蔓,這種感覺讓你抓狂。好比是黑燈瞎火走路镀岛,你根本不知道下一步會踩到哪里弦牡。這是沒有反饋的極端情況。
單元測試
單元測試就是為程序員創(chuàng)造即時反饋的一個利器漂羊。當(dāng)然驾锰,調(diào)試器也是因為能即時反饋而成為開發(fā)必不可少的工具∽咴剑可以說椭豫,單元測試又向前推進了一步,而且把你需要多次重復(fù)的動作給自動化了——又是一個額外的收益旨指。
想象一下赏酥,你寫每一個方法、每一個類谆构,你都能即刻裸扶、確切知道是否達到了預(yù)期目的,那樣你的心是多么輕松愉快搬素,一切都在你的掌握中呵晨。這樣持續(xù)下去魏保,你寫的軟件絕不可能是“失控”的。
阻礙
- 寫單元測試代碼也需要時間摸屠,而且功能代碼改了谓罗,測試代碼也需要同步修改,需要時間餐塘。這是額外的開銷妥衣。
- 要做到代碼覆蓋率很高(比如1:1),很不容易戒傻。