開發(fā)人員單元測試規(guī)范_第1頁
開發(fā)人員單元測試規(guī)范_第2頁
開發(fā)人員單元測試規(guī)范_第3頁
開發(fā)人員單元測試規(guī)范_第4頁
開發(fā)人員單元測試規(guī)范_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、為了提高整個(gè)開發(fā)中心產(chǎn)品和項(xiàng)目的測試效率,保證產(chǎn)品與項(xiàng)目內(nèi)部系統(tǒng)集成測試的順利進(jìn)行,現(xiàn)要求系統(tǒng)開發(fā)部各項(xiàng)目組在提交產(chǎn)品至項(xiàng)目監(jiān)理部之前必須進(jìn)行嚴(yán)格的單元測試,即 按照代碼的單元組成逐個(gè)進(jìn)行測試。具體說明如下:單元測試內(nèi)容單元測試的依據(jù)是詳細(xì)設(shè)計(jì) ,應(yīng)對模塊內(nèi)所有重要的控制路徑設(shè)計(jì)測試用例,以便發(fā)現(xiàn)模塊內(nèi)部的錯(cuò)誤。單元測試的測試類型主要包括:1模塊接口測試;2模塊局部數(shù)據(jù)結(jié)構(gòu)測試;3模塊邊界條件測試;4模塊中所有獨(dú)立執(zhí)行通路測試;5模塊的各條錯(cuò)誤處理通路測試;6模塊的非法測試,例如在輸入數(shù)字的地方輸入字母;7代碼重用測試,在開發(fā)過程中有些模塊功能幾乎相同,程序員在重用代碼時(shí)可能忘記在原有 代碼上

2、修改或修改不全面,而造成的錯(cuò)誤;8系統(tǒng)兼容測試,例如有些程序在IE6能運(yùn)行正常,到IE5下不能運(yùn)行有些程序在 WIN2000下能運(yùn)行,而到 WIN98卻不能運(yùn)行.單元測試力度要求測試力度滿足:語句覆蓋:使被測程序的每條語句至少執(zhí)行一次;判定覆蓋:使被測程序的每一分支執(zhí)行一次;條件覆蓋:要求判定中的每個(gè)條件均為“真”、“假”兩種結(jié)果至少執(zhí)行一次;條件組合覆蓋:讓條件覆蓋中的結(jié)果的所有可能組合至少出現(xiàn)一次;單元測試步驟一般認(rèn)為單元測試應(yīng)緊接在編碼之后,當(dāng)源程序編制完成并通過復(fù)審和編譯檢查,便可開始單元測試。測試用例的設(shè)計(jì)應(yīng)與復(fù)審工作相結(jié)合,根據(jù)設(shè)計(jì)信息選取測試數(shù)據(jù),將增大發(fā)現(xiàn)各類錯(cuò)誤的可能性。在確

3、定測試用例的同時(shí),應(yīng)給出期望結(jié)果。項(xiàng)目組完成單元測試,向項(xiàng)目監(jiān)理部提交驗(yàn)收版本的同時(shí)必須一并遞交單元測試案例及測試問題報(bào)告記錄。測試部由項(xiàng)目監(jiān)理部取得需測試系統(tǒng)的版本及相關(guān)文檔,若在測試期間發(fā)現(xiàn)單元測試中記錄的問題,如實(shí)記錄。項(xiàng)目監(jiān)理部視具體情況酌情對該項(xiàng)目組的績效考核與項(xiàng)目評分加以控制.不同語言及架構(gòu)的單元測試見附件。附件一 C+語言單元測試規(guī)范1. 基本要求1.1程序結(jié)構(gòu)清析,簡單易懂,單個(gè)函數(shù)的程序行數(shù)不得超過100行.1。2打算干什么,要簡單,直接了當(dāng),代碼精簡,避免垃圾程序。1.3盡量使用標(biāo)準(zhǔn)庫函數(shù)和公共函數(shù).1.4不要隨意定義全局變量,盡量使用局部變量。1.5使用括號以避免二義性。

