生產(chǎn)軟件的最終目的是為了滿足客戶需求,我們以客戶需求作為評(píng)判軟件質(zhì)量的標(biāo)準(zhǔn),認(rèn)為軟件缺陷(Software Bug)的具體含義包括下面幾個(gè)因素:
1.軟件未達(dá)到客戶需求的功能和性能;
2.軟件超出客戶需求的范圍;
3.軟件出現(xiàn)客戶需求不能容忍的錯(cuò)誤;
4.軟件的使用未能符合客戶的習(xí)慣和工作環(huán)境。
考慮到設(shè)計(jì)等方面的因素,我們還可以認(rèn)為軟件缺陷還可以包括軟件設(shè)計(jì)不符合規(guī)范,未能在特定的條件(資金、范圍等)達(dá)到最佳等?上У氖,我們中的很多人更傾向于把軟件缺陷看成運(yùn)行時(shí)出現(xiàn)問題上來,認(rèn)為軟件測(cè)試僅限于程序提交之后。
在目前的國內(nèi)環(huán)境下,我們幾乎看不到完整準(zhǔn)確的客戶需求說明書,加以客戶的需求時(shí)時(shí)在變,追求完美的測(cè)試變得不太可能。因此作為一個(gè)優(yōu)異的測(cè)試人員,追求軟件質(zhì)量的完美固然是我們的宗旨,但是明確軟件測(cè)試現(xiàn)實(shí)與理想的差距,在軟件測(cè)試中學(xué)會(huì)取舍和讓步,對(duì)軟件測(cè)試是有百益而無一弊的。
下面是一些軟件測(cè)試的常識(shí),對(duì)這些常識(shí)的理解和運(yùn)用將有助于我們?cè)谶M(jìn)行軟件測(cè)試時(shí)能夠更好的把握軟件測(cè)試的尺度。
1.測(cè)試是不完全的(測(cè)試不完全)
很顯然,由于軟件需求的不完整性、軟件邏輯路徑的組合性、輸入數(shù)據(jù)的大量性及結(jié)果多樣性等因素,哪怕是一個(gè)極其簡單的程序,要想窮盡所有邏輯路徑,所有輸入數(shù)據(jù)和驗(yàn)證所有結(jié)果是非常困難的一件事情。我們舉一個(gè)簡單的例子,比如說求兩個(gè)整數(shù)的最大公約數(shù)。其輸入信息為兩個(gè)正整數(shù)。但是如果我們將整個(gè)正整數(shù)域的數(shù)字進(jìn)行一番測(cè)試的話,從其數(shù)目的無限性我們便可證明是這樣的測(cè)試在實(shí)際生活中是行不通的,即便某一天我們能夠窮盡該程序,只怕我們乃至我們的子孫都早已作古了。為此作為軟件測(cè)試,我們一般采用等價(jià)類和邊界值分析等措施來進(jìn)行實(shí)際的軟件測(cè)試,尋找最小用例集合成為我們精簡測(cè)試復(fù)雜性的一條必經(jīng)之道。
2.測(cè)試具有免疫性(軟件缺陷免疫性)
軟件缺陷與病毒一樣具有可怕的 “ 免疫性 ” ,測(cè)試人員對(duì)其采用的測(cè)試越多,其免疫能力就越強(qiáng),尋找更多軟件缺陷就更加困難。由數(shù)學(xué)上的概率論我們可以推出這一結(jié)論。假設(shè)一個(gè) 50000 行的程序中有 500 個(gè)軟件缺陷并且這些軟件錯(cuò)誤分布時(shí)均勻的,則每 100 行可以找到一個(gè)軟件缺陷。我們假設(shè)測(cè)試人員用某種方法花在查找軟件缺陷的精力為 X 小時(shí) /100 行。照此推算,軟件存在 500 個(gè)缺陷時(shí),我們查找一個(gè)軟件缺陷需要 X 小時(shí),當(dāng)軟件只存在 5 個(gè)錯(cuò)誤時(shí),我們每查找一個(gè)軟件缺陷需要 100X 小時(shí)。實(shí)踐證明,實(shí)際的測(cè)試過程比上面的假設(shè)更為苛刻,為此我們必須更換不同的測(cè)試方式和測(cè)試數(shù)據(jù)。該例子還說明了在軟件測(cè)試中采用單一的方法不能高效和完全的針對(duì)所有軟件缺陷,因此軟件測(cè)試應(yīng)該盡可能的多采用多種途徑進(jìn)行測(cè)試。
3.測(cè)試是“ 泛型概念 ”(全程測(cè)試)
我一直反對(duì)軟件測(cè)試僅存在于程序完成之后。如果單純的只將程序設(shè)計(jì)階段后的階段稱之為軟件測(cè)試的話,需求階段和設(shè)計(jì)階段的缺陷產(chǎn)生的放大效應(yīng)會(huì)加大。這非常不利于保證軟件質(zhì)量。需求缺陷、設(shè)計(jì)缺陷也是軟件缺陷,記住 “ 軟件缺陷具有生育能力 ” 。軟件測(cè)試應(yīng)該跨越整個(gè)軟件開發(fā)流程。需求驗(yàn)證(自檢)和設(shè)計(jì)驗(yàn)證(自檢)也可以算作軟件測(cè)試(建議稱為:需求測(cè)試和設(shè)計(jì)測(cè)試)的一種。軟件測(cè)試應(yīng)該是一個(gè)泛型概念,涵蓋整個(gè)軟件生命周期,這樣才能確保周期的每個(gè)階段禁得起考驗(yàn)。同時(shí)測(cè)試本身也需要有第三者進(jìn)行評(píng)估(信息系統(tǒng)審計(jì)和軟件工程監(jiān)理),即測(cè)試本身也應(yīng)當(dāng)被測(cè)試,從而確保測(cè)試自身的可靠性和高效性。否則自身不正,難以服人。
另外還需指出的是軟件測(cè)試是提高軟件產(chǎn)品質(zhì)量的必要條件而非充分條件,軟件測(cè)試是提高產(chǎn)品質(zhì)量最直接、最快捷的手段,但決不是一個(gè)根本手段。
4.80-20 原則
80% 的軟件缺陷常常生存在軟件 20% 的空間里。這個(gè)原則告訴我們,如果你想使軟件測(cè)試有效地話,記住常常光臨其高危多發(fā) “ 地段 ” 。在那里發(fā)現(xiàn)軟件缺陷的可能性會(huì)大的多。這一原則對(duì)于軟件測(cè)試人員提高測(cè)試效率及缺陷發(fā)現(xiàn)率有著重大的意義。聰明的測(cè)試人員會(huì)根據(jù)這個(gè)原則很快找出較多的缺陷而愚蠢的測(cè)試人員卻仍在漫無目的地到處搜尋。
80-20 原則的另外一種情況是,我們?cè)谙到y(tǒng)分析、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)階段的復(fù)審,測(cè)試工作中能夠發(fā)現(xiàn)和避免 80% 的軟件缺陷,此后的系統(tǒng)測(cè)試能夠幫助我們找出剩余缺陷中的 80% ,最后的 5% 的軟件缺陷可能只有在系統(tǒng)交付使用后用戶經(jīng)過大范圍、長時(shí)間使用后才會(huì)曝露出來。因?yàn)檐浖䴗y(cè)試只能夠保證盡可能多地發(fā)現(xiàn)軟件缺陷,卻無法保證能夠發(fā)現(xiàn)所有的軟件缺陷。
80-20 原則還能反映到軟件測(cè)試的自動(dòng)化方面上來,實(shí)踐證明 80% 的軟件缺陷可以借助人工測(cè)試而發(fā)現(xiàn), 20% 的軟件缺陷可以借助自動(dòng)化測(cè)試能夠得以發(fā)現(xiàn)。由于這二者間具有交叉的部分,因此尚有 5% 左右的軟件缺陷需要通過其他方式進(jìn)行發(fā)現(xiàn)和修正。
5.為效益而測(cè)試
為什么我們要實(shí)施軟件測(cè)試,是為了提高項(xiàng)目的質(zhì)量效益最終以提高項(xiàng)目的總體效益。為此我們不難得出我們?cè)趯?shí)施軟件測(cè)試應(yīng)該掌握的度。軟件測(cè)試應(yīng)該在軟件測(cè)試成本和軟件質(zhì)量效益兩者間找到一個(gè)平衡點(diǎn)。這個(gè)平衡點(diǎn)就是我們?cè)趯?shí)施軟件測(cè)試時(shí)應(yīng)該遵守的度。單方面的追求都必然損害軟件測(cè)試存在的價(jià)值和意義。一般說來,在軟件測(cè)試中我們應(yīng)該盡量地保持軟件測(cè)試簡單性,切勿將軟件測(cè)試過度復(fù)雜化,拿物理學(xué)家愛因斯坦的話說就是: Keep it simple but not too simple 。
6.缺陷的必然性
軟件測(cè)試中,由于錯(cuò)誤的關(guān)聯(lián)性,并不是所有的軟件缺陷都能夠得以修復(fù)。某些軟件缺陷雖然能夠得以修復(fù)但在修復(fù)的過程中我們會(huì)難免引入新的軟件缺陷。很多軟件缺陷之間是相互矛盾的,一個(gè)矛盾的消失必然會(huì)引發(fā)另外一個(gè)矛盾的產(chǎn)生。比如我們?cè)诮鉀Q通用性的缺陷后往往會(huì)帶來執(zhí)行效率上的缺陷。更何況在缺陷的修復(fù)過程中,我們常常還會(huì)受時(shí)間、成本等方面的限制因此無法有效、完整地修復(fù)所有的軟件缺陷。因此評(píng)估軟件缺陷的重要度、影響范圍,選擇一個(gè)折中的方案或是從非軟件的因素(比如提升硬件性能)考慮軟件缺陷成為我們?cè)诿鎸?duì)軟件缺陷時(shí)一個(gè)必須直面的事實(shí)。
7.軟件測(cè)試必須有預(yù)期結(jié)果
沒有預(yù)期結(jié)果的測(cè)試是不可理喻的。軟件缺陷是經(jīng)過對(duì)比而得出來的。這正如沒有標(biāo)準(zhǔn)無法進(jìn)行度量一樣。如果我們事先不知道或是無法肯定預(yù)期的結(jié)果,我們必然無法了解測(cè)試正確性。這很容易然人感覺如盲人摸象一般,不少測(cè)試人員常常憑借自身的感覺去評(píng)判軟件缺陷的發(fā)生,其結(jié)果往往是把似是而非的東西作為正確的結(jié)果來判斷,因此常常出現(xiàn)誤測(cè)的現(xiàn)象。
8.軟件測(cè)試的意義——事后分析
軟件測(cè)試的目的單單是發(fā)現(xiàn)缺陷這么簡單嗎?如果是 “ 是 ” 的話,我敢保證,類似的軟件缺陷在下一次新項(xiàng)目的軟件測(cè)試中還會(huì)發(fā)生。古語說得好, “ 不知道歷史的人必然會(huì)重蹈覆轍 ” 。沒有對(duì)軟件測(cè)試結(jié)果進(jìn)行認(rèn)真的分析,我們就無法了解缺陷發(fā)生的原因和應(yīng)對(duì)措施,結(jié)果是我們不得不耗費(fèi)的大量的人力和物力來再次查找軟件缺陷。很可惜,目前大多測(cè)試團(tuán)隊(duì)都沒有意識(shí)到這一點(diǎn),測(cè)試報(bào)告中缺乏測(cè)試結(jié)果分析這一環(huán)節(jié)。
相關(guān)推薦:軟件評(píng)測(cè)師備考:基于PB環(huán)境下的軟件測(cè)試