單元測(cè)試規(guī)范V1.0_第1頁
單元測(cè)試規(guī)范V1.0_第2頁
單元測(cè)試規(guī)范V1.0_第3頁
單元測(cè)試規(guī)范V1.0_第4頁
單元測(cè)試規(guī)范V1.0_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、單元測(cè)試規(guī)范單元測(cè)試規(guī)范 V1.0 文檔變更歷史文檔變更歷史 序號(hào)序號(hào)變更說明變更說明作者作者版本號(hào)版本號(hào)日期日期 1 建立初始文檔張維波 V0.92015-08-20 2 審核、修改部分內(nèi)容張維波 V1.02015-09-25 目錄目錄 第第 1 章章引言引言.2 1.1編寫目的.2 第第 2 章章概述概述.3 2.1單元測(cè)試內(nèi)容.3 2.2單元測(cè)試力度.3 2.3單元測(cè)試步驟.4 第第 3 章章單元測(cè)試步驟單元測(cè)試步驟.5 3.1設(shè)計(jì)單元測(cè)試方案.5 3.1.1輸入、輸出.5 3.1.2任務(wù).5 3.2編寫單元測(cè)試 CASE.6 3.2.1輸入、輸出.6 3.2.2任務(wù).6 3.3執(zhí)行單元

2、測(cè)試.7 3.3.1輸入、輸出.7 3.3.2任務(wù).8 3.4分析單元測(cè)試結(jié)果.8 3.4.1輸入、輸出.8 3.4.2任務(wù).8 附錄一附錄一 單元測(cè)試案例設(shè)計(jì)指南單元測(cè)試案例設(shè)計(jì)指南.9 1.單元測(cè)試目的.9 2.常見模塊單元的錯(cuò)誤.9 3.單元測(cè)試案例常見設(shè)計(jì)方法.10 附件二附件二 JAVA 語言單元測(cè)試規(guī)范語言單元測(cè)試規(guī)范 .13 第第 1 章章 引言引言 1.1 編寫目的編寫目的 為了提高整個(gè)開發(fā)中心產(chǎn)品和項(xiàng)目的測(cè)試效率,保證產(chǎn)品與項(xiàng)目內(nèi)部系統(tǒng)集成測(cè)試的順利進(jìn)行, 現(xiàn)要求技術(shù)部各項(xiàng)目組在提交項(xiàng)目之前必須進(jìn)行嚴(yán)格的單元測(cè)試,即按照代碼的單元組成逐個(gè)進(jìn)行 測(cè)試。 本文檔是技術(shù)部內(nèi)部使用的

3、關(guān)于進(jìn)行單元測(cè)試(Unit Test)的規(guī)范性文檔,本文檔中描述了單 元測(cè)試的原則、流程和方法,是軟件開發(fā)人員在進(jìn)行單元測(cè)試的時(shí)候的工作指南。 本文檔預(yù)期閱讀對(duì)象為項(xiàng)目經(jīng)理、項(xiàng)目開發(fā)工程師、測(cè)試人員等。 第第 2 章章 概述概述 單元測(cè)試是對(duì)軟件基本組成單元進(jìn)行的測(cè)試,所謂“單元”是指: 具有明確的功能 具有明確的規(guī)格定義(詳細(xì)設(shè)計(jì)規(guī)格說明書) 有與其他部分明確的接口定義 能夠與程序的其他部分清晰的進(jìn)行區(qū)分 2.1 單元測(cè)試內(nèi)容單元測(cè)試內(nèi)容 單元測(cè)試的依據(jù)是詳細(xì)設(shè)計(jì),應(yīng)對(duì)模塊內(nèi)所有重要的控制路徑設(shè)計(jì)測(cè)試用例,以便發(fā)現(xiàn)模塊內(nèi) 部的錯(cuò)誤。單元測(cè)試的測(cè)試類型主要包括: 1 模塊接口測(cè)試; 2 模塊局

4、部數(shù)據(jù)結(jié)構(gòu)測(cè)試; 3 模塊邊界條件測(cè)試; 4 模塊中所有獨(dú)立執(zhí)行通路測(cè)試; 5 模塊的各條錯(cuò)誤處理通路測(cè)試; 6 模塊的非法測(cè)試,例如在輸入數(shù)字的地方輸入字母; 7 代碼重用測(cè)試,在開發(fā)過程中有些模塊功能幾乎相同,程序員在重用代碼時(shí)可能忘記在原有 代碼上修改或修改不全面,而造成的錯(cuò)誤; 8 系統(tǒng)兼容測(cè)試,例如瀏覽器的兼容性測(cè)試和系統(tǒng)的兼容性測(cè)試。 2.2 單元測(cè)試力度單元測(cè)試力度 要求測(cè)試力度滿足: 語句覆蓋:使被測(cè)程序的每條語句至少執(zhí)行一次; 判定覆蓋:使被測(cè)程序的每一分支執(zhí)行一次; 條件覆蓋:要求判定中的每個(gè)條件均為“真”、 “假”兩種結(jié)果至少執(zhí)行一次; 條件組合覆蓋:讓條件覆蓋中的結(jié)果的