4、2??勺x性要求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在典型算法前都有注釋.2。10利用縮進(jìn)來顯示程序的邏輯結(jié)構(gòu),縮進(jìn)量一致并以Tab鍵為單位,定義Tab為6個(gè) 字節(jié)。2。11循環(huán)、分支層次不要超過五層。2。12注釋可以與語句在同一行, 也可以在上行。2.13空行和空白字符也是一種特殊注釋。2。14 一目了然的語句不加

5、注釋。2.15注釋的作用范圍可以為:定義、引用、條件分支以及一段代碼。1/5 到 1/3 。2.16 注釋行數(shù) (不包括程序頭和函數(shù)頭說明部份)應(yīng)占總行數(shù)的3。結(jié)構(gòu)化要求3。1禁止出現(xiàn)兩條等價(jià)的支路。3。2禁止GOTO語句.3。3用IF語句來強(qiáng)調(diào)只執(zhí)行兩組語句中的一組。禁止ELSE GOT和ELSE RETURN.。4用CASE實(shí)現(xiàn)多路分支。3.5避免從循環(huán)引出多個(gè)出口。3。6函數(shù)只有一個(gè)出口。3。7不使用條件賦值語句。 3。 8 避免不必要的分支。3.9 不要輕易用條件分支去替換邏輯表達(dá)式。4. 正確性與容錯(cuò)性要求4.1 程序首先是正確,其次是優(yōu)美4。2 無法證明你的程序沒有錯(cuò)誤,因此在編寫

6、完一段程序后,應(yīng)先回頭檢查. 4。 3 改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前首先考慮對其它程序的影響。4.4 所有變量在調(diào)用前必須被初始化。4。5 對所有的用戶輸入,必須進(jìn)行合法性檢查。4。 6 不要比較浮點(diǎn)數(shù)的相等, 如: 10.0 0.1 = 1.0 ,不可靠4.7 程序與環(huán)境或狀態(tài)發(fā)生關(guān)系時(shí),必須主動去處理發(fā)生的意外事件,如文件能否 邏輯鎖定、打印機(jī)是否聯(lián)機(jī)等。4。8 單元測試也是編程的一部份,提交聯(lián)調(diào)測試的程序必須通過單元測試。5??芍赜眯砸?.1 重復(fù)使用的完成相對獨(dú)立功能的算法或代碼應(yīng)抽象為公共控件或類。5.2 公共控件或類應(yīng)考慮 OO 思想,減少外界聯(lián)系,考慮獨(dú)立性或封裝

7、性。5.3 公共控件或類應(yīng)建立使用模板.1 適用范圍本標(biāo)準(zhǔn)適用于利用 Visul C+,Borland C+進(jìn)行軟件程序開發(fā)的人員 .。 2 變量命名命名必須具有一定的實(shí)際意義,形式為xAbcFgh,x由變量類型確定,Abc、Fgh表示連續(xù)意義字符串 ,如果連續(xù)意義字符串僅兩個(gè),可都大寫。如 OK. 具體例程 :BOOL 類型bEn able;ch * charchTextc * 類對象cMain (對象實(shí)例) h *Handle (句柄)hWnd i * intn 無符號整型 p * 指針 sz,str * 字符串 w WORD x, y 坐標(biāo)Char 或者 TCHAR 類型 與 Windo

8、ws API 有直接聯(lián)系的用szAppName1 0 形式否則用FileName10 形式,單個(gè)字符也可用小寫字母表示;Int類型 nCmdShow; LONG類型 類型 型 類型lParam; UINT 類型 lpCmdLi ne LPTST啖型 wParam, LPARAM 類型 hInstanceuNotify; DWORD 類型 lpszClassName; lParam HWND 類型dwStart; PSTR類型pszTip; LPSTRLPVOID 類型lpReserved WPARAM 類hDlg; HDC類型hDC; HINSTANCE型類量中可采用如下幾個(gè)通用變量:nTem

