轉自: http://coolshell.cn/articles/6994.htmlhtml
這個文章必然是有爭議的,我在個人微博上討論過不少次了,每次都是頗有爭議的。有不一樣的觀點,有爭論老是一件好事,這樣能夠引起你們的思考。因此,對於個人這篇博文,若是你贊同個人觀點,我會感到高興,若是你會去認真地深刻思考,我也會高興,若是你反對,不要緊,能夠討論。程序員
在此以前,我想說明一下我觀點裏的這個「專職QA」是怎麼定義的。shell
我經歷過一些公司都有專職的QA團隊(專職的測試人員),自從上個公司個人開發團隊在一個項目上被QA部門搞得一團糟,我愈來愈懷疑專職QA存在在乎義。個人觀點不必定對,但請讓我鮮明地表達一下——我以爲是不須要全職的QA的,甚至不須要QA這一專職角色或部門,由於,不懂開發的人必然作很差測試。就像不懂開發的研發經理必然管很差研發團隊同樣。我愈來愈以爲Dev應該應該是作測試最合適的人選,這必然是將來的趨勢 (由於我已經看到了中國程序員的進步,相比起10年前,今天的程序員已是很是全面了,再來十年,必然證實個人觀點是對的)。微信
在我正在展開說明以前,我想引用兩篇文章:網絡
一篇是 「On testers and testing」(中文翻譯),本文的做者Sriram Krishnan是一名程序員,曾在Yahoo和微軟工做過,開發過不少軟件,曾被紐約時報報道,寫過一本書,本文是他的一篇博客。他在文章中表達了這幾個觀點——架構
大 多數的開發團隊並不須要一個獨立的測試角色。即便要有,那麼全部的開發時間比上全部的測試時間應該 >20:1的。。證據嗎?光看看一些從古至今最成功的軟件開發團隊就知道了。不管是當今的Facebook,仍是30年前最初的NT團隊,不少偉大 的產品都是出自沒有或不多測試人員的團隊。運維
開發人員應該測試本身的代碼。沒什麼可說的。背後的道理並不重要。這包括單元測試,全覆蓋的自動化測試或手工測試或組合測試。若是你的開發人員不能/不肯意或認爲這「不歸我管」,那你須要更好的程序員。工具
另外一篇文章是鄒欣的「現代軟件工程講義 9 測試 QA 的角色和分工」,這是一篇很不錯的文章。他在文章裏提到了分工的必要性,好比第三方的鑑定機構,而且也指出了分工的一些問題,好比,畫地爲牢的分工,無明確責任的分工,等,這些問題直接命中了分工的要害。我隱約以爲,我和鄒欣的不少觀點是相同的,咱們內容上是相同的,只是形式上還有分歧。另外,個人觀點太鮮明瞭,從而容易導向極端的理解。post
你看,咱們都贊成,Dev要懂測試,QA要懂開發,只不過度工不一樣,既然你中有我,我中有你,那就不要分彼此了,一塊兒攜手開發測試吧。(另外,我我的以爲不懂開發的測試人員不可能測試得好)性能
—- update—- {
//本篇文章出來後,網上出現了一些對此討論的文章,我一併更新在這裏
【 《對《咱們須要專職QA嗎?》的迴應》做者:@段念-段文韜 】
【 《關於「咱們須要專職的QA嗎」》做者:@Jacky郭 】
【 《咱們須要專職的QA嗎?(評)》做者:@Monkey陳曄曄 】
【《 《咱們須要專職的QA嗎?》讀後感》做者:@ 花生色魔叔】
}
我 再說說我最糟糕的QA經歷吧,這個公司的QA部門只作測試,他們的leader以爲全部的test design和test 的過程都不須要Dev參與,他們是獨立於Dev以外的部門,他們幾乎不關心Dev的設計和實現,他們只關心能跑通他們本身設計的test case。可是去執行Test Case的時候,又須要Dev的支持,尤爲在環境設置,測試工具使用,確認是不是bug方面,全都在消耗着Dev的資源,最扯的是,他們對任何線上的問題 不負責,反正出了問題由Dev加班搞定。
我有一次私自review他們的test case的時候,發現不少的test case這樣寫到 – 「Expected Result:Make sure every thing is fine」 ,WTF,什麼叫「Every thing is fine」?!而在test case design的時候,沒有說明test environment/configuration 是什麼?沒有說明test data在哪裏?Test Case、Test Data、Test Configuration都沒有版本控制,還有不少Test Case設計得很是冗餘(多個Test Case只測試了一個功能),不懂得分析Function Point就作Test Design。另外,我不知道他們爲何那麼熱衷於設計一堆各式各樣的Negative Test Case,而有不少Positive的Test Case沒有覆蓋到。爲何呢,由於他們不知道開發和設計的細節,因此沒有辦法設計出Effective的Test Case,只能從需求和表面上作黑盒。
在作性能測試的時候,須要Dev手把手的教怎麼作性能測試,如何找到系統性能極限,如何測試系統的 latency,如何觀察系統的負載(CPU,內存,網絡帶寬,磁盤和網卡I/O,內存換頁……)如何作Soak Test,如何觀察各個線程的資源使用狀況,如何經過配置網絡交換機來模擬各類網絡錯誤,等等,等等。
測試作得也不認真,大量的False Alarm,都是環境問題,好比:安裝新版本後沒有重啓服務,沒有使用新的配置文件,網絡配置,等等,等等。
在 項目快要上線前的一週,我又私自查看了一下他們的Test Result,我看到5天的Soak Test 的內存使用一直往上漲,很明顯的內存泄露,這個狀況發生在2個月前,可是一直都沒有報告,我只好和個人程序員天天都加班到凌晨,趕在上線前解決了這個問 題。可是,QA部門的同窗們就像沒發生什麼事似的,依然正常上下班。哎……
爲何會這樣?我以爲有這麼幾點緣由(和鄒欣的觀點同樣)
注:我無心在這裏貶低QA的能力工做。只是我看到了QA由於沒有參與開發的一些現實問題。
鄒欣對於分工出現的問題給出了兩點解決方法:
- 充分受權和信任(Empower team members)
- 各司其職,對項目共同負責(Establish clear accountability and shared responsibility)
我無心在這裏貶低QA的工做,我也無心由於這個事走向另外一個極端。可是,我在如今公司的經歷,還有不少新興公司的作法,我愈來愈以爲軟件開發,真的不須要專職的QA,更不須要只寫代碼不懂作測試的專職的Dev。觀點以下:
1) 開發人員作測試更有效
不少開發人員只喜歡寫代碼,不喜歡作測試,或是他們說,開發人員應該關注於開發,而不是測試。這個思路至關的錯誤。開發人員最應該關注的是軟件質量,須要證實本身的開發成果的質量。開發人員若是都不知道怎麼作測試,這個開發人員就是一個不合格的開發人員。
另外,我始終不明白,爲何不作開發的QA會比Dev在測試上更專業? 這一點都說不通啊。
2)減小溝通,扯皮,和推諉
想一想下面的這些狀況你是否似曾相識?
若是沒有QA,那麼就沒有這麼多事了,DEV本身的幹出來的問題,本身處理,沒什麼好扯皮的。
而一方面,QA說Dev不懂測試,另外一方面Dev說QA不懂技術,而咱們還要讓他們隔離開來,各幹各的,這一點都不利於把Dev和QA的代溝給填平了。要讓Dev理解QA,讓QA理解Dev,減小公說公有理,婆說婆有理的只站在本身立場上的溝通,只有一個方法,那就是讓Dev來作測試,讓QA來作開發。這樣同樣,你們都是程序員了。
3)吃本身的狗食
真的優秀的開發團隊都是要吃本身狗食的。這句話的意思是——若是你不能切身體會到本身乾的爛事,本身的痛苦,你就不會有想要去改進的動機。沒有痛苦,就不會真正地去思考,沒有真正的思考,就沒有真正的進步。
在我如今的公司,程序員要幹幾乎有的事,從需求分析,設計,編碼,集成,測試,部署,運維,OnCall,從頭至尾,由於:
因此,真正的工程師是能真正明白軟件開發不僅僅只是coding,還更要明白整個軟件工程。只明白或是隻喜歡coding的,那只是碼農,不能稱之爲工程師。
4)其它問題
好吧,我暫時寫這麼多,我會視你們的討論再補充個人觀點的。
—– update 2012/4/11—–
一些人以爲我是在泄私憤,我可以理解爲何我會被這樣誤解,可是沒有關係,不少新東西新觀點老是會被誤解的,我坦然面對。請你們拋開個人這些情感因素,單純的思考一下,沒有專職QA的的團隊架構是否有積極的意義在裏面?
再補充一點,你們思考一下,QA是保證質量的,可是不少QA是在作測試,軟件質量是測試出來的嗎?若是不從需求分析,軟件設計,代碼實現上作好控制,到測試的時候你還怎麼保證質量呢?
(全文完)
歡迎關注CoolShell微信公衆帳號
(轉載本站文章請註明做者和出處 酷 殼 – CoolShell.cn ,請勿用於任何商業用途)