軟件設計規范標準_第1頁
軟件設計規范標準_第2頁
軟件設計規范標準_第3頁
軟件設計規范標準_第4頁
軟件設計規范標準_第5頁
已閱讀5頁,還剩82頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

修訂履歷

序號版本修訂內容修訂人修訂日期

會簽與文件發放:

會簽部門會簽人會簽日期簽收部門簽收人簽收日期

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

目錄

第一章、項目模塊劃分...............................................16

一、模塊劃分........................................................16

二、模塊命名........................................................16

第二章、文件格式...................................................16

一、c文件格式說明:...............................................16

1、文件創建及修改說明區.............................................16

2、頭文件引用區....................................................17

3、全局變量定義區..................................................17

4、驅動函數區.......................................................17

5、應用函數區.......................................................18

6、文件結束說明....................................................18

二、h文件格式說明..................................................18

1、文件創建及修改說明區.............................................18

2、防重調用定義....................................................19

3、頭文件引用.......................................................19

4、控制接口定義區..................................................19

5、常量定義區.......................................................20

6、宏調用定義區....................................................20

7、類型定義區.......................................................20

8、外部引用變量區..................................................20

9、外部引用函數區..................................................21

10、操作流程說明區.................................................21

11、文件結束說明...................................................21

第三章、命名規則...................................................22

一、函數命名規則...................................................22

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

二、變量命名規則...................................................22

三、宏命名規則.....................................................23

四、文件命名規則...................................................23

五、新定義變量類型命名規則.........................................23

六、命名注意事項:.................................................23

1、標識符命名基本原則..............................................23

2、命名中若使用特殊約定或縮寫,則要有注釋說明......................24

3、局部循環變量也必須按照變量命名規則來定義........................24

4、不要用數字或較奇怪的字符來定義標識符............................24

5、用正確的反義詞組命名具有互斥意義的變量或相反動作的函數等.........24

6、避免使用以下劃線開始和結尾的定義.................................24

7、程序中不要出現僅靠大小寫區分的相似的標識符.......................24

8、標識符縮寫.......................................................25

9、函數名應準確描述函數的功能......................................25

10、避免使用無意義或含義不清的動詞為函數命名.......................25

第四章、代碼書寫規范...............................................25

一、基本原則........................................................25

二、排版...........................................................25

1、縮進風格.........................................................25

2、不要使用【TAB】鍵...............................................25

3、空行............................................................25

4、語句長度要小于80個字符.........................................26

5、長語句換行.......................................................26

6、長表達式換行....................................................27

7、若函數的參數較長,則要進行適當的劃分............................27

8、一行只寫一條語句................................................27

9、括號{}..........................................................28

10、語句縮進要求...................................................28

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

11、分界符.........................................................29

12、空格...........................................................30

三、注釋...........................................................31

1、注釋量..........................................................31

2、函數頭部注釋....................................................31

3、代碼與注釋同時修改..............................................31

4、注釋的內容要清楚、明了,含義準確,防止注釋二義性................32

5、避免在注釋中使用縮寫,特別是非常用縮寫..........................32

6、注釋書寫位置....................................................32

7、變量、常量命名不能充分自注釋的,必須加以注釋.....................32

8、數據結構命名不能充分自注釋的,必須加以注釋.......................33

9、全局變量注釋....................................................33

10、注釋要與說描述的內容進行同樣的縮排.............................33

11、將注釋與其上面的代碼用空行隔開..................................34

12、連續case語句處理時,必須編寫注釋..............................35

13、代碼或表達式的中間禁止插入注釋..................................36

14、通過正確命名使代碼成為自注釋的..................................37

15、在代碼的功能、意圖層次上進行注釋,提供有用、額外的信息..........37

16、在程序塊的結束行右方加注釋標記,以表明某程序塊的結束...........37

17、注釋格式........................................................37

18、采用中文注釋...................................................38

19、使用#if0和#endif注釋代碼塊..................................38