9、p, nResult, I, J (一般用于循環(huán)變量)。其他資源句柄mHANDLE 型 hIcon; int類成員變量hInstance, HICON類dw* String , AnsiString str * 全局變量g_nMsg, g_bFlag局部變iTmp floatm_nVal,fTmp DWORDm_bFlag g_同上 。 3 常量命名和宏定義常量和宏定義必須具有一定的實(shí)際意義; 常量和宏定義在 include 和函數(shù)定義之間; 常量和宏定義必須全部以大寫字母來撰寫,中間可根據(jù)意義的連續(xù)性用下劃線連接,每一 條定義的右側(cè)必須有一簡單的注釋 ,說明其作用 ; 資源名字定義格式 :

10、菜單: IDM_XX 或者CM_XX 位圖:IDB_XX對話框:IDD_XX字符串:IDS_XX DLGINIT DIALOG_XX ICON IDR_XX。4 函數(shù)命名 函數(shù)原型說明包括引用外來函數(shù)及內(nèi)部函數(shù),外部引用必須在右側(cè)注明函數(shù)來源:模 塊名及文件名, 如是內(nèi)部函數(shù),只要注釋其定義文件名;第一個(gè)字母必須使用大寫字母 ,要求用大小寫字母組合規(guī)范函數(shù)命名,必要時(shí)可用下劃線 間隔,示例如下:void UpdateDB_Tfgd (TRACK_NAME) ; file : /Module Name : r01/sdw 。 c void PrintTrackData (TRACK_NAME);

11、 file : /Module Name :r04 /tern 。c void ImportantPoint ( void) ; file:/Module Name :r01 /sdw.c void ShowChar (int , int , c htype) ; file : /Local Module void ScrollUp_V (int , int); file :/Local Module 。5 結(jié)構(gòu)體命 名結(jié)構(gòu)體類型命名必須全部用大寫字母,原則上前面以下劃線開始 ;結(jié)構(gòu)體變量命名必須用 大小寫字母組合,第一個(gè)字母必須使用大寫字母,必要時(shí)可用下劃線間隔。對于私有數(shù)據(jù)區(qū) ,必 須 注

12、 明 其 所 屬 的 進(jìn) 程 . 全 局 數(shù) 據(jù) 定 義 只 需 注 意 其 用 途 。 示 例 如下:typedef struct charszProductName 20;charszAuthor20;charszReleaseDate 16;charszVersion 10;unsigned long MaxTables;unsigned long UsedTables; DBS_DATABA;SEDBS_DATABASE GdataBas;e6 控件的命名: 用小寫前綴表示類別 用小寫前綴表示類別: fm 窗口 cmd 按鈕 cob combo , 下 拉 式 列 表 框 txt文 本

13、 輸 入 框 lab labal , 標(biāo) 簽 imgimage , 圖象 pic picture grd Grid ,網(wǎng)格 scr 滾動條 lst 列表框 frm fram 7 注釋 原則上注釋要求使用中文;文件開始注釋內(nèi)容包括 :公司名稱、版權(quán)、作者名稱、時(shí)間、模塊用途、背景介紹等,復(fù) 雜的算法需要加上流程說明;函數(shù)注釋包括 :輸入、輸出、函數(shù)描述、流程處理、全局變量、調(diào)用樣例等,復(fù)雜的函數(shù) 需要加上變量用途說明 ;程序中注釋包括:修改時(shí)間和作者、方便理解的注釋等 ;引用一 : 文件開頭的注釋模板/* k'k'k * *'k * * * * * * * 文件名: Co

14、pyright (c) 1998 1999 * * *公司技術(shù)開發(fā)部 * 創(chuàng)建人: 日 期: 修改人 : * 日 期: * 描 述: * * 版 本:* * * * * 'k* * 'k 'k * * * * */引用二 : 函數(shù)開頭的注釋模板/ * * * * * * *'k * * k'k * k'k * * * * * 函數(shù)名:* 輸 入: a,b,c * a* b- - c-* 輸 出: x -* x 為 1, 表示。.。*x 為 0, 表示.。* 功能描述 : 全局變量 調(diào)用模塊:* 作 者: * 日 期: * 修 改: * 日 期:

