1. 程式人生 > >為何你會覺得寫測試很煩?

為何你會覺得寫測試很煩?

正如標題寫的那樣,我有這種想法已經很多年了,但是我從沒明說出來過。直到上週,一個初級 Rails 開發課程的學員提到他也有同樣的感受,才促使我寫了這篇文章。

我可以說,我根本不願意寫任何測試。因為寫測試太令人抓狂了。

我完全理解這種感覺。而且我知道有這種想法的程式設計師不在少數。

一、為什麼這些程式設計師會對寫測試這麼抓狂?

我想這是因為他們只專注於提升他們程式設計的能力,卻忽略了學習測試方面的知識。其實道理就像在玩一個 RPG 遊戲(比如說「上古卷軸」),當你把你角色的弓箭技能點滿的時候,你卻發現你需要點滿單手武器技能才能打通當前的劇情。這時你一定會在心裡大喊:「這簡直太坑爹了」!是的,試想一下,當你苦思冥想的「遠端打擊」技能在一場近身肉搏混戰中沒能發揮什麼作用時的心情,你就能明白我說的意思。

其實,在另一種相似的情境裡,比如說當你需要學習一門新的程式語言的時候,我們通常也會有這種心態。當你專精於一門語言(像 Ruby),你運用這門語言時,自然會比運用其他語言(比如說 Java 或 PHP)時來得更高效。誠然,你可以在學習新語言時運用你已有的經驗,觸類旁通。但是,學習新語言的語法,程式設計正規化,IDE 或者理解整個體系依舊是必不可少的。這同樣需要花費大量的時間。

其他類似的情境中,像我們通常要面對不同的開發環境,不同的產品型別(原生的 Windows 桌面應用,瀏覽器應用和移動端iOS應用),開發人員要遊走於前端和後端,甚至當學習兩門不同的外語,比如西班牙語和漢語時,我們大都會有同樣的心態。

那麼迴歸到正題,當你舒舒服服地開發著新的功能,突然意識到你需要測試這些功能時(假設這不是一個 TDD 流程),那麼這種令人抓狂的情緒必會「如約而至」。這種感覺就像你突然置身於一個不知名的沼澤中,只能靠雙腿,慢慢地尋找著出路。

二、當面對這種情況時,你有兩個選擇。

第一,任由煩躁和不安的情緒矇蔽你的心智。這樣你可以直接宣佈放棄你的測試工作。因為它太難了,根本不值得你浪費時間在上面。或者,你有第二種選擇……

接受事實。承認你現在有關測試方面的知識儲備不足,做得很爛。就像你當初剛剛開始程式設計時,程式碼一樣寫得很爛。但漸漸地,你的能力逐步得到了提升。可以理解,承認自己效率低下,承認自己並不像自己想象的那麼優秀

的確很傷自尊。但是這種自我審視,在每個人的職業生涯中,通常是我們面對新事物,並準備開始接受並學習它們時應該有的正常心態。

我們可能精通一個領域一項技術,而在其他領域其他技術完全是個初學者。你的經驗越多,知道得越多,可轉移到其他工具的知識就越多。畢竟,現在的科技每五年就要更新一次。你觀察到更高層次的概念,也更輕鬆指出某些新技術所遵循的模式。但在細節上我們可能仍很薄弱,或者掌握得很慢。尤其在嘗試一門新技術的初期,這個過程讓人很受傷,感覺像流血般難受。這可能是因為你想掌握的技術太尖端,也可能是因為你使用的程式設計工具大都“稜角尖銳”。而這些都不可避免。

即使是為一門新語言配置一個環境,都可以讓人感到筋疲力盡,讓你覺得自己的工作效率一落千丈。同樣,對於測試,事實也是如此

三、因為測試是一項獨立的技術。

想想你是什麼時候開始程式設計的。是從大學時代起嗎?或是比這更早?當時你是否為你的程式設計了自動化測試流程?如果是,你是否把這個流程應用到每一個你在學校開發的程式上?又或者你已經是一個經歷過幾次職場變遷的老鳥。想想看是不是每一個你工作過的團隊都需要經常為自己的產品寫測試?通常情況下,答案都是否定的。其實,每個人在其職業生涯中,分配在開發和測試上的時間通常都會有很大差距。大的需要以「年」為單位來計算。是的,以「年」記!像 3 年開發經驗 vs 1 年測試經驗,或者 7 年開發 vs 4 年測試,6 個月開發 vs 1 個月測試,等等。

四、 3 比 1,7 比 4。難怪你會抓狂。

你每天工作 8 小時 (或者更少,歐陸風,你懂的)。你需要在這段時間內不斷地切換於程式設計和測試的工作中(當然,你也可能需要兼顧其他的一些事情,比如像管理,討論,交流,制定優先目標等等。這些不在今天的討論範圍內)。這種切換模式的確能令人精神分裂。就好比你寫字的時候你不能只用慣用手,必須不停地換手。你會發現你一會寫得好,一會又寫不好,一會寫得好,一會又寫不好,寫得好,寫不好,寫得好,寫不好……

五、你以為這種折磨有一天會放過你嗎?

其實它會!但是你對測試,要「不拋棄,不放棄」,要不斷地提高你的測試能力,要建立起測試相關的知識體系和架構。真誠地面對這個問題,接受你需要提高自己的能力才能從中發現樂趣的事實。並努力讓你測試和程式設計的水平相當。如果你能做到這些,相信你會發現你的付出將會是「物有所值」的。