1. 程式人生 > >測試和開發之間的博弈--沒有硝煙的戰爭

測試和開發之間的博弈--沒有硝煙的戰爭

 ** 你跟開發和諧麼?**

 

導語:測試工作從業者,打交道最多的就是開發,而測試和開發之間的關係在行業內被稱為‘天敵’。

 

  ** ‘天敵’關係形成的原因 **

 

那作為測試工程師,你知道要怎麼更好地來處理跟開發之間的關係麼?其實對於這種‘敵對’關係,我們也不難理解。

開發是產品的製造者,產品就相當於他的‘孩子’,而測試的工作是去尋找這個“孩子”身上的毛病。相信,沒有一個媽媽喜歡自己的孩子被各種挑錯,然後要讓自己去糾錯進行重塑。所以,人之常情,開發和測試的這種天然冤家的屬性確實在所難免。所以我們經常能在公司各個的茶水間或者會議室看到這樣的一些對話和小場景: 

 

幾個測試工作人員抱怨開發的各種行為:

A:xx開發每次開一個bug就過來讓我重現,明明我bug裡的步驟描述得已經很清楚了,他自己都不會操作一下的!

B:xx開發太依賴測試了,相同的bug提出一處改一處,同類型的bug在相關的模組不能一併修改了麼?

C: 遇到不想修復的bug,就說自己本地是好的,或者質疑測試的版本不對,再不然就說使用者不會這麼操作,不用修復,反正就是想方設法的不修bug!

D:開了bug開發就讓我清資料,清快取,或者重啟手機,三兩下就把bug整不見了,復現不出來了,就說看吧,不能復現,不修復了!

E:我開了一個bug,開始明明能穩定復現,然後開發一直放在那裡不管,等過了一段時間後,我的環境被破壞了,或者測試版本升級了,又讓我復現這個bug,浪費時間重新搭環境不說,bug還經常不再復現了,然後他又說不能復現所以bug就不修復了...

F: 開發修完這個bug單元測試報告沒有,而且bug描述備註也沒有,不說清楚根本原因和影響模組,我怎麼做迴歸測試啊! ……

測試對開發的種種行徑,哀聲怨道,不絕於耳。

當然,開發對測試的態度也好不到那裡去,你同樣能經常聽到開發圍在一起埋怨測試人員:

A: xx經常開一些這麼小的bug,還總要求開發改,影響又不大,還耗時費力,測試都不懂專案管理和預估風險啊?

B:這些明明是客戶端的bug,指派給我們伺服器是幾個意思?測試都不會自己先定位一下的麼?這點業務能力都沒有!

C: 經常花費了大量的時間排查和定位bug,最後竟然發現是無效的bug,測試到底有沒有搞清楚需求?簡直是浪費大家的時間!

D:明明是個Major的bug,卻給我報成critical級別,還害我被領導催加班,自己謹慎一點定bug級別不行麼?

E:xx測試總是一直在問bug產生原因和解決方法,測試又不懂程式碼,說了也不明白,一直解釋也是浪費大家時間!

F: 測試整天搞一堆流程和文件,要開發提供這個提供那個,開發寫程式碼哪有那麼多時間! ……

看著這些言辭相信作為測試工程師的你肯定覺得一點都不陌生。因為立場不一樣,職責不一樣,出現這樣的分歧和矛盾也無可厚非。但是,如果每天工作在這樣的氛圍裡,每天都需要花心思去跟開發鬥智鬥勇,不止影響我們每天的心情,而且肯定也會影響我們的工作效率。

 

所以,作為測試工程師,我們到底可以做些什麼來改善這種敵對關係呢?或者說可以從哪些方面來努力融洽我們的工作氛圍呢?

 

 ** 測試如何改善?**

> >業務能力

1. 我覺得測試工程師應該提高自己的核心業務能力,讓開發挑不出來毛病,從而對你產生信任甚至歎服。

