單元測試的重要性不言而喻,自我開發(fā)生涯以來,從很少注釋過過場場,到非常重視。愛掏網(wǎng) - it200.com
單元測試為什么會(huì)讓人忽視呢?
通常情況像一些查詢或者增刪改之類,拿我來說,即便報(bào)錯(cuò)我大概一掃,我就知道錯(cuò)誤是什么了,該如何排查,因?yàn)榫湍肧pringMVC來說或者M(jìn)yBatis等,再不濟(jì)就是Spring的依賴注入問題,拿MyBatis來說,要么就是sql問題,要么就是參數(shù)問題,再不濟(jì)就是與Spring動(dòng)態(tài)掃描有關(guān)或者是mybatis中專門寫sql的配置文件某個(gè)地方語法錯(cuò)誤等,這些錯(cuò)誤都是可預(yù)見的,說句不好聽的話,再不濟(jì)百度一搜,頓時(shí)分分秒就KO了。愛掏網(wǎng) - it200.com但是大家有沒有想過這樣一個(gè)問題?為什么我們老是在犯這些重復(fù)性錯(cuò)誤呢?原因是什么呢?
不重視測試。愛掏網(wǎng) - it200.com
當(dāng)然了就專業(yè)來說,我們是軟件開發(fā)工程師,專注于開發(fā),至于測試方面,我們又不是專門的測試,管我們什么事。愛掏網(wǎng) - it200.com
我只能說:此言差異。愛掏網(wǎng) - it200.com
為什么呢?
坦白的說,程序的Bug基本都是由于我們這些開發(fā)人員導(dǎo)致的,比如說代碼風(fēng)格亂七八糟,寫完代碼看到功能實(shí)現(xiàn)了,就什么都不管了,也不多測測,以至于每次都是測試人員來測,發(fā)現(xiàn)誰的錯(cuò)誤就通知誰,而誰誰就開始改了。愛掏網(wǎng) - it200.com
我認(rèn)真想了下,其實(shí)很多錯(cuò)誤是可以避免的。愛掏網(wǎng) - it200.com
就拿我公司來說,我們沒有測試沒有前端沒有運(yùn)維,而我作為Java后臺(tái)開發(fā),同時(shí)兼任前端、測試、運(yùn)維,記得在第一個(gè)項(xiàng)目初期時(shí),為了加快項(xiàng)目進(jìn)度,盡快讓老板看到對(duì)應(yīng)的效果,我們快速開發(fā),能粘貼復(fù)制盡量不手寫,遇到問題百度搜索,找到對(duì)應(yīng)的解決方案,代碼復(fù)制過來,看能不能跑起來,能跑起來,就不管了,功能實(shí)現(xiàn)就好,跑不起來,繼續(xù)百度或者Google,當(dāng)然一般情況百度比較多。愛掏網(wǎng) - it200.com
前期項(xiàng)目急,甚至表單校驗(yàn)懶得寫,甚至有些代碼注釋都不寫,命名的話想到規(guī)范就規(guī)范,想不起,湊合吧,對(duì)于那時(shí)的我來說,這些都不是最重要的,最重要的是,每周完成工作任務(wù),提交代碼,功能實(shí)現(xiàn)。愛掏網(wǎng) - it200.com當(dāng)然欲速則不達(dá),再怎么快,總會(huì)因?yàn)檫@樣的錯(cuò),那樣的錯(cuò)導(dǎo)致項(xiàng)目進(jìn)度延遲。愛掏網(wǎng) - it200.com而且這些錯(cuò)誤是可以完全避免的。愛掏網(wǎng) - it200.com
比如我們使用的框架是Spring+MyBatis+SpringMVC,采用的表現(xiàn)層技術(shù)是JSP,數(shù)據(jù)庫為MySQL。愛掏網(wǎng) - it200.com
JSP對(duì)于廣大的Java同行們,并不陌生。愛掏網(wǎng) - it200.com
話走的有點(diǎn)偏。愛掏網(wǎng) - it200.com本篇著重與凸顯單元測試之重要性。愛掏網(wǎng) - it200.com
進(jìn)入正題:
無論是前后端分離開發(fā),還是想我上述列出的前后端不是特別分離的jsp技術(shù)等,單元測試起到不可估量的作用。愛掏網(wǎng) - it200.com
我總結(jié)到,為什么表現(xiàn)層方面就會(huì)出現(xiàn)這樣的那樣的錯(cuò)誤,關(guān)鍵在于控制層代碼有問題,也就是Controller層。愛掏網(wǎng) - it200.com
通常情況下,像我現(xiàn)在開發(fā),通常Controller代碼,我會(huì)通過單元測試測試好幾遍,當(dāng)然也做條件,這樣的話,可以避免一些簡單的錯(cuò)誤,什么空指針,參數(shù)問題等等。愛掏網(wǎng) - it200.com而且對(duì)于表單提交方面的,例如注冊(cè)、添加用戶、批量增加或者修改等,都是可以通過單元測試測試是否正常。愛掏網(wǎng) - it200.com
記得某位朋友曾經(jīng)說過,從單元測試到業(yè)務(wù)測試再到UI測試(WEB測試),越底層,花費(fèi)的時(shí)間成本越小,很容易找到錯(cuò)誤,越到高層越不易排錯(cuò),當(dāng)然了,排錯(cuò)的方式也很重要。愛掏網(wǎng) - it200.com
這里我想說的是,盡量能在單元測試可以預(yù)見錯(cuò)誤的前提下,盡量排錯(cuò)錯(cuò)誤的可能性,因?yàn)榈絎EB階段是非常讓人痛苦的。愛掏網(wǎng) - it200.com
越簡單的事情往往都會(huì)讓人忽略的,坦白的說吧,我發(fā)現(xiàn)一個(gè)很貼近現(xiàn)實(shí)的情況,就是我們開發(fā)人員,就我個(gè)人而言,有的時(shí)候覺得存在Bug,除非其他同事發(fā)現(xiàn)了,說了下,或者實(shí)際業(yè)務(wù)出問題,不然我不會(huì)改的,也懶得改。愛掏網(wǎng) - it200.com我想這是我半年前的心理。愛掏網(wǎng) - it200.com現(xiàn)在的我以寫的代碼讓人盡可能容易讓同事看的懂,盡量簡潔,同時(shí)現(xiàn)在我對(duì)于我寫的代碼,我可以清楚的知道它是如何跑起來的,會(huì)出現(xiàn)哪些問題。愛掏網(wǎng) - it200.com當(dāng)然了,對(duì)于一些簡單的低級(jí)錯(cuò)誤,我現(xiàn)在已經(jīng)通過單元測試排除掉了。愛掏網(wǎng) - it200.com而且再加上嚴(yán)格的表單校驗(yàn)。愛掏網(wǎng) - it200.com統(tǒng)一規(guī)范的js書寫和每天十到十五分鐘早會(huì)的匯報(bào)和簡單交流及其加強(qiáng)溝通的情況下,我們的Bug越來越少了,代碼整體的性能也越來越好,簡潔優(yōu)美,當(dāng)然了,這還遠(yuǎn)遠(yuǎn)不夠,相對(duì)于第一個(gè)項(xiàng)目而言,我們的第二個(gè)項(xiàng)目一直到現(xiàn)在的第三個(gè)項(xiàng)目,越來越好了。愛掏網(wǎng) - it200.com希望繼續(xù)努力保持下去。愛掏網(wǎng) - it200.com
?
另外補(bǔ)充到:
對(duì)于前后端交互,無論是AJAX或者vue.js等等,SpringMVC的Controller代碼,基本上都是可以通過單元測試得到結(jié)果的,單元測試過了,自然出錯(cuò)率會(huì)減少很多。愛掏網(wǎng) - it200.com
當(dāng)然了,我說的單元測試,不是簡單的運(yùn)行就可以了,而是有條件的列出實(shí)際情況,這需要根據(jù)實(shí)際業(yè)務(wù)情況而定,當(dāng)然了也不能總是在單元測試了,畢竟開發(fā)進(jìn)度要保持增長。愛掏網(wǎng) - it200.com
?
總結(jié):
上面的描述,也許不好理解,也許重點(diǎn)不突出。愛掏網(wǎng) - it200.com下面我要列出我認(rèn)為重要的幾點(diǎn)?
(1)小公司而言,后臺(tái)兼任前后臺(tái)開發(fā),確保后臺(tái)參數(shù),可以在前臺(tái)校驗(yàn)的,盡量放在前臺(tái),這對(duì)于減輕服務(wù)器負(fù)載非常有幫助;
(2)controller代碼中的各個(gè)@RequestMapping下的代碼是可以通過單元測試避免很多錯(cuò)誤的,例如空指針或者sql有誤或者傳參類型問題或者resultType或resultMap常見的問題等,這些是可以避免的;
(3)寫代碼,無論是js或者Java代碼,一定要清楚的知道它是如何運(yùn)行的,這里說的,并不是要你知道非常清晰的每一步,因?yàn)槟鞘怯?jì)算機(jī)底層原理,這個(gè)底層原理我也不懂,正在學(xué)習(xí)中。愛掏網(wǎng) - it200.com我所說的知道它是如何運(yùn)行的,是指,你能通過大腦想象,描述它是怎么走了,比如這個(gè)參數(shù)傳到這個(gè),但是參數(shù)值有誤,會(huì)出現(xiàn)什么情況等等這樣的情況,這樣可以確保你的思維是清楚,思維的清楚,也代表代碼邏輯的清楚。愛掏網(wǎng) - it200.com作為開發(fā)人員,連自己的代碼都不知道怎么描述,說個(gè)所以然來,那么他的代碼是非常糟糕的;
(4)代碼,以追求簡單易懂,清楚明了為主,讓維護(hù)的人易維護(hù),讓幾個(gè)月后的自己感謝自己。愛掏網(wǎng) - it200.com更讓整體系統(tǒng)性能更好。愛掏網(wǎng) - it200.com其實(shí),很多簡單的事情堆積起來就是一件不平凡的事情。愛掏網(wǎng) - it200.com
?
以上就說這么多了,歡迎編程的友友們不吝賜教。愛掏網(wǎng) - it200.com
?