5、所有可能組合至少出現(xiàn)一次; 2.3 單元測(cè)試步驟單元測(cè)試步驟 單元測(cè)試的側(cè)重點(diǎn)在于發(fā)現(xiàn)程序設(shè)計(jì)或者實(shí)現(xiàn)中的邏輯錯(cuò)誤。它分為計(jì)劃、設(shè)計(jì)、實(shí)現(xiàn)、執(zhí)行 和評(píng)估五個(gè)步驟。各步驟的定義如下: 1)計(jì)劃單元測(cè)試: 確定測(cè)試需求,制訂測(cè)試策略,確定測(cè)試所用資源,創(chuàng)建測(cè)試任務(wù)的時(shí) 間表。 2)設(shè)計(jì)單元測(cè)試: 設(shè)計(jì)單元測(cè)試模型,制訂測(cè)試方案,確認(rèn)測(cè)試過程 3)實(shí)現(xiàn)單元測(cè)試: 根據(jù)單元測(cè)試計(jì)劃和方案,制訂具體的測(cè)試用例,創(chuàng)建可重用的測(cè)試腳 本。 4)執(zhí)行單元測(cè)試: 根據(jù)單元測(cè)試的方案、用例對(duì)軟件單元進(jìn)行測(cè)試,驗(yàn)證測(cè)試結(jié)果并記錄 測(cè)試過程中出現(xiàn)的缺陷。 5)評(píng)估單元測(cè)試:對(duì)單元測(cè)試的結(jié)果進(jìn)行評(píng)估,主要從需求覆蓋和代

6、碼覆蓋的角度進(jìn)行測(cè)試 完備性的評(píng)估。 一般認(rèn)為單元測(cè)試應(yīng)緊接在編碼之后,當(dāng)源程序編制完成并通過復(fù)審和編譯檢查,便可開 始單元測(cè)試。測(cè)試用例的設(shè)計(jì)應(yīng)與復(fù)審工作相結(jié)合,根據(jù)設(shè)計(jì)信息選取測(cè)試數(shù)據(jù),將增大發(fā)現(xiàn) 各類錯(cuò)誤的可能性。在確定測(cè)試用例的同時(shí),應(yīng)給出期望結(jié)果。項(xiàng)目組完成單元測(cè)試,向測(cè)試 組提交驗(yàn)收版本的同時(shí)必須一并遞交單元測(cè)試案例及測(cè)試問題報(bào)告記錄。 測(cè)試組取得需測(cè)試系統(tǒng)的版本及相關(guān)文檔,若在測(cè)試期間發(fā)現(xiàn)單元測(cè)試中記錄的問題,如 實(shí)記錄。 第第 3 章章 單元測(cè)試步驟單元測(cè)試步驟 3.1 設(shè)計(jì)單元測(cè)試方案設(shè)計(jì)單元測(cè)試方案 3.1.1輸入、輸出輸入、輸出 輸入工作產(chǎn)品待測(cè)程序單元 輸出工作產(chǎn)品 X

7、XX 單元測(cè)試方案 3.1.2任務(wù)任務(wù) 1.設(shè)計(jì)單元測(cè)試的模型,一般如下圖所示 驅(qū)動(dòng)模塊 被測(cè)單元測(cè)試用例 樁模塊樁模塊樁模塊 測(cè)試結(jié)果 構(gòu)造單元測(cè)試模型需要: 定義(設(shè)計(jì))驅(qū)動(dòng)模塊,用以調(diào)用被測(cè)程序單元 定義(設(shè)計(jì))測(cè)試樁模塊,用以模擬被測(cè)程序單元調(diào)用的函數(shù)接口 設(shè)計(jì)測(cè)試數(shù)據(jù)和狀態(tài),準(zhǔn)備單元測(cè)試的動(dòng)態(tài)結(jié)構(gòu) 確定測(cè)試的流程 另外,測(cè)試模型也可能是由所采用的測(cè)試工具所決定的。 2.指定測(cè)試項(xiàng)目:指定對(duì)不同特性(或者特性組合)進(jìn)行足夠測(cè)試的途徑,包括測(cè)試工具、方法 和技術(shù)的描述以及對(duì)測(cè)試結(jié)果進(jìn)行提取和分析的方法。 3.定義測(cè)試完備性標(biāo)準(zhǔn)(例如代碼覆蓋、路徑覆蓋或者條件覆蓋) ,并設(shè)計(jì)判定測(cè)試完備性

