《Effective Unit Testing》 讀書(shū)筆記 1 作為質(zhì)量工具和設(shè)計(jì)工具的測(cè)試

????因?yàn)樾枰岣邎F(tuán)隊(duì)代碼質(zhì)量,暫時(shí)換個(gè)口味讀本講Unit Test的書(shū)。這本書(shū)全名 Effective Unit Testing? A guide for Java Developers. 作為讀書(shū)筆記,我只記錄一些個(gè)人感覺(jué)比較有價(jià)值的觀點(diǎn)。

Part 1 Foundations (第一部分,基礎(chǔ))

? ? 全書(shū)第一部分有三章。作者認(rèn)為現(xiàn)在(本書(shū)出版于2013年)寫(xiě)Unit Test其實(shí)是一種業(yè)界規(guī)范了,所以關(guān)鍵不是要不要寫(xiě)test的問(wèn)題,而是如何寫(xiě)好的test。前三章闡述了為什么要寫(xiě)好的Test,怎么算是好的Test,還有專門一章講了Test Doubles(測(cè)試替身,作者還細(xì)分成fake, mock,stub,spy四種,等待后文詳述)的問(wèn)題。

? ? 從test這個(gè)名字出發(fā),大部分人的想法是為了抓住程序中的錯(cuò)誤,從另一個(gè)方面來(lái)說(shuō),就是用來(lái)驗(yàn)證程序的正確行為 (思考BDD)。更高層次的目的,是通過(guò)測(cè)試來(lái)驅(qū)動(dòng)好的設(shè)計(jì)。此處插一句,從這兩個(gè)目的來(lái)看,雖然我們應(yīng)該追求覆蓋率,但是就算百分之一百的代碼覆蓋率也只能說(shuō)明通過(guò)測(cè)試代碼運(yùn)行了這些代碼,不能說(shuō)明測(cè)試真正驗(yàn)證代碼應(yīng)有的行為。

? ? 測(cè)試寫(xiě)得越來(lái)越多,測(cè)試帶來(lái)的價(jià)值似乎就越來(lái)越小,作者用了一張圖來(lái)描述這種邊際效用遞減效應(yīng)(高原效應(yīng))。橫軸是花在寫(xiě)測(cè)試上的精力,縱軸是產(chǎn)生的價(jià)值,兩條線曲線實(shí)線代表作為質(zhì)量工具的測(cè)試,虛線代表作為設(shè)計(jì)工具的測(cè)試。大部分團(tuán)隊(duì)其實(shí)停留在把測(cè)試作為質(zhì)量保證工具上,作者想說(shuō)明的是我們應(yīng)當(dāng)努力把測(cè)試作為設(shè)計(jì)工具,才能移動(dòng)到上一條曲線,收獲測(cè)試給我們帶來(lái)的更大的價(jià)值。

邊際效用遞減


? ? 作者提出了他的理論:The biggest value of writing a test lies not in the resulting test but in what we learn from writing it. (寫(xiě)測(cè)試最大的價(jià)值不在于寫(xiě)出來(lái)的測(cè)試,而在于從寫(xiě)測(cè)試過(guò)程中所學(xué)到的東西)。

? ? 開(kāi)發(fā)者在忽視作為設(shè)計(jì)工具的測(cè)試的同時(shí),也忽視了維護(hù)越來(lái)越龐大的測(cè)試的成本。如何減小這個(gè)成本,后文會(huì)詳述,這里作者提出了一個(gè)我認(rèn)為十分重要的也是容易被我們忽略的觀點(diǎn),要像對(duì)待產(chǎn)品代碼一樣來(lái)嚴(yán)肅對(duì)待測(cè)試代碼。好的測(cè)試代碼本身需要下功夫去設(shè)計(jì),好的測(cè)試代碼必須也要考慮可維護(hù)性,在test中也存在技術(shù)債的問(wèn)題。

? ? 測(cè)試可以影響開(kāi)發(fā)效率,要提高開(kāi)發(fā)效率,作者認(rèn)為需要? 1. 縮短反饋的時(shí)間。 2. 減少debug(包括運(yùn)行調(diào)試模式和修bug)的時(shí)間。?

????這里作者提出了test的四個(gè)屬性,以及這些屬性是如何影響開(kāi)發(fā)效率的, a. 通過(guò)加快test的執(zhí)行速度, 可以縮短反饋時(shí)間。b. 提高test的可讀性,可以減少調(diào)試的時(shí)間和減少bug。 c. 提高test的可信性(Trustworthiness ),提高測(cè)試結(jié)果的準(zhǔn)確性,從而減少bug。 d. 提高測(cè)試的可靠性(可重復(fù)運(yùn)行),提高測(cè)試結(jié)果的準(zhǔn)確性,從而減少bug。通過(guò)對(duì)這四個(gè)屬性的增強(qiáng),我們才能在作為質(zhì)量工具的test上突破高原效應(yīng)。

????另一方面,作為設(shè)計(jì)工具的test要求我們 1. 把測(cè)試像產(chǎn)品代碼一樣,不斷重構(gòu),保持高的測(cè)試代碼質(zhì)量和設(shè)計(jì),減少編寫(xiě), 維護(hù), 運(yùn)行這些測(cè)試的成本 。 2. 通過(guò)測(cè)試來(lái)驅(qū)動(dòng)產(chǎn)品代碼的設(shè)計(jì)(TDD)。本書(shū)主要講如何寫(xiě)出好的測(cè)試,所以將聚焦在第一點(diǎn)上。如何通過(guò)測(cè)試去驅(qū)動(dòng)產(chǎn)品代碼的設(shè)計(jì)不是本書(shū)的重點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容