20、注釋不能嵌套...................................................38

四、代碼可讀性.....................................................38

1、使用小括號明確表達式的操作順序..................................38

2、用有意義的枚舉和宏替代數字......................................39

3、源程序中關系較為緊密的代碼應盡可能相鄰..........................39

4、用多行簡單語句替代復雜語句......................................40

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

五、變量,結構.....................................................40

1、公共變量.........................................................40

1.1、去掉沒必要的公共變量..........................................40

1.2、仔細定義并明確公共變量的含義、作用、取值范圍及公共變量間的關系.40

1.3、明確公共變量與操作此公共變量的函數或過程的關系................40

1.4、要謹慎向公共變量傳遞數據......................................41

1.5、防止局部變量與公共變量同名。..................................41

1.6、公共變量僅由模塊或函數創建和修改,其余模塊和函數只能訪問.....41

2、局部變量.........................................................41

2.1,嚴禁使用未經初始化的變量作為右值..............................41

2.2、不使用與硬件或軟件環境關系密切的變量..........................41

2.3、變量聲明時,同一類型,不同意義的多個變量,要分行,便于區分?????41

2.4、對只設置一次的變量,宜使用“const”限定詞進行聲明.............42

2.5、避免在函數中使用static局部變量..............................42

3、數組............................................................42

3.1,數組大小及初始值要明確定義....................................42

3.2、數組、結構和聯合的初始化列表應顯式描述........................42

4、結構、聯合.......................................................42

4.1、結構的功能要單一,是針對一種事務的抽象........................42

4.2、不要設計面面俱到、非常靈活的數據結構..........................43

4.3、不同結構間的關系不要過于復雜..................................43

4.4、結構中元素的個數應適中........................................44

4.5、結構體中元素的布局............................................45

4.6、結構體設計要考慮兼容性........................................46

4.7、跨平臺數據結構,要考慮字節順序及對齊問題......................46

4.8、struct或union類型中至少應有一個成員..........................47

4.9、struct或union類型的成員類型.................................47

5、枚舉............................................................47

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

5.1、枚舉元素的初始化應完整........................................47

6、自定義數據類型..................................................47

6.1、合理地設計數據并使用自定義數據類型............................47

6.2、自定義數據類型命名要恰當......................................47

7、類型轉換.........................................................48

7.1、謹慎使用數據類型的強制轉換....................................48

7.2、了解編譯系統默認的數據類型轉換.................................48

7.3、應禁止signed類型與unsigned類型之間的隱式轉化..............48

7.4、應禁止int類型與float類型的隱式轉化........................48

8、指針............................................................48

8.1,不應對指針變量使用強制類型轉換賦值............................48

8.2、不應把自動類型的局部變量的地址賦值給外部指針..................48

8.3.指針的指針不應超過兩級........................................49

8.4、指向不同數據類型的指針之間不應相互轉換........................49

8.5、指針轉換過程中不應丟失指針的const、volatile屬性.............49

8.6、只有指向數組的指針才允許進行算術運算..........................49

8.7、只有指向同一數組的兩個指針才允許相減..........................49

8.8、只有指向同一數組的兩個指針才允許用〉、>=、〈和號等關系運算符進行比較50

8.9、指針的索引值不應為負..........................................50

8.10、不應對指針值可能為NULL的指針進行算術運算..................50

8.11、調用返回類型為指針的函數后,應進行是否為空的判斷.............50

8.12、局部變量的地址不應在本對象消亡后傳給另外一個對象..........50

8.13、一個未知大小的對象的指針不應成為加法或者減法操作的左操作數....51

六、函數...........................................................51

1、函數編寫原則....................................................51

1.1、明確函數功能,精確(而不是近似)地實現函數設計................51

1.2、函數的規模盡量限制在200行以內.................................51

1.3、一個函數僅完成一件功能........................................52

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

1.4、為簡單功能編寫函數.............................................52

1.5.不要設計多用途面面俱到的函數..................................52

