軟件開(kāi)發(fā)編碼規(guī)范14548_第1頁(yè)
軟件開(kāi)發(fā)編碼規(guī)范14548_第2頁(yè)
軟件開(kāi)發(fā)編碼規(guī)范14548_第3頁(yè)
軟件開(kāi)發(fā)編碼規(guī)范14548_第4頁(yè)
軟件開(kāi)發(fā)編碼規(guī)范14548_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、軟件開(kāi)發(fā)編碼規(guī)范(C#)目 錄1引言41.1編寫(xiě)目的41.2背景41.3定義41.4參考資料42基本要求42.1程序結(jié)構(gòu)要求42.2可讀性要求42.3結(jié)構(gòu)化要求52.4正確性與容錯(cuò)性要求52.5可重用性要求63用戶界面設(shè)計(jì)原則64源程序書(shū)寫(xiě)規(guī)范64.1通用源代碼格式規(guī)則6縮進(jìn)6邊距7“”的使用7注釋74.2語(yǔ)句格式與語(yǔ)句書(shū)寫(xiě)規(guī)范7括號(hào)8保留字和關(guān)鍵字8函數(shù)8變量8語(yǔ)句85命名規(guī)范105.1函數(shù)命名105.2形參105.3常量和變量10常量和宏定義10變量105.4函數(shù)使用說(shuō)明、接口命名、NameSpace命名115.5控件的命名125.6類(lèi)型12一般類(lèi)型12構(gòu)造類(lèi)型13類(lèi)類(lèi)型135.7文件和文

2、件夾13文件夾的命名規(guī)則13文件命名146源程序文檔注釋規(guī)范146.1注釋文檔的一般規(guī)范141 引言1.1 編寫(xiě)目的本規(guī)范旨在用規(guī)范文件的形式,對(duì)全公司使用C#進(jìn)行的編程過(guò)程,進(jìn)行有效的規(guī)范管理,使得最終的軟件產(chǎn)品具有良好的風(fēng)格和統(tǒng)一的結(jié)構(gòu),且使代碼可讀性強(qiáng)、易維護(hù)。 本規(guī)范預(yù)期讀者是全公司所有參與編程的軟件開(kāi)發(fā)人員以及其他相關(guān)人員。本標(biāo)準(zhǔn)適用于Visual C# ,其余語(yǔ)言作參考。1.2 背景公司在上一個(gè)項(xiàng)目中由于代碼編寫(xiě)風(fēng)格不統(tǒng)一,可讀性較差、較難維護(hù),使得工作效率有所降低。1.3 定義 無(wú)1.4 參考資料Pascal Standards FAQ (E)JavaDoc (E)Doc-O-m

3、atic Document (E)Artemis Alliance Delphi Coding Standards (E)C#基本書(shū)寫(xiě)規(guī)范C#編碼規(guī)范綱要2 基本要求2.1 程序結(jié)構(gòu)要求程序結(jié)構(gòu)清晰,簡(jiǎn)單易懂,單個(gè)函數(shù)的程序行數(shù)一般不得超過(guò)100行,個(gè)別特殊函數(shù)除外。代碼中打算干什么,要簡(jiǎn)單,直接了當(dāng),代碼精簡(jiǎn),避免垃圾程序。應(yīng)盡量使用.NET庫(kù)函數(shù)和公共函數(shù)(無(wú)特殊情況不要使用外部方法調(diào)用windows的核心動(dòng)態(tài)鏈接庫(kù))。一般情況下,不得使用全局變量,盡量使用局部變量。2.2 可讀性要求可讀性第一,效率第二。(這僅對(duì)代碼本身而言)。保持注釋與代碼完全一致。每個(gè)源程序文件,都必須有文件頭說(shuō)明,

4、說(shuō)明規(guī)格見(jiàn)“源程序文檔注釋規(guī)范”一節(jié)。每個(gè)函數(shù),都必須有函數(shù)頭說(shuō)明,說(shuō)明規(guī)格見(jiàn)“源程序文檔注釋規(guī)范”一節(jié)。主要變量(結(jié)構(gòu)、聯(lián)合、類(lèi)或?qū)ο螅┒x或引用時(shí),注釋必須能反映其物理含義。處理過(guò)程的每個(gè)階段都必須有相關(guān)注釋說(shuō)明。在典型算法前都必須有注釋, 同時(shí)算法在滿足要求的情況下應(yīng)盡可能簡(jiǎn)單。利用縮進(jìn)來(lái)顯示程序的邏輯結(jié)構(gòu),縮進(jìn)量一致以Tab鍵為單位,定義Tab為 4個(gè)字節(jié)。循環(huán)、分支層次不要超過(guò)五層。注釋可以與語(yǔ)句在同一行,也可以在上行。空行和空白字符也是一種特殊注釋。一目了然的語(yǔ)句不加注釋。注釋的作用范圍可以為:定義、引用、條件分支以及一段代碼。注釋行數(shù)(不包括文件頭和函數(shù)頭說(shuō)明部份)應(yīng)占總行數(shù)的

5、1/5 到 1/3。常量定義(const)有相應(yīng)說(shuō)明。2.3 結(jié)構(gòu)化要求禁止出現(xiàn)兩條等價(jià)的支路。禁止GOTO語(yǔ)句。用 IF 語(yǔ)句來(lái)強(qiáng)調(diào)只執(zhí)行兩組語(yǔ)句中的一組。禁止 ELSE GOTO 和 ELSE RETURN。用 CASE 實(shí)現(xiàn)多路分支。避免從循環(huán)引出多個(gè)出口。函數(shù)只有一個(gè)出口。不使用復(fù)雜的條件賦值語(yǔ)句。避免不必要的分支。不要輕易用條件分支去替換邏輯表達(dá)式。2.4 正確性與容錯(cuò)性要求程序首先是正確,其次是優(yōu)美。無(wú)法證明你的程序沒(méi)有錯(cuò)誤,因此在編寫(xiě)完一段程序后,應(yīng)先回頭檢查。改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前首先考慮對(duì)其它程序的影響。所有變量在調(diào)用前必須被初始化。對(duì)所有的用戶輸入,必須

6、進(jìn)行合法性檢查。不要比較浮點(diǎn)數(shù)的相等,如: 10.0 * 0.1 = 1.0 , 不可靠。程序與環(huán)境或狀態(tài)發(fā)生關(guān)系時(shí),必須主動(dòng)去處理發(fā)生的意外事件,如文件能否邏輯鎖定、打印機(jī)是否聯(lián)機(jī)等,對(duì)于明確的錯(cuò)誤,要有明確的容錯(cuò)代碼提示用戶。單元測(cè)試也是編程的一部份,提交聯(lián)調(diào)測(cè)試的程序必須通過(guò)單元測(cè)試。盡量使用規(guī)范的容錯(cuò)語(yǔ)句。 例如:trycatchfinally2.5 可重用性要求重復(fù)使用的完成相對(duì)獨(dú)立功能的算法或代碼應(yīng)抽象為服務(wù)或類(lèi)。服務(wù)或類(lèi)應(yīng)考慮面向?qū)ο?OO)思想,減少外界聯(lián)系,考慮獨(dú)立性或封裝性。3 用戶界面設(shè)計(jì)原則除標(biāo)題部分外,所有顯示給用戶的字體(如BUTTON和LABEL等)使用標(biāo)準(zhǔn)字體:

