做社會(huì)化的測(cè)試工程師:把軟件測(cè)試搬出實(shí)驗(yàn)室
在四月間,六月間分別在天津和北京參加了軟件測(cè)試主題沙龍,在會(huì)上都討論了同一個(gè)問題: 什么是軟件測(cè)試人員的核心能力?
在天津的沙龍上,與會(huì)的測(cè)試經(jīng)理和高級(jí)測(cè)試人員總結(jié)了十條,但是其中沒有“寫代碼”。
在北京的沙龍上,不僅測(cè)試人員同意這個(gè)觀點(diǎn),一些資深開發(fā)人員也指出,出色的開發(fā)人員,他的核心技能不是寫代碼,而是對(duì)需求的把握,對(duì)設(shè)計(jì)的睿智,對(duì)品質(zhì)的追逐。
反過來(lái)看我們的測(cè)試人員,尤其是那些剛剛參加測(cè)試工作兩三年,正在經(jīng)歷“迷茫期”的工程師,他們總在問同樣的問題:是該學(xué)習(xí)Java編程嗎?學(xué)習(xí) Loadrunner 可以讓我加薪嗎?既然Google 需要使用 Python,我是該系統(tǒng)的學(xué)習(xí) Python 和 Selenium 嗎?對(duì)這種問題我的回答都是:不!不!不!
測(cè)試人員(大部分是手工測(cè)試人員)問這個(gè)問題,是出于一種擔(dān)憂:怕失去工作: 既然自動(dòng)化測(cè)試的代碼會(huì)代替手工操作軟件,既然敏捷模式下的開發(fā)測(cè)試混合模式已經(jīng)(號(hào)稱)不再有獨(dú)立的測(cè)試人員,那么出路何在?
首先,我們拋開愚蠢的工作安全性擔(dān)憂——我家門口菜市場(chǎng)賣燒餅的老板不會(huì)英語(yǔ),電腦使用僅限于播放dvd,但掙得比我多——我們回到測(cè)試的本質(zhì)聊一聊。
獨(dú)立軟件測(cè)試出現(xiàn)的原因是為了應(yīng)對(duì)軟件質(zhì)量風(fēng)險(xiǎn),那么從這個(gè)角度我們來(lái)分析一下:
1. 由開發(fā)人員執(zhí)行的測(cè)試從1940s年代,電腦又傻又大的歲月其起就有了,而***個(gè)獨(dú)立的測(cè)試人員是微軟公司在1976年招聘的,那么,只要微軟公司的智商還正常,他們的軟件質(zhì)量就一定遇到了靠開發(fā)人員測(cè)試無(wú)法保證的狀況——這種狀況實(shí)在太多,我就不意義列舉了——那么,在1940年到1976年將近四十年,開發(fā)人員測(cè)試沒有解決的質(zhì)量風(fēng)險(xiǎn),在今天就忽然可以解決了?
2. 開發(fā)人員是人類歷史上最懶惰的一批人,自他們開始測(cè)試起,他們就發(fā)明了各種各樣的工具來(lái)代替他們測(cè)試——也就是自動(dòng)化測(cè)試,結(jié)果呢,到了1980年代,微軟還是開始大批量招聘獨(dú)立測(cè)試人員,到現(xiàn)在僅微軟就有幾萬(wàn)的測(cè)試人員——那么,在1940年到1976年將近四十年,自動(dòng)化測(cè)試沒有解決的質(zhì)量問題,在今天就忽然可以解決了?
何況今天軟件的使用場(chǎng)景、用戶類型、業(yè)務(wù)都極大的復(fù)雜化了。
解決了是否會(huì)失業(yè)這個(gè)問題,談?wù)剛€(gè)人的觀點(diǎn):手工測(cè)試人員不會(huì)失業(yè),其中一個(gè)原因就是:我們的測(cè)試將會(huì)社會(huì)化、復(fù)雜化。
關(guān)于軟件測(cè)試的社會(huì)性,我舉兩個(gè)例子。
例子1:幾年前坐公交時(shí),和旁邊的兩位美女搭訕,聊起工作。她們開始吐槽自己的職業(yè)。她們是銀行信息中心的表單錄入員。每天的工作就是把紙質(zhì)表單中的數(shù)據(jù)錄入到軟件中去。她們說(shuō):“我們每天早上***的期待,就是運(yùn)氣,期待挑到一臺(tái)好電腦”(她們沒有固定的電腦設(shè)備)。而好電腦的定義是:用 Windows XP的是好電腦;用Windows 2000的是爛電腦。因?yàn)椋韱武浫胲浖哪承┌粹o,在xp下只需要做單次點(diǎn)擊,在2000下就要雙擊。當(dāng)錄入一個(gè)表單時(shí)這很好,但是她們一天要處理將近 3000個(gè)表單,這就意味著用“好”電腦的人可以早下班,而用“爛”電腦的那個(gè)就要加班。這個(gè)問題(注意,嚴(yán)格意義上說(shuō),都不能算bug,因?yàn)?ldquo;客戶沒有明確這個(gè)需求”)對(duì)程序員來(lái)說(shuō),對(duì)測(cè)試人員來(lái)說(shuō),真的不算重要,我們只會(huì)點(diǎn)幾次,看到完成了功能,就聲明通過了,但是看看我們給客戶帶來(lái)的痛苦。
例子2:一個(gè)大學(xué)生告訴我,大夫給母親開藥的電子處方系統(tǒng)沒有做限制,某個(gè)只能吃三天的藥開了五天的量,幸虧在藥房被發(fā)現(xiàn),及時(shí)更改過來(lái),否則就可能造成人命關(guān)天的醫(yī)療事故。
例子3:我的女兒只有三歲,但是她可以用ipad找到切水果,我觀察過她的操作:首先她不會(huì)看字,全部靠圖形識(shí)別,另外,她能記住劃幾下屏幕可以找到那個(gè)圖標(biāo),如果找不到那個(gè)圖標(biāo),她就會(huì)按下home鍵回到初始屏幕,然后再次執(zhí)行同樣的操作。但是一旦到了使用鼠標(biāo)和樹形菜單的windows系統(tǒng)下,我經(jīng)常會(huì)聽到她找不到應(yīng)用而生氣的大聲哭。
有人(尤其是開發(fā)人員)會(huì)說(shuō),這三個(gè)例子中的問題,甚至都不是缺陷:
首先,客戶沒有提出明確的需求;
其次,只要使用“正確”,軟件的功能都可以“正常的”完成;
再次,其他公司的大部分軟件都是這么做的,而且似乎賣得也不錯(cuò)。
然而,用戶只要有選擇權(quán),她們就會(huì)用腳投票,放棄那些“爛”軟件。
***,由社會(huì)因素導(dǎo)致的“真正的”缺陷,我也能舉出半打,比如說(shuō)時(shí)間:
我曾經(jīng)有篇博客中講過時(shí)間因素導(dǎo)致的缺陷。時(shí)間是一個(gè)典型的社會(huì)因素:對(duì)程序員來(lái)說(shuō),時(shí)間不過是簡(jiǎn)單2012073112000001(2012年7月31日12點(diǎn)零1 秒)十六位字符,但是在實(shí)際的社會(huì)中,時(shí)間就會(huì)涉及到時(shí)區(qū)、原子時(shí)、世界時(shí)、閏年、閏月、閏秒,如果讀者有心,可以去檢索一下,前面列出的任何一個(gè)時(shí)間因素都造成過嚴(yán)重的軟件缺陷。
所以,個(gè)人主張,軟件——尤其是那些以消費(fèi)用戶為目標(biāo)群體的軟件——測(cè)試必須搬出我們舒適的帶有中央空調(diào)的辦公室,走入到社會(huì)中去。
一旦我們把軟件測(cè)試“搬出實(shí)驗(yàn)室”,就會(huì)發(fā)現(xiàn):那些在實(shí)驗(yàn)室看起來(lái)正常的東西對(duì)于客戶來(lái)說(shuō)就“不正常”——具體例子看前文。
一旦我們把軟件測(cè)試“搬出實(shí)驗(yàn)室”,就會(huì)發(fā)現(xiàn):影響軟件質(zhì)量的因素開始迅速?gòu)?fù)雜化。
比如最近我堅(jiān)持使用 TDCDMA 網(wǎng)絡(luò)的手機(jī),因?yàn)槲抑涝S多商人需要依靠中國(guó)移動(dòng)網(wǎng)絡(luò)接打電話。但是,大部分移動(dòng)app對(duì)TDCDMA網(wǎng)絡(luò)的兼容性都有問題,在 WCDMA 網(wǎng)絡(luò)下就很好:這是因?yàn)?TD 網(wǎng)絡(luò)是獨(dú)生于中國(guó)的網(wǎng)絡(luò),國(guó)外沒有。
比如我的家在近郊,我很想知道有多少移動(dòng)互聯(lián)網(wǎng)公司會(huì)測(cè)試在弱信號(hào)情況下的軟件穩(wěn)定性?
比如一旦考慮到需要適配十種分辨率,幾十種品牌的三百種安卓平臺(tái),安卓app的測(cè)試復(fù)雜程度就會(huì)迅速膨脹。
比如考慮到軟件的用戶群體的多樣性,任何一個(gè)在實(shí)驗(yàn)室里正確的功能最終對(duì)用戶來(lái)說(shuō)可能都是災(zāi)難:由于我老婆使用瀏覽器的習(xí)慣,IE8在她手下崩潰的頻率要高很多。
比如考慮到業(yè)務(wù)的復(fù)雜性,胡亂的使用輸入框而不對(duì)輸入數(shù)據(jù)進(jìn)行控制,***都可能導(dǎo)致災(zāi)難性的后果,而一家企業(yè),一個(gè)醫(yī)院的業(yè)務(wù)復(fù)雜程度,豈是幾篇博客可以說(shuō)清的?
一旦我們把軟件測(cè)試“搬出實(shí)驗(yàn)室”,我們就會(huì)發(fā)現(xiàn),現(xiàn)有的測(cè)試是大大不足的,而且這種測(cè)試是單純靠工具,代碼很難測(cè)試全面的。
向計(jì)算機(jī)解釋人類是由于何種腦殘的原因,通過夜觀天象開始計(jì)時(shí),結(jié)果每每發(fā)現(xiàn)這種記時(shí)誤差很大于是找出各種閏年,閏月,閏秒來(lái)彌補(bǔ)?快省省吧,Linux內(nèi)核號(hào)稱是由這個(gè)星球上最會(huì)寫代碼的人搞出來(lái)的,由于2012年某一天憑空多出一個(gè)閏秒,多少Linux核心進(jìn)程死鎖服務(wù)器掛掉這種事情,他們會(huì)隨便告訴別人嗎?
向計(jì)算機(jī)解釋為什么我的老奶奶在七十歲以后手開始抖動(dòng)以至于在于無(wú)法完成哪怕一次鼠標(biāo)的雙擊操作?快省省吧,雙擊操作絕對(duì)是反社會(huì)軟件設(shè)計(jì)的典型:如果你跟朋友打招呼時(shí)拍一下腦袋,他會(huì)認(rèn)為是親昵的表示,想象一下這時(shí)你來(lái)了個(gè)“雙擊”,嗯,很可能你們要開打。
一旦我們把軟件測(cè)試“搬出實(shí)驗(yàn)室”,我們就會(huì)發(fā)現(xiàn),手工測(cè)試人員是寶貴的:
他們似乎是團(tuán)隊(duì)中那個(gè)真正像個(gè)“人”那樣思考的人……
說(shuō)到這,大家應(yīng)該清楚我的觀點(diǎn)了,對(duì)于手工測(cè)試工程師來(lái)說(shuō):別光盯著學(xué)代碼,學(xué)工具,琢磨琢磨這個(gè)“社會(huì)”。
PS: 單身程序員們,如果下次你用“這是特性不是缺陷”來(lái)搪塞測(cè)試人員報(bào)的“應(yīng)該雙擊而不是單擊”缺陷時(shí),請(qǐng)花幾秒考慮一下這個(gè)場(chǎng)景——恰恰就是你們這種木有社會(huì)責(zé)任感的行為,導(dǎo)致漂亮的銀行妹子每天加班,沒時(shí)間跟你約會(huì),所以你才單身的…好吧…這個(gè) bug 你改不改?