日常啰嗦
看到標(biāo)題你可能會(huì)問(wèn)為什么這一篇會(huì)談到代碼測(cè)試,不是說(shuō)代碼優(yōu)化么?前兩篇主要是講了程序的輸出及Log4j的使用,Log能夠幫助我們進(jìn)行bug的定位,優(yōu)化開(kāi)發(fā)流程,而代碼測(cè)試有什么用呢?其實(shí)測(cè)試是為了驗(yàn)證自己所編寫(xiě)的代碼,及時(shí)排除錯(cuò)誤,減少bug,所以我認(rèn)為,減少錯(cuò)誤也是優(yōu)化的一個(gè)方案體現(xiàn),而且如果進(jìn)行了合理的單元測(cè)試,也可以幫助優(yōu)化開(kāi)發(fā)流程,一旦出現(xiàn)問(wèn)題,使得bug的定位過(guò)程更加迅速。
你愿意進(jìn)行單元測(cè)試嗎?
其實(shí),像第一篇文章所說(shuō)的,對(duì)于打印輸出信息,我們更習(xí)慣于使用System.out命令,所以很多時(shí)候,習(xí)慣決定了我們的編碼方式,那么你習(xí)慣于做單元測(cè)試嗎?
我感覺(jué)很多人可能都不是很樂(lè)忠于在開(kāi)發(fā)工作做這件事,因?yàn)橹饔^意識(shí)中會(huì)覺(jué)得這是一件"麻煩"的事情,或者說(shuō)效果不是很明顯的一件事。
針對(duì)于此,我也粗略的整理了一下根由,對(duì)各個(gè)原因,也分別談一下自己的想法,當(dāng)然,都是個(gè)人看法,大家覺(jué)得有用就看,覺(jué)得無(wú)用忽略即可。
開(kāi)發(fā)項(xiàng)目時(shí)并沒(méi)有明確的要求我去寫(xiě)單元測(cè)試。
因?yàn)闆](méi)人要求,所以就不寫(xiě)單元測(cè)試。我認(rèn)為作為一個(gè)技術(shù)人員,應(yīng)該關(guān)注自我增值和技術(shù)上的提升,要求應(yīng)該是自己提給自己的,并不是說(shuō)項(xiàng)目沒(méi)有要求或者沒(méi)人督促我們就不去做一些事情了,這種裝鴕鳥(niǎo)式的態(tài)度和鉆空子的小聰明不值得提倡,我們不僅要對(duì)項(xiàng)目負(fù)責(zé),其實(shí)更多的也是對(duì)自己負(fù)責(zé),嚴(yán)格要求自己,多學(xué)習(xí),才能更快的進(jìn)步,不要隨波逐流,不要進(jìn)入其他人的節(jié)奏中。
業(yè)務(wù)邏輯比較簡(jiǎn)單不值得編寫(xiě)單元測(cè)試。
這又是一個(gè)理由,而這個(gè)理由的深層次的原因,應(yīng)該是來(lái)源于對(duì)自己的自信,自信是件好事,但是要掌握好其中的度。相對(duì)于機(jī)器來(lái)說(shuō),擁有主觀意識(shí)的人類更容易犯一些錯(cuò)誤,錯(cuò)誤可能不大,或者是一些低級(jí)錯(cuò)誤,比如忘記寫(xiě)一個(gè)分號(hào)、忘記判空、忘記類型轉(zhuǎn)換...這些都是小錯(cuò)誤,但是不注意的話就會(huì)出現(xiàn)bug,然后再去花時(shí)間修修補(bǔ)補(bǔ)。
所謂的業(yè)務(wù)邏輯比較簡(jiǎn)單,其實(shí)是相對(duì)的。當(dāng)你對(duì)某一塊業(yè)務(wù)邏輯很熟悉的時(shí)候,你自然會(huì)認(rèn)為它很簡(jiǎn)單。然而,單元測(cè)試的必要性并不是僅僅在于測(cè)試代碼的功能是否正確,還在于,當(dāng)其他同事在了解你的業(yè)務(wù)的時(shí)候,能夠很快的通過(guò)單元測(cè)試來(lái)熟悉代碼的功能,甚至不用去讀代碼,就能夠知道它做了哪些事情。因此,寫(xiě)單元測(cè)試不僅是解放了自己,更方便了別人。
做了少量的單元測(cè)試。
這里可能有幾方面的原因:
1、為了完成編碼任務(wù),沒(méi)有足夠的時(shí)間編寫(xiě)單元測(cè)試。
2、在項(xiàng)目的前期還是盡量去編寫(xiě)單元測(cè)試,但是越到項(xiàng)目的后期就越失控。
3、和上一個(gè)原因類似,對(duì)自己足夠自信,于是只挑一小部分進(jìn)行單元測(cè)試。
我們簡(jiǎn)單的梳理一下開(kāi)發(fā)過(guò)程,開(kāi)發(fā)過(guò)程:需求—>編碼—>自測(cè)—>預(yù)發(fā)布—>測(cè)試—>回滾—>改bug—>發(fā)布—>發(fā)現(xiàn)bug—>改bug—>發(fā)布……我們可以觀察到,整個(gè)過(guò)程中改bug出現(xiàn)了很多次,它與編碼工作一樣,都是開(kāi)發(fā)過(guò)程中不可缺少的一部分,編碼只是整個(gè)開(kāi)發(fā)過(guò)程中的一部分,開(kāi)發(fā)不僅僅是編碼而已。
編碼的完工≠項(xiàng)目的完工。
因?yàn)樽詼y(cè)的不完備,導(dǎo)致預(yù)發(fā)布過(guò)程或者后期的冒煙測(cè)試難度加大,加長(zhǎng)回滾和bug修復(fù)過(guò)程,這是一個(gè)自相矛盾的事情。