開發團隊裡是否需要測試人員?
最近在看“軟體隨想錄”,裡面有個非常有名的“喬爾測試”,其中有一個問題是“你的團隊裡面是否有測試人員”,如果有的話就加分,表明團隊對產品質量比較重視。
但是在現在的軟體開發團隊中是否真的需要測試人員呢?
如何替代測試人員的工作
我們先來看一下測試人員的工作是什麼?測試人員的工作是儘可能的找出bug,然後提交給開發人員進行修復。如果團隊裡面沒有測試人員,開發人員要如何找bug呢?
首先我們來看測試人員做的最多的測試——功能測試,對於功能測試我們有什麼辦法可以來替代呢?
單元測試
單元測試是開發人員找出程式碼中潛在bug的自我救贖行為,相比手工測試功能,開發人員一般更傾向於寫程式碼來測試功能程式碼,即所謂的單元測試。只要能想到相應的測試案例,就能寫出單元測試,可以測試包括正常,異常,分支,邊界等情況下的問題。
整合測試
單元測試雖然可以找到一些bug,但還不能完全替代測試人員的工作,單元測試只能測試細粒度級別的功能,比如某個方法的功能,如果需要對幾個功能點一起測試的話,單元測試就滿足不了了。但沒有關係,開發同樣可以用程式碼來寫測試,這種粒度稍大的測試就是整合測試,比如測試一個後端的api,驗證輸入引數和輸出結果,這個api的真正功能可能是後端呼叫資料庫等一系列的操作,你一個測試方法就可以把這個api的各個功能點串起來一起驗證。
UI測試
還有粒度更大的測試,一個頁面上的按鈕的點選可以看成是UI測試,相對於整合測試,這個測試的範圍涉及了前端和後端,測試包括驗證前端的頁面是否正確,到點選按鈕後觸發的後端功能是否正確。現在市面上有很多端到端的測試框架,涵蓋各種語言和瀏覽器。
效能測試
除了功能測試,測試人員還會做一些效能測試,同樣地,開發可以通過程式碼或者指令碼來呼叫效能測試工具來對系統進行效能測試。
持續整合
如果不想像測試人員一樣每天做重複性的勞動,就可以將以上那些測試程式碼放到持續整合上面,讓機器幫你執行,想象一下,幾百上千個測試,如果手工跑的話可能要花不止一天的時間,而通過持續整合,可能在一天就能跑完好幾輪所有測試。
不能替代的測試工作
如果我們做到了以上這些,是否就可以完全代替測試人員了呢?其實有些測試是機器無法測試的,比如網頁的樣式,機器只能判斷是否有顯示,但無法判斷顯示的是否好看。還有一些互動效果,也只有通過人工才能識別效果是否正確,還有其他各個領域的測試,目前是不能通過程式碼或者機器來替代的。
高階測試工程師
可能有人會說上面提到的用程式碼來執行測試的工作,高階測試工程師也能做。其實我覺得軟體開發和軟體測試到了越高的位置,技能重合的領域就越大,兩者都同時會寫程式碼,做測試,可能還會部署,會運維,這個時候我覺得不如就叫高階工程師好了,或者全棧工程師。
結論
說了這麼多,所以結論是什麼呢?
具體情況要具體分析,不能一概而論說完全不需要測試人員,團隊不需要測試人員的條件是:
- 團隊的開發人員可以寫的單元測試,整合測試和UI測試
- 沒有太多需要人工測試的功能,比如團隊開發的是常規的web系統或者純後端應用等