7、宋體、九號(hào)、黑色;標(biāo)題部分可用醒目的字體,如:宋體、小二號(hào)、紅色。采用Windows缺省的風(fēng)格。窗體盡量從已有的父窗體繼承。方便用戶對(duì)信息的輸入、修改和閱讀。驗(yàn)證用戶輸入的有效性和合理性。具有清晰明確的用戶提示信息。使用Tab鍵在輸入項(xiàng)之間移動(dòng)輸入焦點(diǎn)(可選)。標(biāo)準(zhǔn)按鈕大小必須相同,使用的圖像和標(biāo)題必須與界面風(fēng)格規(guī)范一致,如果出現(xiàn)該規(guī)范中沒(méi)有的地方,須與項(xiàng)目負(fù)責(zé)人和美工協(xié)商。4 源程序書(shū)寫(xiě)規(guī)范4.1 通用源代碼格式規(guī)則4.1.1 縮進(jìn)縮進(jìn)就是每級(jí)間有一個(gè)Tab單位。不要在源代碼中放置制表符。這是因?yàn)椋票矸膶挾入S著不同的設(shè)置和代碼管理實(shí)用程序(打印、文檔及版本控制等)而不同。沿邏輯結(jié)構(gòu)行縮進(jìn)

8、代碼。沒(méi)有縮進(jìn),代碼將變得難以理解,如: if(expression ) /此處填寫(xiě)你的代碼塊;/ if(expression ) /此處填寫(xiě)你的代碼塊;/ else /此處填寫(xiě)你的代碼塊;/縮進(jìn)代碼會(huì)產(chǎn)生出更容易閱讀的代碼,如: if(expression ) if(expression )/此處填寫(xiě)你的代碼塊;/else/此處填寫(xiě)你的代碼塊;/4.1.2 邊距 邊距設(shè)置為80個(gè)字符。源代碼一般不會(huì)因?qū)懸粋€(gè)單詞而超過(guò)邊距,但本規(guī)則比較靈活。只要可能,長(zhǎng)度超過(guò)一行的語(yǔ)句應(yīng)當(dāng)用分行符換行。換行后,應(yīng)縮進(jìn)兩個(gè)字符。 4.1.3 “”的使用“”或“”必須單獨(dú)占一行。例如: 錯(cuò)誤形式:for

