喬勇誠(chéng)
(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)
你聽(tīng)過(guò)那個(gè)古老的 IT專業(yè)的創(chuàng)世紀(jì)笑話嗎?“為什么上帝只花了 7天就創(chuàng)造了宇宙?”答案是:“因?yàn)樗郧皼](méi)有安裝過(guò)。他沒(méi)有什么可以搞砸的東西,不會(huì)激怒現(xiàn)有的用戶,無(wú)需顧慮先前的功能和蹩腳的設(shè)計(jì)。上帝走運(yùn),可是我們就沒(méi)那么走運(yùn)了?!?/p>
從這則笑話中可以看出,隨著世界的進(jìn)步,生活水平的提高,人們的需求越來(lái)越多樣化,科技產(chǎn)品越來(lái)越先進(jìn)化、大型化和復(fù)雜化。這些都極大的促進(jìn)了軟件信息化產(chǎn)業(yè)的蓬勃發(fā)展,當(dāng)前人們已經(jīng)越來(lái)越離不開(kāi)軟件系統(tǒng),而由于軟件的易頻繁發(fā)生故障的特性,軟件測(cè)試行業(yè)也迎來(lái)了高速發(fā)展的階段。
我國(guó)對(duì)軟件測(cè)試的研究相對(duì)于國(guó)外來(lái)說(shuō),起步較晚,發(fā)展較慢,直到21世紀(jì)初期,我國(guó)才逐步開(kāi)始重視軟件測(cè)試行業(yè)。2003年國(guó)家人事部和信息產(chǎn)業(yè)部開(kāi)始頒發(fā)“軟件評(píng)測(cè)師”職業(yè)資質(zhì)認(rèn)證證書(shū)。各個(gè)大型企業(yè)也相繼組建自己的測(cè)試部門或團(tuán)隊(duì),而對(duì)于大型軟件系統(tǒng)外包項(xiàng)目,很多企業(yè)還引入了第三方的評(píng)測(cè)機(jī)構(gòu),這些都刺激了國(guó)內(nèi)軟件測(cè)試行業(yè)的迅速發(fā)展。但是,相對(duì)于國(guó)外的軟件測(cè)試水平還存在不小的差距。很多的人,甚至軟件測(cè)試人員本身對(duì)軟件測(cè)試領(lǐng)域的認(rèn)知,還存在許多誤區(qū),我這里例舉6個(gè)常見(jiàn)誤區(qū),與大家一起探討和剖析。
(1)“誤區(qū)1”:軟件質(zhì)量是通過(guò)測(cè)試來(lái)保證的
許多企業(yè)或個(gè)人都認(rèn)為有了專職的測(cè)試人員或測(cè)試團(tuán)隊(duì),軟件的質(zhì)量就可以得到保障,甚至把軟件測(cè)試人員就當(dāng)成軟件質(zhì)量保證人員。其實(shí)軟件質(zhì)量保證的含義是通過(guò)建立一套有計(jì)劃、有系統(tǒng)的方法,來(lái)保證擬定出的標(biāo)準(zhǔn)、步驟、實(shí)踐和方法能夠正確地被所有項(xiàng)目所采用[2-3]。而軟件質(zhì)量的提高是通過(guò)整個(gè)產(chǎn)品的質(zhì)量和整個(gè)團(tuán)隊(duì)的努力,以及產(chǎn)品的開(kāi)發(fā)過(guò)程決定的。
軟件測(cè)試只是軟件生產(chǎn)過(guò)程中,為提高軟件質(zhì)量而進(jìn)行的一種檢查措施或者叫監(jiān)督措施。這就像食品有質(zhì)量監(jiān)督部門,但是毒奶粉、爆炸瓜等問(wèn)題依然不斷;又比如房屋建設(shè)有監(jiān)管機(jī)構(gòu),但是豆腐渣工程仍然層出不窮,顯然監(jiān)管機(jī)構(gòu)不能絕對(duì)保證質(zhì)量。所以說(shuō),測(cè)試人員或團(tuán)隊(duì)是不能絕對(duì)保證高質(zhì)量的軟件產(chǎn)品。
如何才能生產(chǎn)出高質(zhì)量的軟件呢?個(gè)人認(rèn)為:無(wú)論是什么樣的活動(dòng)或過(guò)程,都是離不開(kāi)人的行為,在軟件開(kāi)發(fā)中,主體就是軟件設(shè)計(jì)人員、開(kāi)發(fā)人員、質(zhì)量保證人員和測(cè)試人員。用一種科學(xué)的、高效的,同時(shí)又是符合自身當(dāng)前實(shí)際情況的軟件生產(chǎn)過(guò)程或方法,將各個(gè)角色人員有機(jī)的結(jié)合起來(lái),使之能夠緊密合作、相輔相成,才有可能生產(chǎn)出高質(zhì)量的產(chǎn)品。這種方法目前已經(jīng)有很多了,而現(xiàn)在最需要作的就是在這些科學(xué)方法的基礎(chǔ)上,去尋找最適合自己的方法,這也是軟件質(zhì)量人員需要永恒探討的課題。
(2)“誤區(qū)2”:軟件測(cè)試的真正價(jià)值
目前在許多企業(yè)中,評(píng)估軟件測(cè)試活動(dòng)時(shí),通常采用軟件缺陷數(shù)量、軟件缺陷的嚴(yán)重性、測(cè)試用例的多少、自動(dòng)化測(cè)試的代碼量、手動(dòng)測(cè)試的代碼量、回歸測(cè)試套件的數(shù)目以及所有具體的指標(biāo)來(lái)進(jìn)行衡量。而這些指標(biāo)并不能夠真正體現(xiàn)軟件測(cè)試的價(jià)值,軟件測(cè)試的工作績(jī)效應(yīng)該體現(xiàn)在提高了多少開(kāi)發(fā)人員的工作績(jī)效上。所以說(shuō)軟件測(cè)試并不能保證軟件會(huì)更好,但是可以保證開(kāi)發(fā)人員會(huì)更好的進(jìn)行編程。
軟件開(kāi)發(fā)人員制造軟件,而軟件測(cè)試如果僅僅是幫助他找出缺陷并去掉它,那么軟件測(cè)試并沒(méi)有創(chuàng)造出自己的真正價(jià)值。如果軟件測(cè)試人員努力認(rèn)真的對(duì)待自己的工作,讓軟件測(cè)試產(chǎn)生持續(xù)有效的正面影響,那么就應(yīng)該幫助開(kāi)發(fā)人員理解程序中出現(xiàn)的問(wèn)題和原因,讓他們?cè)趯?lái)的工作中少犯錯(cuò)誤。
英國(guó)計(jì)算機(jī)科學(xué)家托尼·霍爾(Tony Hoare)有句名言很好的概括了軟件測(cè)試的價(jià)值:
“軟件測(cè)試的真正價(jià)值并不體現(xiàn)在代碼中找出了多少缺陷,而是發(fā)現(xiàn)設(shè)計(jì)和編程人員解決問(wèn)題方法上的局限、思路中的狹隘和技能方面的不足[1]。”
要做到這一點(diǎn),有2個(gè)方面最重要,①是軟件測(cè)試人員的素質(zhì),如果測(cè)試人員還沒(méi)有達(dá)到能夠?yàn)檐浖_(kāi)發(fā)過(guò)程或軟件設(shè)計(jì)過(guò)程等方面提出建議的水平,那么就需要加強(qiáng)學(xué)習(xí)和接受更深入的培訓(xùn),這就需要加大投入力度。②是軟件測(cè)試人員的地位,軟件測(cè)試人員如果只是作為項(xiàng)目開(kāi)發(fā)團(tuán)隊(duì)中的一員,缺乏話語(yǔ)權(quán),那么當(dāng)測(cè)試人員對(duì)軟件設(shè)計(jì)或編程上的不足提出建議時(shí),就不一定能夠被有效采納,甚至在測(cè)試人員發(fā)現(xiàn)了重大問(wèn)題時(shí),無(wú)力阻止錯(cuò)誤的繼續(xù)發(fā)生。適當(dāng)提高軟件測(cè)試人員的地位,對(duì)于體現(xiàn)軟件測(cè)試正真價(jià)值,可以起到較好的推動(dòng)作用。
(3)“誤區(qū)3”:汝不應(yīng)崇拜無(wú)法重現(xiàn)的失效
這是由著名的軟件測(cè)試大師詹姆斯·惠特克(James Whittaker)提出的軟件測(cè)試9大誡律中的第4條。意思是不要深陷于只見(jiàn)過(guò)一次的缺陷中。
在日常的軟件測(cè)試中經(jīng)常會(huì)出現(xiàn)這樣的情況:遇到了一個(gè)缺陷,往往還是很嚴(yán)重的缺陷,但是無(wú)法重現(xiàn),缺陷越嚴(yán)重,測(cè)試人員感覺(jué)越不好。而測(cè)試人員最常用的做法就是浪費(fèi)數(shù)個(gè)小時(shí)或者數(shù)天的時(shí)間,甚至于更長(zhǎng)的一段時(shí)間試圖去重現(xiàn)這個(gè)只見(jiàn)過(guò)一次的缺陷[1]。也許由于沒(méi)有適合的工具或者其它原因,為了重現(xiàn)這個(gè)缺陷的努力付諸流水,時(shí)間被白白浪費(fèi),測(cè)試人員卻沒(méi)有意識(shí)到這點(diǎn)。如果把這個(gè)時(shí)間用在其它更好的、更需要的地方,是否會(huì)有更好的測(cè)試效果呢?
從這個(gè)誡律可以看出,在進(jìn)行軟件測(cè)試時(shí)要盡最大的努力注意并記?。ɑ蛘哂涗浵聛?lái))對(duì)軟件采取的動(dòng)作次序,同時(shí)記住應(yīng)用程序的響應(yīng);并且考慮使用帶有追蹤功能、軟件狀態(tài)等功能的調(diào)試器或者測(cè)試工具,這樣可以盡量減少重現(xiàn)缺陷時(shí)的猜測(cè)成分,避免測(cè)試人員的深陷[4]。
(4)“誤區(qū)4”:測(cè)試人員無(wú)需懂開(kāi)發(fā)
持這個(gè)觀點(diǎn)的人認(rèn)為,軟件測(cè)試人員一般都使用工具進(jìn)行測(cè)試,只要懂得一些測(cè)試工具需要的腳本語(yǔ)言以及一些環(huán)境搭建的知識(shí)就足夠了;又或者,軟件測(cè)試人員并不專注于白盒測(cè)試,只是進(jìn)行產(chǎn)品功能測(cè)試,更注重用戶使用或用戶反饋,無(wú)需知道太多的開(kāi)發(fā)知識(shí)。個(gè)人認(rèn)為造成這個(gè)誤區(qū)的原因,是沒(méi)有理解軟件測(cè)試的真正價(jià)值所在。軟件測(cè)試最終是要為軟件開(kāi)發(fā)服務(wù)的,是要持續(xù)影響并提高軟件設(shè)計(jì)水平以及軟件開(kāi)發(fā)水平的。試問(wèn):不懂開(kāi)發(fā)的測(cè)試人員如何提出軟件開(kāi)發(fā)過(guò)程的改進(jìn)措施和建議呢?
我知道有種說(shuō)法:“程序?qū)懙米詈玫牟皇枪ぷ鞫嗄甑拈_(kāi)發(fā)人員,而是有著多年測(cè)試經(jīng)驗(yàn)的測(cè)試人員[3]?!庇纱丝梢?jiàn),一個(gè)優(yōu)秀的軟件測(cè)試人員,是要涉及多方面的知識(shí)領(lǐng)域。例如在詹姆斯·惠特克的9大軟件測(cè)試誡律中的第9條:“汝應(yīng)貪圖開(kāi)發(fā)人員的源代碼”。測(cè)試人員通過(guò)對(duì)源代碼的閱讀,特別是那些從用戶界面或者用戶使用功能上很難見(jiàn)到或者得到的錯(cuò)誤處理代碼,花時(shí)間了解代碼中有哪些錯(cuò)誤處理,哪些輸入能夠觸發(fā)這些錯(cuò)誤處理,這樣一點(diǎn)一點(diǎn)地收集類似的線索,來(lái)幫助測(cè)試人員明確要執(zhí)行哪些測(cè)試。
詹姆斯·惠特克曾說(shuō)過(guò)這樣一段話,能夠充分說(shuō)明測(cè)試人員是需要懂得開(kāi)發(fā)的:
“一名優(yōu)秀的測(cè)試人員,會(huì)仔細(xì)的分析找出的缺陷,并能夠巧妙的向開(kāi)發(fā)人員或小組進(jìn)行匯報(bào)和有效交流,使他們能夠意識(shí)到自己知識(shí)技能中的不足,從而進(jìn)行相應(yīng)的彌補(bǔ)和提高。隨著開(kāi)發(fā)人員素質(zhì)的提高,最終同時(shí)達(dá)到軟件缺陷數(shù)量下降和生產(chǎn)效率提高的目的,這遠(yuǎn)遠(yuǎn)超過(guò)了只注重發(fā)現(xiàn)并清除軟件缺陷的簡(jiǎn)單方式[1]。”
(5)“誤區(qū)5”:有了自動(dòng)化測(cè)試工具,就不需要手工測(cè)試了
自動(dòng)化測(cè)試工具一般有2種:①無(wú)需軟件運(yùn)行即可對(duì)其進(jìn)行分析的工具,諸如代碼審查或靜態(tài)分析等。這些工具只能對(duì)軟件固有的一些規(guī)范性缺陷進(jìn)行檢測(cè),而許多軟件缺陷是要等到在實(shí)際應(yīng)用環(huán)境中才會(huì)暴露出來(lái);②需要軟件運(yùn)行的動(dòng)態(tài)測(cè)試工具。這些工具可以檢測(cè)出許多軟件實(shí)際運(yùn)行時(shí)可能出現(xiàn)的缺陷,但是它卻具有無(wú)法聯(lián)系上下文場(chǎng)景的問(wèn)題(運(yùn)行環(huán)境、所處狀態(tài)等)。更重要的是它的阿基利斯腳踵就在于它沒(méi)有辦法覆蓋應(yīng)用程序出錯(cuò)的大多數(shù)情形[1]。除非發(fā)生自身崩潰、異常輸出或者是斷言被激活,自動(dòng)化測(cè)試工具不會(huì)注意到應(yīng)用程序出錯(cuò)的。
要找到這樣的缺陷,避免它跑到客戶的桌面上,唯一的方法就是創(chuàng)造出與客戶所處環(huán)境一模一樣的運(yùn)行環(huán)境,在那里運(yùn)行軟件來(lái)重現(xiàn)軟件出錯(cuò)時(shí)的數(shù)據(jù)和狀態(tài)。很多產(chǎn)品都經(jīng)過(guò)了自動(dòng)化測(cè)試工具的測(cè)試,可是,在這樣的情況下,手工測(cè)試仍然能夠定期地找出軟件缺陷,更糟糕的是用戶們(根據(jù)定義,他們執(zhí)行的也是手工測(cè)試)也找得出軟件缺陷。由此可見(jiàn)手工測(cè)試存在著令人不可忽略的力量,甚至于手工測(cè)試優(yōu)于自動(dòng)化測(cè)試。
有一個(gè)Intel的測(cè)試經(jīng)理曾經(jīng)評(píng)論過(guò)手工測(cè)試與自動(dòng)化測(cè)試:
“讓整個(gè)小組完全專注于自動(dòng)化測(cè)試,并夸耀我們的1500個(gè)自動(dòng)化測(cè)試用例后,我們的應(yīng)用程序在手指頭接觸鍵盤的一瞬間就崩潰了。如果你想找出客戶可能看到的那些軟件缺陷,手工測(cè)試起著決定性作用[1]?!?/p>
(6)“誤區(qū)6”:測(cè)試用例是萬(wàn)能的
測(cè)試人員可以寫一個(gè)程序,設(shè)計(jì)足夠多足夠好的測(cè)試用例,可以進(jìn)行無(wú)限次的測(cè)試,并且在睡覺(jué)的時(shí)候依然能夠幫你找到軟件缺陷,測(cè)試可以一遍又一遍不知疲倦地運(yùn)行。很好,很強(qiáng)大!然而令人費(fèi)解的是,在軟件測(cè)試技術(shù)以及自動(dòng)化測(cè)試工具長(zhǎng)足發(fā)展的今天,依然有一些弱不禁風(fēng)的軟件被生產(chǎn)出來(lái),而且這些軟件在接觸到真正的用戶后隨時(shí)報(bào)錯(cuò)。為什么?這是因?yàn)橛幸粋€(gè)致命的弱點(diǎn)是所有測(cè)試用例從來(lái)沒(méi)辦法解決的。在測(cè)試領(lǐng)域中,這個(gè)致命的弱點(diǎn)被美稱為預(yù)言家問(wèn)題:當(dāng)運(yùn)行一個(gè)給定的測(cè)試用例時(shí),我們?cè)趺粗儡浖窃诎凑疹A(yù)想的方式在執(zhí)行?它是否產(chǎn)生了正確的輸出?與此同時(shí),它是否產(chǎn)生了不必要的副作用?我們又怎能確定這一點(diǎn)呢?是否能有一個(gè)預(yù)言家告訴我們給定用戶環(huán)境、數(shù)據(jù)配置、輸入序列后,軟件會(huì)按照當(dāng)初設(shè)計(jì)的模式準(zhǔn)確的執(zhí)行[1]。事實(shí)上由于沒(méi)有完美的設(shè)計(jì)規(guī)范,對(duì)于目前的測(cè)試來(lái)說(shuō),這是根本不可能實(shí)現(xiàn)的。
如果不存在預(yù)言家,那么這些測(cè)試用例只能發(fā)現(xiàn)那些較為嚴(yán)重的故障:崩潰,掛起(至少看起來(lái)像是掛起)和異常。而且測(cè)試用例本身也是軟件,這往往意味著那些錯(cuò)誤可能是測(cè)試用例本身而不是目標(biāo)軟件產(chǎn)生的。測(cè)試用例與目標(biāo)軟件合為一體也構(gòu)成一個(gè)軟件,它仍然會(huì)留下漏洞讓那些微妙復(fù)雜的錯(cuò)誤逃過(guò)測(cè)試。所以,歸根結(jié)底還是自動(dòng)化測(cè)試與手工測(cè)試都不可或缺。
自從 1979年第一本關(guān)于軟件測(cè)試的書(shū)籍誕生以來(lái),隨著軟件測(cè)試行業(yè)的飛速發(fā)展,軟件測(cè)試藝術(shù)、軟件測(cè)試技藝等已經(jīng)不能準(zhǔn)確的描述測(cè)試人員在軟件測(cè)試中所做的工作了。目前許多知名的測(cè)試大師們已經(jīng)開(kāi)始將軟件測(cè)試稱之為一門學(xué)科——軟件測(cè)試學(xué)。作為一門學(xué)科,其涉及的知識(shí)面將是廣闊的,是值得測(cè)試人員花足夠多的時(shí)間去掌握和精通的。同時(shí),在這個(gè)過(guò)程中也必將伴隨著各種各樣理解上的誤區(qū)。這需要通過(guò)不斷地學(xué)習(xí),不斷地接受訓(xùn)練,去深入的了解軟件測(cè)試,消除軟件測(cè)試的理解誤區(qū),去努力尋找適合自己的軟件測(cè)試方法,提高軟件測(cè)試水平,從而達(dá)到改善或改進(jìn)整個(gè)軟件開(kāi)發(fā)過(guò)程的最終目的。
[1]WHITTAKER J A. 探索式軟件測(cè)試[M]. 方敏,張勝,鐘頌東等,譯.清華大學(xué)出版社, 2010:230.
[2]于波,姜艷. 軟件質(zhì)量管理實(shí)踐——軟件缺陷預(yù)防、清除、管理實(shí)用方法[M].電子工業(yè)出版社,2008:431.
[3]Weinberg G M. 完美軟件——對(duì)軟件測(cè)試的各種幻想[M]. 宋銳,譯.電子工業(yè)出版社,2009:345.
[4]曹向志,于涌,高樓. 軟件測(cè)試項(xiàng)目實(shí)戰(zhàn)——技術(shù)、流程與管理[M].電子工業(yè)出版社,2010:360.
[5]陳能技. 軟件測(cè)試技術(shù)大全——測(cè)試基礎(chǔ)、流行工具、項(xiàng)目實(shí)踐[M].人民郵電出版社,2008:500.