15、* 版本* * * 'k 'k 'k * * * * * * 'k * * * * / 引用三 : 程序中的注釋模板/ - - - - - - - - - - - -/ /* 注釋內(nèi)容*/ /- - - - - - */ 8 程序a. 程序編碼力求簡潔 ,結(jié)構(gòu)清晰, 避免太多的分支結(jié)構(gòu)及太過于技巧性的程序,盡量不采用遞歸模式。b。 編寫程序時(shí),亦必須想好測試的方法,換句話說,”單元測試” 的測試方案應(yīng) 在程序編寫時(shí)一并擬好。 c. 注釋一定要與程序一致。d. 版本封存以后的修改一定要將老語句用 /* / 封閉,不能自行刪除或修改,并要 在文件 及函數(shù)的修改記錄中

16、加以記錄。e。 程序中每個(gè)block的開頭” ”及” ”必須對齊,嵌套的 block每進(jìn)一套, 縮進(jìn)一個(gè) tab, TAB為4個(gè)空格,block類型包括if、for、while、do等關(guān)鍵字引出的.f。對于比較大的 函數(shù),每個(gè) block 和特殊的函數(shù)調(diào)用 ,都必須注明其功能,舉例如下 :count.divisor = 1193280 / freq ;/ compute the proper count OutByte(unsigned short )67, (unsigned char)182); / tell 8253 that a count is comingOutByte(unsig

17、ned short)66, count。 c0) ; / send low-order byte OutByte (unsigned short) 66, count。 c1); / send high order byte xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxbcb, delphi 中的變量命名 : 遵循匈牙利命名法 ,命 名必須有意義,制定如下規(guī)定 窗體:以大寫的 W 開始,如 About 版權(quán)窗體 , 命名為 WAbout 文件:以大寫的 F 開始,如 About版權(quán)窗體,文件命名為FAbout。cpp按鈕(Button ):如退出按鈕,命名為

18、btnExit 基類:加base標(biāo)記,如報(bào)表基類,窗體命名為:WBaseRep,文件命名為 FBaseRep cpp1. 在。h/.cpp的開頭應(yīng)有一段格式統(tǒng)一的說明,內(nèi)容包括:> a。文件名(FileName) ; > b。創(chuàng)建人 ( Creater); > c。 文件創(chuàng)建時(shí)間 ( Date ); d. 簡短說明文件功能、用途(Comment)。 好習(xí)慣 2. 除非極其簡單,否則對函數(shù)應(yīng)有注釋說明。內(nèi)容包括:功能、入口/出口參數(shù),必 要 時(shí)還可有備注或補(bǔ)充說明。還是好習(xí)慣 3。 每列代碼的長度推薦為80列,最長不得超過 120 列;折行以對齊為準(zhǔn) .太寬了,我的限制是 60

19、列,因?yàn)槲谋痉绞较缕聊灰还?0列,如果你用BC這一類的編輯 器,窗口邊框等又要占據(jù)一定空間,所以 80 列太寬> 4. 循環(huán)、分支代碼,判斷條件與執(zhí)行代碼不得在同一行上 . 很對 5. 指針的定義, * 號既可以緊接類型 ,也可以在變量名之前。>> 例:可寫做: int* pnsize; 也可寫做 :int *pnsize ; >> 但不得寫做: int pnsize;建議采用第二種,除非附加另外一條規(guī)定:一次只聲明一個(gè)變量,否則就會讓人混淆,比如: int* a , b;看起來 b 好像也是個(gè)指針,其實(shí)不是。 6。 在類的成員函數(shù)內(nèi)調(diào)用非成員函數(shù)時(shí),在非成員函數(shù)

20、名前必須加上":”。這一條我倒覺得并不是必需的,我的看法是決不要讓你的類成員函數(shù)和全局函數(shù)的名稱相同(或類似)> 7. 函數(shù)入口參數(shù)有缺省值時(shí),應(yīng)注釋說明。 > 例: BOOL CWpsDib:: PaintDIB(CDC* pDC, CRect rc, int nBrightness, file : / =0 /> BOOL bGrayScale file:/=FALSE/ )每個(gè)變量寫一行 ,必要時(shí)加上 /in, out*/ 注釋 > 8。 else if 必須寫在一行。 應(yīng)該盡量避免 else if 這樣的結(jié)構(gòu)> 9.與, ?、, ?有關(guān)的各項(xiàng)規(guī)定