1.6,函數功能具有可預測性..........................................52

1.7、函數功能具有獨立性.............................................53

1.8、防止函數出現隨機內聚..........................................53

1.9,功能不明確的較小函數,可以不必存在............................54

1.10,設計高扇入、合理扇出(小于7)的函數..........................55

1.1k減少函數本身或函數間的遞歸調用................................55

1.12、降低函數間的耦合度............................................55

2、函數參數.........................................................55

2.1、明確接口函數參數的合法性檢查者.................................55

2.2、防止將函數的參數作為工作變量..................................56

2.3,避免設計多參數函數,不使用的參數從接口中去掉..................56

2.4、非調度函數應減少或防止控制參數,盡量只使用數據參數............57

2.5、檢查函數所有參數輸入的有效性..................................57

2.6、檢查函數所有非參數輸入的有效性,如數據文件、公共變量等........57

2.7、調用函數時參數類型要一致......................................58

2.8、避免使用B00L參數.............................................58

2.9、在函數參數中不應使用static存儲類標識符.......................58

2.10、函數參數數量..............................................58

2.11、宜避免函數參數在調用中未被使用................................58

3、函數返回.........................................................58

3.1、對所調用函數的錯誤返回碼要仔細、全面地處理....................58

3.2、函數的返回值要清楚、明了,讓使用者不容易忽視錯誤情況...........58

3.3、函數返回值要與賦值變量類型一致.................................58

3.4、對于提供了返回值的函數,在引用時最好使用其返回值..............58

3.5、函數只有一個出口..............................................58

4、可重入函數.......................................................58

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

4.1、可重入函數使用局部變量........................................58

4.2、可重入函數使用全局變量........................................59

5、函數模塊劃分....................................................60

5.1、仔細分析模塊的功能,進行函數的劃分和組織......................60

5.2、如果多段代碼重復做同一件事情,那么在函數的劃分上可能存在問題...60

5.3、函數內部的代碼結構順序........................................60

6、循環語句.........................................................61

6.1、循環控制變量的類型應為整型....................................61

6.2、循環控制變量應為局部變量......................................61

6.3、for循環控制語句中的3個表達式只應和循環控制相關..............61

6.4、for循環不宜只執行一次.........................................61

7、判斷語句.........................................................62

7.1、不要輕易用條件分支去替換邏輯表達式............................62

7.2、switch語句中不應只包含default語句............................62

7.3、所有非空的switchcase子句都應以break語句結束................62

7.4、switch控制表達式不應是一個常量或邏輯表達式....................62

7.5、每一個switch語句都應至少有一個case子句.......................62

7.6、case表達式的類型應與switch控制表達式的類型一致...............62

7.7、case表達式的大小不應超過switch控制表達式的大小...............62

8、賦值語句.........................................................62

8.1、盡量不使用條件賦值語句........................................62

9、其他注意事項....................................................62

9.1、避免函數中不必要語句,防止程序中的垃圾代碼....................62

9.2、在多任務操作系統的環境下編程,更要注意函數可重入性的構造.....62

9.3、將常用較長變量用宏替代........................................62

七、預處理.........................................................63

1、宏..............................................................63

1.1,用宏定義表達式時,要使用完備的括號............................63

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

1.2、將宏所定義的多條表達式放在大括號中............................63

1.3.使用宏時,不允許參數發生變化..................................64

1.4、函數類宏調用時參數要完整......................................64

2、條件編譯.........................................................64

2.1、預處理語句“#if”和“#endif”不應分散在不同的文件之中.........64

2.2、被包含文件中的“#else"、“#elseif”、“#endif”不應與父文件中的“#if”

匹配...............................................................64

2.3、“#if”表達式中使用的宏應該已經被定義,并且“#if”表達式只能包含整型常量64

2.4、宏如果需要被重定義,應該先用“#undef”解除前面的定義..........65

八、中斷...........................................................65

1、中斷服務程序不應有返回值........................................65

