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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

22、 在典型算法前都有注釋。 2.10 利用縮進來顯示程序的邏輯結(jié)構(gòu),縮進量一致并以 Tab 鍵為單位,定義 Tab 為 6 個 字節(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)兩條等價的支路。 3.2 禁止 GOTO 語句。 3.3 用 IF 語句來強調(diào)只執(zhí)行兩組語句

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

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

25、這些規(guī)范并不是一定要絕對遵守,但是一定要讓程序有良好的可讀性) Package 的命名 Package 的名字應(yīng)該都是由一個小寫單詞組成。 Class 的命名 Class 的名字必須由大寫字母開頭而其他字母都小寫的單詞組成 Class 變量的命名 變量的名字必須用一個小寫字母開頭。后面的單詞用大寫字母開頭。 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 中標準的包名要在本地的包名之前,而且按照字母順序 排列。

27、如果 import 行中包含了同一個包中的不同子目錄,則應(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; 克隆方法 如果這個類是可以被克隆的,那么下一步就是 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 方法 無論如何,每一個類都應(yīng)該定義 toString 方法: public String toString() String retval = CounterSe

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

溫馨提示

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

評論

0/150

提交評論