21、:>> 9。1,?、, ?應(yīng)獨(dú)占一行。在該行內(nèi)可有注釋。> 9。2 ,?必須另起一行,?之后的代碼必須縮進(jìn)一個(gè)Tab.,?與,?必須在 同> 一列上。 9.3 在循環(huán)、分支之后若只有一行代碼,雖然可省略 ,?、, ?,但不推薦這么 > 做。若省略后可能引起歧義,則必須加上 , ?、, ?。 持保留意見 ,因?yàn)?GNU 的代碼規(guī)范是這樣的: if ( NULL = ptr ) / do something here 或者if ( NULL = ptr ) / do something here 爭論哪個(gè)更好并沒有意義,關(guān)鍵是統(tǒng)一,如果用VC當(dāng)然你的辦法最方便,可是如

22、果你用emacs或者vi,就不是這樣了。> 10。與空格有關(guān)的各項(xiàng)規(guī)定。> 10.1 在所有兩目、三目運(yùn)算符的兩邊都必須有空格.在單目運(yùn)算符兩端不必空格。但 在, >?、, :: ?、 , 。 ?、 , ?、, ?等運(yùn)算符前后,及, &?(取地址)、, * ?(取值)等運(yùn) 算符之后不得有空格 . 10.2 for、 while、 if 等關(guān)鍵詞之后應(yīng)有 1 個(gè)空格,再接,( ?,之后無空格 ;在結(jié) 尾> 的, )?前不得有空格。我認(rèn)為在括號兩端加空格并不是什么錯(cuò)誤 ,尤其是在一個(gè)條件十分復(fù)雜的 if 語句里 > 10。3 調(diào) 用函數(shù)、宏時(shí), ,( ?、 ,

23、 ) ?前后不得有空格。 10。 4 類型強(qiáng)制轉(zhuǎn)換時(shí), ,( ?,)?前后不得 有空格 同上> 11. 與縮進(jìn)有關(guān)的各項(xiàng)規(guī)定 > 11.1縮進(jìn)以Tab為單位。1個(gè)Tab為4個(gè)空格我認(rèn)為這個(gè)值應(yīng)該更大, 我自己使用 8個(gè)空格,如果你的代碼因?yàn)榭s進(jìn)幅度太大而導(dǎo)致 折行, 那么幾乎可以肯定你的程序設(shè)計(jì)方案有問題。> 11。 2 下列情況,代碼縮進(jìn)一個(gè) Tab: > 1.函數(shù)體相對函數(shù)名及' '、 '' 。 2。 if、 else、 for、 while、 do 等之后的代碼。> 3. 一行之內(nèi)寫不下,折行之后的代碼,應(yīng)在合理的位置進(jìn)行折行

24、。若有+ * / 等 運(yùn)> 算符 , 則運(yùn)算符應(yīng)在上一行末尾,而不應(yīng)在下一行的行首。這一條我反對,運(yùn)算符應(yīng)該放在下一行行首,以使人能清楚的知道這一行是續(xù)上一行的,比 如 if ( something & somethingelse otherthings ) 如 果 寫 做 if ( something & somethingelse && otherthings ) 反而看不清楚> 11.3 下列情況,不必縮進(jìn): switch 之后的 case、 default。附件二 java 語言單元測試規(guī)范java語言的編程規(guī)范遵照公司的開發(fā)規(guī)范。1.基本要