8、的手 段, 例如利用工具或者設(shè)計(jì)測(cè)試代碼等。 3.2 編寫單元測(cè)試編寫單元測(cè)試 CASE 3.2.1輸入、輸出輸入、輸出 輸入工作產(chǎn)品 XXX 單元測(cè)試方案 輸出工作產(chǎn)品 單元測(cè)試案例 測(cè)試環(huán)境 3.2.2任務(wù)任務(wù) 1.根據(jù)XXX 單元測(cè)試方案構(gòu)造測(cè)試環(huán)境(將待測(cè)程序單元納入測(cè)試工具; 實(shí)現(xiàn)驅(qū)動(dòng)模塊和 樁模塊) ,編寫測(cè)試代碼(自己開發(fā)或使用測(cè)試工具) 。需要的時(shí)候生成或者導(dǎo)入測(cè)試所需要的 數(shù)據(jù)。 2.設(shè)計(jì)單元測(cè)試案例 設(shè)計(jì)測(cè)試案例的時(shí)候要根據(jù)XXX 單元測(cè)試方案中所規(guī)定的測(cè)試方法、測(cè)試項(xiàng)目和完備性 標(biāo)準(zhǔn)進(jìn)行。單元測(cè)試案例的設(shè)計(jì),主要有以下五個(gè)步驟: 1)為系統(tǒng)運(yùn)行起來設(shè)計(jì)測(cè)試用例 首先需要設(shè)

9、計(jì)這樣的測(cè)試用例,該用例的執(zhí)行可以證明測(cè)試環(huán)境和被測(cè)單元是可用的。如 果這樣的測(cè)試案例失敗了,其他的測(cè)試案例都失去了執(zhí)行的基礎(chǔ) 2)為正向測(cè)試而設(shè)計(jì)測(cè)試用例 其次需要設(shè)計(jì)正向測(cè)試案例。這些案例也是基本的單元測(cè)試案例,它們是用來證明設(shè)計(jì)規(guī) 格說明書中對(duì)應(yīng)的功能和性能指標(biāo)是否能夠?qū)崿F(xiàn)的。這些測(cè)試案例是按照設(shè)計(jì)說明書中的 描述來開發(fā)的。 3)為逆向測(cè)試而設(shè)計(jì)測(cè)試用例 逆向測(cè)試的測(cè)試用例是用來證明軟件沒有做不應(yīng)該做的事情。這個(gè)步驟可以基于錯(cuò)誤猜測(cè) 的基礎(chǔ)進(jìn)行測(cè)試用例的構(gòu)造。 4)為特殊要求設(shè)計(jì)測(cè)試用例 從系統(tǒng)的性能、安全性、保密性的角度為具有這些要求的系統(tǒng)制訂的測(cè)試用例。 5)為覆蓋率設(shè)計(jì)測(cè)試用例 測(cè)

10、試案例的設(shè)計(jì)要保證一定的覆蓋率要求,所以在最后一步還需要補(bǔ)充一些測(cè)試案例,以 保證測(cè)試案例對(duì)代碼、路徑、或者條件的覆蓋率。 在單元測(cè)試的設(shè)計(jì)當(dāng)中,針對(duì)測(cè)試項(xiàng)目和測(cè)試覆蓋率的要求經(jīng)常采用如下的一些方法: A)規(guī)格導(dǎo)出法 B)等價(jià)類劃分法 C)邊界值分析法 D)狀態(tài)轉(zhuǎn)移測(cè)試法 E)分支測(cè)試法 F)條件測(cè)試法 G)數(shù)據(jù)定義使用測(cè)試法 H)內(nèi)部邊界值測(cè)試法 I)錯(cuò)誤猜測(cè)法 這些方法的具體描述,請(qǐng)參見附錄一。 3.將設(shè)計(jì)好的測(cè)試案例用工具或者文檔記錄下來。在需要的時(shí)候,標(biāo)注某個(gè)測(cè)試案例是為了哪個(gè) 測(cè)試項(xiàng)目而設(shè)計(jì)的。一般來說,測(cè)試案例都需要注明:測(cè)試條件、測(cè)試輸入、測(cè)試操作和預(yù)期 輸出這四大要素。 4.將

