博客 / 詳情

返回

為什麼不直接讓開發兼任測試?

大家好,我是陳哥。

不知道大家看沒看過這個問題:

既然測試也要求寫代碼,那乾脆讓開發兼任測試不就好了嗎?

這句話聽上去像是測試人員被要求寫代碼的氣話,但我之前在《做軟件測試需要懂代碼嗎?》一文中討論過為什麼現在各個公司都開始要求測試寫代碼,大家感興趣的話可以去看看。

藉着這個問題,我想和大家繼續聊聊:為什麼不直接讓開發兼任測試?

説句實在話,對於大部分企業來説,這想法太理想化,真落地準出亂子。

開發和測試的核心價值工作邏輯壓根不是一回事,硬把倆角色捏一塊兒,最終虧的是產品質量。

先聲明我的觀點,開發可以做單元測試、參與集成測試,但絕對替代不了專職測試。

一、思維慣性是道繞不過的坎

開發和測試最大的區別,不是會不會寫代碼,而是思維方式的根本對立

開發是建設性思維,拿到需求就琢磨怎麼實現,怎麼把邏輯搭得通順,怎麼讓代碼跑得高效。

我們禪道團隊有一套自己的產品研發流程,我們會要求開發在迭代時進行自測。

但在這種思維下,開發在自測時會不自覺地按照自己的實現路徑去測試,很難跳出既定框架。

測試不一樣,他們是破壞性思維,核心目標就是找出軟件的漏洞。

我本身是測試出身,我當年做測試的時候,拿到一個功能一般先想的不是怎麼用,而是怎麼用才能把它搞崩。

就像一個登錄按鈕,開發自測的話一般確定賬號密碼正確能登、錯誤登不上就覺得完事了,但測試可能會測連續點五十次按鈕會不會卡頓,測用空字符、超長字符串當賬號會怎麼樣,測在弱網環境下登錄失敗會不會提示錯亂。

這些場景開發根本想不到,不是能力問題,是思維慣性的必然結果。

開發測試-1

二、測試的核心價值不止於寫代碼

現在很多人覺得測試要求寫代碼,就和開發沒區別了。

這話只説對了一半,寫代碼只是測試的工具,不是測試的全部。

測試的核心能力是場景設計和質量把控,這些能力和開發的技術實現能力完全是兩碼事。

就拿自動化測試來説,開發寫自動化腳本可能比測試快,但測試寫的腳本更有針對性。開發寫腳本會聚焦於功能實現邏輯,而測試寫腳本會覆蓋邊界場景、異常流程。

我們團隊之前做性能測試,一個開發寫的腳本只測了正常併發下的響應時間,而測試補充了峯值併發、突發流量、長時間運行後的性能衰減等場景,最後發現的內存泄漏問題,正是在長時間運行的場景下才出現的。如果只靠開發的腳本,這個問題到上線都發現不了。

測試還要懂業務、懂用户。再説回禪道產品研發流程,正是基於這點,我們在計劃會階段會要求測試人員去做需求的測試實例化。

我們讓測試人員立足於用户操作場景,以“在什麼情況下、做了什麼操作、產生什麼結果”的形式澄清需求,從而轉化為測試用例,最終通過測試驗證需求。

這種對用户的理解,不是會寫代碼就能具備的,是測試長期站在用户角度思考積累的能力。

而且測試要對整個產品的質量負責,這種全局觀開發沒有。

開發通常只關注自己負責的模塊,而測試要打通整個業務流程。

舉個網購下單流程的例子,這涉及商品庫存、購物車、支付、物流四個模塊,每個模塊的開發只測自己的部分,但測試要從選商品、加購物車、下單、付款到查物流整個流程走一遍,還要測其中某個模塊出問題時,其他模塊會不會受影響。

這種跨模塊的質量把控,開發根本沒時間也沒精力去做,他們的核心精力必須放在代碼實現上。

三、獨立測試是團隊協作的壓艙石

有人説讓開發兼測試能提高效率,其實恰恰相反,會嚴重影響團隊效率。

開發的核心任務是寫代碼,讓他們兼測試,必然會分散精力。

更重要的是,獨立測試能形成有效的監督機制。這就像我們在學生時代檢查不出來自己做錯的題目,寫代碼也是一樣。這種監督不是挑刺,是對產品負責。

當然,現在行業裏的確有一些大公司搞開發兼測試,比如Facebook。

facebook

眾所周知,Facebook程序員的水平高於業界平均水平,他們有足夠的能力同時做好開發和測試工作。

再這,Facebook在功能發佈之前,會先發布到內部環境中,幾千內部員工先測試。這看着是沒有專職測試,但本質上是把測試的能力拆分到了不同角色裏。

我們中小團隊沒這個條件,最靠譜的還是讓專業的人做專業的事。


開發和測試不是替代關係,是協作關係。

開發負責把功能做出來,測試負責把好質量關,兩者目標一致,都是為了做出好產品。

現在測試要求寫代碼,不是為了變成開發,而是為了更好地履行測試職責;開發參與單元測試,也不是為了替代測試,而是為了提高自己的代碼質量。

真要是把兩個角色合二為一,看似省了人力,實則丟了質量,最終只會撿了芝麻丟了西瓜。

如何劃分開發和測試之間的職責,這就是另外一個我們值得探討的課題。

希望我的分享可以幫助到你,也歡迎給我留言與我討論。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.