測(cè)試一般是放在系統(tǒng)完成后進(jìn)行測(cè)試,但今天,卻常常聽(tīng)到資深開(kāi)發(fā)人員勸導(dǎo)新人們:“測(cè)試是開(kāi)發(fā)的第一步”這句話如何理解呢?如果從日本人發(fā)明的巴克質(zhì)量管理的方式去理解,大概是指每一個(gè)環(huán)節(jié)交給下一級(jí)時(shí)都應(yīng)該進(jìn)行測(cè)試。有些測(cè)試對(duì)后面的操作沒(méi)有太大的影響,如圖片不漂亮,菜單不合理,布局很難看之類(lèi);而另一些,卻直接讓下一級(jí)無(wú)法開(kāi)始工作,象用例不清晰;用例自相矛盾;組件內(nèi)部錯(cuò)誤;框架不合理等等。
固然,一級(jí)級(jí)把關(guān),可以把質(zhì)量提高到至少一個(gè)檔次以上;但就每一個(gè)環(huán)節(jié)而言,仍然是在開(kāi)發(fā)的最后階段。所以,看來(lái)本人的水平還是不到家,"測(cè)試是開(kāi)發(fā)的第一步"難以理解,唯一可理解的就是規(guī)范先行,文檔先行,文檔規(guī)范化總應(yīng)該是在編碼以前,這也是QA的主要內(nèi)容;大概這還多少算解釋得通。這樣,測(cè)試和規(guī)范兩樣?xùn)|西就重合起來(lái)了,從嚴(yán)格角度看,測(cè)試就是測(cè)試,規(guī)范歸入規(guī)范,還是從模塊(項(xiàng)目)后的測(cè)試開(kāi)始理解吧;所以所有關(guān)于編程和文檔、設(shè)計(jì)規(guī)范的內(nèi)容本人全部不納入測(cè)試討論范圍。或者說(shuō),我們重點(diǎn)放在QC上,而不是著眼于規(guī)范的QA,盡管那也非常重要。
單元測(cè)試(Unit test):是針對(duì)模塊組件或方法的測(cè)試。在本人的操作中,一般是開(kāi)發(fā)員工作范圍內(nèi)的測(cè)試;在具備組件接口規(guī)范的情況下,一般需要做一個(gè)測(cè)試工具模擬調(diào)用環(huán)境,編寫(xiě)測(cè)試實(shí)例,通過(guò)斷點(diǎn)情況監(jiān)視模塊實(shí)際工作是否正常。一股采用這種方式開(kāi)發(fā)的單一功能模塊質(zhì)量都是非常高的。但是如果沒(méi)有統(tǒng)一的模塊規(guī)范,那么開(kāi)發(fā)與測(cè)試的工作量接近一比一;但如果模塊是按統(tǒng)一的標(biāo)準(zhǔn)開(kāi)發(fā)的,那么同一套測(cè)試套件就可以用到各個(gè)模件上,從而節(jié)省了測(cè)試時(shí)間。本人認(rèn)為這屬于開(kāi)發(fā)部門(mén)工作范圍內(nèi)的測(cè)試,與QA/QC部門(mén)沒(méi)有什么大的關(guān)系,事實(shí)上,在這一層次的用例也不是QC可以做到和理解的。
白箱測(cè)試:在理解內(nèi)部流程的情況下針對(duì)邏輯流程設(shè)計(jì)測(cè)試實(shí)例,目的是找出極限邊緣以及內(nèi)在的邏輯錯(cuò)誤。單元測(cè)試中白箱測(cè)試的比例很高,(原因不難理解,還有誰(shuí)比作者自已更理解模塊的構(gòu)造流程的?)。
黑箱測(cè)試:這是QC部門(mén)的主要工作。黑箱測(cè)試主要在于編寫(xiě)測(cè)試實(shí)例。不過(guò)在實(shí)際操作中,都是把最不懂技術(shù)的成員分配做測(cè)試,最高技術(shù)水平就是會(huì)用VSS,所以也就別指望編什么測(cè)試實(shí)例。所謂的黑箱測(cè)試,常常是對(duì)著菜單按鈕,這個(gè)按下去,噢,有東西出來(lái)了,對(duì)的,打個(gè)勾——其實(shí),這時(shí)侯的實(shí)例就是一個(gè)個(gè)按下去然后看看有沒(méi)有輸出,而且只限于界面方面,內(nèi)在的部分和邊緣情況大概是不用指望的。但據(jù)作者所知,在CMM達(dá)到四以上的國(guó)外軟件公司中,黑箱測(cè)試是對(duì)軟件評(píng)價(jià)的最主要方式,通過(guò)合適的測(cè)試實(shí)例,除了最常見(jiàn)的可用性測(cè)試外,還包括壓力測(cè)試,和怪用測(cè)試(Monkey test)。
壓力測(cè)試:評(píng)價(jià)一個(gè)系統(tǒng)極限可以承受的壓力是多少,同時(shí)在超負(fù)荷后的的響應(yīng)情況;同時(shí),在極限狀況下,一些平時(shí)不太出現(xiàn)的bug也會(huì)浮現(xiàn)出來(lái)。所以,這個(gè)測(cè)試作者認(rèn)為不應(yīng)該單獨(dú)由QC部門(mén)進(jìn)行,而應(yīng)該由開(kāi)發(fā)部門(mén)與QC部門(mén)聯(lián)合進(jìn)行。理想的系統(tǒng)在極限測(cè)試狀況下就算響應(yīng)不及,也不至于當(dāng)機(jī),并在負(fù)荷恢復(fù)正常后一段時(shí)間內(nèi)可以恢復(fù)正常運(yùn)轉(zhuǎn)。這時(shí)當(dāng)初對(duì)windows惡評(píng)的原因之一:象網(wǎng)站一旦超出100-200個(gè)concurrent,windows不但罷工還死掉了;不得不重啟系統(tǒng)(當(dāng)然,windows任意硬重啟都能死魚(yú)翻生,大多數(shù)情況下吧,也屬一種難能可貴的優(yōu)點(diǎn));而linux在超出負(fù)荷后一般情況下下降曲線不至于太明顯——不過(guò)這也不是絕對(duì)的,作者就發(fā)現(xiàn)一旦linux在極限狀態(tài)下進(jìn)入內(nèi)存抖動(dòng)時(shí),死相和windows差不了多少;所以內(nèi)存不至于耗干是 linux可靠性能超過(guò)windows的重要因素。
回歸測(cè)試:在修改其中一個(gè)模塊后看其他模塊有什么問(wèn)題。作者認(rèn)為這個(gè)測(cè)試是過(guò)程化程序的觀念產(chǎn)物,在模塊化軟件中相互耦合程度低,而且服從統(tǒng)一的調(diào)動(dòng)協(xié)議,是不是修改真是自家里的事情,和他人(模塊)沒(méi)有半點(diǎn)相干。
整體測(cè)試:把不同的模塊連結(jié)后,看看聯(lián)合工作情況如何。這實(shí)際上是對(duì)接口協(xié)議的測(cè)試。作者認(rèn)為是可以作為接口互動(dòng)部分的設(shè)計(jì)一部分工作,沒(méi)有必要擺出來(lái)作為流程之一。同理還有系統(tǒng)測(cè)試,反正最后整個(gè)系統(tǒng)運(yùn)行起來(lái)是什么情況。看似大,但如果前面已經(jīng)做到好好的,這里如果出問(wèn)題那才叫怪呢!
Alpha測(cè)試:放任內(nèi)部成員胡作非為的測(cè)試;
Beta測(cè)試:讓全世界的壞人都胡作非為的測(cè)試。
過(guò)了這一關(guān)后,大概應(yīng)該可以了吧??在歐洲美國(guó)日本的規(guī)范的軟件公司大概是可以了。但在中國(guó)可不見(jiàn)得,許多時(shí)侯業(yè)務(wù)需求人員會(huì)蹦出來(lái)說(shuō):“不是這個(gè)樣子的!”早的時(shí)侯他不知上那里去了!或者“加上另一個(gè)什么功能吧?”,早的時(shí)侯他大概是睡覺(jué)了。大家伙兒前面做的事情,就沖這兩句話就全廢了,全部事情得從中間某個(gè)環(huán)節(jié)重來(lái),這才叫惡夢(mèng)。這時(shí),與其順著他們老哥胡說(shuō)八道跑,不如找出合同來(lái)一條條地仔細(xì)頒下去。