隨著測試在軟件開發(fā)周期中越來越受到重視,國內(nèi)測試的缺口一直比較大,各種軟件和互聯(lián)網(wǎng)公司都大肆招收測試工程師,有些走在前面的公司甚至從今年開始取消了測試工程師職位,全部變成了測試開發(fā)職位,比如百度。一方面測試開發(fā)表明了對工程師有更高的要求,需要在具有測試能力的基礎(chǔ)上兼?zhèn)溟_發(fā)能力;另一方面自動化測試成為趨勢,利用開發(fā)的技巧解決測試中的問題以提高測試效率,降低QA與RD的人力比。

  1、技術(shù)含量

  面試過許多的應屆畢業(yè)生,問及為什么選擇測試開發(fā)這個職位時,經(jīng)常聽到以下的回答:

  “我覺得自己開發(fā)能力比較弱,但我比較細心,覺得測試職位比較適合。”

  “我在實驗室和實習公司呆過,做過功能測試和性能測試,我比較喜歡測試.”

  “開發(fā)只能了解到項目的局部,但測試需要了解更多,我期望有更好的大局觀”

  無論人們內(nèi)心真實的想法是什么,但潛意識里面測試的技術(shù)含量沒有開發(fā)高。在校園招聘的時候,我們會將部分倒在開發(fā)職位終面的人重新拿到測試開發(fā)面試?陀^地說,在軟件編碼方面測試開發(fā)的技術(shù)含量確實不如純正的開發(fā)職位,更不用說測試職位了。但是,我想說的是這個職位本身所要求的技術(shù)水平應該是需要超過單純的開發(fā)職位的,真正高水平的QA至少需要多年的開發(fā)經(jīng)驗的,否則他無法從軟件產(chǎn)品設(shè)計、架構(gòu)和實現(xiàn)方面提出實質(zhì)性的意見和風險評估,充其量只是點出交付到手軟件中的幾個bug。所以基于現(xiàn)階段國內(nèi)行情,個人建議如果希望在測試的職業(yè)生涯上有所發(fā)展的人,先參與幾年的研發(fā)工作,畢竟那才是軟件工程中的主體,然后在開發(fā)過程中培養(yǎng)測試意識,這也是程序員的職業(yè)素養(yǎng)。Google許多工程師都有強烈的質(zhì)量意識,許多代碼自己不經(jīng)過自己的單元測試和功能測試是沒有人review的。對于投測試或者測試開發(fā)職位的目的是為了逃避開發(fā),那么職業(yè)道路要發(fā)展順利是很難的。

  2、基本素質(zhì)

  測試開發(fā)工程在公司一般有兩種,一種是單純?yōu)闇y試團隊開發(fā)測試工具或者系統(tǒng)(由于這部分和單純開發(fā)職位本質(zhì)上區(qū)別不大,討論基于另一種);另一種是在測試過程中發(fā)揮主觀能動,利用自動化把重復勞動降至低,比如開發(fā)適用于特定場景的測試工具(當然這種工具具有普遍性也能推廣到整個組或者公司)、測試腳本和測試用例。

  測試開發(fā)工程師應該具備兩方面的知識:測試知識和開發(fā)知識。之所以把測試排在前面,因為這里的開發(fā)建立在測試實踐基礎(chǔ)之上。其中測試知識又分為兩部分:一是理論知識,軟件行業(yè)發(fā)展至今也幾十年,測試方面的積淀更少了,所以要掌握這部分對于一般人來說不是難事;另外一方面是經(jīng)驗知識,主要在項目測試過程中積累,很多系統(tǒng)的測試點、風險點都需要有豐富的經(jīng)驗來評估,這也是的測試工程師價值所在。開發(fā)知識當然和開發(fā)工程師差不多了,不再多說。在軟素質(zhì)方面,測試開發(fā)工程師應該具有更好的組織溝通協(xié)作能力,F(xiàn)在許多公司都在推行全流程保證,QA為了發(fā)揮更大的影響力以及保證項目的質(zhì)量,需要從需求到設(shè)計,測試到上線全方面跟蹤參與,這涉及到了許多跨部門跨小組的溝通,即便在小組內(nèi)溝通也極其頻繁,工程師需要很好的表達能力。同時,由于測試在軟件生命周期中處于靠后的位置,所以在將許多工作推行到上游的環(huán)節(jié)中存在較多阻力,這也要求工程師有較好的統(tǒng)籌和協(xié)作能力,終達到目的。

  3、走得更遠

  不可否認,現(xiàn)在許多測試理論,無論白盒測試還是黑盒測試,無論單元測試、集成測試還是系統(tǒng)測試,看似屬于測試人員研究的專利,實際上大部分的方法論都是開發(fā)人員提出來的。再一次證明,不參與軟件主體的研發(fā)工作是不可能深入理解測試的,所以開發(fā)人員需要具備的開發(fā)能力和技巧測試人員也是需要具備的。當然由于項目的安排和時間等各方面的原因,測試人員能難有較多的開發(fā)機會,但這不妨礙你不斷地學習。我們大組內(nèi)有一個多年深入研究的python的QA,一直以此為興趣,許多開發(fā)小組用到python開發(fā)系統(tǒng)的時候都會叫他過去培訓,他不僅是質(zhì)量部的測試工程師,還親自開發(fā)了多款實用的測試自動化工具。另外,測試可以涵蓋的方面很多,但人的精力畢竟有限,測試開發(fā)工程師也必須擁有自己的核心競爭力,選定一個方向是個不錯的做法,致力成為某方面的專家,比如單元測試(不要認為是開發(fā)人員做的,很多開發(fā)人員沒有單測意識和技巧)、性能測試、安全測試。組里面也有一個對性能測試研究了6年的人,從職業(yè)開始發(fā)展一直比較順利,并且發(fā)展勢頭不錯。后是測試開發(fā)工程師需要培養(yǎng)自己的大局觀,這個是在職業(yè)過程中有意培養(yǎng)的,公司現(xiàn)階段的任務是什么?側(cè)重點是什么?在大公司需要順勢而為,QA的本職工作是保證質(zhì)量,需要借助與流程、工具和其他外部資源,所以在工作的時候盡量與大方向契合。比如公司去年是QA內(nèi)部水平提高的一年,需要QA具備單元測試、Code Review方面的能力,今年是保證質(zhì)量的前提下,提高軟件發(fā)布周期,主推持續(xù)集成。

  4、測試的本質(zhì)

  2V(Validation和Verification)是QA的基本職責,即保證兩點:Validation,軟件按照既定的需求開發(fā),沒有偏離產(chǎn)品方向;Verification,軟件在滿足需求的基礎(chǔ)上保證其正確性,從功能、性能、安全等各個方面驗證。傳統(tǒng)意義上,第二點是大部分QA的意識,即找bug,認為一個軟件找到的bug越多自己的價值越大,實際上QA的高境界是軟件在測試的時候找不到bug,因為在軟件的啟動階段你開始了質(zhì)量保證工作,從需求、設(shè)計、編碼這些前期階段杜絕了bug產(chǎn)生的可能。當然,以上說的有些理想,但本質(zhì)是什么?軟件背后是人,是PM制定的需求,是RD進行開發(fā)的, 那測試背后實際上測的是人而不是軟件。人總是可能存在思維漏洞的,人總是可能犯錯誤的,所以永遠會有bug,但有些人心細,有些人負責,自己開發(fā)完后會自己進行單測、功能測試,以致后續(xù)能發(fā)現(xiàn)他的bug已經(jīng)很少了。明白了這一層不要單純從技術(shù)角度來思考測試。

  后想說的是,無論在大公司還是小公司,大家都有壓力,都要發(fā)展,心態(tài)很重要了,以創(chuàng)業(yè)者而不是打工者的心態(tài)來工作看待很多問題截然不同了。