9、(i:=0;i<10;i+) / 錯(cuò), “” 與f o r 在同一行 正確形式:for(i:=0;i<10;i+) / 對(duì), “”在另外一行中4.1.4 注釋通常使用“/*.*/”類(lèi)型的塊注釋和“/”類(lèi)型的行注釋。4.2 語(yǔ)句格式與語(yǔ)句書(shū)寫(xiě)規(guī)范4.2.1 括號(hào) 在左括號(hào)與下一字符之間沒(méi)有空格。同樣,右括號(hào)與前一字符也沒(méi)有空格。下面的例子演示了正確與不正確的空格。CallProc( aParameter ); / 錯(cuò)!CallProc(aParameter); / 正確!4.2.2 保留字和關(guān)鍵字在用戶的各種命名中不能單獨(dú)使用保留字或關(guān)鍵字來(lái)進(jìn)行命名。4.2.3 函數(shù)4.2

10、.3.1 格式函數(shù)名要能體現(xiàn)出該函數(shù)要實(shí)現(xiàn)的功能,應(yīng)當(dāng)以大寫(xiě)字母開(kāi)始,且大小寫(xiě)交錯(cuò)以增加可讀性(每個(gè)單詞的首字母大寫(xiě))。下面是一個(gè)不正確的寫(xiě)法:pubilc void thisisapoorlyformattedroutinename()下面是正確的寫(xiě)法:pubilc void ThisIsMuchMoreReadableRoutineName() 形參1)參數(shù)順序  形參的順序主要要考慮寄存器調(diào)用規(guī)則。最常用的參數(shù)應(yīng)當(dāng)作為第一個(gè)參數(shù),按使用頻率依次從左到右排。輸入?yún)?shù)位于輸出參數(shù)之前。范圍大的參數(shù)應(yīng)當(dāng)放在范圍小的參數(shù)之前。例如:SomeProc(aPlanet, aC

11、ontinent, aCountry, aState, aCity).  有些則例外。例如,在事件處理過(guò)程中,Object 類(lèi)型的Sender 參數(shù)往往是第一個(gè)要傳遞的參數(shù)。2)常量參數(shù)  任何值類(lèi)型參數(shù),只要不加REF標(biāo)志,都是常量參數(shù);任何引用類(lèi)型參數(shù),都不是常量參數(shù),不管加不加標(biāo)志。4.2.4 變量 局部變量  局部變量用于過(guò)程內(nèi)部,如果需要的話,應(yīng)當(dāng)在過(guò)程的入口處立即初始化變量。 全局變量  一般不鼓勵(lì)使用全局變量。不過(guò),有時(shí)候需要用到。即使如此,也應(yīng)當(dāng)把全局變量限制在需要的環(huán)境中。例如,一個(gè)全局變量可能只在單元的實(shí)現(xiàn)

12、部分是全局的。  全局?jǐn)?shù)據(jù)如果將由許多單元使用,就應(yīng)移動(dòng)到一個(gè)公用單元里被所有對(duì)象使用。全局?jǐn)?shù)據(jù)可在聲明時(shí)直接初始化為一個(gè)值。4.2.5 語(yǔ)句 If 語(yǔ)句  在if/else語(yǔ)句中, if子句的條件應(yīng)該直接且易于理解。為了避免出現(xiàn)許多if語(yǔ)句,可以使用switch語(yǔ)句代替。如果多于5級(jí),不要使用if語(yǔ)句。請(qǐng)改用更清楚的方法。  如果在if語(yǔ)句中有多個(gè)條件要測(cè)試,應(yīng)按照計(jì)算的復(fù)雜程度從右向左排。這樣,可以使代碼充分利用編譯器的短路估算邏輯。例如,如果Condition1比Condition2快,Condition2比Condition3快,則if語(yǔ)句一