2、中斷服務程序中不應使用printf()函數..............................65

3、對于中斷中使用到的非局部變量,在中斷處理函數中應對其進行入棧保護.65

4、調用中斷處理程序中的變量要進行開關中斷處理......................65

5、對于開關中斷,要注意成對匹配....................................65

6、中斷服務程序代碼要簡單化........................................65

九、程序可測性.....................................................65

1、原則............................................................65

1.1、統一的調測開關及打印函數......................................65

1.2、統一的打印信息串格式..........................................65

1.3、正式軟件產品中應把斷言及其它調測代碼去掉(即把有關的調測開關關掉)65

1.4、用調測開關切換軟件的DEBUG版和正式版..........................65

1.5、軟件DEBUG版和發行版在實現功能上具有一致性....................66

1.6、構造測試環境和測試用例........................................66

1.7、預先設計程序調測的方法和手段及各種調測開關....................66

1.8.調測開關應分為不同級別和類型..................................66

2、斷言............................................................66

2.1、使用斷言來發現軟件問題,提高代碼可測性........................66

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

2.2、用斷言來檢查程序正常運行時不應發生但在調測時有可能發生的非法情況67

2.3、不能用斷言來檢查最終產品肯定會出現且必須處理的錯誤情況.........67

2.4、對較復雜的斷言加上明確的注釋..................................67

2.5、用斷言確認函數的參數..........................................67

2.6、用斷言保證沒有定義的特性或功能不被使用........................67

2.7、用斷言對程序開發環境(OS/Compiler/Hardware)的假設進行檢查...68

2.8、編寫防錯程序,然后在處理錯誤之后可用斷言宣布發生錯誤..........68

十、程序效率........................................................69

1、原則............................................................69

1.1、編程時要經常注意代碼的效率....................................69

1.2,提高代碼效率的前提............................................70

1.3、局部效率應為全局效率服務......................................70

1.4,合理劃分模塊函數..............................................70

1.5、不應花過多的時間拼命地提高調用不很頻繁的函數代碼效率..........70

1.6.不要一味追求緊湊的代碼........................................70

1.7.不應存在執行不到的代碼........................................70

1.8.去掉沒必要的全局變量..........................................70

2、方法............................................................70

2.1、解決軟件空間效率1.................................................70

2.2、解決軟件空間效率2.................................................71

2.3、循環體內工作量最小化..........................................71

2.4、仔細分析有關算法,并進行優化..................................72

2.5、仔細考查、分析系統及模塊處理輸入(如事務、消息等)的方式,并加以改進72

2.6、直接用匯編編寫調用頻繁或性能要求極高的函數....................72

2.7、在多重循環中,應將最忙的循環放在最內層........................72

2.8、盡量減少循環嵌套層次..........................................73

2.9、盡量不在循環體內放置判斷語句..................................73

2.10,盡量用乘法或其它方法代替除法,特別是浮點運算中的除法.........74

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

2.11、應注意switch-case語句的使用..................................74

十一、程序質量.....................................................75

1、原則............................................................75

1.U代碼質量保證優先原則.........................................75

1.2、合理劃分子模塊,提高可移植性和可重用性........................75

1.3,提供良好的接口界面............................................75

1.4、系統具有一定容錯能力..........................................75

2、方法............................................................75

2.1、認真處理程序所能遇到的各種出錯情況............................75

2.2、系統運行之初,要初始化有關變量及運行環境,防止未經初始化的變量被引用75

2.3、系統運行之初,要對加載到系統中的數據進行一致性檢查............75

2.4、嚴禁隨意更改其它模塊或系統的有關設置和配置....................75

2.5、不能隨意改變與其它模塊的接口..................................75

2.6、防止內存操作越界..............................................76

2.7、編程時,要防止差1錯誤........................................76

2.8、要時刻注意易混淆的操作符......................................76

2.9、條件判斷語句必須處理所有情況..................................77

2.10、不要用goto語句...........................................77

