1 單元測(cè)試的重要性 在實(shí)際的單元測(cè)試過(guò)程中總會(huì)有一些錯(cuò)誤的認(rèn)識(shí)左右著我們,,使之成為單元測(cè)試最大的障礙,,在此將其一一分析如下:它太浪費(fèi)時(shí)間了,現(xiàn)在要趕進(jìn)度,,時(shí)間上根本不允許,或者隨便做做應(yīng)付領(lǐng)導(dǎo),。 · 我是一個(gè)很棒的程序員,,我寫(xiě)的代碼肯定是沒(méi)有問(wèn)題的。 · 做單元測(cè)試太煩了,,直接集成,,到時(shí)有問(wèn)題在集成測(cè)試時(shí)肯定能發(fā)現(xiàn)的,實(shí)在不行在系統(tǒng)測(cè)試總該能發(fā)現(xiàn)吧,。 · 它僅僅是證明這些代碼做了什么,。 對(duì)于以上錯(cuò)誤認(rèn)識(shí)的產(chǎn)生歸根結(jié)底還是由于對(duì)單元測(cè)試的理解還是不夠,沒(méi)有真正認(rèn)識(shí)到單元測(cè)試的重要性,。 單元測(cè)試是軟件測(cè)試的基礎(chǔ),,因此單元測(cè)試的效果會(huì)直接影響到軟件的后期測(cè)試,最終在很大程度上影響到產(chǎn)品的質(zhì)量,。從如下幾個(gè)方面就可以看出單元測(cè)試的重要性在何處,。 · 時(shí)間方面:如果認(rèn)真的做好了單元測(cè)試,在系統(tǒng)集成聯(lián)調(diào)時(shí)非常順利,,因此會(huì)節(jié)約很多時(shí)間,,反之那些由于因?yàn)闀r(shí)間原因不做單元測(cè)試或隨便做做的則在集成時(shí)總會(huì)遇到那些本應(yīng)該在單元測(cè)試就能發(fā)現(xiàn)的問(wèn)題,而這種問(wèn)題在集成時(shí)遇到往往很難讓開(kāi)發(fā)人員預(yù)料到,,最后在苦苦尋覓中才發(fā)現(xiàn)這是個(gè)很低級(jí)的錯(cuò)誤而在悔恨自己時(shí)已經(jīng)浪費(fèi)了很多時(shí)間,,這種時(shí)間上的浪費(fèi)一點(diǎn)都不值得,正所謂得不償失,。 · 測(cè)試效果:根據(jù)以往的測(cè)試經(jīng)驗(yàn)來(lái)看,,單元測(cè)試的效果是非常明顯的,首先它是測(cè)試階段的基礎(chǔ),,做好了單元測(cè)試,,在做后期的集成測(cè)試和系統(tǒng)測(cè)試時(shí)就很順利。其次在單元測(cè)試過(guò)程中能發(fā)現(xiàn)一些很深層次的問(wèn)題,,同時(shí)還會(huì)發(fā)現(xiàn)一些很容易發(fā)現(xiàn)而在集成測(cè)試和系統(tǒng)測(cè)試很難發(fā)現(xiàn)的問(wèn)題,。再次單元測(cè)試關(guān)注的范圍也特殊,它不僅僅是證明這些代碼做了什么,,最重要的是代碼是如何做的,,是否做了它該做的事情而沒(méi)有做不該做的事情。 · 測(cè)試成本:在單元測(cè)試時(shí)某些問(wèn)題就很容易發(fā)現(xiàn),,如果在后期的測(cè)試中發(fā)現(xiàn)問(wèn)題所花的成本將成倍數(shù)上升,。比如在單元測(cè)試時(shí)發(fā)現(xiàn)1個(gè)問(wèn)題需要1個(gè)小時(shí),,則在集成測(cè)試時(shí)發(fā)現(xiàn)該問(wèn)題需要2個(gè)小時(shí),在系統(tǒng)測(cè)試時(shí)發(fā)現(xiàn)則需要3個(gè)小時(shí),,同理還有定位問(wèn)題和解決問(wèn)題的費(fèi)用也是成倍數(shù)上升的,,這就是我們要盡可能早的排除盡可能多的bug來(lái)減少后期成本的因素之一。 · 產(chǎn)品質(zhì)量:?jiǎn)卧獪y(cè)試的好與壞直接影響到產(chǎn)品的質(zhì)量,,可能就是由于代碼中的某一個(gè)小錯(cuò)誤就導(dǎo)致了整個(gè)產(chǎn)品的質(zhì)量降低一個(gè)指標(biāo),,或者導(dǎo)致更嚴(yán)重的后果,如果我們做好了單元測(cè)試這種情況是可以完全避免的,。 綜上所述,,單元測(cè)試是構(gòu)筑產(chǎn)品質(zhì)量的基石,我們不要因?yàn)楣?jié)約單元測(cè)試的時(shí)間不做單元測(cè)試或隨便做而讓我們?cè)诤笃诶速M(fèi)太多的不值得的時(shí)間,,我們也不愿意因?yàn)橛捎诠?jié)約那些時(shí)間導(dǎo)致開(kāi)發(fā)出來(lái)的整個(gè)產(chǎn)品失敗或重來(lái),! 1. 它是一種驗(yàn)證行為。 程序中的每一項(xiàng)功能都是測(cè)試來(lái)驗(yàn)證它的正確性,,為以后的開(kāi)發(fā)提供支緩,。就算是開(kāi)發(fā)后期,我們也可以輕松的增加功能或更改程序結(jié)構(gòu),,而不用擔(dān)心這個(gè)過(guò)程中會(huì)破壞重要的東西,。而且它為代碼的重構(gòu)提供了保障,這樣,,我們就可以更自由的對(duì)程序進(jìn)行改進(jìn),。 2.它是一種設(shè)計(jì)行為。 編寫(xiě)單元測(cè)試將使我們從調(diào)用者觀察,、思考,,特別是先寫(xiě)測(cè)試(test-first),迫使我們把程序設(shè)計(jì)成易于調(diào)用和可測(cè)試的,,即迫使我們解除軟件中的耦合,。另外還可以使編碼人員在編碼時(shí)產(chǎn)生預(yù)測(cè)試,將程序的缺陷降低到最小,。 3.它是一種編寫(xiě)文檔的行為,。 單元測(cè)試是一種無(wú)價(jià)的文檔,它是展示函數(shù)或類(lèi)如何使用的最佳文檔,。這份文檔是可編譯,、可運(yùn)行的,并且它保持最新,,永遠(yuǎn)與代碼同步,。 4.它具有回歸性。 自動(dòng)化的單元測(cè)試避免了代碼出現(xiàn)回歸,,編寫(xiě)完成之后,,可以隨時(shí)隨地的快速運(yùn)行測(cè)試,。 1. 單元測(cè)試:?jiǎn)卧獪y(cè)試又稱(chēng)模塊測(cè)試,屬于白盒測(cè)試,,是最小單位的測(cè)試,。模塊分為程序模塊和功能模塊。功能模塊指實(shí)現(xiàn)了一個(gè)完整功能的模塊(單元),,一個(gè)完整的程序單元具備輸入,、加工和輸出三個(gè)環(huán)節(jié)。而且每個(gè)程序單元都應(yīng)該有正規(guī)的規(guī)格說(shuō)明,,使之對(duì)其輸入、加工和輸出的關(guān)系做出名明確的描述,。 2.測(cè)試驅(qū)動(dòng):驅(qū)動(dòng)被測(cè)試模塊正常運(yùn)行起來(lái)的實(shí)體 3.測(cè)試樁:代替被測(cè)模塊調(diào)用的子模塊的實(shí)體,,該實(shí)體一般為樁函數(shù)。 4. 測(cè)試覆蓋:評(píng)測(cè)測(cè)試過(guò)程中已經(jīng)執(zhí)行的代碼的多少,。 5.覆蓋率:代碼的覆蓋程度,,一種度量方式。針對(duì)代碼的測(cè)試覆蓋率有許多種度量方式,,定義如下: · 語(yǔ)句覆蓋(StatementCoverage):也稱(chēng)為行覆蓋(linEC),段覆蓋(segmentcoverage)和基本塊覆蓋(bAS),。它度量每一個(gè)可執(zhí)行語(yǔ)句是否被執(zhí)行到了。icblockcoverageoverage · 判定覆蓋(DecisionCoverage):也被稱(chēng)為分支覆蓋(branchcoverage),,所有邊界覆蓋(all-edgescoverage),,基本路徑覆蓋(basispathcoverage),判定路徑覆蓋(decision-decision-path或DDPtesting),。它度量是否每個(gè)BOO型的表達(dá)式取值true和false在控制結(jié)構(gòu)中都被測(cè)試到了,。L · 條件覆蓋(ConDI):它獨(dú)立的度量每一個(gè)子表達(dá)式,報(bào)告每一個(gè)子表達(dá)式的結(jié)果的true或false,。這個(gè)度量和判定覆蓋(decisioncoverage)相似,,但是對(duì)控制流更敏感。不過(guò),,完全的條件覆蓋并不能保證完全的判定覆蓋,。tionCoverage · 路徑覆蓋(PathCoverage):也稱(chēng)為斷言覆蓋(prEDI),它度量了是否函數(shù)的每一個(gè)可能的分支都被執(zhí)行了,。路徑覆蓋的一個(gè)好處是:需要徹底的測(cè)試,。但有兩個(gè)缺點(diǎn):一是,路徑是以分支的指數(shù)級(jí)別增加的,,例如:一個(gè)函數(shù)包含10個(gè)IF語(yǔ)句,,就有1024個(gè)路徑要測(cè)試。如果加入一個(gè)IF語(yǔ)句,,路徑數(shù)就達(dá)到2048,;二是,,許多路徑不可能與執(zhí)行的數(shù)據(jù)無(wú)關(guān)。catecoverage 單元測(cè)試的對(duì)象是軟件設(shè)計(jì)的最小單位——模塊或函數(shù),,單元測(cè)試的依據(jù)是詳細(xì)設(shè)描述,。測(cè)試者要根據(jù)詳細(xì)設(shè)計(jì)說(shuō)明書(shū)和源程序清單,了解模塊的I/O條件和模塊的邏輯結(jié)構(gòu),。主要采用白盒測(cè)試的測(cè)試用例,,輔之以黑盒測(cè)試的測(cè)試用例,使之對(duì)任何合理和不合理的輸入都能鑒別和響應(yīng),。要求對(duì)所有的局部和全局的數(shù)據(jù)結(jié)構(gòu),、外部接口和程序代碼的關(guān)鍵部分進(jìn)行桌面檢查和代碼審查。在單元測(cè)試中,,需要對(duì)下面5個(gè)方面的內(nèi)容進(jìn)行測(cè)試,,也是構(gòu)造測(cè)試用例的基礎(chǔ)。 1) 模塊接口:測(cè)試模塊的數(shù)據(jù)流,。如果數(shù)據(jù)不能正確地輸入和輸出,,就談不上進(jìn)行其他測(cè)試。因此,,對(duì)于模塊接口需要如下的測(cè)試項(xiàng)目: · 調(diào)用所測(cè)模塊時(shí)的輸入?yún)?shù)與模塊的形式參數(shù)在個(gè)數(shù),、屬性、順序上是否匹配,; · 所測(cè)模塊調(diào)用子模塊時(shí),,它輸入個(gè)子模塊的參數(shù)與子模塊的形式參數(shù)在個(gè)數(shù)、屬性,、順序上是否匹配,; · 是否修改了只做輸入用的形式參數(shù); · 輸出給標(biāo)準(zhǔn)函數(shù)的參數(shù)在個(gè)數(shù),、屬性,、順序上是否匹配; · 全局變量的定義在各模塊中是否一致,; · 限制是否通過(guò)形式參數(shù)來(lái)傳送,。 2) 局部數(shù)據(jù)結(jié)構(gòu)測(cè)試:模塊的局部數(shù)據(jù)結(jié)構(gòu)是最常見(jiàn)的錯(cuò)誤來(lái)源,應(yīng)設(shè)計(jì)測(cè)試用例以檢查以下各種錯(cuò)誤: · 檢查不正確或不一致的數(shù)據(jù)類(lèi)型說(shuō)明; · 使用尚未賦值或尚未初始化的變量,; · 錯(cuò)誤的初始值或錯(cuò)誤的默認(rèn)值,; · 變量名拼寫(xiě)錯(cuò)誤或書(shū)寫(xiě)錯(cuò)誤; · 不一致的數(shù)據(jù)類(lèi)型,。 3)路徑測(cè)試:對(duì)基本執(zhí)行路徑和循環(huán)進(jìn)行測(cè)試會(huì)發(fā)現(xiàn)大量的錯(cuò)誤,。根據(jù)白盒測(cè)試和黑盒測(cè)試用例設(shè)計(jì)方法設(shè)計(jì)測(cè)試用例。設(shè)計(jì)測(cè)試用例查找由于錯(cuò)誤的計(jì)算,、不正確的比較或不正常的控制流而導(dǎo)致的錯(cuò)誤,。 · 常見(jiàn)的不正確的計(jì)算有: ? 運(yùn)算的優(yōu)先次序不正確或誤解了運(yùn)算的優(yōu)先次序; ? 運(yùn)算的方式錯(cuò)誤(運(yùn)算的對(duì)象彼此在類(lèi)型上不相容),; ? 算法錯(cuò)誤,; ? 初始化不正確; ? 運(yùn)算精度不夠,; ? 表達(dá)式的符號(hào)表示不正確等,。 · 常見(jiàn)的比較和控制流錯(cuò)誤有: ? 不同數(shù)據(jù)類(lèi)型的比較; ? 不正確的邏輯運(yùn)算符或優(yōu)先次序,; ? 因浮點(diǎn)運(yùn)算精度問(wèn)題而造成的兩值比較不等,; ? 關(guān)系表達(dá)式中不正確的變量和比較符,; ? “差1錯(cuò)”,,即不正確地多循環(huán)或少循環(huán)一次; ? 錯(cuò)誤的或不可能的循環(huán)終止條件,; ? 當(dāng)遇到發(fā)散的迭代時(shí)不能終止循環(huán),; ? 不適當(dāng)?shù)匦薷牧搜h(huán)變量等。 4) 錯(cuò)誤處理測(cè)試:比較完善的模塊設(shè)計(jì)要求能預(yù)見(jiàn)出錯(cuò)的條件,,并設(shè)置適當(dāng)?shù)某鲥e(cuò)處理對(duì)策,,以便在程序出錯(cuò)時(shí),能對(duì)出錯(cuò)程序重新做安排,,保證其邏輯上的正確性,。這種出錯(cuò)處理也是模塊功能的一部分。表明出錯(cuò)處理模塊有錯(cuò)誤或缺陷的情況有: · 出錯(cuò)的描述難以理解,; · 出錯(cuò)的描述不足以對(duì)錯(cuò)誤定位和確定出錯(cuò)的原因,; · 顯示的錯(cuò)誤與實(shí)際的錯(cuò)誤不符; · 對(duì)錯(cuò)誤條件的處理不正確,; · 在對(duì)錯(cuò)誤進(jìn)行處理之前,,錯(cuò)誤條件已經(jīng)引起系統(tǒng)的干預(yù); · 如果出錯(cuò)情況不予考慮,,那么檢查恢復(fù)正常后模塊可否正常工作,。 5) 邊界測(cè)試:邊界上出現(xiàn)錯(cuò)誤上常見(jiàn)的。設(shè)計(jì)測(cè)試用例檢查: · 在n次循環(huán)的第0次、1次,、n次是否有錯(cuò)誤,; · 運(yùn)算或判斷中取最大最小值時(shí)是否有錯(cuò)誤; · 數(shù)據(jù)流,、控制流中剛好等于,、大于、小于確定的比較值時(shí)是否出現(xiàn)錯(cuò)誤,。 何時(shí)進(jìn)行單元測(cè)試,?單元測(cè)試在編碼階段進(jìn)行。在源程序代碼編制完成,、經(jīng)過(guò)評(píng)審和驗(yàn)證,、確認(rèn)沒(méi)有語(yǔ)法錯(cuò)誤之后,就可以開(kāi)始進(jìn)行單元測(cè)試的測(cè)試用例設(shè)計(jì),。要利用軟件設(shè)計(jì)文檔,,設(shè)計(jì)可以驗(yàn)證程序功能、找出程序錯(cuò)誤的多個(gè)測(cè)試用例,。 對(duì)于每一組輸入,,應(yīng)該有預(yù)期的正確結(jié)果。在單元測(cè)試時(shí),,如果模塊不是獨(dú)立的程序,,需要輔助測(cè)試模塊,有兩種輔助模塊: · 驅(qū)動(dòng)模塊(Driver):所測(cè)模塊的主程序,。它接收測(cè)試數(shù)據(jù),,把這些數(shù)據(jù)傳遞給所測(cè)試模塊,最后再輸出測(cè)試結(jié)果,。當(dāng)被測(cè)試模塊能完成一定功能時(shí),,也可以不要驅(qū)動(dòng)模塊。 · 樁模塊(Stub):用來(lái)代替所測(cè)模塊調(diào)用的子模塊,。 被測(cè)試模塊,、驅(qū)動(dòng)模塊和樁模塊共同構(gòu)成了一個(gè)測(cè)試環(huán)境,如下圖所示: 1.測(cè)試用例的組成(在單元測(cè)試中測(cè)試用例基本上由測(cè)試腳本組成) · 用例運(yùn)行前置條件 · 被測(cè)模塊/單元所需環(huán)境(全局變量賦值或初始化實(shí)體) · 啟動(dòng)測(cè)試驅(qū)動(dòng) · 設(shè)置樁 · 調(diào)用被測(cè)模塊 · 設(shè)置預(yù)期輸出條件判斷 2.測(cè)試用例的設(shè)計(jì)原則 · 一個(gè)好的測(cè)試用例在于能夠發(fā)現(xiàn)至今沒(méi)有發(fā)現(xiàn)的錯(cuò)誤,; · 測(cè)試用例應(yīng)由測(cè)試輸入數(shù)據(jù)和與之對(duì)應(yīng)的預(yù)期輸出結(jié)果這兩部分組成,; · 在測(cè)試用例設(shè)計(jì)時(shí),應(yīng)當(dāng)包含合理的輸入條件和不合理的輸入條件,; · 為系統(tǒng)運(yùn)行起來(lái)而設(shè)計(jì)測(cè)試用例,; · 為正向測(cè)試而設(shè)計(jì)測(cè)試用例; · 為逆向測(cè)試而設(shè)計(jì)測(cè)試用例,; · 為滿(mǎn)足特殊需求而設(shè)計(jì)測(cè)試用例,; · 為代碼覆蓋而設(shè)計(jì)測(cè)試用例; 3.用例設(shè)計(jì)方法 1) 規(guī)范(規(guī)格)導(dǎo)出發(fā) 2) 等價(jià)類(lèi)劃分法 3) 邊界值分析法 4) 狀態(tài)轉(zhuǎn)移測(cè)試法 5) 分支測(cè)試法 6) 條件測(cè)試法 7) 數(shù)據(jù)定義-使用測(cè)試法(又名數(shù)據(jù)流測(cè)試法) 8) 內(nèi)部邊界值測(cè)試法 9) 錯(cuò)誤猜測(cè)法 4. 特定的用例測(cè)試設(shè)計(jì) 1)聲明測(cè)試:檢查模塊中的所有變量是否被聲明。經(jīng)驗(yàn)表明,,大量重要的錯(cuò)誤都是由于變量沒(méi)有被聲明或沒(méi)有被正確的聲明而引起的,。 2)路徑測(cè)試:要求模塊中所有可能的路徑都被執(zhí)行一遍,屬邏輯覆蓋測(cè)試,。 基本路徑測(cè)試:由于實(shí)際中,,一個(gè)模塊中的路徑可能非常多,由于時(shí)間和資源有限,,不可能一一測(cè)試到,。這就需要把測(cè)試所有可能路徑的目標(biāo)減少到測(cè)試足夠多的路徑,以獲得對(duì)模塊的信心,。要測(cè)試的最小路徑集就是基本測(cè)試路徑集,。基本測(cè)試路徑集要保證: · 每個(gè)確定語(yǔ)句的每一個(gè)方向要測(cè)試到,; · 每條語(yǔ)句最少執(zhí)行一次,。 3)循環(huán)測(cè)試:重點(diǎn)檢查循環(huán)的條件-判斷部分以及邊界條件。測(cè)試循環(huán)是一種特殊的路徑測(cè)試,,因?yàn)檠h(huán)比其他語(yǔ)句都復(fù)雜一些,。循環(huán)中錯(cuò)誤的發(fā)生機(jī)會(huì)比其他代碼構(gòu)成部分多。因此,,對(duì)于任何給定的循環(huán)測(cè)試應(yīng)該包括測(cè)試下面每一條件的測(cè)試用例: · 循環(huán)不執(zhí)行,; · 執(zhí)行一次循環(huán); · 執(zhí)行兩次循環(huán),; · 反映執(zhí)行典型的循環(huán)的執(zhí)行次數(shù),; · 如果有最大循環(huán)次數(shù),,最大循環(huán)次數(shù)減1,; · 最大循環(huán)次數(shù); · 大于最大循環(huán)次數(shù),。 對(duì)于增量和減量不是1的FOR語(yǔ)句,,要特別注意,因?yàn)槌绦騿T習(xí)慣于增量1,。 4) 循環(huán)嵌套:循環(huán)嵌套使邏輯的次數(shù)呈幾何級(jí)數(shù)增長(zhǎng),,設(shè)計(jì)測(cè)試嵌套循環(huán)的測(cè)試用例應(yīng)該包括的測(cè)試條件有: · 把外循環(huán)設(shè)置為最小值,并運(yùn)行內(nèi)循環(huán)所有可能的情況,; · 把內(nèi)循環(huán)設(shè)置為最小值,,并運(yùn)行外循環(huán)所有可能的情況; · 把所有的循環(huán)變量都設(shè)置為最小值運(yùn)行,; · 把所有的循環(huán)變量都設(shè)置為最大值運(yùn)行,; · 把外循環(huán)設(shè)置為最大值,并運(yùn)行內(nèi)循環(huán)所有可能的情況; · 把內(nèi)循環(huán)設(shè)置為最大值,,并運(yùn)行外循環(huán)所有可能的情況,; 5) 邊界值測(cè)試:指程序內(nèi)部邊界測(cè)試。檢查確定代碼在任何邊界情況下都不會(huì)出差錯(cuò),。重點(diǎn)檢查小于,、等于和大于邊界條件的情況。邊界值測(cè)試是指專(zhuān)門(mén)設(shè)計(jì)用來(lái)測(cè)試當(dāng)條件語(yǔ)句中引用的值處在邊界或邊界附近時(shí)系統(tǒng)反映的測(cè)試,。被測(cè)試語(yǔ)句的最好的例子就是“IF-THEN…ELSE-ENDIF”部分,。這樣語(yǔ)句的例子如: IF a <= 123 THEN b = 1 ELSE IF a >= 123 THEN b = 2 ELSE b = 3 END IF 上面例子中的邊界值測(cè)試用例應(yīng)該至少包括a的以下值:122,123,,124,。當(dāng)a=123時(shí),b=1還是2,。(找出邏輯判斷的矛盾) 6)接口測(cè)試:檢查模塊的數(shù)據(jù)流(輸入,、輸出)是否正確。檢查輸入的參數(shù)和聲明的自變量的個(gè)數(shù),,數(shù)據(jù)類(lèi)型和輸入順序是否一致,。檢查全局變量是否被正確的定義和使用等。 7)確認(rèn)測(cè)試:是否接受有效輸入數(shù)據(jù)(操作),,拒絕無(wú)效數(shù)據(jù)(操作),。 8)事務(wù)測(cè)試:輸入->輸出,錯(cuò)誤處理,。 一般來(lái)說(shuō),,做單元測(cè)試均采用的是商用的測(cè)試工具或自行開(kāi)發(fā)的測(cè)試工具,用例的編寫(xiě)都是在測(cè)試工具上完成,,測(cè)試用例都是一些測(cè)試腳本,,都以文件的方式來(lái)保存,故其用例的執(zhí)行過(guò)程主要是由測(cè)試工具根據(jù)所編寫(xiě)的具體的測(cè)試用例腳本來(lái)完成,,這樣對(duì)于用例的管理和執(zhí)行也非常靈活,。 在特定場(chǎng)合,比如某種壓力測(cè)試或極限測(cè)試,,對(duì)于測(cè)試執(zhí)行過(guò)程時(shí)間很長(zhǎng)時(shí)(幾個(gè)小時(shí)以上),,一般都預(yù)先編寫(xiě)好用例(確保用例無(wú)誤),使用空閑機(jī)或非工作時(shí)間執(zhí)行測(cè)試用例,,這樣操作起來(lái)較節(jié)約時(shí)間,。 在用例的執(zhí)行過(guò)程中務(wù)必注意如下事項(xiàng): · 程序的執(zhí)行過(guò)程―――便于構(gòu)造發(fā)散用例 · 不要放過(guò)任何細(xì)節(jié)―――這種細(xì)節(jié)可能就是問(wèn)題 在測(cè)試的過(guò)程中為了提高測(cè)試效率和效果,不斷的減少冗余勞動(dòng),,也為后期的回歸測(cè)試和測(cè)試管理帶來(lái)很大的方便,,不至于感到測(cè)試很混亂無(wú)序,。因此我們要對(duì)測(cè)試用例和測(cè)試執(zhí)行進(jìn)行不斷的優(yōu)化,以測(cè)試策略為指導(dǎo)方針進(jìn)行測(cè)試,。 1,、測(cè)試用例的優(yōu)化 測(cè)試用例的優(yōu)化主要是指用例的合并、修改和刪除,,減少冗余的無(wú)價(jià)值的測(cè)試,,其優(yōu)化依據(jù)來(lái)源于測(cè)試后的測(cè)試數(shù)據(jù)分析和評(píng)估,其中測(cè)試覆蓋也是用例優(yōu)化的主要參考,。 2,、測(cè)試執(zhí)行的優(yōu)化 測(cè)試執(zhí)行的優(yōu)化主要是指測(cè)試步驟的優(yōu)化,減少測(cè)試人員的手工操作,,因?yàn)樘嗟氖止げ僮鲿?huì)導(dǎo)致測(cè)試人員很厭倦,,直接影響測(cè)試效果,優(yōu)化依據(jù)來(lái)源于測(cè)試總結(jié),。 3,、測(cè)試策略 在測(cè)試過(guò)程中由于時(shí)間或資源的原因可能會(huì)使測(cè)試處于緊張的局面,在此情況下我們要采取一定的策略來(lái)解決此局面,。策略來(lái)源于測(cè)試數(shù)據(jù)的分析,,主要的方法是:為各模塊制定測(cè)試優(yōu)先級(jí),其優(yōu)先級(jí)的劃分依據(jù)如下: · 哪些是重點(diǎn)模塊,? · 哪些程序是最復(fù)雜,、最容易出錯(cuò)的? · 哪些程序是相對(duì)獨(dú)立,,應(yīng)當(dāng)提前測(cè)試的,? · 哪些程序最容易擴(kuò)散錯(cuò)誤? · 哪些程序是開(kāi)發(fā)者最沒(méi)有信心的,? · 80-20原則:80%的缺陷聚集在20%的模塊中,,經(jīng)常出錯(cuò)的模塊改錯(cuò)后還會(huì)經(jīng)常出錯(cuò),這種應(yīng)該列入測(cè)試重點(diǎn),。 單元測(cè)試完成以后,,需要對(duì)單元測(cè)試的執(zhí)行效果進(jìn)行評(píng)估,,主要從以下幾方面進(jìn)行: 1)測(cè)試完備性評(píng)估,,主要檢查測(cè)試過(guò)程中是否已經(jīng)執(zhí)行了所有的測(cè)試用例,對(duì)新增的測(cè)試用例是否已及時(shí)更新測(cè)試方案等,。 2)代碼覆蓋率評(píng)估,,主要是根據(jù)代碼覆蓋率工具提供的語(yǔ)句覆蓋情況報(bào)告,檢查是否達(dá)到方案中的要求,,公司要求語(yǔ)句覆蓋達(dá)到100%,。但很多情況下,,第一輪測(cè)試用例執(zhí)行完后是很難達(dá)到的,這時(shí)在評(píng)估過(guò)程中要對(duì)覆蓋率進(jìn)行分析,,主要從以下方面來(lái)考慮: · 不可能的路徑或條件 · 不可達(dá)的或冗余的代碼 · 不充分的測(cè)試用例 3) 從覆蓋的角度看,,測(cè)試應(yīng)該覆蓋: · 功能覆蓋 · 輸入域覆蓋 · 輸出域覆蓋 · 函數(shù)交互覆蓋 · 代碼執(zhí)行覆蓋 大多數(shù)有效的測(cè)試用例都來(lái)自于分析,而不是僅僅為了達(dá)到測(cè)試覆蓋率目標(biāo)而草率設(shè)計(jì)測(cè)試用例,。千萬(wàn)不要誤解測(cè)試覆蓋,,測(cè)試覆蓋并不是我們最求的目的,它只是評(píng)價(jià)測(cè)試的一種方式,,為測(cè)試提供指導(dǎo)和依據(jù),。 1.測(cè)試過(guò)程中各種人員的作用 · 系統(tǒng)分析設(shè)計(jì)人員 進(jìn)行需求跟蹤,確保系統(tǒng)需求的實(shí)現(xiàn)和更新,。進(jìn)行軟件單元可測(cè)性分析,,確定單元測(cè)試的對(duì)象、范圍和方法,。 · 軟件開(kāi)發(fā)人員 負(fù)責(zé)編碼和單元測(cè)試過(guò)程,,完成單元測(cè)試計(jì)劃、方案和報(bào)告,。 · 軟件測(cè)試人員 參與單元測(cè)試計(jì)劃,、方案和報(bào)告的評(píng)審,對(duì)單元測(cè)試的計(jì)劃,、設(shè)計(jì)和執(zhí)行質(zhì)量進(jìn)行監(jiān)控,。根據(jù)實(shí)際情況,可選擇參與由開(kāi)發(fā)人員負(fù)責(zé)的代碼檢視,、單元測(cè)試等活動(dòng),。 · 配置管理人員 對(duì)代碼及單元測(cè)試文檔進(jìn)行配置管理。 · 質(zhì)量保證(QA)人員 參與編碼與單元測(cè)試評(píng)審,,對(duì)編碼和單元測(cè)試過(guò)程進(jìn)行審計(jì),。 2. 單元測(cè)試輸入 · 《軟件需求規(guī)格說(shuō)明書(shū)》 · 《軟件詳細(xì)設(shè)計(jì)說(shuō)明書(shū)》 · 《軟件編碼與單元測(cè)試工作任務(wù)書(shū)》 · 《軟件集成測(cè)試計(jì)劃》 · 《軟件集成測(cè)試方案》 · 用戶(hù)文檔 3.單元測(cè)試的輸出 · 《單元測(cè)試計(jì)劃》 · 《單元測(cè)試方案》 · 《需求跟蹤說(shuō)明書(shū)》或需求跟蹤記錄 · 代碼靜態(tài)檢查記錄 · 《正規(guī)檢視報(bào)告》 · 問(wèn)題記錄 · 問(wèn)題跟蹤和解決記錄 · 軟件代碼開(kāi)發(fā)版本 · 《單元測(cè)試報(bào)告》 · 《軟件編碼與單元測(cè)試任務(wù)總結(jié)報(bào)告》 1. 單元測(cè)試實(shí)施步驟 1) 制定測(cè)試計(jì)劃和測(cè)試方案(包括測(cè)試工具的選擇) 2) 根據(jù)計(jì)劃和方案及相關(guān)輸入文檔編寫(xiě)測(cè)試用例 3) 搭建測(cè)試環(huán)境 4) 執(zhí)行測(cè)試 5) 記錄和跟蹤問(wèn)題 6) 編寫(xiě)測(cè)試報(bào)告和總結(jié)報(bào)告 2. 單元測(cè)試實(shí)施遵循的原則 · 精心制定測(cè)試計(jì)劃 · 嚴(yán)格評(píng)審測(cè)試計(jì)劃 · 嚴(yán)格執(zhí)行測(cè)試計(jì)劃 · 系統(tǒng)分析測(cè)試結(jié)果并提交報(bào)告 常用的C語(yǔ)言單元測(cè)試工具介紹如下: winAMS、CasePlayer2 1) 簡(jiǎn)介 GAIO公司的覆蓋率專(zhuān)家winAMS獲得機(jī)能安全標(biāo)百準(zhǔn)ISO26262/IEC61508工具認(rèn)證,,是日本工業(yè)制造度領(lǐng)域普遍使用的針對(duì)C/C++的單元/集成測(cè)試工具,。winAMS將通過(guò)交叉編譯生成的原始代碼作為評(píng)價(jià)代碼,具有使用芯片仿真器進(jìn)行仿真功能的測(cè)試工具,。不僅可以對(duì)C/C++語(yǔ)言編寫(xiě)的程序進(jìn)行邏輯水平的測(cè)試,,還可以對(duì)嵌入式軟件特有的依存于芯片的問(wèn)題點(diǎn)進(jìn)行確認(rèn)。 2) 功能特性 · 盡可能使單元測(cè)試的環(huán)境與目標(biāo)環(huán)境相同 · 采用全面支持嵌入式微機(jī)的微機(jī)化功能測(cè)試平臺(tái)環(huán)境 · 不需要插入測(cè)試用代碼直接使用目標(biāo)機(jī)代碼進(jìn)行測(cè)試 · 取得第三方認(rèn)證機(jī)構(gòu)TUVSUD對(duì)適用于汽車(chē)機(jī)能安全I(xiàn)SO26262軟件工具的認(rèn)證 · 測(cè)試工程管理 |
|
來(lái)自: fzm5298 > 《測(cè)試軟件》