基于軟件度量的測試體系建設(shè)
信息產(chǎn)業(yè)部軟件與集成電路促進(jìn)中心(CSIP)已成功地主辦了兩屆中國軟件質(zhì)量年會。本屆年會將以“軟件質(zhì)量創(chuàng)新 助力兩化融合”為主題,繼續(xù)深化我們已取得的成績,把軟件質(zhì)量年會做實(shí),為增強(qiáng)我國軟件企業(yè)競爭能力、振興我國軟件產(chǎn)業(yè),助力信息化與工業(yè)化融合做出積極貢獻(xiàn)。
賀炘 北京慧靈科技有限公司總經(jīng)理 軟件測試虛擬社區(qū)測試時代負(fù)責(zé)人
時間也比較晚了,希望***一個內(nèi)容對大家來說有一定的幫助。
今天跟大家分享的題目是基于軟件度量的測試體系建設(shè)。
下面是我的一個介紹,大家都上過測試時代網(wǎng)站,所以掠過了。
在以下半個小時的時間大家有任何疑問或者不明白的,你就舉手說,會場可以產(chǎn)生互動,沒有任何問題。
在座有多少測試人員,很高興,大概是***,大家都是同行,看有沒有這樣的問題。
雖然覺得軟件測試很重要,但苦于沒有辦法組建規(guī)范的測試中心,什么叫規(guī)范的測試中心,有章有法,你的技術(shù)是可控的,你的人是可控的,很少有這樣的公司,我做過企業(yè)內(nèi)訓(xùn)的公司有上百家了,但很少,大多數(shù)認(rèn)為是成本中心,或者是花錢,公司一直在不停的投入,但是對產(chǎn)品的質(zhì)量沒有多少幫助。有多少幫助?你能說出來的,老板持續(xù)給你買工具,組建團(tuán)隊(duì),招聘新人,由于你的存在,由于你的團(tuán)隊(duì)的存在,你為公司創(chuàng)造了很多效益,有嗎?你隱隱約約覺得有,但沒有辦法拿數(shù)字說明,所以沒有辦法證明你存在的價值,或者你部門存在的價值。
無法衡量軟件測試工作的成果,你說我的測試工作很規(guī)范,很努力,我寫了一千的測試用力,工作成果好不好?很難說,因?yàn)槟愕睦习鍟f,才寫了一千個?。课艺J(rèn)為應(yīng)該是上萬個,因?yàn)槲业南到y(tǒng)很復(fù)雜??赡苓€會問什么呢?你怎么能寫一千個呢?我認(rèn)為咱們系統(tǒng)有一兩個足夠了,你用力怎么寫的,是不是花了很多無用功,都有這樣的疑問。你還沒辦法說明它。
總感覺測試工作,或者測試團(tuán)隊(duì)的工作是不可控的。不可控在什么程度,在座有這么多測試人員,大家都會有這樣的感覺,我可能今天很累,累在什么地方,我好好測試我的軟件一個BUG都沒有發(fā)現(xiàn),你的老板問你工作成果是什么,你沒辦法說。你可能今天很閑,你心情不好,不想干活,你可能上了一天網(wǎng),被測的軟件沒有打開,雖然今天沒干活,但是對整個質(zhì)量也沒產(chǎn)生影響,你可以心安理得的回家,第二天再說,對嗎?可能都有這樣的經(jīng)歷。作為公司,作為部門經(jīng)理如何對你監(jiān)控,從公司的角度來說,這是一件很可怕的事情。
測試過程混亂,無法進(jìn)行有效的持續(xù)改進(jìn)。什么叫持續(xù)改進(jìn),沒有人有能力,沒有公司有能力,一次把所有的事情都做正確,都做好,做對,沒有人,沒有公司。你要知道你現(xiàn)在目標(biāo)在哪兒,而且能判斷到你持續(xù)向你的目標(biāo)邁進(jìn)。
我們這么多做軟件測試的,軟件測試的目標(biāo)是什么?上午和下午有很多嘉賓說,保證產(chǎn)品質(zhì)量,認(rèn)為是保證產(chǎn)品質(zhì)量的我看看,很遺憾,保證不了,誰可以說經(jīng)過你的測試,這個軟件質(zhì)量就可以保證,誰敢說?那么多第三方的評測機(jī)構(gòu),哪個評測機(jī)構(gòu)敢說這個軟件經(jīng)過它的評測,質(zhì)量就沒問題,誰敢說,你保證不了。
#p#
做一個簡單的數(shù)學(xué)題,一個軟件有一百個功能點(diǎn),這個軟件大嗎?很小。如果從測試的角度來說,它可能有的功能點(diǎn)組合有多少?概率,C100、100,C100、100的數(shù)學(xué)等等多少?等于100的階乘,已經(jīng)是天文數(shù)字了,從數(shù)學(xué)模型來講,測試無法建立,這個目標(biāo)你可以影響,但保證不了。
驗(yàn)證需求和實(shí)際軟件的相符程度,同意這個舉手我看看?同意嗎?軟件和需求相符就證明軟件的質(zhì)量高嗎?需求就做錯了,你怎么辦?
對開發(fā)團(tuán)隊(duì)進(jìn)行有效的考核?行嗎?好象都不對。
軟件測試的目標(biāo)是什么?可能是一個很大的問號。
我現(xiàn)在提出兩個目標(biāo),這兩個目標(biāo)可能在其他的書上,或者在網(wǎng)上都看不到,最近才提出來的,兩個什么目標(biāo)?
***個,穩(wěn)定控制軟件產(chǎn)品質(zhì)量的振幅,ISO做了那么多質(zhì)量管理體系,它能保證單一的產(chǎn)品進(jìn)來就肯定出去是一個優(yōu)秀的產(chǎn)品嗎?不可能。它能做什么?是以統(tǒng)計(jì)學(xué)的觀點(diǎn)控制軟件產(chǎn)品質(zhì)量的振幅,你通過我的流程,出現(xiàn)一個高品質(zhì)產(chǎn)品的概率高,同意嗎?是概率高,不可能完全控制。
穩(wěn)定控制軟件產(chǎn)品質(zhì)量的振幅這件事情不歸測試人員管,歸誰管?頭長是通過SEPG組,建立度量體系,進(jìn)行有效跟蹤和監(jiān)控實(shí)現(xiàn),是統(tǒng)計(jì)學(xué)。
第二個,測試做什么?高效的提高軟件測試用例的覆蓋率。好的測試人員和差的測試人員有什么區(qū)別?放在日常工作中,就是你想不到,同意嗎?你的組長或者你的老板永遠(yuǎn)比你想的多一點(diǎn),多的那點(diǎn)是什么?就是測試用例的覆蓋度,同意嗎?我們找了兩個關(guān)鍵字,一是高效,二是覆蓋度,后面我會證明這兩個怎么度量。
怎么樣能高效?通過測試用例的復(fù)用來達(dá)到高效,以數(shù)據(jù)驅(qū)動的形式自動化測試用例可以提高效率,通過有效的測試用例設(shè)計(jì)方法,擴(kuò)大覆蓋率。我現(xiàn)在要做什么事情?首先我把軟件測試的質(zhì)量分解為一個目標(biāo),這個目標(biāo)是高效提高軟件測試用例的覆蓋度,把一個復(fù)雜的問題簡單化,簡單為一個明確的問題。下面我又做了分解,我把高效提高軟件測試用例的覆蓋度分為三個指標(biāo)。就是通過測試用例的復(fù)用,以數(shù)據(jù)驅(qū)動的形式自動化測試用例,通過有效的測試用例設(shè)計(jì)方法擴(kuò)大覆蓋率。
這是典型軟件測試過程文檔體系結(jié)構(gòu),我們來看通常情況下,我會把整個軟件測試劃分為幾個步驟,首先最關(guān)鍵是軟件測試策略的制訂,測試策略提供幾個信息,項(xiàng)目實(shí)施范圍,可見可衡量的指標(biāo),驗(yàn)證方法和階段。通常情況下,我們會把整個軟件測試過程劃分為單元集成系統(tǒng)。從所有的軟件工程或者從所有方法來說,都需要怎么做呢?都需要單元集成系統(tǒng),一個都不能少。通常在不同企業(yè)里面做不同程度的裁減,單元測試必須要做嗎?
WPS1.0你相信***個版本出現(xiàn)的時候會通過單元集成系統(tǒng)測試,我不相信,你們相信嗎?我肯定也不相信,但是不影響這個產(chǎn)品。產(chǎn)品在每個階段有不同的競爭要求。WPS剛出現(xiàn)的時候,是功能上的競爭,填補(bǔ)市場空白,只要有就OK,只要能用就OK,當(dāng)競爭到一定程度,WPS到現(xiàn)在你能相信它不進(jìn)行單元集成系統(tǒng)測試就可以賣嗎?不可想象。你現(xiàn)在就是選擇適合你的過程,當(dāng)我們明確完策略以后,我們一般會把測試分為計(jì)劃、方案、實(shí)施、報(bào)告幾個階段。計(jì)劃主要解決五個W問題,誰,什么時間、什么地點(diǎn),干什么事,由誰來完成,就是做資源合理分配,然后進(jìn)行專項(xiàng)測試方案。專項(xiàng)測試方案就是性能測試方案,安全測試方案,易用性測試方案,加密狗測試方案等等,然后進(jìn)行測試實(shí)施,測試實(shí)施主要做兩個內(nèi)容,首先是測試記錄,通過寫記錄證明你執(zhí)行到哪兒,沒通過的寫缺陷報(bào)告,整個階段完成寫階段完成報(bào)告,包括測試評估,然后做測試結(jié)論。
通常情況下測試策略我們會明確以下幾個內(nèi)容:
1、明確測試需求,你要對什么進(jìn)行測試,這個點(diǎn)很重要,重要到什么程度?這么多人做軟件測試,我問大家一個問題,如果產(chǎn)品發(fā)布了以后,產(chǎn)生了質(zhì)量問題,誰的問題?是測試員的問題嗎?是嗎?同意是測試員的問題,舉手我看看,不同意是測試員的問題我看看。經(jīng)過你***一道手發(fā)布出去了,產(chǎn)品出現(xiàn)問題了,你說不是你的問題,你能解釋嗎?很重要一個問題要明確測試的工作范圍,如果在你測試范圍內(nèi)發(fā)現(xiàn)問題,肯定是你的問題,在你測試范圍外發(fā)現(xiàn)的問題,就不是你的問題嗎?不一定。我們要明確測試工作范圍,需要測試的對象,達(dá)到的目標(biāo)等,可以來源于軟件需求,個人經(jīng)驗(yàn),以前發(fā)生的錯誤等。我們要確定測試目標(biāo),確定測試類型和方法,測試風(fēng)險分析。
#p#
策略完成以后,大家一定要注意,策略里面不包括人和時間,為什么不包括這兩項(xiàng),從項(xiàng)目的角度來講,這兩項(xiàng)變化的風(fēng)險太大。測試策略中一定不包含可能變化比較頻繁的要素,目的就是測試策略不允許隨便修改,它確定了該項(xiàng)目最關(guān)鍵的要素,當(dāng)我們確定測試策略以后,將進(jìn)行測試計(jì)劃的制訂。測試計(jì)劃包括什么呢?目標(biāo)、方法、環(huán)境、工具,確定時間段,確定資源,自動化測試分析。一個項(xiàng)目里一定要進(jìn)行自動化測試分析嗎?完全沒必要,自動化測試不能幫助你解決發(fā)現(xiàn)BUG的問題。首先大家要對自動化或者功能類自動化工具產(chǎn)生明確的認(rèn)識,它不能幫助你發(fā)現(xiàn)新的BUG,它能幫助你提高效率,提高測試用例覆蓋效率。
但計(jì)劃完成以后,我們要進(jìn)行專項(xiàng)測試方案制訂,我們要把計(jì)劃策略中所有需求拿出來,進(jìn)行備案,然后細(xì)化測試規(guī)矩等等。
測試實(shí)施包括測試記錄和測試報(bào)告。
階段總結(jié)報(bào)告要提供測試執(zhí)行株距,證明測試過程完整的執(zhí)行了測試計(jì)劃內(nèi)容,提供測試分析數(shù)據(jù),證明系統(tǒng)的質(zhì)量達(dá)到要求或未達(dá)到要求,如果比較重要的系統(tǒng)要提供模擬測試,比如說銀行或者電信系統(tǒng),當(dāng)它一個周期是一個月的數(shù)據(jù),如果你隨意切換,你的系統(tǒng)不行怎么辦,有一種方式就是這一個月的數(shù)據(jù),原來的系統(tǒng)跑一遍,新上線的系統(tǒng)在另外一套系統(tǒng)跑一遍,兩個出現(xiàn)的結(jié)果對比一下,走一個月就可以順利切換了。
其次提供遺留問題及后續(xù)的解決辦法,剛才都問到一個問題,測試什么時候結(jié)束,測試結(jié)束有兩個必要條件,缺陷處于收斂狀態(tài),所有遺留問題都有了明確的解決方案。
剛才跟大家簡要的說了一下我們認(rèn)可的,或者我們覺得比較合適的一個軟件測試過程控制方法,談到度量,談到對過程的控制,我們首先要明確過程是什么,剛才我們過程擺在那兒了,我們再來看。
我們把復(fù)雜的問題明確為兩個問題,一是質(zhì)量振幅,二是高效提高軟件測試用例覆蓋率。質(zhì)量振幅如何控制,針對軟件測試過程的符合度進(jìn)行控制,通過由EPG組進(jìn)行監(jiān)控,SQA進(jìn)行檢查,檢查報(bào)告就是振幅的一個指標(biāo),不在我們討論范圍之內(nèi)。
我們談測試相關(guān)的東西,高效提高軟件測試用例的覆蓋率,高效和覆蓋度是我們關(guān)注的目標(biāo)。通過這兩個目標(biāo),我們?nèi)プフ麄€的軟件測試過程,我們看怎么抓。
軟件測試工作如何提出效率,可能的指標(biāo)有什么?我只能說可能的指標(biāo),因?yàn)槎攘恳埠?,過程也好,針對每個公司都是個性化的過程,比如說我們通常在網(wǎng)上能拿到的數(shù)據(jù),最完備的過程是什么?是RUP,一張光盤,上頭有整個從項(xiàng)目需求一直到***部署,整套的文檔,整套的模板,你能用嗎?我跟IBM的工程師聊過,RUP的精華在什么?精華在裁減,你只有了解的全部,了解到本企業(yè)的現(xiàn)狀才知道自己用什么,不要盲目套用任何一套你看的好的方法或者模板,必須要個性化定制。這塊談到的目標(biāo)只是參考。可復(fù)用的產(chǎn)品多,可能提高效率吧,如果每次做項(xiàng)目能用到復(fù)用的產(chǎn)品很多,一定會提高效率,我們的指標(biāo)就是測試資源復(fù)用率,包括計(jì)劃、方案、用例,自動化測試腳本等等一系列,你在一個項(xiàng)目中產(chǎn)生的所有文檔、代碼或者思想,這些復(fù)用率有多高,拿一個指標(biāo)控制。
無用的工作少,上禮拜我們在對面開測試時代的交流會,有幾個人,測試用例我們寫到什么程度,大家想象,如果你只有一個禮拜的測試時間,五個工作日,你花三天寫測試用例,兩天做測試執(zhí)行,合理嗎?五天全部做測試執(zhí)行,我不寫測試用例,合理嗎?假設(shè)一年我八個月寫測試用例,四個月做執(zhí)行,合理嗎?我一年不寫測試用例,只執(zhí)行,合理嗎?所以當(dāng)你看你項(xiàng)目的時候,絕對沒有一個統(tǒng)一的方法、指標(biāo)讓你去做,要根據(jù)目標(biāo)來決定。
上午在說我推崇一句話,這句話是兩部分,***部分是目標(biāo)決定過程,一定要注意,目標(biāo)決定過程,第二部分,過程決定質(zhì)量。為什么目標(biāo)決定過程?跟敏捷開發(fā)方法的理念是一樣的,你想做什么,想達(dá)成什么樣的結(jié)果,就讓過程不多不少的配合你,你要做什么,完全跟你的目的有關(guān)系,不要做過多或者過少的工作。所以它都是定制化的過程。無用的工作少,你要做度量,比如說以前我作為測試組,或者你們作為測試人員,有多少測試人員在寫文檔,我指的文檔是用戶使用手冊說明書,舉手我看看。在小組織小工作量下是沒問題的,如果你的測試工作或者測試有效工時三分之一以上都被明顯跟工作質(zhì)量無關(guān)的工作就有問題了,所以我們要拿到有效測試工時率。
和開發(fā)的配合好,在研發(fā)過程中,測試是輔助流程,還是主流程?輔助流程,如果你是輔助流程,你當(dāng)然要跟主流程配合。跟主流程如何配合,首先協(xié)作點(diǎn)的數(shù)量,你跟開發(fā)人員有多少次交互,我指的正式交互,不是你平常沒事吃飯、打球、聊天,而是在技術(shù)方案中你跟開發(fā)人員做的交互有多少點(diǎn),協(xié)作點(diǎn)的正確率,正確率主要指時間和質(zhì)量,1月1號說給你協(xié)作點(diǎn),1月1號沒給你,這個協(xié)作點(diǎn)沒有成功,如果給了你,你沒有評估,這也沒有成功。
測試項(xiàng)目進(jìn)度貼合度好,什么叫貼合度好?***,我沒看到過沒有發(fā)現(xiàn)BUG的項(xiàng)目,有沒有這樣的測試人員,我測試一個產(chǎn)品壓根沒發(fā)現(xiàn)BUG。項(xiàng)目變化率,你作為項(xiàng)目經(jīng)理,你寫了份測試計(jì)劃,你的計(jì)劃會有多少次變化,變化的程度會是怎樣的,也是判斷你的效率。工期貼合率,你們之間的工期是否有很好的貼合。
#p#
自動化測試提高效率,首先自動化測試不能發(fā)現(xiàn)BUG,它可以把你的手工測試用例自動化,自動化手工測試用例的數(shù)量,跟手工用例的比例,這個比例越高越好,但一定要考慮成本和產(chǎn)出,值不值得這樣做。以前我看一個項(xiàng)目,它的測試經(jīng)理給我們展示QDP做的自動化測試,從頭到尾自動化,所有的操作不用人工干預(yù),我看了挺高興,后來我問他,它發(fā)現(xiàn)過BUG嗎?沒發(fā)現(xiàn),你平常測試用它嗎?也不用。做它干什么?演示。你就看到鼠標(biāo)在那兒點(diǎn),一個流程一個流程完成。為什么這么做?處于測試人員自我的愛好,他覺得這個有意思,技術(shù)含量高,想學(xué)這門技術(shù),也給老板做演示,老板看了很高興,它不產(chǎn)生實(shí)際的效率。
測試用例的覆蓋度,測試用例的覆蓋度是一個求積分的過程,什么叫求積分的過程?可以無線接近,但是永遠(yuǎn)到達(dá)不了,只可能無限接近,但不可能等于。
有效度量測試用例覆蓋度增加的條件:
1、現(xiàn)有測試用例進(jìn)行了有效的管理,首先測試用例你需要用工具或者手段管理起來,一條一條放在那兒,做一個基線。
2、明確測試用例編寫的顆粒度,大家都有這種感覺,你寫測試用例,你測試這個產(chǎn)品的時候,你十條測試用例就測試完了,有人寫三十條,你就覺得奇怪,我覺得十條已經(jīng)是局限了,怎么你能寫到三十條,你去看他的用例,發(fā)現(xiàn)這也能算一條,這是組織內(nèi)部測試用例顆粒度沒有達(dá)成一致,顆粒度你可以跟代碼行數(shù)對應(yīng),跟功能點(diǎn)對應(yīng),組織內(nèi)部測試用例顆粒度要統(tǒng)一,保證所有人員大致是一致的。
3、單個功能點(diǎn)都進(jìn)行了有效的規(guī)整,確定最小測試范圍。你如果做測試用例的度量,需要保證單一個功能點(diǎn)進(jìn)行了規(guī)整。
4、提高的方式放在功能點(diǎn)的組合和測試數(shù)據(jù)的增加上,如果你想提高效果,很重要的兩個目標(biāo),就是功能點(diǎn)的組合增加了多少,測試數(shù)據(jù)又增加了多少。
5、每輪新增測試用例量和率,通常情況下測試一個軟件,你的測試用例要跑好幾輪,三到五輪,有的可能更多,每輪會新增一些用例,這些新增的量和率是多少,如果在組織穩(wěn)定的時候,新增數(shù)量不會太大,如果組織不穩(wěn)定,或者產(chǎn)生新的功能點(diǎn)比較多的時候,新的功能點(diǎn)組合比較大,這個率就會比較高。對于你進(jìn)行一個項(xiàng)目控制也是有借鑒意義的。
軟件測試過程的定制是一個個性化很強(qiáng)的工作,每個企業(yè)都應(yīng)該不一樣,如果一樣了,就會有問題,指標(biāo)確定確立不能照抄,你抄沒問題,你照著人家的進(jìn)行,就有很大問題,需要根據(jù)能力成熟度進(jìn)行有效的分析和定制。
質(zhì)量的提高,工作的改進(jìn)是一個漸進(jìn)的過程,絕不能一蹴而就。
通過分析,要先解決重要的事情,要有總體的規(guī)劃,而不是頭痛醫(yī)頭,腳痛醫(yī)腳。
我大致的發(fā)言就到這兒,謝謝大家。