javascript
新书《编写可测试的JavaScript代码 》出版,感谢支持
本書介紹
JavaScript專業(yè)開發(fā)人員必須具備的一個(gè)技能是能夠編寫可測(cè)試的代碼。不管是創(chuàng)建新應(yīng)用程序,還是重寫遺留代碼,本書都將向你展示如何為客戶端和服務(wù)器編寫和維護(hù)可測(cè)試的JavaScript代碼。
從減少代碼復(fù)雜性的方法,到單元測(cè)試、代碼覆蓋率、調(diào)試、以及自動(dòng)化,您將全面學(xué)到如何編寫讓你和你同事能夠輕松修復(fù)和維護(hù)的JavaScript代碼。測(cè)試JavaScript代碼是一個(gè)復(fù)雜的過(guò)程。本書將在很大程度上幫你簡(jiǎn)化該過(guò)程。
目標(biāo)讀者
本書主要目標(biāo)受眾是那些想成為JavaScript專業(yè)開發(fā)人員的人。初中級(jí)水平、或者專家級(jí)別的開發(fā)人員都適合閱讀本書。因?yàn)槊總€(gè)人都可以從本書獲取有用的知識(shí)。
JavaScript可能不是我們所使用的唯一語(yǔ)言,但在編寫或測(cè)試程序時(shí)要用到大量JavaScript。如果有人付費(fèi)讓你編寫JavaScript代碼,如果你每天都用JavaScript編寫不同大小項(xiàng)目的話,本書正是你的不二選擇。
如果你加入了一個(gè)必須要測(cè)試JavaScript的QA或工具團(tuán)隊(duì),本書也適合您閱讀——第3章到第7章非常值得一讀。本書的目的是使測(cè)試盡可能容易,進(jìn)而全部自動(dòng)化。希望這本書能使大家的工作更輕松。這就是我要達(dá)到的目的。
如果你編寫JavaScript不太多,這本書仍會(huì)為你提供很多有用的信息——特別是復(fù)雜度(第2章)、基于事件的架構(gòu)(第3章)、以及調(diào)試(第7章)的這些章節(jié)。注意,其余章節(jié)也有很多有用的信息,但它們可能不會(huì)直接解決你的問(wèn)題。我遇到的眾多難題促使我撰寫了這本書——我從之前的錯(cuò)誤和努力工作中學(xué)到了很多,所以你也應(yīng)該這樣!從頭開始養(yǎng)成好習(xí)慣,將會(huì)讓你更富有成效和快樂(lè)。
非目標(biāo)讀者
遺憾的是,本書并不是適合所有的人。如果你有興趣學(xué)習(xí)JavaScript,建議先從其它地方學(xué)習(xí)一些該語(yǔ)言的基本知識(shí),然后再回到本書。如果你已經(jīng)能夠編寫整潔、零bug的代碼,且這些代碼有充分的文檔和注釋,能夠自動(dòng)化構(gòu)建、且連續(xù)運(yùn)行所有單元測(cè)試和集成測(cè)試、能夠生成完整的代碼覆蓋率(code coverage)報(bào)告、自動(dòng)部署到生成環(huán)境,這樣的話,本書對(duì)你可能就沒(méi)多大用途了。如果不得不進(jìn)行代碼調(diào)試的話,可以快速看一下第7章,或者可以看一下第6章,了解一些小技巧。
如果你不經(jīng)常用JavaScript,現(xiàn)在就可以合上本書了。
內(nèi)容簡(jiǎn)介
本書將在幾個(gè)步驟內(nèi)解決如何編寫可測(cè)試的代碼。首先,我們將研究復(fù)雜度(complexity)。接著看架構(gòu)選擇,其會(huì)限制復(fù)雜度和耦合度(coupling)。以此作為基礎(chǔ),在功能層面和應(yīng)用程序?qū)用嫔侠^續(xù)測(cè)試方面的內(nèi)容。我們將全面了解代碼覆蓋率和調(diào)試(debugging),然后完成自動(dòng)化相關(guān)的所有內(nèi)容。在本書最后,大家將更全面理解“什么是”以及“如何進(jìn)行”可測(cè)試的JavaScript。
?
第1章可測(cè)試的JavaScript
本書的最重要主題是編寫和維護(hù)“可測(cè)試”的代碼。但可測(cè)試的代碼是什么?為什么要努力編寫它?如何進(jìn)行編寫?我們將從研究這些問(wèn)題開始,并且了解一些流行的開發(fā)理論以及它們和可測(cè)試代碼之間有何聯(lián)系。最后,不管是是否跟著進(jìn)行實(shí)戰(zhàn),編寫可測(cè)試代碼的關(guān)鍵都在于讓代碼保持短小、整潔、簡(jiǎn)單、松耦合。
?
第2章復(fù)雜度
復(fù)雜度是很多問(wèn)題的根源,不僅僅是可測(cè)試性。這些問(wèn)題包括可理解性和可維護(hù)性,這兩個(gè)因素是代碼質(zhì)量的關(guān)鍵指標(biāo)。一些系統(tǒng)和應(yīng)用程序本質(zhì)上是復(fù)雜的,事實(shí)上,大多數(shù)應(yīng)用程序都是很復(fù)雜的,但在處理和表達(dá)這些復(fù)雜性時(shí),有正確的方式也有錯(cuò)誤的方式。很顯然,將復(fù)雜的部分分解成一個(gè)個(gè)更小、更簡(jiǎn)單的小塊是首要步驟。降低耦合度和扇出(fan-out)是管理復(fù)雜度的另外兩種方式。在探索可測(cè)試的JavaScript時(shí),我們會(huì)研究所有這些方法,甚至更多內(nèi)容。
?
第3章基于事件的架構(gòu)
討論復(fù)雜度之后,我們將深入研究基于事件的架構(gòu)。該應(yīng)用程序架構(gòu)可以極大地降低復(fù)雜度和耦合度,同時(shí)提供簡(jiǎn)單的方式將應(yīng)用程序分解成更小、更自足的片段。不管應(yīng)用程序是用于服務(wù)器端還是客戶端,或者(很可能)用于兩者,基于事件的架構(gòu)均可以解決第2章中列舉的很多問(wèn)題。即便該架構(gòu)不適合作為所有應(yīng)用程序的總體架構(gòu),在整體架構(gòu)中肯定也會(huì)有用到基于事件架構(gòu)的概念和實(shí)踐的地方。
?
第4章單元測(cè)試
關(guān)于單元測(cè)試有很多爭(zhēng)論。測(cè)試到底有多重要?單元測(cè)試并不能發(fā)現(xiàn)所有的錯(cuò)誤。像其他工具一樣,單元測(cè)試是可測(cè)試性的其中一部分。描述代碼為“可測(cè)試”的,并不意味著這些代碼的測(cè)試用例是可用的;而是說(shuō)為這些代碼編寫測(cè)試用例比較簡(jiǎn)單而已。單元測(cè)試是特殊的測(cè)試,因?yàn)橥ǔK鼈兪菧y(cè)試開發(fā)人員唯一要編寫的。它們具有侵入性,要求測(cè)試代碼和程序代碼隔離,并且可以獨(dú)立于應(yīng)用程序運(yùn)行。這可能會(huì)使單元測(cè)試變得有難度,因?yàn)樵诟綦x環(huán)境下獨(dú)立運(yùn)行測(cè)試代碼是非常困難的。本書很大一部分章節(jié)都是講解如何確保代碼能夠隔離運(yùn)行,從而使編寫單元測(cè)試變得更簡(jiǎn)單。單元測(cè)試無(wú)法發(fā)現(xiàn)所有的Bug(甚至大多數(shù)bug),但它們所找到的Bug驗(yàn)證了運(yùn)行單元測(cè)試確實(shí)是值得的。同樣重要的是,測(cè)試代碼要遵循和即將測(cè)試的應(yīng)用程序代碼一樣的高標(biāo)準(zhǔn)和高原則。
?
第5章代碼覆蓋率
代碼覆蓋率通常與單元測(cè)試有關(guān)。代碼覆蓋率是單元測(cè)試的一個(gè)很好的衡量標(biāo)準(zhǔn);然而,我們會(huì)發(fā)現(xiàn)這并非總是如此。代碼覆蓋率不僅僅適用于單元測(cè)試!所有類型的測(cè)試,包括集成測(cè)試、手工測(cè)試、性能測(cè)試,都可以受益于代碼覆蓋率。我們將研究代碼覆蓋率的優(yōu)勢(shì)和劣勢(shì),以及如何生成、查看代碼覆蓋率、并使其變得有意義。
?
第6章集成測(cè)試、性能測(cè)試、負(fù)載測(cè)試
當(dāng)然,除了單元測(cè)試以外,還有很多其他類型的測(cè)試。集成測(cè)試、手工測(cè)試、性能測(cè)試、功能測(cè)試以及其他類型的測(cè)試,在尋找和挖掘Bug的工作中,都發(fā)揮著很重要的作用。不管誰(shuí)做這些測(cè)試工作——開發(fā)人員、QA團(tuán)隊(duì),甚或是不知情的用戶,不管你喜歡不喜歡,都要完成這些類型的測(cè)試。將應(yīng)用程序作為一個(gè)整體進(jìn)行輕松測(cè)試的能力也是至關(guān)重要的。模塊化功能使測(cè)試代碼能夠與實(shí)現(xiàn)的功能更密切相關(guān),這有助于開發(fā)人員更快地修復(fù)bug。在這些測(cè)試中使用代碼覆蓋可以快速顯示黑盒測(cè)試期間執(zhí)行的代碼。大量的基于JavaScript的工具可以讓開發(fā)人員用于集成測(cè)試和性能測(cè)試,我們將深入研究其中一些工具,給大家一個(gè)直觀的展現(xiàn)。
?
第7章調(diào)試
我們編寫的代碼,第一次編寫時(shí)不管看起來(lái)多完美,都是不完美的。我們的代碼肯定會(huì)產(chǎn)生Bug,可能有很多的Bug。我們想到的和意想不到的Bug都有可能會(huì)破壞代碼。我們的測(cè)試、其他人的測(cè)試、或者用戶使用程序時(shí)都有可能發(fā)現(xiàn)Bug。測(cè)試時(shí)發(fā)現(xiàn)的Bug是最容易解決的,這也是最大化測(cè)試的一個(gè)很好的理由。用戶運(yùn)行程序時(shí)發(fā)現(xiàn)的Bug更難以追蹤,其結(jié)果是,不僅要調(diào)試自己的代碼,還得調(diào)試別人的代碼。針對(duì)Node.js和瀏覽器代碼這兩方面,我將分享一些調(diào)試的技巧和竅門。要準(zhǔn)備一個(gè)好用的調(diào)試環(huán)境,因?yàn)槲覀円?jīng)常用到它。
?
第8章自動(dòng)化
最后,對(duì)于測(cè)試,一遍遍地手工操作不僅不可持續(xù),而且非常無(wú)趣。軟件編程是世界上手工處理過(guò)程最多的工作之一,但測(cè)試和軟件維護(hù)卻不一定。運(yùn)行測(cè)試、生成代碼覆蓋率報(bào)告、執(zhí)行靜態(tài)分析、精簡(jiǎn)和壓縮代碼、以及向生產(chǎn)環(huán)境或其他環(huán)境上部署或回滾代碼都應(yīng)該是自動(dòng)化過(guò)程的一部分。自動(dòng)化可以確保不管發(fā)生什么情況,無(wú)論是成功還是失敗,它會(huì)很快地進(jìn)行處理,更重要的是在某種程度上可以重復(fù)操作。程序代碼錯(cuò)了,自動(dòng)化測(cè)試就會(huì)失敗、生產(chǎn)環(huán)境運(yùn)行也會(huì)失敗、其他事情也會(huì)出錯(cuò),但這些絕對(duì)不會(huì)關(guān)聯(lián)到我們的程序代碼。這就是現(xiàn)實(shí)。關(guān)鍵是要從這些失敗(連同你造成的故障)中盡快且不著痕跡地恢復(fù)回來(lái)。
?
小結(jié)
編寫可測(cè)試的代碼會(huì)讓我們的工作,以及我們手下那些人的工作,變得非常簡(jiǎn)單。從更少的Bug到更多容易修復(fù)的Bug、從容易測(cè)試到簡(jiǎn)單調(diào)試,編寫可測(cè)試的JavaScript是明智之選。
本書將展示通往睿智道路的途徑。閱讀整本書之后,大家將對(duì)編寫和維護(hù)可測(cè)試的JavaScript實(shí)際需要方面有一個(gè)很好的了解。但這僅僅是一個(gè)開始。我們作為開發(fā)人員,必須將這些實(shí)踐和模式應(yīng)用到日常工作中。必須抵制住“懶惰”且不編寫測(cè)試的誘惑,避免走回頭路,防止自己或別人來(lái)收拾我們的爛攤子。可測(cè)試的JavaScript代碼將會(huì)延續(xù)。如果你現(xiàn)在正在編寫遺留代碼,幫你自己和老板一個(gè)忙,開始編寫可測(cè)試的代碼。希望你會(huì)發(fā)現(xiàn),這樣做并不是很難,而且非常有益、甚至非常有趣!
轉(zhuǎn)載于:https://www.cnblogs.com/TomXu/p/4266774.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的新书《编写可测试的JavaScript代码 》出版,感谢支持的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基础总结篇之中的一个:Activity生
- 下一篇: javascript继承模式原理与示例深