另外,我始終不明白,為什么不做開發(fā)的QA會比Dev在測試上更專業(yè)? 這一點都說不通啊。

  2)減少溝通,扯皮,和推諉

  想想下面的這些情況你是否似曾相識?

  ● QA 做的測試計劃,測試案例設計,測試結果,總是需要Dev來評審和檢查。

  ● QA在做測試的過程中,總是需要Dev對其測試的環(huán)境,配置,過程做指導。

  ● QA總是會和Dev爭吵某個問題是不是BUG,爭吵要不要解決。

  ● 無論發(fā)現(xiàn)什么樣的問題,總是Dev去解決,QA從不fix問題。

  ● 我們總是能聽到,線上發(fā)生問題的時候,Dev的抱怨QA這樣的問題居然沒測出來,

  ● QA也總會抱怨Dev代碼太差,一點也不懂測試,沒怎么測給hand over 給QA了。

  ● QA總是會push Dev,這個bug再不fix,你影響我的進度了。

  ● 等等,等等。

  如果沒有QA,那么沒有這么多事了,DEV自己的干出來的問題,自己處理,沒什么好扯皮的。

  而一方面,QA說Dev不懂測試,另一方面Dev說QA不懂技術,而我們還要讓他們隔離開來,各干各的,這一點都不利于把Dev和QA的代溝給填平了。要讓Dev理解QA,讓QA理解Dev,減少公說公有理,婆說婆有理的只站在自己立場上的溝通,只有一個方法,那是讓Dev來做測試,讓QA來做開發(fā)。這樣一樣,大家都是程序員了。

  3)吃自己的狗食

  真的的開發(fā)團隊都是要吃自己狗食的。這句話的意思是??如果你不能切身體會到自己干的爛事,自己的痛苦,你不會有想要去改進的動機。沒有痛苦,不會真正地去思考,沒有真正的思考,沒有真正的進步。

  在我現(xiàn)在的公司,程序員要干幾乎有的事,從需求分析,設計,編碼,集成,測試,部署,運維,OnCall,從頭到尾,因為:

  ● 只有了解了測試的難度,你才明白怎么寫出可測試的軟件,怎么去做測試的自動化和測試系統(tǒng)。

  ● 只有自己真正去運維自己的系統(tǒng),你才知道怎么在程序里寫日志,做監(jiān)控,做統(tǒng)計……

  ● 只有自己去使用自己的系統(tǒng),你才明白用戶的反饋,用戶的想法,和用戶的需求。

  所以,真正的工程師是能真正明白軟件開發(fā)不單單只是coding,還更要明白整個軟件工程。只明白或是只喜歡coding的,那只是碼農,不能稱之為工程師。

  4)其它問題

  ● 關于SDET。全稱是Software Development Engineer on Test。像微軟,Google, Amazon都有這樣的職位。但我不知道這樣的職位在微軟和Google的比例是多少,在Amazon是非常少的。那么像這樣的懂開發(fā)的專職測試可以有嗎?我的答案是可以有!但是,我在想,如果一個人懂開發(fā),為什么只讓其專職做測試呢?這樣的程序員分工合理嗎?把程序分成兩等公民有意義嗎?試問有多少懂開發(fā)的程序員愿意只做測試開發(fā)呢?所以,SDET在實際的操作中,更多的還是對開發(fā)不熟的測試人員。還是哪句話,不懂開發(fā)的人是做不好測試的。

  ● 如果你說Dev對測試不專業(yè),不細心,不認真,那么我們同樣也無法保證QA的專業(yè),細心和認真。在Dev上可能出現(xiàn)的問題,在QA也也會一樣出現(xiàn)。而出了問題QA不會來加班解決,還是開發(fā)人員自己解決。所以,如果QA不用來解決問題,那么,QA怎么可能真正的細心和認真呢?

  ● 如果你說不要QA的話,Dev人手會不夠。你這樣想一下,如果把你團隊中現(xiàn)有的QA全部變成Dev,然后,大家一起開發(fā),一起測試,親密無間,溝通方便,你會不會覺得這樣會更有效?你有沒有發(fā)現(xiàn),在重大問題上,Dev可以幫上QA的忙,但是QA幫不上Dev的忙。

  ● 第三方中立,你會說人總是測不好自己寫的東西,因為有思維定式。沒錯,我同意。但是如果是Dev交叉測試呢?你可能會說開發(fā)人員會有開發(fā)人員的思維定式。那這只能說明開發(fā)人員還不成熟,他們還不合格。沒關系,只要吃自己的狗食,痛苦了,會負責的。

  ● 磨刀不誤砍柴功。如果你開發(fā)的東西自己在用,那么自己是自己天然的QA,如果有別的團隊也在用你開發(fā)的模塊,那么,別的團隊也很自然地在幫你做測試了,而且是真實的測試。

  ● 你可能會說吃狗食是個笑話,因為如果是我,我把干爛的事,離職走人了,讓別人去吃我的狗食。這個在現(xiàn)實中的確會發(fā)生,也是很現(xiàn)實的。但是想一想,你為什么在一開始讓他把事干爛了?另外,如果你的團隊在設計評審和代碼評審里沒有把好關,讓某人把事給干爛了,那么這個人的離職帶來的問題還是這個團隊來抗,于是整個團隊都在吃自己的狗食,挺公平的。痛苦過一次,你的團隊下次怎么干了,不敢亂招人了,不敢隨意評審代碼了,不敢讓人只做一塊東西了。終還是沒有逃脫吃狗食的范疇。

  ● 關于系統(tǒng)集成測試。所謂集成測試,是把多個開發(fā)團隊開發(fā)的模塊集中起來測試。因為開發(fā)人員可以無法看到全局,不了解別個團隊的系統(tǒng),所以需要有統(tǒng)管全局的專職的QA進行測試。對這個方面,我并不反對,在實際操作過程中,好像的確用專職的做集成測試的QA更有效一些。不過,這還是不能讓我停止去思考兩個問題,1) 如果開發(fā)人員看不到全局,他能開發(fā)出更好的軟件嗎?2)這個全職的做集成測試的QA難道不能是各個團隊的骨干Dev來組成嗎?

  ● 關于自動化測試。所謂自動化的意思是,這是一個機械的重復勞動。我想讓測試人員思考一下,你是否在干這樣的事?如果你正在干這樣的事,那么,你要思考一下你的價值了。但凡是重復性比較高的機械性的勞動,總有都會被機器取代的。

  ● 關于線上測試。我們都知道,無論自己內測的怎么樣,到了用戶那邊,總是會有一些測試不到的東西。所以,有些公司會整出個UAT,用戶驗收測試。做產品的公司會叫Beta測試。無論怎么樣,你總是要上生產線做真正測試的。對于互聯(lián)網(wǎng)企業(yè)來說,生產線上測試有的在玩A/B測試,有的玩部分用戶測試,比如,新上線的功能只有10%的用戶可以訪問得到,這樣不會因為出問題讓全部用戶受到影響。做這種測試的人必然是開發(fā)人員。

  好吧,我暫時寫這么多,我會視大家的討論再補充我的觀點的。