11、設(shè)計(jì)好的測(cè)試案例編寫成為測(cè)試腳本(test script) , 如果設(shè)計(jì)自動(dòng)化測(cè)試,驅(qū)動(dòng)模塊從測(cè)試 腳本中逐條讀取測(cè)試案例并且通過程序或者測(cè)試人員的目測(cè)判斷程序單元的行為或者輸出是否 符合預(yù)期。一般來說,測(cè)試工具或者驅(qū)動(dòng)模塊也需要將每一條測(cè)試案例執(zhí)行的結(jié)果進(jìn)行記錄, 以供分析之用。 3.3 執(zhí)行單元測(cè)試執(zhí)行單元測(cè)試 3.3.1輸入、輸出輸入、輸出 輸入工作產(chǎn)品單元測(cè)試案例 輸出工作產(chǎn)品單元測(cè)試結(jié)果記錄 3.3.2任務(wù)任務(wù) 1.執(zhí)行單元測(cè)試案例 對(duì)單元測(cè)試案例的執(zhí)行一般意味著由驅(qū)動(dòng)模塊讀取測(cè)試腳本,然后通過程序判斷或者測(cè)試人員 目測(cè)判斷的方式確認(rèn)測(cè)試案例是否執(zhí)行通過。 a)首先應(yīng)該確保測(cè)試環(huán)境和

12、測(cè)試程序能正常執(zhí)行,如果不能正常執(zhí)行則需要進(jìn)行相應(yīng)修改直 至正常。 b)在遇到測(cè)試案例執(zhí)行失敗而無法執(zhí)行之后的單元測(cè)試案例時(shí),需要調(diào)整被測(cè)程序單元直到 該案例能夠正常執(zhí)行。修改之后需要重新執(zhí)行之前的測(cè)試案例(回歸測(cè)試) 。使用測(cè)試工 具或者編寫自動(dòng)化的測(cè)試驅(qū)動(dòng)模塊可以使這項(xiàng)工作相對(duì)容易些。 2.對(duì)測(cè)試案例的執(zhí)行結(jié)果進(jìn)行記錄,如果使用工具或者編寫了自動(dòng)化的測(cè)試驅(qū)動(dòng)模塊,這一步工 作可以自動(dòng)化。 3.根據(jù)測(cè)試結(jié)果修改源代碼,重新構(gòu)造測(cè)試環(huán)境;需要的時(shí)候修改測(cè)試案例。 3.4 分析單元測(cè)試結(jié)果分析單元測(cè)試結(jié)果 3.4.1輸入、輸出輸入、輸出 輸入工作產(chǎn)品單元測(cè)試結(jié)果 輸出工作產(chǎn)品單元測(cè)試總結(jié)報(bào)告 3

13、.4.2任務(wù)任務(wù) 1.分析測(cè)試的完備性,判斷是否執(zhí)行了事先設(shè)計(jì)的所有測(cè)試案例以及在測(cè)試過程中新增加的測(cè)試 案例。 2.使用工具或者其他自定義的方法判斷單元測(cè)試的覆蓋率是否符合事先定義的覆蓋率。 3.如果未能達(dá)成覆蓋率,則補(bǔ)充測(cè)試案例,重新執(zhí)行測(cè)試。 附錄一附錄一 單元測(cè)試案例設(shè)計(jì)指南單元測(cè)試案例設(shè)計(jì)指南 1. 單元測(cè)試目的單元測(cè)試目的 單元測(cè)試案例的設(shè)計(jì)要驗(yàn)證被測(cè)程序單元的如下這些方面: 1) 是否正確實(shí)現(xiàn)了規(guī)定的功能 2)模塊內(nèi)部是否存在錯(cuò)誤 2. 常見模塊單元的錯(cuò)誤常見模塊單元的錯(cuò)誤 模塊內(nèi)部錯(cuò)誤往往存在于下列方面: 1)模塊接口:測(cè)試模塊的數(shù)據(jù)流 a)調(diào)用所測(cè)模塊時(shí)輸入?yún)?shù)與模塊的形式參

14、數(shù)在個(gè)數(shù)、屬性、順序上是否匹配 b)所測(cè)模塊在調(diào)用其他模塊時(shí),它輸入給其他模塊的參數(shù)在個(gè)數(shù)、屬性、順序上是否匹配 c)是否修改了只做輸入用的形式參數(shù) d)輸出給標(biāo)準(zhǔn)函數(shù)的參數(shù)在在個(gè)數(shù)、屬性、順序上是否匹配 e)全局變量的定義在各模塊中是否一致 f)限制是否通過形式參數(shù)來傳遞 2)局部數(shù)據(jù)結(jié)構(gòu): g)不正確的或者不一致的數(shù)據(jù)類型說明 h)使用未賦值或者未初始化的變量 i)錯(cuò)誤的初始值或者錯(cuò)誤的默認(rèn)值 j)變量名拼寫錯(cuò)誤 k)不一致的數(shù)據(jù)類型 3)路徑錯(cuò)誤:不正確的計(jì)算、比較和控制流 4)錯(cuò)誤處理 l)出錯(cuò)的描述難以理解 m)出錯(cuò)的描述不足以對(duì)錯(cuò)誤定位和確定出錯(cuò)原因 n)顯示的錯(cuò)誤與實(shí)際錯(cuò)誤不符

