這個(gè)標(biāo)題有點(diǎn)大,小標(biāo)題是“測(cè)試團(tuán)隊(duì)技術(shù)能做到的高境界”或者是“測(cè)試技術(shù)可以往哪些方向發(fā)展”,一家之言。

  個(gè)人感覺(jué)可以往兩個(gè)方向:

  一個(gè)是,一切工具化(Automate Everything),包括把測(cè)試用例自動(dòng)化,把流程自動(dòng)化,開(kāi)發(fā)各種各樣的工具來(lái)提高研發(fā)的效率,避免做重復(fù)的手動(dòng)的事情(這些事情比較容易出錯(cuò)),目的是, 讓開(kāi)發(fā)專注做開(kāi)發(fā),其他事情測(cè)試來(lái)做;

  那對(duì)人的要求是,快速開(kāi)發(fā)的能力,洞察力,不斷發(fā)現(xiàn)問(wèn)題,分析問(wèn)題,解決問(wèn)題的能力(也是流程改善的能力),所謂快速開(kāi)發(fā)的能力,是比如開(kāi)發(fā)人員在開(kāi)發(fā)新功能的時(shí)候,測(cè)試可以接入然后很快開(kāi)發(fā)出一系列的檢查工具幫助開(kāi)發(fā)避免回歸的問(wèn)題;比如醫(yī)生在診斷的時(shí)候需要的一切工具,體溫計(jì),血壓計(jì),心電圖等等;

  對(duì)研發(fā)而言,這些工具包括代碼覆蓋工具,分析代碼改動(dòng)的工具,代碼版本管理,代碼風(fēng)險(xiǎn)分析,bug管理,bug數(shù)據(jù)挖掘,軟件模塊依賴分析等等。

  舉些例子,關(guān)于開(kāi)發(fā)一些工具來(lái)提高研發(fā)的效率;

  比如我自己的機(jī)器上部署了Nginx還有Php,每次要做一些Php相關(guān)的開(kāi)發(fā)或者測(cè)試的時(shí)候需要把2個(gè)程序都打開(kāi),以前是手動(dòng)了一個(gè)一個(gè)打開(kāi),后來(lái)想想寫(xiě)個(gè)腳本,一鍵搞定:

  start "dd" /d "d:Download ginx-1.0.11" nginx.exe

  timeout 20

  echo "nginx is started"

  timeout 5

  start "" "d:Program FilesPHPphp-cgi.exe" -b localhost:9000

  echo "php is started"

  測(cè)試某些軟件的時(shí)候,需要配置環(huán)境,比如代理服務(wù),host信息等等,可以把這些動(dòng)作都自動(dòng)化,讓所有的人“一鍵點(diǎn)擊”即可部署測(cè)試環(huán)境。

  其實(shí)人是有惰性的,如果想讓團(tuán)隊(duì)里面的人(開(kāi)發(fā),項(xiàng)目經(jīng)理,產(chǎn)品經(jīng)理,UI/UA工程師)參與測(cè)試,一個(gè)辦法是讓測(cè)試變得很容易,一鍵點(diǎn)擊即可完成。

  再比如周報(bào)或者日?qǐng)?bào),可以開(kāi)發(fā)一些web系統(tǒng)方便團(tuán)隊(duì)成員寫(xiě)周報(bào)或者日?qǐng)?bào),然后聚集成團(tuán)隊(duì)的周報(bào)或者日?qǐng)?bào)

  還有是BVT(basic verification Test)把一些API的測(cè)試,簡(jiǎn)單的冒煙測(cè)試寫(xiě)成一個(gè)bat文件,開(kāi)發(fā)在checkin之前很快的跑一下,沒(méi)有問(wèn)題即可checkin。

  把重復(fù)的事情自動(dòng)化,把需要2步或者3步做的事情一步做完,即可提高研發(fā)的效率。

  另外一個(gè)是,軟件測(cè)試架構(gòu)師,專業(yè)化(變成Expert),比如你一直測(cè)試搜索引擎,那么你很清楚搜索引擎的原理,你發(fā)現(xiàn)過(guò)各種各樣的bug,你甚至可以指導(dǎo)比較junior的開(kāi)發(fā)人員,開(kāi)發(fā)設(shè)計(jì)新功能的時(shí)候需要邀請(qǐng)你,因?yàn)槟阒栏鞣N各樣的問(wèn)題,你可以在設(shè)計(jì)review的時(shí)候提出有價(jià)值的意見(jiàn);在這個(gè)層面上,測(cè)試軟件架構(gòu)師和開(kāi)發(fā)架構(gòu)師無(wú)異;

  那對(duì)人的要求是,要有很高的讀代碼的skill,能夠讀懂別人的代碼,可以做code review,可以了解底層的運(yùn)作;有很高的debug skill,發(fā)現(xiàn)問(wèn)題的時(shí)候可以去root cause,從而從系統(tǒng)的角度上知道如何在將來(lái)比去避免這些bug,有很強(qiáng)的bug prevention skill;有很強(qiáng)的coding skill。

  舉個(gè)例子,關(guān)于如何去做review的:

  比如我要寫(xiě)個(gè)Android上面的記事本,可以把數(shù)據(jù)傳輸?shù)皆粕希部梢韵螺d下來(lái),但是不一定很頻繁;不需要實(shí)時(shí)同步;這樣我如果換手機(jī)可以把數(shù)據(jù)下載下來(lái),避免數(shù)據(jù)的丟失,或者遷移的麻煩;

  這些功能一旦確定下來(lái)以后,要思考的事情是,放到哪個(gè)云上(快盤(pán),微盤(pán)還是Dropbox等等),怎么放(文件傳輸?shù)姆椒,用Http,還是Email,還是ftp,或者自己寫(xiě)Socket);有哪些現(xiàn)成的API可以用,比如Java的httpclient的Jar包可以使用,有哪些需要自己寫(xiě),比如文件上傳過(guò)程需要把文件讀出來(lái)編程Java Stream,需要研究哪些技術(shù),文件上傳的Http Post方法等等;由于訪問(wèn)的安全性問(wèn)題,都使用了OpenID,那我需要研究一下OpenID(oAuth)如何使用等等;

  測(cè)試架構(gòu)師可以思考這個(gè)軟件的work flow是怎么樣的,data flow是怎么樣的,數(shù)據(jù)要存儲(chǔ)在哪里, 有可能有哪些漏洞,比如上面說(shuō)的產(chǎn)品,需要考慮網(wǎng)絡(luò)的情況(GPRS,Wifi)和文件大小因?yàn)樾枰头⻊?wù)器端通訊,還有安全的問(wèn)題,比如需要考慮如何去獲取secret key,會(huì)不會(huì)過(guò)期,過(guò)期后怎么辦? 文件傳輸是否支持多線程,性能如何;文件下載到本地的時(shí)候,如果程序在運(yùn)行,那么如何替換掉已經(jīng)load到內(nèi)存的數(shù)據(jù),還是說(shuō)先要關(guān)閉程序? 等等。

  這些問(wèn)題可以在設(shè)計(jì)的時(shí)候提出,而不是等binary出來(lái),然后去測(cè)試,然后再發(fā)現(xiàn)問(wèn)題。測(cè)試架構(gòu)師可以通過(guò)自己寫(xiě)一些Demo來(lái)了解上面這些技術(shù)是如何work的。

  當(dāng)架構(gòu)師去review開(kāi)發(fā)人員的code的時(shí)候,可以先大概了解整個(gè)軟件的架構(gòu),哪些模塊是負(fù)責(zé)處理什么的,不需要深入到API的細(xì)節(jié); 等了解到哪些是關(guān)鍵的路徑,比如如何獲取secret key,然后再深入去了解這段API。 之前有些文章提到API的參數(shù)處理,其實(shí)這里面不需要過(guò)多的關(guān)注,特別是Java和.Net的程序,因?yàn)檫@里面有的類型判斷,所以一個(gè)處理String參數(shù)的API不可能去接受一個(gè)Int型的參數(shù),編譯的時(shí)候無(wú)法通過(guò)。 碰到自己不熟悉的API,好的方法,一個(gè)是Google一下,另外是自己寫(xiě)個(gè)簡(jiǎn)單的程序用一下這個(gè)API豁然開(kāi)朗。

  另外一個(gè)是,多從開(kāi)發(fā)的角度其思考問(wèn)題,好有空自己去寫(xiě)一些實(shí)用的程序。 思考程序是如何設(shè)計(jì)的。比如思考一下以下的問(wèn)題(這些問(wèn)題摘選自http://coolshell.cn/articles/7048.html)


  1)網(wǎng)上短網(wǎng)址服務(wù),你有想過(guò)這個(gè)短網(wǎng)址生成的算法是什么,如何能做到能短?怎么查詢?你也許覺(jué)得會(huì)用key-value的NoSQL。那么,如果對(duì)于同一個(gè)URL,如果要重用已生成的短網(wǎng)址,你怎么用key-value的NoSQL來(lái)解決?

  英漢詞典的檢索和這個(gè)很相似,如果通過(guò)英文查漢語(yǔ),又通過(guò)漢語(yǔ)查英文?如果是N多種語(yǔ)言的互相翻譯呢?你的數(shù)據(jù)存儲(chǔ)和檢索如何做呢?

  2)當(dāng)我看到Dropbox這樣的云同步的軟件的時(shí)候,我不知道你是否會(huì)和我一樣會(huì)去思考,在多個(gè)設(shè)備間的文件同步是怎么做的?如果網(wǎng)盤(pán)上有幾萬(wàn), 甚至幾百萬(wàn)個(gè)文件,當(dāng)要和我的本地?cái)?shù)據(jù)同步時(shí),他如何比較經(jīng)濟(jì)地知道哪些文件更改了?需要向服務(wù)端同步或是向客戶端同步。更進(jìn)一步,你有沒(méi)有想過(guò)沒(méi)有中心 結(jié)點(diǎn)的文件同步問(wèn)題?你有沒(méi)有想過(guò),文件沖突的問(wèn)題?

  3)我們的新員工入職的時(shí)候,有一些公司會(huì)給新員工的帳號(hào)生成一個(gè)隨機(jī)口令,然后新員工可以在登錄后修改口令(我一直在想我們的銀行應(yīng)該為用戶生成 一個(gè)隨機(jī)口令,而不是設(shè)置一個(gè)6個(gè)0或是6個(gè)8的初始口令)。那么,對(duì)生成隨機(jī)安全口令的算法知道怎么做嗎?如果你寫(xiě)出這個(gè)算法來(lái)了,你怎么證明這個(gè)算法 是足夠隨機(jī),生成的密碼強(qiáng)度足夠大的?(你會(huì)發(fā)現(xiàn),測(cè)試口令是否隨機(jī)是否安全的程序,會(huì)比生成器更難寫(xiě))

  歡迎有不同意見(jiàn)的人發(fā)表評(píng)論,謝謝。