關於這點我自己是有親身經歷的,所以深有體會。我曾經工作2年左右,跳槽到一家外企做一名senior測試工程師。剛到公司參與專案的時候總是格外的謹慎,開bug也要經過再三確認才會發出去。但是就算是這樣,跟公司的開發的矛盾也還是沒有幸免。當時公司的開發老大是個特別強勢的人,聲音大氣勢強,一說話能把人嚇懵的那種。我當時開了一個bug,在我的環境下面再三確認過,是個能夠穩定復現的嚴重bug,所以我標記為了critical的級別,並且指派給開發。對應模組的開發大致定位了一下,沒有復現出來。然後這個開發老大,就氣勢洶洶的過來測試辦公區,趾高氣昂地跟我的測試經理說:

‘你們測試怎麼開bug的,是不是bug自己有沒有搞明白啊?現在開發的環境裡就是OK的,肯定是你們的測試環境的問題或者操作方法的問題!下次搞清楚再發bug,不要浪費開發的時間...’ 

這些話說的一點都不客氣,矛頭全指向測試這邊,不留任何餘地。 

我當時內心肯定是很生氣的,但是我沒有直接站起來跟他理論,因為我知道,需要理論必須要掌握有效的證據,自己才能有底氣,不然就是強詞奪理,沒有勝算。

所以,我在自己的環境下再次成功的把這個問題復現出來,然後再去找到開發,幫助他搭建同樣的環境,告知穩定的復現步驟,將bug在他的環境下復現,並且協助開發把問題定位出來,只需要他們修改對應的程式碼就可以了。

整個事情,我沒有去爭吵,沒有去理論,用自己專業的業務能力,讓他們心服口服。

從這次事情之後,整個開發團隊對我的態度明顯的改善了,不僅不再趾高氣昂的指點和質疑我的工作,而且在要修改bug的狀態(非修復狀態)的時候也會先跟我確認,得到准許之後才做相應狀態的修改。

我的工作開展順利了很多。

所以,要避免落人口舌,請先做好自己。測試做好自己的首要前提,就是必須要提高自己的業務能力:

◆ 一方面要充分的熟悉產品,理解產品的邏輯和實現,在這個基礎上,不僅會提高你的測試技能和工作效率,而且在被開發質疑的時候,也能有紮實的產品知識做後盾,有充分的底氣去做辯解,理論才有勝利的可能;

 ◆ 另一方面,也要規範自己的工作的輸出。例如保證各種測試文件(測試計劃,測試用例和測試報告等)的質量,可以經得起開發、產品等各部門的稽核;比如保證輸出的bug質量,編寫bug的描述和步驟清晰,bug的嚴重級別定位準確,以及定位日誌和現場截圖齊全,不給開發留下挑刺的餘地。

提高了自己的工作質量,才可以用同等的標準去要求開發,才能在守住測試的立場的同時,也贏得對方的尊重。

 

 > >技術能力

2. 其次,測試人員也需要提高自己的技術能力,包括測試的技能,以及測試相關的技術能力和知識領域。

同樣給大家分享一個真實的故事。

我原來有一個同事,也是做測試的,因為是黑盒測試,她並不懂程式碼。在專案工作過程中,她遇到一個合作很不愉快的開發,每次想更加深入地熟悉產品的功能實現和業務邏輯的時候,諮詢開發,他都很不配合。兩個人爭吵過,也互懟過,甚至雙方領導調解過,但是都不見情形的改善。

沒有辦法,為了保證自己的測試任務能夠按時按量的完成,她只能逼著自己去閱讀產品的原始碼。

雖然一開始都看不懂,但是她堅持,一邊找資料,一遍諮詢別人,最後終於把這個產品相關模組的程式碼都熟悉了。

在隨後的測試過程中,遇到bug,她可以自己準確的定位出來是那一塊程式碼的缺陷。

從此以後,再也沒有聽過她跟那個開發爭吵了,因為她自己已經成為了那個最熟悉產品的人,不管從功能實現,還是程式碼邏輯,她都瞭然於心。

技術在手,無求於人。

所以,測試工程師可以適當的有針對性的提高自己的技術能力。

那從哪些方面提高呢?

◆ 第一,肯定是測試的技能,測試流程以及各種測試方法的掌握是測試工作的基礎,所以這個是必須要掌握的;