15、o)對(duì)錯(cuò)誤條件的處理不正確 p)在對(duì)錯(cuò)誤進(jìn)行處理之前,錯(cuò)誤條件已經(jīng)引起了系統(tǒng)的干預(yù) 5)邊界 q)在循環(huán)的第 0 次,第一次和最后一次是否有錯(cuò)誤 r)運(yùn)算或者判斷中最大最小值是否有錯(cuò)誤 s)數(shù)據(jù)流、控制流中剛好大于、小于或等于最大或最小值時(shí)是否有錯(cuò)誤 3. 單元測(cè)試案例常見設(shè)計(jì)方法單元測(cè)試案例常見設(shè)計(jì)方法 以下是一些單元測(cè)試案例的常見設(shè)計(jì)方法,通過對(duì)這些方法的綜合運(yùn)用,可以幫助我們發(fā)現(xiàn)上 述這些錯(cuò)誤。 1)規(guī)格導(dǎo)出法規(guī)格導(dǎo)出法 規(guī)格導(dǎo)出法是根據(jù)相關(guān)的規(guī)格說明來設(shè)計(jì)測(cè)試用例,每一個(gè)測(cè)試用例用來檢驗(yàn)一個(gè)或多個(gè)規(guī)格 陳述的語句。一個(gè)比較實(shí)際的辦法是按照規(guī)格陳述的語句順序來為被測(cè)單元設(shè)計(jì)測(cè)試用例。這種

16、測(cè) 試用例的設(shè)計(jì)可以保證在規(guī)格說明中所有的要求在測(cè)試案例中都能得到體現(xiàn),但是它只是一種正向 測(cè)試的思路,需要其他的測(cè)試用例的補(bǔ)充才能達(dá)成測(cè)試的完整性。 2)等價(jià)類劃分法等價(jià)類劃分法 等價(jià)類劃分是一種正式的測(cè)試用例設(shè)計(jì)方法,它基于被測(cè)單元的輸入、輸出所做的劃分,對(duì)每 一個(gè)劃分中的所有輸入、被測(cè)單元都有相同(等價(jià))的反應(yīng)。例如對(duì)一個(gè)范圍是 0-100 的整數(shù)輸入 來說,2,38,66 應(yīng)該都具有相同的效力,而 1,120 也有相同的效力。 等價(jià)類劃分法就是針對(duì)每 一個(gè)等價(jià)類設(shè)計(jì)至少一個(gè)測(cè)試案例來確保被測(cè)程序單元的處理是完整的。等價(jià)類劃分的設(shè)計(jì)方法也 屬于正向測(cè)試的技術(shù)。 3)邊界值分析法邊界值分析

17、法 邊界值分析法使用與等價(jià)類劃分法相同的劃分,只是邊界值分析假定錯(cuò)誤更多地存在于兩個(gè)劃 分的邊界上,相應(yīng)地為邊界上及兩側(cè)的情況設(shè)計(jì)測(cè)試用例。 4)狀態(tài)轉(zhuǎn)移測(cè)試狀態(tài)轉(zhuǎn)移測(cè)試 對(duì)于那些以狀態(tài)機(jī)作為模型或者設(shè)計(jì)為狀態(tài)機(jī)的軟件,狀態(tài)轉(zhuǎn)移測(cè)試是合適的。狀態(tài)轉(zhuǎn)移測(cè)試 法的測(cè)試案例涵蓋能導(dǎo)致狀態(tài)遷移的事件來測(cè)試狀態(tài)之間的轉(zhuǎn)換是否正確。用這種方法可以測(cè)試逆 向的測(cè)試用例,如狀態(tài)和事件的非法組合。 5)分支測(cè)試法分支測(cè)試法 在分支測(cè)試中,根據(jù)單元中控制流分支或者判斷點(diǎn)來設(shè)計(jì)測(cè)試用例。這通常用于達(dá)到一定的測(cè) 試覆蓋率。在單元測(cè)試中,如果使用黑盒測(cè)試技術(shù),那么需要去猜測(cè)存在哪些邏輯分支并相應(yīng)為這 些分支的執(zhí)行準(zhǔn)備測(cè)

