軟件測(cè)試人員的1和0的世界

字號(hào):

前些天看見(jiàn)有朋友的MSN簽名檔寫著“unit testing”,就問(wèn)了一下他們的單元測(cè)試是怎么做的??磥?lái)他們沒(méi)有真正做起來(lái),只是小范圍的試一試。
    一方面,他們沒(méi)有cruise control之類的工具,甚至連daily build都不見(jiàn)得有,單元測(cè)試也不上傳到版本控制里。這樣做測(cè)試的意義就不大了。
    另一方面,他好像把單元測(cè)試和接收測(cè)試(acceptance testing)、集成測(cè)試(integration testing)搞混淆了。因?yàn)樗f(shuō),業(yè)務(wù)邏輯很復(fù)雜,測(cè)試數(shù)據(jù)不好做……
    單元測(cè)試,顧名思義,就是對(duì)一個(gè)單元的測(cè)試(好像什么也沒(méi)說(shuō))。通常這個(gè)單元是指(類的成員)函數(shù),或者函數(shù)的一個(gè)功能。
    每個(gè)測(cè)試就只針對(duì)一點(diǎn),不涉及其余,還是比較好寫的。函數(shù)的輸入是什么,(對(duì)象當(dāng)時(shí)的狀態(tài)是什么),得到的輸出是什么;有幾種不同的情況……
    我感覺(jué),同一個(gè)函數(shù)的單元測(cè)試加在一起,就相當(dāng)于這個(gè)函數(shù)的詳細(xì)設(shè)計(jì)文檔。自然,設(shè)計(jì)文檔應(yīng)該在實(shí)現(xiàn)之前寫,而不是實(shí)現(xiàn)了以后再補(bǔ)。
    和傳統(tǒng)開(kāi)發(fā)方法里的詳細(xì)設(shè)計(jì)不同,寫一個(gè)單元測(cè)試,就寫一段代碼讓它通過(guò)。這樣你就不需要在實(shí)現(xiàn)的時(shí)候,再去讀文檔,再去回憶當(dāng)時(shí)是怎么想的,能提高效率;更重要的是,這個(gè)“文檔”是能反復(fù)運(yùn)行的,可以保證和實(shí)現(xiàn)的一致性。
    如果你的開(kāi)發(fā)環(huán)境配置的好,照我的經(jīng)驗(yàn),寫單元測(cè)試再寫代碼,和直接寫代碼相比,不會(huì)多花什么時(shí)間。
    編碼過(guò)程中有相當(dāng)一部分時(shí)間是花在想清楚下一步要做什么上,想到了就把它寫成一個(gè)測(cè)試。這么做是要花一點(diǎn)點(diǎn)時(shí)間,不過(guò)能幫你盡快驗(yàn)證下面的實(shí)現(xiàn)跟你現(xiàn)在想的一致;能幫你理清思路,到底有幾種情況需要考慮,就寫幾個(gè)測(cè)試;能讓函數(shù)的功能更明確,只有功能明確,才能明確的測(cè)試;能讓你的接口更合理,因?yàn)椴缓侠淼脑?,依賴關(guān)系太多或者接口太復(fù)雜,測(cè)試寫起來(lái)會(huì)很麻煩……
    最重要的是,以后你改了什么東西,破壞了現(xiàn)在的接口,可以馬上知道。不會(huì)在發(fā)版本的最后一天,才有人告訴你:“這個(gè)功能以前是好的,我們已經(jīng)好幾天沒(méi)有重新測(cè)試了?,F(xiàn)在壞了,不知道問(wèn)題在哪里。全體加班吧!”
    不花什么時(shí)間,還有不少好處。免費(fèi)午餐,為什么不試試呢?
    對(duì)于想不明白的事情總是喜歡刨根問(wèn)底
    世上的事,皆有因果。軟件也是一樣,出現(xiàn)一個(gè)bug,可以說(shuō)一定有原因,只能說(shuō)有時(shí)我們不知道原因,但是不能說(shuō),沒(méi)有原因。從這一點(diǎn)看,測(cè)試和醫(yī)生有很大的相似之處(都是根據(jù)一些表面的癥狀,查找內(nèi)部的原因,然后給出解決方案)。
    測(cè)試人員堅(jiān)信世上沒(méi)有無(wú)因之果,當(dāng)我們遇到bug的時(shí)候,總要考慮怎么找出bug的原因,如果找不到,寢食難安。在生活里,碰到想不明白的事情,也總是習(xí)慣性的刨根問(wèn)底,一定要獲得一個(gè)答案。最常見(jiàn)的一個(gè)場(chǎng)景,就是當(dāng)一樣?xùn)|西找不到了,我便發(fā)了瘋一般的找,完全投入進(jìn)去,不斷的回憶和推理,一定要把它找到,真的是到了廢寢忘食的程度,我的老媽老婆也是哭笑不得。
    對(duì)自己和身邊的事物要求盡善盡美
    測(cè)試工作也是一項(xiàng)追求完美的工作,當(dāng)我們宣布一個(gè)軟件“合格”的時(shí)候,可以說(shuō)幾乎考慮了所有的可能性,證明了它沒(méi)有問(wèn)題??杉词惯@樣,還是會(huì)有我們考慮不到的情況,會(huì)出現(xiàn)bug,于是,我們會(huì)繼續(xù)完善測(cè)試方案,讓軟件更完美。
    我們最喜歡看的東西,就是一張全部標(biāo)著“pass”的測(cè)試清單。如果里面有一個(gè)紅色的“fail”,就會(huì)覺(jué)得渾身不爽。漸漸地,我們變成了完美主義者,對(duì)身邊的人和物,都希望完美。
    但是這世上的事情和人,都不是盡善盡美的,所以完美主義者活的會(huì)很辛苦。比如我家里的電腦,為了保證電腦軟件系統(tǒng)“完美”的工作,我經(jīng)常的重裝xp系統(tǒng)。只要系統(tǒng)出了點(diǎn)問(wèn)題,其實(shí)遠(yuǎn)不到需要重裝的程度,但是我覺(jué)得不爽,干脆,重裝!我老婆都煩了:你怎么又在裝系統(tǒng)。這個(gè)毛病現(xiàn)在已經(jīng)好多了,我已經(jīng)堅(jiān)持半年沒(méi)重裝系統(tǒng)了。這是不是強(qiáng)迫癥啊?
    寫了這么多,大家是不是覺(jué)得我似乎已經(jīng)“病入膏肓”了。其實(shí)我寫的時(shí)候很開(kāi)心,一點(diǎn)沒(méi)有覺(jué)得壓力,反而很輕松。有時(shí)想想這些事情,著實(shí)有趣,隨它去吧。