軟件測試漫談
2007年5月18日,眾多使用諾頓防病毒軟件的中國個(gè)人用戶和企業(yè)用戶在重啟系統(tǒng)后出現(xiàn)藍(lán)屏,系統(tǒng)不能正常使用。雖然諾頓當(dāng)天下午就給出了解決方案,但是諾頓作為專業(yè)安全公司的信譽(yù)受到了嚴(yán)重影響,損失重大。該事故原因非常簡單,就是當(dāng)天的諾頓更新把兩個(gè)簡體中文版的Windows系統(tǒng)文件誤當(dāng)成了病毒。這個(gè)本該在實(shí)驗(yàn)室的測試中能被輕易發(fā)現(xiàn)的問題,卻由于各種技術(shù)或管理原因被漏掉了。
因軟件缺陷而導(dǎo)致重大負(fù)面影響或損失的例子數(shù)不勝數(shù),業(yè)內(nèi)頂級廠商都不能幸免究其原因,幾乎都可歸入軟件測試不夠充分。如此多的案例,一方面佐證了軟件測試的重要性,另一方面,也說明了做好軟件測試遠(yuǎn)不是一件容易的事情。
那么,什么是測試?如何做好測試?
一、軟件測試的經(jīng)典定義
即使是有經(jīng)驗(yàn)的測試專家,也會因其自身經(jīng)驗(yàn)和理念的差異,對軟件測試給出不同的定義。業(yè)界引用較多的是G.J. Myers在其經(jīng)典著作《軟件測試之藝術(shù)》(The Art of Software Testing)中給出的測試的定義:測試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程。 (The process of executing a program or system with the intent of finding errors.)
另一個(gè)經(jīng)典的定義是IEEE 1999年對測試的定義:測試是在特定條件下,操作一個(gè)系統(tǒng)或部件,觀察和記錄結(jié)果,對系統(tǒng)或部件的某些方面進(jìn)行評估的過程。(The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component).
這兩個(gè)定義代表了兩種主流的測試?yán)砟?,前者?qiáng)調(diào)測試的目的是為了發(fā)現(xiàn)問題,而后者則認(rèn)為測試的目的是驗(yàn)證(在特定條件下)沒有問題,兩者各有特點(diǎn)。這兩種測試?yán)砟疃加胁簧僮冯S者,在實(shí)踐上,一般以某種理念為主,同時(shí)吸取另一種理念的長處。
以發(fā)現(xiàn)問題為目的的測試,會引導(dǎo)測試工程師全力投入易發(fā)現(xiàn)問題的測試方向,效率相對較高;但弊端是會忽略不易發(fā)現(xiàn)問題的方面,即使是系統(tǒng)的關(guān)鍵部分,也可能因不易發(fā)現(xiàn)問題而導(dǎo)致測試投入不夠,事實(shí)上,“不能發(fā)現(xiàn)問題”本身就是主觀認(rèn)定的,不測更無法發(fā)現(xiàn)問題。這種測試?yán)砟钊绻芽夭缓茫苋菀讓?dǎo)致測試方向錯(cuò)誤,遺漏重要問題。
以驗(yàn)證(在特定條件下)沒有問題的測試,這種理念最大的好處是測試范圍明確,即所謂特定條件下,常見的是以產(chǎn)品需求、規(guī)格、應(yīng)用場景來確定測試范圍。一旦范圍明確,測試計(jì)劃和測試策略都相對容易制定,測試執(zhí)行也可以有條不紊的展開。不好的地方,是必要的覆蓋測試會降低平均問題發(fā)現(xiàn)效率。
不同的測試?yán)砟睿厝粚?dǎo)致不同的實(shí)踐結(jié)果。但即使測試認(rèn)知水平相近,其實(shí)踐結(jié)果一樣可能迥異。事實(shí)上,測試要真正起到質(zhì)量把關(guān)作用,認(rèn)知是前提,在實(shí)踐中的制度設(shè)計(jì)、資源投入也非常關(guān)鍵。
首先,制度設(shè)計(jì)上,測試團(tuán)隊(duì)必須保持相對獨(dú)立,和開發(fā)團(tuán)隊(duì)形成互相制衡、共同進(jìn)步的關(guān)系。測試團(tuán)隊(duì)如果在組織管理上隸屬于開發(fā)團(tuán)隊(duì),則必然喪失獨(dú)立性,只會淪為橡皮圖章,質(zhì)量控制也成為空談。
其次,測試消耗巨大,必須保證資源投入。統(tǒng)計(jì)表明,一個(gè)大型的軟件項(xiàng)目,測試相關(guān)的時(shí)間和費(fèi)用往往占到50%以上,這將對商業(yè)公司的質(zhì)量決心構(gòu)成嚴(yán)峻考驗(yàn)。只有始終把質(zhì)量放在第一位,才能做到在測試上的持續(xù)投入。
二、H3C的測試觀
H3C更認(rèn)同IEEE的測試觀念,認(rèn)為從質(zhì)量控制理論出發(fā),從關(guān)注客戶應(yīng)用的角度,驗(yàn)證沒有問題比發(fā)現(xiàn)問題更重要。測試覆蓋度是軟件質(zhì)量控制的關(guān)鍵衡量指標(biāo),只有全面驗(yàn)證了產(chǎn)品的各項(xiàng)規(guī)格,驗(yàn)證了產(chǎn)品在各種可能的客戶應(yīng)用場景下都沒有問題,才能對質(zhì)量有相對的信心。應(yīng)該在確保測試覆蓋度的前提下,再考慮盡可能高效的發(fā)現(xiàn)問題。
在這種認(rèn)知下,H3C基于多年的測試實(shí)踐給出了自己對于測試的定義:測試是指為了高效的驗(yàn)證被測系統(tǒng)是否滿足目標(biāo)客戶的需求,是否提供了規(guī)格定義的功能和性能,而開展的一系列活動的總和。這個(gè)定義反映了H3C的測試?yán)砟睿瑫r(shí)也是H3C測試實(shí)踐的指導(dǎo)原則,指導(dǎo)H3C測試團(tuán)隊(duì)實(shí)施“好”的測試。
首先,測試必須目標(biāo)明確,有的放矢,即驗(yàn)證規(guī)格定義的功能和性能,驗(yàn)證是否滿足了客戶的各種需求。H3C要求產(chǎn)品的測試需求分析和測試方案設(shè)計(jì)必須緊緊圍繞產(chǎn)品規(guī)格、產(chǎn)品定位、目標(biāo)客戶的業(yè)務(wù)模型和應(yīng)用場景展開,形成覆蓋完備的測試用例體系。在測試執(zhí)行階段,則提倡二八原則,即80%的精力投入到已有測試用例的覆蓋測試中,20%的時(shí)間可供測試工程師發(fā)散測試,投入到其認(rèn)為可以更好的發(fā)現(xiàn)問題的活動中,充分發(fā)揮工程師的主觀能動性。
其次,測試是一個(gè)系統(tǒng)工程。一個(gè)好的測試,需要系統(tǒng)的組織各項(xiàng)測試活動,全面的制定測試計(jì)劃和測試策略,合理應(yīng)對風(fēng)險(xiǎn),設(shè)定測試目標(biāo),安排測試內(nèi)容,開展測試執(zhí)行,評估測試結(jié)果與產(chǎn)品質(zhì)量,確定什么時(shí)候測試可以結(jié)束,分析測試如何改進(jìn)等。H3C通過PTM(Product Test Management)構(gòu)建了一套完整的質(zhì)量保證流,對貫穿產(chǎn)品生命周期全過程的測試活動進(jìn)行規(guī)范,H3C測試團(tuán)隊(duì)從產(chǎn)品立項(xiàng)第一天起就開始介入,每一個(gè)開發(fā)活動,都設(shè)置了對應(yīng)的測試活動來進(jìn)行質(zhì)量保證,并通過事前引導(dǎo)、事中監(jiān)控、事后審計(jì)來使得質(zhì)量控制措施落到實(shí)處。
最后,高效的測試需要有強(qiáng)有力的工具和先進(jìn)的方法支撐。所謂測試無極限,沒有工具和方法的支撐,在有限的人力、時(shí)間和資源情況下,覆蓋近乎無窮盡的測試需求是一個(gè)不可能完成的任務(wù)。在測試分析設(shè)計(jì)階段,H3C提供經(jīng)過實(shí)踐檢驗(yàn)的工程方法,指導(dǎo)測試工程師通過分析分解,抽象融合,以相對較少的測試方案有效覆蓋最多的測試需求。在測試執(zhí)行階段,則有大量自開發(fā)和第三方的測試儀器和測試工具,輔助測試工程師高效率的開展復(fù)雜的測試,并且通過公司多年開發(fā)積累的系列自動化測試腳本來覆蓋產(chǎn)品功能,保證每個(gè)發(fā)布版本達(dá)到100%的測試覆蓋度。
三、結(jié)束語
測試,從來都不簡單,也容不得半點(diǎn)馬虎,只有知行合一,踏踏實(shí)實(shí)把每個(gè)環(huán)節(jié)做到極致,才能通過用戶應(yīng)用的最終考驗(yàn)。