18、試用例,如果使用白盒測(cè)試技術(shù),那么則需要根據(jù)該程序單元中的控制流設(shè)計(jì) 測(cè)試案例,完成分支覆蓋的要求。 6)條件測(cè)試法條件測(cè)試法 條件測(cè)試法中包涵了很多測(cè)試案例設(shè)計(jì)技術(shù),它們都致力于彌補(bǔ)在遇到復(fù)雜邏輯條件的時(shí)候分 支測(cè)試的弱點(diǎn)。條件測(cè)試的目標(biāo)是測(cè)試在每個(gè)邏輯條件的單個(gè)成份及它們組合的情況下程序都是正 確的。 在考慮各個(gè)邏輯條件的組合的時(shí)候,決策表是一種有用的工具。 在條件測(cè)試法中,需要設(shè)計(jì)足夠的測(cè)試案例,確保每種邏輯條件的組合都被測(cè)試到。 7)數(shù)據(jù)定義使用測(cè)試法數(shù)據(jù)定義使用測(cè)試法 數(shù)據(jù)定義是指數(shù)據(jù)被賦值的地方,數(shù)據(jù)使用是指數(shù)據(jù)項(xiàng)被讀取或者使用的地方。使用這種方法 設(shè)計(jì)測(cè)試案例時(shí),主要考慮用案例來

19、驅(qū)動(dòng)數(shù)據(jù)被定義到被使用的路徑。這種方法主要用于檢查數(shù)據(jù) 的初始化和處理的正確性,也可以在靜態(tài)檢查中使用。 8)內(nèi)部邊界值測(cè)試法內(nèi)部邊界值測(cè)試法 這種方法與邊界值分析法類似,但是它偏重的是白盒測(cè)試技術(shù),也就是說從程序單元的規(guī)格說 明中導(dǎo)出等價(jià)類和邊界值。除了外部可見的數(shù)據(jù)之外,程序的內(nèi)部的數(shù)據(jù)也存在等價(jià)類和邊界值, 它們只能通過對(duì)程序單元的設(shè)計(jì)規(guī)格說明進(jìn)行分析而得到。內(nèi)部邊界值測(cè)試法一般只作為測(cè)試案例 設(shè)計(jì)的補(bǔ)充方法,與其他方法結(jié)合使用。 9)錯(cuò)誤猜測(cè)法錯(cuò)誤猜測(cè)法 錯(cuò)誤猜測(cè)是基于經(jīng)驗(yàn)和其他一些測(cè)試技術(shù)的。在經(jīng)驗(yàn)的基礎(chǔ)上,測(cè)試設(shè)計(jì)者猜測(cè)錯(cuò)誤的類型及 在特定的軟件中錯(cuò)誤發(fā)生的位置,并設(shè)計(jì)測(cè)試用例去發(fā)

20、現(xiàn)它們。例如,如果所有的資源需要?jiǎng)討B(tài)申 請(qǐng),那么我們就需要判斷是否所有的資源都被正確釋放了。一個(gè)發(fā)現(xiàn)錯(cuò)誤的好地方就是資源釋放的 地方。對(duì)一個(gè)有經(jīng)驗(yàn)工程師,錯(cuò)誤猜測(cè)法可能是最好的設(shè)計(jì)測(cè)試案例的方法,因?yàn)樗赡馨l(fā)現(xiàn)別的 設(shè)計(jì)方法所遺漏的錯(cuò)誤。 為了最大限度的利用有效的經(jīng)驗(yàn)并逐步豐富測(cè)試用例的設(shè)計(jì)技術(shù),建立 一個(gè)錯(cuò)誤類型的列表是一個(gè)好方法,這個(gè)列表可以幫助工程師猜測(cè)程序單元中的錯(cuò)誤會(huì)在哪里。這 個(gè)列表需要通過在實(shí)踐中不斷的維護(hù)和擴(kuò)充來幫助達(dá)成錯(cuò)誤猜測(cè)的有效性。 附件二附件二 Java 語言單元測(cè)試規(guī)范語言單元測(cè)試規(guī)范 java 語言的編程規(guī)范遵照公司的開發(fā)規(guī)范。 1.1. 基本要求基本要求 1.1