25、求1。1 程序結(jié)構(gòu)清析 ,簡單易懂,單個(gè)函數(shù)的程序行數(shù)不得超過100 行。 1.2 代碼精簡,避免垃圾程序。1 。 3 盡量使用標(biāo)準(zhǔn)庫函數(shù)和公共函數(shù)。1。4 不要隨意定義全局變量,盡量使用局部變量。 1。 5 使用括號以避免二義性。2??勺x性要求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 在典型算

26、法前都有注釋。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. 結(jié)構(gòu)化要求3。 1禁止出現(xiàn)兩條等價(jià)的支路。3。2禁止GOTO語句。3 。3 用 IF 語 句 來 強(qiáng) 調(diào) 只 執(zhí) 行 兩 組 語 句 中 的 一 組 。 禁止ELSE

27、GOTO ELSE RETURN. 3.用 CASE實(shí)現(xiàn)多路分支。3。5避免從循環(huán)引出多個(gè)出口。 3。6 函數(shù)只有一個(gè)出口。 3。 7 不使用條件賦值語句。 3。 8 避免不必要的分支。3.9 不要輕易用條件分支去替換邏輯表達(dá)式。4. 正確性與容錯(cuò)性要求4。1 程序首先是正確 ,其次是優(yōu)美4.2 無法證明你的程序沒有錯(cuò)誤,因此在編寫完一段程序后,應(yīng)先回頭檢查。4。 3 改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前首先考慮對其它程序的影響。4.4 所有變量在調(diào)用前必須被初始化。4。 5 對所有的用戶輸入 ,必須進(jìn)行合法性檢查。4。 6 不要比較浮點(diǎn)數(shù)的相等,如: 10。 0 * 0.1 = 1.0

28、 , 不可靠4。 7 程序與環(huán)境或狀態(tài)發(fā)生關(guān)系時(shí), 必須主動去處理發(fā)生的意外事件,如文件能否 邏輯鎖定、打印機(jī)是否聯(lián)機(jī)等。4。8 單元測試也是編程的一部份,提交聯(lián)調(diào)測試的程序必須通過單元測試。5??芍赜眯砸?。1 重復(fù)使用的完成相對獨(dú)立功能的算法或代碼應(yīng)抽象為公共控件或類. 5。 2 公共控件或類應(yīng)考慮 OO 思想,減少外界聯(lián)系,考慮獨(dú)立性或封裝性。5.3 公共控件或類應(yīng)建立使用模板。 命名規(guī)范 定義這個(gè)規(guī)范的目的是讓項(xiàng)目中所有的文檔都看起來像一個(gè)人寫的,增加可讀性,減少項(xiàng)目組中因?yàn)閾Q人而帶來的損失。 (這些規(guī)范并不是一定要絕對遵守,但是一定要讓程序有良好 的可讀性)Package的命名Pa

29、ckage的名字應(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ù)使 用 有 意義 的 參 數(shù)命 名 ,如 果可 能 的 話 , 使 用 和 要 賦值 的 字 段 一樣 的 名 字:SetCounter

30、(int size) this.size = size; Java 文件樣式 所有的 Java(*。 java) 文件都必須遵守如下的樣式規(guī)則版權(quán)信息版權(quán)信息必須在 java 文件的開頭,比如:/ Copyright ? 2000 Shanghai XXX Co。 Ltd. All right reserved 。 */ 其他不需要出現(xiàn)在 javadoc 的信息也可以包含在這里。Package/Importspackage 行要在 import 行之前, import 中標(biāo)準(zhǔn)的包名要在本地的包名之前,而且按照字母順 序 排 列 . 如 果 import 行 中 包 含 了 同 一 個(gè) 包 中

31、的 不 同 子 目 錄 , 則 應(yīng) 該 用 * 來 處 理。 package hotlava。net.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 a

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

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

