軟件測(cè)試和軟件質(zhì)量的概念是分不開的。測(cè)試是手段,質(zhì)量是目的。關(guān)于軟件質(zhì)量,學(xué)軟件工程的時(shí)候曾考慮過這個(gè)問題,但想得不深。現(xiàn)在正好可以借把想法變成文字的過程理一理自己的思路,談?wù)勎业目捶ā?/p>
在學(xué)校讀書的時(shí)候,我有很多與我不同專業(yè)的朋友,建筑的,橋梁的,機(jī)械的,等等。他們有一個(gè)與我不同的共同之處,都常背一塊大木板,機(jī)械制圖是他們很重要的課程。我和我的同學(xué)們則學(xué)習(xí)程序設(shè)計(jì),學(xué)習(xí)計(jì)算機(jī)的結(jié)構(gòu)和原理。我們往往抱怨操作系統(tǒng)編譯原理太復(fù)雜,可是看看那老大一張紙上鉛筆細(xì)細(xì)勾出的房屋結(jié)構(gòu)機(jī)械零件,精確到0.1毫米的內(nèi)徑外徑,鋼筋水泥混凝土的組成結(jié)構(gòu)及抗這抗那的能力,我覺得簡(jiǎn)單考量一下的話,二者本并不具直接可比性的復(fù)雜程度至少是在一個(gè)量級(jí)上的。
我也知道一些各行業(yè)的工程師,包括我的姑姑是橋梁設(shè)計(jì)師,我的父親是機(jī)械模具設(shè)計(jì)師。從小我就對(duì)父親那一卷卷的圖紙印象很深。父親從無到有在一張張白紙上勾出一幅平面的在我看來亂七八糟什么也不是的東西,可是按照它對(duì)原料裁剪、加工就變成了一個(gè)實(shí)實(shí)在在的產(chǎn)品。當(dāng)時(shí)覺得神奇,現(xiàn)在想來,這是需要很扎實(shí)的知識(shí)的。在設(shè)計(jì)圖紙的整個(gè)過程中,并沒有什么工具和方法可以檢查一下是否有錯(cuò)誤或疏漏,而最終送到工人手里的圖紙必須是正確無誤的,否則原料就成了廢品。
作為一個(gè)工程師,確保所從事的工作是正確的,對(duì)于工程師們是很重要的。假如建筑師因?yàn)橥祽惺韬龆荒苁刮覀兊姆孔邮纸Y(jié)實(shí),將會(huì)發(fā)生什么情況?房子會(huì)倒塌而且我們要受到傷害。假設(shè)GM的工程師們對(duì)于汽車剎車不做最終的測(cè)試,當(dāng)我們需要?jiǎng)x車時(shí),它就可能不能正常工作,就可能出事故。所以當(dāng)工程師回答一個(gè)有關(guān)如何工作的問題時(shí),必須確信自己是正確的,必須確信沒有忘掉什么。
要做到這些,是需要大量工作的。
而軟件行業(yè)好象有著很大的不同。也是還在讀書的時(shí)候,我就曾問自己,同樣是工程師,為什么軟件行業(yè)的工程師不能像傳統(tǒng)行業(yè)的工程師一樣對(duì)自己的工作的品質(zhì)有著如此的確信?
在很多方面,程序設(shè)計(jì)師還是有著相當(dāng)?shù)谋憷?。譬如,在從開始編寫代碼直到完成最終的軟件成品的過程中,每當(dāng)完成一個(gè)功能、一個(gè)模塊、一個(gè)代碼段,或者干脆程序員對(duì)自己不自信的時(shí)候,都可以運(yùn)用各種工具編譯、跟蹤、調(diào)試程序去發(fā)現(xiàn)隱藏的錯(cuò)誤或疏漏。而即便是由于偷懶疏忽沒有發(fā)現(xiàn)錯(cuò)誤導(dǎo)致最終的產(chǎn)品中有很多的bug,似乎也不會(huì)發(fā)生什么,市場(chǎng)仍然接受,用戶仍然使用。
有兩個(gè)數(shù)據(jù)可以說明程序設(shè)計(jì)師的工作品質(zhì):
人們發(fā)現(xiàn),即使具有較多經(jīng)驗(yàn)的編程人員,其編程正確率的得分平均只有7.8/14。
在有經(jīng)驗(yàn)的編程人員寫的代碼中,平均每150行就會(huì)有一個(gè)bug。
是什么導(dǎo)致了這樣的情況?
是程序員心浮氣躁,責(zé)任心不強(qiáng)?是軟件行業(yè)的復(fù)雜程度遠(yuǎn)遠(yuǎn)超過傳統(tǒng)行業(yè)?是行業(yè)的特殊性造成市場(chǎng)和用戶對(duì)如此高的錯(cuò)誤率持接受態(tài)度?還是其他的什么原因?
給自己提了這么些問題,卻不知道該怎么回答了。
對(duì)于第一個(gè)問題,這確實(shí)是大量程序員的寫照。從這里產(chǎn)生的大量問題也確實(shí)嚴(yán)重影響了軟件產(chǎn)品的質(zhì)量。
對(duì)于第二個(gè)問題,我想起了一個(gè)經(jīng)典的對(duì)話:
程序設(shè)計(jì)行家說:“任何程序,無論多么小,都有錯(cuò)誤。”
新手不相信行家的話。“如果一個(gè)程序小到只能執(zhí)行一個(gè)單一的功能,也是這樣嗎?”他問道。
“這樣的程序不會(huì)有任何意義。”行家說。“假如這樣的程序存在,操作系統(tǒng)最終也會(huì)由于一個(gè)錯(cuò)誤而失效。”
新手并不滿意。“如果操作系統(tǒng)不失效呢?”他問道。
“沒有不失效的操作系統(tǒng)。”行家說。“假如這樣的操作系統(tǒng)存在,硬件最終也會(huì)由于錯(cuò)誤而失效。”
新手仍然感到不滿意。“如果硬件不失效呢?”他問道。
行家長(zhǎng)嘆一口氣。“不存在不失效的硬件。”他說。“假如存在這樣的硬件,用戶還會(huì)要程序做不同的事情。這也是一個(gè)錯(cuò)誤。”
沒有錯(cuò)誤的程序是荒唐可笑的,是不可能存在的。假如存在沒有任何錯(cuò)誤的程序,那么世界也會(huì)不復(fù)存在。
這個(gè)故事給不負(fù)責(zé)任的程序員以借口。但事實(shí)是否真的如此嚴(yán)重?對(duì)于硬件來說,高密集度的電子元件集成使人們很容易理解它是不穩(wěn)定的這樣一個(gè)結(jié)論,但從現(xiàn)實(shí)情況來看,硬件的穩(wěn)定性要遠(yuǎn)高于軟件的穩(wěn)定性。
或許,軟件規(guī)模的不斷膨脹使其復(fù)雜度指數(shù)增長(zhǎng),個(gè)人能力已無法完成,團(tuán)隊(duì)成為必須。團(tuán)隊(duì)磨合也成了產(chǎn)生錯(cuò)誤的隱患。但在傳統(tǒng)行業(yè)里,這種情況也是屢見不鮮的。揚(yáng)浦大橋,東方明珠,金貿(mào)大廈也不是一個(gè)人完成設(shè)計(jì)的。是缺乏經(jīng)驗(yàn)沒有磨合團(tuán)隊(duì)的良好方法?
軟件設(shè)計(jì)究竟有多復(fù)雜?是不是已經(jīng)復(fù)雜到了不可能避免錯(cuò)誤的程度?我想這不是一個(gè)很容易可以回答的問題。
對(duì)于第三個(gè)問題,我認(rèn)為也是一個(gè)主要的因素。雖然每個(gè)公司每個(gè)程序員都知道,減少錯(cuò)誤可以博得用戶的青睞,戰(zhàn)勝競(jìng)爭(zhēng)對(duì)手。但普遍來說,市場(chǎng)的認(rèn)同縱容了公司和程序員不負(fù)責(zé)的心態(tài),畢竟,減少錯(cuò)誤是要付出代價(jià)的。
在很多公司和程序員看來,bug和測(cè)試似乎是緊密關(guān)聯(lián)而分不開的。程序員只顧編寫代碼,認(rèn)為有沒有bug有多少bug測(cè)測(cè)就知道了。
把軟件質(zhì)量依賴于測(cè)試,是不可能真正解決軟件質(zhì)量問題的。
測(cè)試不是解決錯(cuò)誤的根本舉措,只是一種輔助手段。但又是必須的手段,我想現(xiàn)在已經(jīng)不會(huì)有人再問出“如果程序員更仔細(xì)一點(diǎn),測(cè)試會(huì)是不需要的嗎?”這樣的問題了吧。
軟件測(cè)試的首要任務(wù)是發(fā)現(xiàn)錯(cuò)誤。發(fā)現(xiàn)錯(cuò)誤也許要花很大的代價(jià)。因?yàn)闇y(cè)試是復(fù)雜的,不存在好的辦法使每次測(cè)試都是有效的。有這么一句話:
如果做某件事有兩種或多種方法,其中有一種方法會(huì)導(dǎo)致一個(gè)災(zāi)難結(jié)局,那么也會(huì)有另一種方法導(dǎo)致同樣的結(jié)局。
測(cè)試的復(fù)雜性和軟件的復(fù)雜性是一致的。也就是說由于軟件的復(fù)雜導(dǎo)致了測(cè)試的復(fù)雜。
測(cè)試提出了基本的和令人困惑的難題。假使我們?cè)跍y(cè)試時(shí)從來不希望檢測(cè)被測(cè)系統(tǒng)所有可能的輸入、路徑和狀態(tài),那么應(yīng)該選擇什么?什么時(shí)候應(yīng)該停止?如果我們必須依賴于測(cè)試來防止某種失敗,那么我們?cè)趺磥碓O(shè)計(jì)既是可測(cè)試的又是有效的系統(tǒng)呢?我們?cè)鯓觼砭帉懸粋€(gè)測(cè)試包,它可以檢測(cè)足夠多的消息和狀態(tài)的組合來說明沒有失敗的操作,但是從實(shí)用性來說它又足夠的小?
第二個(gè)目的是對(duì)于給定的測(cè)試包,說明被測(cè)系統(tǒng)是符合規(guī)約所描述的需求。
所以,我覺得測(cè)試活動(dòng)與軟件過程協(xié)調(diào)一致得好與壞,都對(duì)測(cè)試的有效性有很重要的影響。
如果測(cè)試的開發(fā)是在一個(gè)項(xiàng)目開始時(shí)進(jìn)行的,那么測(cè)試將是非常有效的。及早考慮可測(cè)試性,及早進(jìn)行測(cè)試設(shè)計(jì),和盡可能早地實(shí)現(xiàn)測(cè)試,提高了有力預(yù)防錯(cuò)誤的方法。這些過程迫使設(shè)計(jì)人員更仔細(xì)地考慮需求和規(guī)約的實(shí)現(xiàn),其結(jié)果可能改進(jìn)應(yīng)用設(shè)計(jì)。關(guān)于體系結(jié)構(gòu)、詳細(xì)設(shè)計(jì)和編碼實(shí)踐的及早決策,都能使測(cè)試變得更容易更經(jīng)濟(jì)。
寫到這里,我想應(yīng)該停下來了,雖然我還有一些問題和想法,但無法固定它們,我覺得已經(jīng)有些糊涂了。最后,從腦海里跳出了一個(gè)問題:
測(cè)試與對(duì)質(zhì)量的承諾是一致的嗎?
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,信管網(wǎng)網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)以權(quán)威部門公布的內(nèi)容為準(zhǔn)!
信管網(wǎng)致力于為廣大信管從業(yè)人員、愛好者、大學(xué)生提供專業(yè)、高質(zhì)量的課程和服務(wù),解決其考試證書、技能提升和就業(yè)的需求。
信管網(wǎng)軟考課程由信管網(wǎng)依托10年專業(yè)軟考教研傾力打造,官方教材參編作者和資深講師坐鎮(zhèn),通過深研歷年考試出題規(guī)律與考試大綱,深挖核心知識(shí)與高頻考點(diǎn),為學(xué)員考試保駕護(hù)航。面授、直播&錄播,多種班型靈活學(xué)習(xí),滿足不同學(xué)員考證需求,降低課程學(xué)習(xí)難度,使學(xué)習(xí)效果事半功倍。
發(fā)表評(píng)論 查看完整評(píng)論 | |