21、程序結(jié)構(gòu)清析,簡單易懂,單個(gè)函數(shù)的程序行數(shù)不得超過 100 行。 1.2 代碼精簡,避免垃圾程序。 1.3 盡量使用標(biāo)準(zhǔn)庫函數(shù)和公共函數(shù)。 1.4 不要隨意定義全局變量,盡量使用局部變量。 1.5 使用括號(hào)以避免二義性。 2.2.可讀性要求可讀性要求 2.1 可讀性第一,效率第二。 2.2 保持注釋與代碼完全一致。 2.3 每個(gè)源程序文件,都有文件頭說明,說明規(guī)格見規(guī)范。 2.4 每個(gè)函數(shù),都有函數(shù)頭說明,說明規(guī)格見規(guī)范。 2.5 主要變量(結(jié)構(gòu)、聯(lián)合、類或?qū)ο螅┒x或引用時(shí),注釋能反映其含義。 2.7 常量定義(DEFINE)有相應(yīng)說明。 2.8 處理過程的每個(gè)階段都有相關(guān)注釋說明。 2.9

22、 在典型算法前都有注釋。 2.10 利用縮進(jìn)來顯示程序的邏輯結(jié)構(gòu),縮進(jìn)量一致并以 Tab 鍵為單位,定義 Tab 為 6 個(gè) 字節(jié)。 2.11 循環(huán)、分支層次不要超過五層。 2.12 注釋可以與語句在同一行,也可以在上行。 2.13 空行和空白字符也是一種特殊注釋。 2.14 一目了然的語句不加注釋。 2.15 注釋的作用范圍可以為:定義、引用、條件分支以及一段代碼。 2.16 注釋行數(shù)(不包括程序頭和函數(shù)頭說明部份)應(yīng)占總行數(shù)的 1/5 到 1/3 。 3.3. 結(jié)構(gòu)化要求結(jié)構(gòu)化要求 3.1 禁止出現(xiàn)兩條等價(jià)的支路。 3.2 禁止 GOTO 語句。 3.3 用 IF 語句來強(qiáng)調(diào)只執(zhí)行兩組語句

23、中的一組。禁止 ELSE GOTO 和 ELSE RETURN。 3.4 用 CASE 實(shí)現(xiàn)多路分支。 3.5 避免從循環(huán)引出多個(gè)出口。 3.6 函數(shù)只有一個(gè)出口。 3.7 不使用條件賦值語句。 3.8 避免不必要的分支。 3.9 不要輕易用條件分支去替換邏輯表達(dá)式。 4.4. 正確性與容錯(cuò)性要求正確性與容錯(cuò)性要求 4.1 程序首先是正確,其次是優(yōu)美 4.2 無法證明你的程序沒有錯(cuò)誤,因此在編寫完一段程序后,應(yīng)先回頭檢查。 4.3 改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前首先考慮對(duì)其它程序的影響。 4.4 所有變量在調(diào)用前必須被初始化。 4.5 對(duì)所有的用戶輸入,必須進(jìn)行合法性檢查。 4.6

24、 不要比較浮點(diǎn)數(shù)的相等, 如: 10.0 * 0.1 = 1.0 , 不可靠 4.7 程序與環(huán)境或狀態(tài)發(fā)生關(guān)系時(shí),必須主動(dòng)去處理發(fā)生的意外事件,如文件能否 邏輯鎖定、打印機(jī)是否聯(lián)機(jī)等。 4.8 單元測(cè)試也是編程的一部份,提交聯(lián)調(diào)測(cè)試的程序必須通過單元測(cè)試。 5.5. 可重用性要求可重用性要求 5.1 重復(fù)使用的完成相對(duì)獨(dú)立功能的算法或代碼應(yīng)抽象為公共控件或類。 5.2 公共控件或類應(yīng)考慮 OO 思想,減少外界聯(lián)系,考慮獨(dú)立性或封裝性。 5.3 公共控件或類應(yīng)建立使用模板。 命名規(guī)范 定義這個(gè)規(guī)范的目的是讓項(xiàng)目中所有的文檔都看起來像一個(gè)人寫的,增加可讀性,減少項(xiàng)目組中因 為換人而帶來的損失。 (

25、這些規(guī)范并不是一定要絕對(duì)遵守,但是一定要讓程序有良好的可讀性) Package 的命名 Package 的名字應(yīng)該都是由一個(gè)小寫單詞組成。 Class 的命名 Class 的名字必須由大寫字母開頭而其他字母都小寫的單詞組成 Class 變量的命名 變量的名字必須用一個(gè)小寫字母開頭。后面的單詞用大寫字母開頭。 Static Final 變量的命名 Static Final 變量的名字應(yīng)該都大寫,并且指出完整含義。 參數(shù)的命名 參數(shù)的名字必須和變量的命名規(guī)范一致。 數(shù)組的命名 數(shù)組應(yīng)該總是用下面的方式來命名: byte buffer; 而不是: byte buffer; 方法的參數(shù) 使用有意義的參