34、); 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ù),它應(yīng)該用遞增的方式寫(比如:參數(shù)多的寫在后面)。訪問類型 ("public ” , "private"等。)和任何"static ”,” fin al” 或” synchroni

35、zed"應(yīng)該在一行中,并且方法和參數(shù)另寫一行,這樣可以使方法和參數(shù)更易讀. publicCounterSet(int size) this.size = size;克隆方法 如果這個(gè)類是可以被克隆的,那么下一步就是 clone 方法: publicObject clone() try CounterSet obj =( CounterSet)super.clone() ; obj.packets = (int )packets 。clone(); obj.size = size; return obj;catch(CloneNotSupportedException e )throw

36、 new InternalError (” UnexpectedCIoneNotSUpportedException : ” + e。getMessage(); 類方法 下面開始寫類的方法: /* Set the packet counters* (such as when restoring from a database) */protected finalvoid setArray (int r1, int r2, int r3, int r4) throws IllegalArgumentException / Ensure the arrays are of equal size /

37、if (r1.length != r2.length | r1.length!= r3.length | r1.length != r4.length ) throw new IllegalArgumentException("Arrays must be of t he same size"); System.arraycopy( r1, 0, r3, 0, r1.length); System。arraycopy (r2, 0, r4, 0, r1。 length);toString 方法無論如何,每一個(gè)類都應(yīng)該定義 toString 方法: publicString

38、toString( )String retval = ” CounterSe:t ”;for (int I = 0 ; I < data 。 length ( );i+ ) retval += data.bytes 。 toString() ; retval += data.packets.toString () ; return retval ;main 方法如果 main(String) 方法已經(jīng)定義了, 那么它應(yīng)該寫在類的底部 . 代碼編寫格式 代碼樣式代碼應(yīng)該用 unix 的格式 ,而不是 windows 的(比如:回車變成回車+換行)文檔化必須用 javadoc 來為類生成文檔

39、 .不僅因?yàn)樗菢?biāo)準(zhǔn) ,這也是被各種 java 編譯器都認(rèn)可的方 法。使用author標(biāo)記是不被推薦的,因?yàn)榇a不應(yīng)該是被個(gè)人擁有的??s進(jìn)縮進(jìn)應(yīng)該是每行2個(gè)空格.不要在源文件中保存Tab字符。在使用不同的源代碼管理工具時(shí)Tab字符將因?yàn)橛脩粼O(shè)置的不同而擴(kuò)展為不同的寬度。如果你使用UltrEdit作為你的Java源代碼編輯器的話,你可以通過如下操作來禁止保存 Tab 字符, 方法是通過 UltrEdit 中先設(shè) 定Tab使用的長度室2個(gè)空格,然后用Format|Tabs to Spaces菜單將Tab轉(zhuǎn)換為空格.頁寬頁寬應(yīng)該設(shè)置為 80 字符 . 源代碼一般不會超過這個(gè)寬度 , 并導(dǎo)致無法完整顯

40、示 , 但這一設(shè)置 也可以靈活調(diào)整。 在任何情況下 , 超長的語句應(yīng)該在一個(gè)逗號或者一個(gè)操作符后折行。一條語句折行后, 應(yīng)該比原來的語句再縮進(jìn) 2個(gè)字符 . 對 中的語句應(yīng)該單獨(dú)作為一行。 例如, 下面的第 1 行是錯(cuò)誤的, 第 2 行是正確的 : if (i0) I + ; / 錯(cuò)誤, 和 在同一行 if (i0) I +; / 正確 , 單獨(dú)作為一行 語句永遠(yuǎn)單獨(dú)作為一行。如果 語句應(yīng)該縮進(jìn)到與其相對應(yīng)的 那一行相對齊的位置。括號 左括號和后一個(gè)字符之間不應(yīng)該出現(xiàn)空格 , 同樣 , 右括號和前一個(gè)字符之間也不應(yīng)該出現(xiàn)空 格。 下面的例子說明括號和空格的錯(cuò)誤及正確使用 : CallProc( Ap

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論