13、般應(yīng)這樣構(gòu)造:if (Condition1 && Condition2 && Condition3)   如果Condition3為False的機(jī)會(huì)很大,利用短路估算邏輯,我們也可以將Condition3放在最前面:if (Condition3 && Condition1 && Condition2) 有if出現(xiàn),就必須有對(duì)應(yīng)的else出現(xiàn)。if語(yǔ)句的三種形式:1) 形式一(不需要else) if (Condition) Process;/else/ No Else Needed/2) 形式二(需要else,但是else

14、里面不需要處理) if (Condition) Process;else/No Need Process3) 形式三(if里面不需要處理) if (Condition)/ No Need ProcesselseProcess; switch 語(yǔ)句1)概述  switch語(yǔ)句中每種情況的常量應(yīng)當(dāng)按數(shù)字或字母的順序排列。每種情況的動(dòng)作語(yǔ)句應(yīng)當(dāng)簡(jiǎn)短且通常不超過(guò)4 - 5 行代碼。如果動(dòng)作太復(fù)雜,應(yīng)將代碼單獨(dú)放在一個(gè)函數(shù)中。switch語(yǔ)句的else子句只用于默認(rèn)情況或錯(cuò)誤檢測(cè)。2)格式  switch語(yǔ)句遵循一般的縮進(jìn)和命名規(guī)則。 while 語(yǔ)句&#

15、160; 所有對(duì)while循環(huán)進(jìn)行初始化的代碼應(yīng)當(dāng)位于while入口前,且不要被無(wú)關(guān)的語(yǔ)句隔開(kāi)。任何業(yè)務(wù)的輔助工作都應(yīng)在循環(huán)后立即進(jìn)行。 for 語(yǔ)句如果循環(huán)次數(shù)是確定的,應(yīng)當(dāng)用for語(yǔ)句代替while語(yǔ)句。5 命名規(guī)范5.1 函數(shù)命名  函數(shù)名應(yīng)當(dāng)有意義。進(jìn)行一個(gè)動(dòng)作的函數(shù)最好在名稱前加上表示動(dòng)作的動(dòng)詞為前綴。例如:public void FormatHardDrive()  設(shè)置輸入?yún)?shù)值的函數(shù)名應(yīng)當(dāng)以Set 為其前綴,例如:public void SetUserName()  獲取數(shù)值的函數(shù)名應(yīng)當(dāng)以Get 為其前綴,例如:public stri

16、ng GetUserName()函數(shù)名稱第一個(gè)字母必須使用大寫(xiě)字母,要求用大小寫(xiě)字母組合規(guī)范函數(shù)命名,必要時(shí)可用下劃線間隔,示例如下:public void PrintTrackData()public void ShowChar(int aIndex, char aszMyChar)5.2 形參  所有形參的名稱都應(yīng)當(dāng)表達(dá)出它的用途。如果合適的話,形參的名稱最好以字母a 為前綴,例如:public void SomeProc(string aUserName, integer aUserAge)當(dāng)參數(shù)名與類(lèi)的特性或字段同名時(shí),前綴a 就有必要了。5.3 常量和變量5.3.1 常量和

17、宏定義  常量和宏定義必須具有一定的實(shí)際意義;常量和宏定義必須全部以大寫(xiě)字母,中間可根據(jù)意義的連續(xù)性用下劃線連接,每一條定義的右側(cè)必須有一簡(jiǎn)單的注釋,說(shuō)明其作用。資源名字定義格式:菜單:IDM_XX或者CM_XX位圖:IDB_XX對(duì)話框:IDD_XX字符串:IDS_XXDLGINIT:DIALOG_XXICON:IDR_XX5.3.2 變量  變量命名必須具有一定的實(shí)際意義,形式為xAbcFgh,x由變量類(lèi)型確定,Abc、Fgh表示連續(xù)意義字符串,如果連續(xù)意義字符串僅兩個(gè),可都大寫(xiě),如OK 。常用的變量舉例如下:縮寫(xiě)類(lèi)型舉例dtDateTimedtTextszcharszT

18、extsbsbytesbTextbtbytebtTextnintnTextuiuintuiTextllonglTextululongulTextffloatfTextddoubledTextbboolbTextdedecimaldeTextstrstringstrText 以下面字母或符號(hào)作為前綴,分別具有如下意義:x,y 坐標(biāo)att 表屬性c 類(lèi)對(duì)象 cMain(對(duì)象實(shí)例)m_ 類(lèi)成員變量 m_nVal, m_bFlags_ 類(lèi)靜態(tài)成員變量 s_nVal,s_bFlag 局部變量局部變量遵循其他變量的命名規(guī)則。通常以“n”作為前綴。局部變量中可采用如下幾個(gè)通用變量:nTemp,

