關於單元測試,咱們須要知道什麼?- 引言篇

關於單元測試,咱們須要知道什麼?- 引言篇

前言

趁着剛讀完《認知天性》這書,書有一點這樣說:「咱們學習行爲更多憑着直覺,即便咱們已經看到了科學數據,但咱們也不肯意去相信本身的直覺存在問題。」那和咱們單元測試有什麼關係呢?編程

這時我忽然有一個問題:「什麼狀況下你會進行單元測試?(除掉你心情好的時候)」函數

在徹底不清楚的狀況下,個人第一反應天然是不知道,以及好奇爲何要去單元測試?據說實踐起來會產生優越感,會心動一下,那要不要學。單元測試

又有幾個問題:你對你的代碼很信任嗎?你如何檢測代碼運行良好的呢?你還記得昨晚10點在作什麼嗎?你信任你的記憶力嗎?學習

固然做爲工程師的咱們,憑藉一絲不苟的工做素養,天然在敲擊鍵盤的那一刻都有一剎那以爲寫的真好。但時間一天又一天的過去了,忽然有一天產品要優化原有功能,那時候你還記得具體功能的實現細節嗎?測試

若是你記性好,你或許記得,但如何驗證你真的記得呢?優化

是我的源自心中強大的自信嗎?仍是測試環境跑一跑,看看有沒有問題呢?設計

應該都不是,而是要有一份數據告訴本身。這份數據應該是功能的測試數據集合。那如何獲取這份數據呢?視頻

還記得學生時代的你我嗎?每一個學期都會有期中、期末測試,而這些測試就是驗證本身這個階段對學過知識的收穫如何,最終成績就是測試所得的數據。ip

綜上所述,並不是時常理性的咱們,並不能準確的預估本身能力如何,尤爲在咱們處理特殊狀況下,評估水平和實際水平相差更大,因此咱們須要有「外部設備」幫助咱們去衡量水平。編寫的代碼也是同理,而這時的「外部設備」就是測試。而單元測試就是最簡便的的測試手段。開發

單元測試

小例子

不急入題,先看一個小例子。

假設你在一家電視組裝廠上班,你的工做任務就是組裝電視機,而後檢測電視是否可以正常啓動。忽然有一天,廠裏接到緊急訂單,須要下週一趕出來新型電視機。

這週一和往常同樣,來到本身的車間,打開新型電視機的功能圖紙,開始一步一步的組裝功能電路板,好比供電板、音視頻解碼板、射頻接收板等,而後再將這些電路板組裝起來構成一個完整的電視機。

第一個新型電視機組裝完成了,插上電源,竟然沒法開機。你檢查了一下電源沒有問題,那是電視機出現了問題,這時你背脊一涼,叫來了主管述說狀況和你的懷疑。負責人和你便到組裝合機流水線,隨機抽取了一臺電視機進行測試發現現象如你通常,便叫停改流水線的組裝工做。

你回到工位,當即把電視機拆了,依次對每個功能電路板進行測驗其功能是否正確,結果你發現是供電板存在故障,拆解電路板對其電子元件進行測試,最終發現是某批次電容器故障,而後查看同批次電容元件,發現都存在此類問題。而後拿具體測試結果交給主管,主管聯繫提供商順利解決了問題。化解了這次危機。

可是此類問題,如何能在後續生產中避免呢?你向主管提了建議,雖然我司採購元件都遵循國際標準,但防止此類問題出現,須要有人提早對同批次不一樣元件進行測試,而後組裝進行測試。主管欣然接受建議,而後笑着對你說,那這項任務就交給你了。

今後廠中就流傳一個都市傳說,每當工廠加工新型電視機的前一晚,在工廠中都回蕩男性的哭泣聲。

例子講完了,回顧一下爲何講這個例子。細看是否是會發現彷彿和咱們的工做很相似,或許咱們排查問題的方式並不是像傳統工業通常,但原理相同。若中途環境添加測試,確實會保障咱們後續代碼質量以及在排查問題上應將目光偏向於何處。

不知道如今的你對於單元測試是什麼?以及爲何咱們要有單元測試?有一個感性的認識呢?

什麼是單元測試?

工程測試種類繁多,而根據涉及工程範圍大小而言,單元測試是最小的維度。那這樣說來,單元測試是否是較爲簡單且不須要花費太多精力就可以進行的呢?

其維基上具體定義以下:

是針對程序模塊(軟件設計的最小單位)來進行正確性檢驗的測試工做。

而什麼又是單元呢?

回想組裝電視機的例子,例子中的單元是組成功能板的電子元件。而咱們工程項目中,最小的組成單元是什麼呢?多是一個有一個函數或是一個有一個的組件吧。

一旦在單元定義上達成一致,那你就清楚的知道該測試什麼不應測什麼了吧。

爲何要進行單元測試呢?

組裝電視機例子中,咱們進行測試的目的確保組裝出來的電視機出現問題並不是是某個元件異常引起的問題。也就是隔離了元件組成了功能板,且確保了單個電子元件的正確性。

而用術語來說,單元測試的目的就是隔離了程序部件且證實單個單元部件的正確性。

根據組裝電視機的例子,抽象總結單元測試的必要性:

  1. 在開發週期早期快速發現程序問題
  2. 可讓程序的底層單元更加可靠
  3. 出現問題,分析問題期間,清楚知道該關注哪些,不用關注哪些
  4. 後期程序重構,能夠根據單元測驗校驗模塊是否正確
  5. 單元測試是一種文檔的集成

如今咱們應該對單元測試是什麼以及爲何上應該有了較爲理性的認識。那你接下來的編程過程當中會進行單元測試嗎?

不會,對吧!好巧,我也不會。爲何咱們不會呢?

PS:基礎組裝電視案例源自參考文獻。

參考文獻

  1. 《認知天性》
  2. 極客時間-軟件測試52講-什麼是單元測試?如何作好單元測試?
  3. 維基-單元測試-定義
相關文章
相關標籤/搜索