爲什麼開源C/C++單元測試框架極昂貴?

    三月份,準備搞一個C/C++單元測試在線培訓,草擬了一份課程提綱,發給一位老朋友(馬工)徵求意見,馬工在一家研究院工作,領導一個近百人的開發團隊,單元測試推廣和實施都很有經驗,給我的意見只有幾句話:

    “刪除開源框架部分,這個太昂貴,用的企業會越來越少,講這個浪費聽衆的時間。我猜你花一大段時間來講開源框架,目的僅僅是爲了減少宣傳商業工具的嫌疑,課程只要考慮聽衆的真正利益(學到有用的東西)就行,何必考慮別的。”

    課程內容刪除開源框架部分,這個我馬上接受,因爲當初加上這部分內容,原因正是馬工所猜的。不過,用“太昂貴”來形容免費的開源框架,有些匪夷所思,我知道用開源框架做C/C++單元測試很難且成本很高,但從沒想到“昂貴”這個詞。在電話裏和馬工聊了半天,討論了C/C++單元測試框架“太昂貴”的理由,整理如下。

    免費的反而“昂貴”,這很平常,比如企業要派一個人從成都到北京出差,可以坐飛機、坐火車、租汽車,也可以借一輛自行車騎過去,前幾種都是要付錢的,騎自行車免費,毫無疑問,騎自行車是最昂貴的,“昂貴”表現在:費錢(不算別的,工資就很嚇人)、費力(這種累死人的事誰願意幹?)、誤事(這個不用解釋吧?)。[點評:我個比喻我也用過,不過沒那麼透徹,真是有實踐者所見略同]

    使用C/C++單元測試框架做單元測試,其結果跟騎自行車很像,也是費錢、費力、誤事。

    費錢:工具可以免費,人纔不能免費,相反,人才極昂貴,而且越來越最昂貴。一個程序員,如果月薪1萬,企業實際要支付的全部成本爲1.5到2萬,折算成每小時的成本,大概是100元,也就是說,寫1小時的測試代碼,企業要付出100元,這是使用開源框架的成本,是不是比自動化工具昂貴得多?[反駁:用工資低的實習生或初級程序員來寫測試代碼,成本不就降低了嗎?答:那就別做單元測試了,單元測試是程序員自己做的,要邊開發邊做,越是重要的程序員越要做(因爲他寫的代碼也越重要),事後讓別人做單元測試,那是毫無意義的,除非每個函數都有非常詳細的文檔,可是誰做得到?]

    費力:程序員爲什麼不願“寫”單元測試?請注意,是“寫”單元測試,不是“做”單元測試。程序員不是不知道單元測試的好,而是不願意寫測試代碼,因爲太煩了。程序員不怕難,最怕煩。創造往往很難,但卻是程序員的最愛,也是程序員的價值所在。測試代碼既然用工具都可以生成,自然沒有創造性,程序員怎麼可能喜歡寫呢?讓程序員做自己很不喜歡做的事,這是很累人的,特別費力。

    誤事:誤事表現在三方面:
    一、花很多時間來寫測試代碼,延長了項目的週期,嚴重時可能失去市場機會。
    二、太費力,程序員可能消極應對,最終做不下去,折騰很長時間,又回到原點。
    三、測試不充分,很多測試點,是手工編寫代碼難以達到的,舉個簡單的例子,要讓malloc()在第一個用例返回NULL,其他用例正常申請內存,手工編寫代碼就很難做到。用開源框架,完成代碼覆蓋都幾乎不可能,而使用合適的商業工具,完成MCDC覆蓋一點也不困難。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章