19、nResult,I,J(一般用于循環(huán)變量)。 全局變量  全局變量一般以字母“g”打頭,并遵循其他變量的命名規(guī)則。5.4 函數(shù)使用說(shuō)明、接口命名、NameSpace命名函數(shù)使用說(shuō)明包括外來(lái)函數(shù)及內(nèi)部函數(shù)的使用說(shuō)明,外部引用函數(shù)必須在右側(cè)注明函數(shù)來(lái)源: 模塊名及文件名, 如是內(nèi)部函數(shù),只要注釋“l(fā)ocal module”即可。例如:strName=GetUserName(strUserId);/ local modulestrName= GetUserName(strUserId);/ Module Name:UserManage / File Name: fm User

20、Manage 事件函數(shù)的使用說(shuō)明: public void EventHandler(object sd,Event e) /Event 表示事件響應(yīng)的函數(shù)。接口命名: 接口的命名一般都以“I”作為首字母,為了和類(lèi)區(qū)分,例如: interface IComnunication 命名空間:命名空間命名規(guī)則從原則上和函數(shù)命名相同。通常格式如下:NameSpace命名:N+ 部署位置 + 項(xiàng)目名稱 + namespace名稱 其他: Application命名 P + 部署位置 + 項(xiàng)目名稱5.5 控件的命名C#控件規(guī)則為了和.net類(lèi)庫(kù)統(tǒng)一,分WindowsForm程序和Web程序。下面就這兩部分

21、分別描述。1)WindowsForm程序 (用小寫(xiě)前綴表示類(lèi)別) fm 窗口cmd 按鈕cob combo,下拉式列表框txt 文本輸入框lab labal,標(biāo)簽img image,圖象pic picturegrd Grid,網(wǎng)格scr 滾動(dòng)條lst 列表框frm fram2)Web程序 (用大寫(xiě)前綴表示類(lèi)別) Fm 窗口Cmd 按鈕Cob combo,下拉式列表框Txt 文本輸入框Lab labal,標(biāo)簽Img image,圖象Pic pictureGrd Grid,網(wǎng)格Scr 滾動(dòng)條Lst 列表框Frm fram5.6 類(lèi)型5.6.1 一般類(lèi)型 枚舉型  枚舉類(lèi)型名

22、必須代表枚舉的用途。枚舉類(lèi)型的標(biāo)識(shí)符列表的前綴應(yīng)包含2 - 3 個(gè)小寫(xiě)字符,來(lái)彼此關(guān)聯(lián)。例如:enum SongType=stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB;5.6.2 構(gòu)造類(lèi)型 數(shù)組類(lèi)型  數(shù)組類(lèi)型名應(yīng)表達(dá)出該數(shù)組的用途。例如:string weekDays = new string7;字符串型數(shù)組weekDays包括7個(gè)元素。 結(jié)構(gòu)體類(lèi)型 結(jié)構(gòu)體類(lèi)型命名必須全部用大寫(xiě)字母,原則上前面以下劃線開(kāi)始;結(jié)構(gòu)體變量命名必須用大小寫(xiě)字母組合,第一個(gè)字母必須使用大寫(xiě)字母

23、,必要時(shí)可用下劃線間隔。對(duì)于私有數(shù)據(jù)區(qū),必須注明其所屬的進(jìn)程。全局?jǐn)?shù)據(jù)定義只需注意其用途。示例如下:public struct DBS_DATABASEchar szProductName20; char szAuthor20; char szReleaseDate16; char szVersion10;  unsigned long MaxTables; unsigned long UsedTables; DBS_DATABASE GdataBase;5.6.3 類(lèi)類(lèi)型 類(lèi)命名與格式  類(lèi)的名稱應(yīng)當(dāng)表達(dá)出類(lèi)的用途。一般的類(lèi)名前要加字母“C”,如果是接口類(lèi)那么類(lèi)名前要加“I”,錯(cuò)誤異常類(lèi)的類(lèi)名前要加“E”,而類(lèi)引用類(lèi)型(Class-reference type)則要在類(lèi)名后加“Class”,抽象類(lèi)一般是在類(lèi)名前還要加“Abstract”。 屬性命名規(guī)則屬性的命名遵循與變量相同的規(guī)則,只不過(guò)要加前綴“f”,表示這是屬性。 方法命名規(guī)則  方法的命名遵循與過(guò)程和函數(shù)相同的規(guī)則。5.7 文件和文件夾5.7.1 文件夾的命名規(guī)則

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論