2.11、盡量都采用標準語句和標準庫函數................................77

2.12,避免使用嵌入式匯編.........................................77

2.13.精心構造算法,并對其性能、效率進行測試....................77

2.14、對較關鍵的算法最好使用其它算法來確認........................77

2.15、時刻注意表達式是否會上溢、下溢................................77

2.16、使用變量時要注意其邊界值的情況................................78

2.17、注意程序代碼是否超過系統有關限制.............................78

2.18,循環、分支層次不要超過五層...................................78

2.19、不要比較浮點數的相等.........................................78

2.20.關注共用體的存儲、對齊模式...................................78

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

2.21、頭文件中不應有對象或函數的定義................................78

2.22、不應單獨使用小寫字母“1"或大寫字母“0”作為變量名...........78

2.23,函數聲明時參數不應只有類型名沒有標識符...................78

2.24,不應對有符號數進行位運算.....................................79

2.25、無格式的字符型不應與負數常量和零比較.........................79

2.26,無符號值不應與負數常量比較...................................79

2.27、對變量進行移位操作應保證不會產生溢出和數據截短...........79

2.28、不應在布爾表達式中使用賦值操作符.............................79

2.29、不應對布爾表達式進行算術或者位運算...........................79

2.30,表達式的值在任何求值順序下應保持一致.....................79

2.31、應避免除數可能為0的情況出現.................................79

2.32,賦值運算符的左操作數不應進行轉換操作,并且應該是一個可更改的對象79

2.33、sizeof操作符不應用在有單邊作用的表達式上.................80

2.34、留心具體語言及編譯器處理不同數據類型的原則及有關細節.........80

十二、代碼代碼編輯、編譯、審查.....................................80

1、打開編譯器的所有告警開關對程序進行編譯..........................80

2、在產品軟件(項目組)中,要統一編譯開關選項.......................80

3、通過代碼走讀及審查方式對代碼進行檢查............................80

4、測試部測試產品之前,應對代碼進行抽查及評審......................80

5、養成隨時保存編寫代碼的習慣......................................80

6、同產品軟件(項目組)內,最好使用相同的編輯器,并使用相同的設置選項81

7、要小心地使用編輯器提供的塊拷貝功能編程..........................81

8、合理地設計軟件系統目錄,方便開發人員使用........................81

附錄A常用數據類型及簡寫..........................................81

附錄B常用單詞及縮寫..............................................82

附錄C常見反義詞組.................................................84

附錄D常見命名規則.................................................86

一、匈牙利命名法...................................................86

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

二、駱駝(Camel)命名法.............................................86

三、帕斯卡(Pascal)命名法.........................................86

四、下劃線命名法...................................................86

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期發行類別■新增口修訂

軟件設計規范發行部門研發中心

第一章、項目模塊劃分

一、模塊劃分

將整個項目按照功能進行模塊劃分,各個模塊相互獨立,每個模塊由一系列C文件和h文

件組成。簡單功能的模塊采用一個C文件和h文件接口,復雜功能的模塊可能需要多個C文件

和h文件。

二、模塊命名

按照模塊所實現功能的英文名稱或者簡寫命名,全部采用小寫字母,多于1個單詞的中間

加下劃線。例如:

模塊命名說明

led.c

液晶初始化,字符、漢字和圖片顯示

led.h

液晶

lcd_fonts.c

液晶自定義字庫

lcd_fonts.h

key.c

按鍵按鍵初始化,鍵值列表,取按鍵值

key.h

led.c

指示燈指示燈初始化,閃爍控制

led.h

ledseg.c

數碼管數碼管初始化,數字顯示,特殊字符顯示

ledseg.h

beep,c

蜂鳴器蜂鳴器初始化,鳴叫控制

beep,h

第二章、文件格式

一、C文件格式說明:

1、文件創建及修改說明區

文件編號

深圳市德卡科技有限公司

文件版本A1

生效日期

溫馨提示

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

評論

0/150

提交評論