26、數(shù)命名,如果可能的話,使用和要賦值的字段一樣的名字: SetCounter(int size) this.size = size; JavaJava 文件樣式文件樣式 所有的 Java(*.java) 文件都必須遵守如下的樣式規(guī)則 版權(quán)信息版權(quán)信息 版權(quán)信息必須在 java 文件的開頭,比如: /* * Copyright 2015 U. * All right reserved. */ 其他不需要出現(xiàn)在 javadoc 的信息也可以包含在這里。 Package/Imports package 行要在 import 行之前,import 中標(biāo)準(zhǔn)的包名要在本地的包名之前,而且按照字母順序 排列。

27、如果 import 行中包含了同一個(gè)包中的不同子目錄,則應(yīng)該用 * 來處理。 package .stats; import java.io.*; import java.util.Observable; import hotlava.util.Application; 這里 java.io.* 使用來代替 InputStream and OutputStream 的。 Class 接下來的是類的注釋,一般是用來解釋類的。 /* * A class representing a set of packet and byte counters * It is observable to allow

28、 it to be watched, but only * reports changes when the current set is complete */ 接下來是類定義,包含了在不同的行的 extends 和 implements public class CounterSet extends Observable implements Cloneable Class Fields 接下來是類的成員變量: /* * Packet counters */ protected int packets; public 的成員變量必須生成文檔(JavaDoc) 。Proceted、priva

29、te 和 package 定義的成員變量如 果名字含義明確的話,可以沒有注釋。 存取方法存取方法 接下來是類變量的存取的方法。它只是簡單的用來將類的變量賦值獲取值的話,可以簡單的寫在一 行上。 /* * Get the counters * return an array containing the statistical data. This array has been * freshly allocated and can be modified by the caller. */ public int getPackets() return copyArray(packets, of

30、fset); public int getBytes() return copyArray(bytes, offset); public int getPackets() return packets; public void setPackets(int packets) this.packets = packets; 其它的方法不要寫在一行上 構(gòu)造函數(shù)構(gòu)造函數(shù) 接下來是構(gòu)造函數(shù),它應(yīng)該用遞增的方式寫(比如:參數(shù)多的寫在后面) 。 訪問類型 (public, private 等.) 和 任何 static, final 或 synchronized 應(yīng)該在 一行中,并且方法和參數(shù)另寫一行,這

31、樣可以使方法和參數(shù)更易讀。 public CounterSet(int size) this.size = size; 克隆方法 如果這個(gè)類是可以被克隆的,那么下一步就是 clone 方法: public Object clone() try CounterSet obj = (CounterSet)super.clone(); obj.packets = (int)packets.clone(); obj.size = size; return obj; catch(CloneNotSupportedException e) throw new InternalError(Unexpecte

32、d CloneNotSUpportedException: + e.getMessage(); 類方法類方法 下面開始寫類的方法: /* * Set the packet counters * (such as when restoring from a database) */ protected final void setArray(int r1, int r2, int r3, int r4) throws IllegalArgumentException / / Ensure the arrays are of equal size / if (r1.length != r2.len

33、gth | r1.length != r3.length | r1.length != r4.length) throw new IllegalArgumentException(Arrays must be of the same size); System.arraycopy(r1, 0, r3, 0, r1.length); System.arraycopy(r2, 0, r4, 0, r1.length); toString 方法 無論如何,每一個(gè)類都應(yīng)該定義 toString 方法: public String toString() String retval = CounterSe

34、t: ; for (int I = 0; I 0) I + ; / 錯(cuò)誤, 和 在同一行 if (i0) I + ; / 正確, 單獨(dú)作為一行 語句永遠(yuǎn)單獨(dú)作為一行. 如果 語句應(yīng)該縮進(jìn)到與其相對(duì)應(yīng)的 那一行相對(duì)齊的位置。 括號(hào) 左括號(hào)和后一個(gè)字符之間不應(yīng)該出現(xiàn)空格, 同樣, 右括號(hào)和前一個(gè)字符之間也不應(yīng)該出現(xiàn)空格. 下 面的例子說明括號(hào)和空格的錯(cuò)誤及正確使用: CallProc( Aparameter ); / 錯(cuò)誤 CallProc(Aparameter); / 正確 不要在語句中使用無意義的括號(hào). 括號(hào)只應(yīng)該為達(dá)到某種目的而出現(xiàn)在源代碼中。下面的例子說明 錯(cuò)誤和正確的用法: if (I) = 42) / 錯(cuò)誤 - 括號(hào)毫無意義 if (I = 42) or (J = 42) then /

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論