◆ 第二,第二,最好能熟悉至少一門語言,不管是java,C++,或者其他的指令碼語言python,perl以及shell,掌握其中1-2個就可以。有了語言基礎,測試可以更加深刻的理解產品的實現,也能夠更加清楚的知道bug經常會出現的模組,能夠對產品進行更加充分的測試; 

◆ 第三,需要至少要掌握一種資料庫的使用,如對SQL的操作,能運用JOIN進行查詢,或者HAVING用法,測試人員離不開資料庫的管理和操作,自己掌握了這方面的技能,就再也不用依賴開發,減少自己的被動性;

◆ 第四,也需要熟悉系統的相關操作,如安裝,配置,管理,對於Linux系統需要熟悉常用的操作命令,能在Linux下能安裝和配置軟體等。 

總之,提高了自己各方面的技術能力,才能夠在工作中充分發揮自己的主觀能動性,不過分依賴開發,才能提高自己在開發心目中的專業性,贏得雙方平等的待遇。

 

 > >溝通能力

3. 再者,測試工程師也要提高自己的情商,增強自己的溝通能力,懂得站在開發的角度思考問題,學會去尊重開發人員。

 相信大家都知道,無論什麼場景,有效的溝通總能讓事情完成得事半功倍,測試跟開發之間的關係處理也是一樣。

作為測試人員,我們除了堅持自己測試的角度和立場之外,也要有同理心,學會站在開發的角度去看問題。

實際上很多衝突都是源於大家對需求理解不一樣造成的,所以當測試和開發對一個bug持有不同觀點的時候,不要率先很強硬的否定他,嘗試解釋為什麼他理解的需求有不足之處。找到一些可以站得住腳的論點,從使用者角度出發,從安全性考慮,或者從易用性和友好性來看,說服開發接受測試的觀點,而不是強加自己的觀點給他們;

另外,平時工作之餘大家也可以多溝通,有機會就組織一些活動讓開發與測試熟悉一下,這樣子很多時候面對熟悉的人,在反對對方的觀點的時候會更加容易考慮一下對方的感受,只要氣氛不對立,很多事情就可以商量了。

這些溝通技巧都是一個人情商的體現,這也是為什麼很多公司招聘的時候都要求測試人員善於溝通和表達,高情商的表達和溝通方法,可以讓我們的工作氛圍少一些凌厲,多一些柔和。

 

 >> 流程管理

4.最後,在公司層面,最好還有一個完善的管理流程,通過流程控制來規範開發和測試部門的工作,同樣可以很大程度上減少衝突的發生。

質量保證從來都不僅僅是測試人員的職責,而是需要整個團隊齊心協力。所以建立完善的流程,能夠幫忙提高產品的質量。

我原來工作的一家公司,測試部門的總監就一直致力於各種管理流程的制定和推行,比如用流程來規範測試文件的輸出模板,以及測試開bug的模板,可以提高測試的工作質量;

還有用流程來規範開發的單元測試報告,寫明修復方法和bug的根本原因,可以幫助測試進行bug驗證和迴歸測試;

同樣用流程來規範開發處理的bug的過程,比如關閉bug之前必須要發郵件跟測試確認,避免bug沒有經過確認被擅自關閉而引發矛盾和衝突;

再如規範專案code稽核以及最後階段的程式碼冰封,可以提高程式碼的質量以及降低釋出最後階段出現嚴重回歸問題的機率......

各種流程的推行,雖然看起來很繁瑣,但是嚴格執行起來,確實能夠解決很多實質性的問題,幫助緩解很多開發和測試之間的尖銳衝突。

 

 **總結** 

總而言之,雖然開發和測試之間存在著天然的‘敵對’關係,但是作為測試人員要樹立好自己的定位,清楚的知道無論開發和測試,最終目的都是使專案高質量、高時效地完成。並且只有開發和測試併力合作才能完成好一個專案。

所以無論開發還是測試,大家都離不開彼此,測試工程師不是給開發的工作挑刺找茬。但是也更加不是開發人員的附屬品,需要再提高自己的同時,理性地處理和看待和開發的關係,共同營造一個良好愉快的工作氛