論單元測試之重要性

單元測試的重要性不言而喻,自我開發生涯以來,從不多註釋過過場場,到很是重視。前端

單元測試爲何會讓人忽視呢?vue

一般狀況像一些查詢或者增刪改之類,拿我來講,即使報錯我大概一掃,我就知道錯誤是什麼了,該如何排查,由於就拿SpringMVC來講或者MyBatis等,再不濟就是Spring的依賴注入問題,拿MyBatis來講,要麼就是sql問題,要麼就是參數問題,再不濟就是與Spring動態掃描有關或者是mybatis中專門寫sql的配置文件某個地方語法錯誤等,這些錯誤都是可預見的,說句很差聽的話,再不濟百度一搜,頓時分分秒就KO了。可是你們有沒有想過這樣一個問題?爲何咱們總是在犯這些重複性錯誤呢?緣由是什麼呢?sql

不重視測試。數據庫

固然了就專業來講,咱們是軟件開發工程師,專一於開發,至於測試方面,咱們又不是專門的測試,管咱們什麼事。編程

我只能說:此言差別。後端

爲何呢?服務器

坦白的說,程序的Bug基本都是因爲咱們這些開發人員致使的,好比說代碼風格亂七八糟,寫完代碼看到功能實現了,就什麼都無論了,也很少測測,以致於每次都是測試人員來測,發現誰的錯誤就通知誰,而誰誰就開始改了。mybatis

我認真想了下,其實不少錯誤是能夠避免的。app

就拿我公司來講,咱們沒有測試沒有前端沒有運維,而我做爲Java後臺開發,同時兼任前端、測試、運維,記得在第一個項目初期時,爲了加快項目進度,儘快讓老闆看到對應的效果,咱們快速開發,能粘貼複製儘可能不手寫,遇到問題百度搜索,找到對應的解決方案,代碼複製過來,看能不能跑起來,能跑起來,就無論了,功能實現就好,跑不起來,繼續百度或者Google,固然通常狀況百度比較多。框架

前期項目急,甚至表單校驗懶得寫,甚至有些代碼註釋都不寫,命名的話想到規範就規範,想不起,湊合吧,對於那時的我來講,這些都不是最重要的,最重要的是,每週完成工做任務,提交代碼,功能實現。固然欲速則不達,再怎麼快,總會由於這樣的錯,那樣的錯致使項目進度延遲。並且這些錯誤是能夠徹底避免的。

好比咱們使用的框架是Spring+MyBatis+SpringMVC,採用的表現層技術是JSP,數據庫爲MySQL。

JSP對於廣大的Java同行們,並不陌生。

話走的有點偏。本篇着重與凸顯單元測試之重要性。

進入正題:

不管是先後端分離開發,仍是想我上述列出的先後端不是特別分離的jsp技術等,單元測試起到不可估量的做用。

我總結到,爲何表現層方面就會出現這樣的那樣的錯誤,關鍵在於控制層代碼有問題,也就是Controller層。

一般狀況下,像我如今開發,一般Controller代碼,我會經過單元測試測試好幾遍,固然也作條件,這樣的話,能夠避免一些簡單的錯誤,什麼空指針,參數問題等等。並且對於表單提交方面的,例如註冊、添加用戶、批量增長或者修改等,都是能夠經過單元測試測試是否正常。

記得某位朋友曾經說過,從單元測試到業務測試再到UI測試(WEB測試),越底層,花費的時間成本越小,很容易找到錯誤,越到高層越不易排錯,固然了,排錯的方式也很重要。

這裏我想說的是,儘可能能在單元測試能夠預見錯誤的前提下,儘可能排錯錯誤的可能性,由於到WEB階段是很是讓人痛苦的。

越簡單的事情每每都會讓人忽略的,坦白的說吧,我發現一個很貼近現實的狀況,就是咱們開發人員,就我我的而言,有的時候以爲存在Bug,除非其餘同事發現了,說了下,或者實際業務出問題,否則我不會改的,也懶得改。我想這是我半年前的心理。如今的我以寫的代碼讓人儘量容易讓同事看的懂,儘可能簡潔,同時如今我對於我寫的代碼,我能夠清楚的知道它是如何跑起來的,會出現哪些問題。固然了,對於一些簡單的低級錯誤,我如今已經經過單元測試排除掉了。並且再加上嚴格的表單校驗。統一規範的js書寫和天天十到十五分鐘早會的彙報和簡單交流及其增強溝通的狀況下,咱們的Bug愈來愈少了,代碼總體的性能也愈來愈好,簡潔優美,固然了,這還遠遠不夠,相對於第一個項目而言,咱們的第二個項目一直到如今的第三個項目,愈來愈好了。但願繼續努力保持下去。

 

另外補充到:

對於先後端交互,不管是AJAX或者vue.js等等,SpringMVC的Controller代碼,基本上都是能夠經過單元測試獲得結果的,單元測試過了,天然出錯率會減小不少。

固然了,我說的單元測試,不是簡單的運行就能夠了,而是有條件的列出實際狀況,這須要根據實際業務狀況而定,固然了也不能老是在單元測試了,畢竟開發進度要保持增加。

 

總結:

上面的描述,也許很差理解,也許重點不突出。下面我要列出我認爲重要的幾點?

(1)小公司而言,後臺兼任先後臺開發,確保後臺參數,能夠在前臺校驗的,儘可能放在前臺,這對於減輕服務器負載很是有幫助;

(2)controller代碼中的各個@RequestMapping下的代碼是能夠經過單元測試避免不少錯誤的,例如空指針或者sql有誤或者傳參類型問題或者resultType或resultMap常見的問題等,這些是能夠避免的;

(3)寫代碼,不管是js或者Java代碼,必定要清楚的知道它是如何運行的,這裏說的,並非要你知道很是清晰的每一步,由於那是計算機底層原理,這個底層原理我也不懂,正在學習中。我所說的知道它是如何運行的,是指,你能經過大腦想象,描述它是怎麼走了,好比這個參數傳到這個,可是參數值有誤,會出現什麼狀況等等這樣的狀況,這樣能夠確保你的思惟是清楚,思惟的清楚,也表明代碼邏輯的清楚。做爲開發人員,連本身的代碼都不知道怎麼描述,說個因此然來,那麼他的代碼是很是糟糕的;

(4)代碼,以追求簡單易懂,清楚明瞭爲主,讓維護的人易維護,讓幾個月後的本身感謝本身。更讓總體系統性能更好。其實,不少簡單的事情堆積起來就是一件不平凡的事情。

 

以上就說這麼多了,歡迎編程的友友們不吝賜教。

相關文章
相關標籤/搜索