單元測試不應(yīng)由開發(fā)者編寫的九大理由
譯文【51CTO.com快譯】單元測試是一種良好的代碼質(zhì)量快速反饋方式。其類似于對編譯器的擴展,能夠幫助我們識別業(yè)務(wù)邏輯。功能全面的單元測試套件能夠防止各類低級錯誤,加速產(chǎn)品發(fā)布并幫助我們更為高效地處理年代久遠的陳舊代碼。
即使擁有如此可觀的收益,為什么單元測試不應(yīng)由開發(fā)者編寫?具體理由如下:
1. 因為您只是個“碼農(nóng)”
原諒我的表現(xiàn)略有無禮。不過必須承認,相當一部分開發(fā)者并沒有自己的思維與判斷,或者對除薪酬之外的事物毫不關(guān)心。何謂“碼農(nóng)”?這代表的是那些只知道根據(jù)指示行事的開發(fā)者群體——老板要求試試JavaEE 5?“沒問題。”老板要求使用同樣的IDE?“沒問題。”老板要求編碼標準支持匈牙利符號?“沒問題。”他們只是在機械地執(zhí)行上級下達的任務(wù)。單元測試是什么?能幫我增加收入嗎?如果不能,一切免談。
2. 對于單元測試并不了解
很多開發(fā)者可能壓根沒聽說過單元測試。(這也可能是教育的鍋。我自己擁有計算機科學學士學位,但我在工作之前從來就沒聽說過‘單元測試’這個詞兒。)因此,在將這項任務(wù)交給開發(fā)人員之前,單元測試工作必須由技能出色且經(jīng)驗豐富的***負責,并由其建立規(guī)范引導(dǎo)各位開發(fā)人員了解并學習相關(guān)概念。
3. 開發(fā)者編寫的代碼質(zhì)量太過恐怖
一部分開發(fā)者并不了解如何在Servlet中編寫低級JDBC代碼。對他們來說,關(guān)注分離與高內(nèi)聚僅僅是兩個他們永遠用不到的計算機科學概念。我猜這類開發(fā)者很少編寫單元測試,因為他們的代碼本身壓根無法進行測試。單單是弄清代碼中的相關(guān)依賴性就足以嚇倒他們,根本不用提編寫測試方案。另外,某些編碼習慣也會影響到代碼的可預(yù)測性——比如字段注入,有中槍的沒?
4. 過分狂妄自大
必須承認,有時候我自己也存在這類問題。特別是在獨立工作時,我會以為自己的代碼編寫精彩優(yōu)異,基本根本不需要進行什么單元測試。當然,出于專業(yè)精神,我會強迫自己進行一些測試,并很快發(fā)現(xiàn)自己的得意之作其實存在問題。在我看來,解決這種狂妄情緒的***方式就是參與團隊合作,通過高透明度方式接受質(zhì)量指標的檢驗。只有這時,我們才能真正意識到測試機制的意義。
5. 您更像是“牛仔”還是“顧問”?
我們都希望成為編程領(lǐng)域的牛仔或者說超級英雄,憑借一己之力快速解決問題,但這同時往往會犧牲代碼的嚴謹性。我們對于測試工作不太在意(甚至完全不在意),因為其只能驗證現(xiàn)有應(yīng)用架構(gòu),而非生成功能齊備的軟件。這種浮躁而狂妄的思維會令我們對測試工作不屑一顧,因此即使被迫接受相關(guān)工作,其結(jié)果也可想而知。
6. 您在內(nèi)心中已經(jīng)選擇放棄
也許您目前正在開發(fā)的代碼根本沒機會被納入生產(chǎn)環(huán)境。也許您的用戶群體只是極少數(shù)人。也許企業(yè)的發(fā)展愿景與您的個人定位有所偏差。無論出于何種理由,我們都或多或少經(jīng)歷過這種心灰意冷的狀況。如果對代碼甚至工作產(chǎn)生了冷漠或者反感情緒,那么單元測試絕對不會被納入議事日程。這里我給大家提個建議:如果真的出現(xiàn)這種狀況,那么別逼著自己編寫什么單元測試了——拿這時間找份新工作吧。
7.企業(yè)文化并不重視單元測試
項目驅(qū)動型企業(yè)往往會忽視代碼質(zhì)量及可維護性的重要價值,因為其明顯更關(guān)注項目完成時間及預(yù)算。在這種情況下,請直接放棄,畢竟單元測試在急功近利的環(huán)境下毫無生存機會。
8.您面對著令人費解的代碼
根據(jù)我的個人經(jīng)驗,需要維護大規(guī)模復(fù)雜代碼庫的開發(fā)者很少進行單元測試。這很正常,畢竟維護性團隊中成員的技能水平往往相對較低,或者說付出的成本與回報不成正比。同樣的,管理層可能也不愿投資擴大單元測試套件。這樣的思維往往導(dǎo)致企業(yè)以短期目標作為文化價值取向,但這也很容易導(dǎo)致開發(fā)人員創(chuàng)建出復(fù)雜的代碼庫——惡性循環(huán),就是這么回事
9.企業(yè)文化在不知不覺中扼殺了單元測試
很多項目驅(qū)動型企業(yè)往往只在表面上執(zhí)行單元測試,但并不會將其與項目期限或者預(yù)算水平一樣納入業(yè)績考核。另外,某些企業(yè)可能強制要求某些并未參與開發(fā)的人員在規(guī)定期限內(nèi)完成修復(fù)工作。這種方針使得開發(fā)者肆無忌憚地向生產(chǎn)環(huán)境中投放高風險代碼,畢竟其無需為后續(xù)錯誤負責。
總結(jié)
面對以上理由,單元測試也許確實不應(yīng)由開發(fā)者負責編寫。但在這里我還要***呼吁一句:請務(wù)必認真對待單元測試,其對于企業(yè)的長期健康發(fā)展至關(guān)重要!
原文標題:9 Reasons Why a Developer Wouldn't Write Unit Tests 原文作者:Joe Wolf
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】