版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟件開(kāi)發(fā)流程規(guī)范V1.0德聯(lián)軟件有限責(zé)任公司編制人: 侯秀美 審核人: 2015 年 8 月 19 日目錄 TOC o 1-3 h z u HYPERLINK l _Toc471739078 目錄 PAGEREF _Toc471739078 h 0 HYPERLINK l _Toc471739079 一、概述 PAGEREF _Toc471739079 h 2 HYPERLINK l _Toc471739080 二、開(kāi)發(fā)流程規(guī)范 PAGEREF _Toc471739080 h 3 HYPERLINK l _Toc471739081 2.1 系統(tǒng)軟硬件開(kāi)發(fā)環(huán)境 PAGEREF _Toc47173
2、9081 h 3 HYPERLINK l _Toc471739082 2.2 系統(tǒng)架構(gòu)(系統(tǒng)組成) PAGEREF _Toc471739082 h 5 HYPERLINK l _Toc471739083 2.3 系統(tǒng)功能模塊設(shè)計(jì) PAGEREF _Toc471739083 h 6 HYPERLINK l _Toc471739084 2.4 系統(tǒng)功能開(kāi)發(fā)流程圖 PAGEREF _Toc471739084 h 6 HYPERLINK l _Toc471739085 2.5 開(kāi)發(fā)修改記錄 PAGEREF _Toc471739085 h 7 HYPERLINK l _Toc471739086 三、開(kāi)發(fā)
3、代碼規(guī)范 PAGEREF _Toc471739086 h 8 HYPERLINK l _Toc471739087 3.1 文件結(jié)構(gòu) PAGEREF _Toc471739087 h 8 HYPERLINK l _Toc471739088 3.1.1 文件信息聲明 PAGEREF _Toc471739088 h 8 HYPERLINK l _Toc471739089 3.1.2 頭文件的結(jié)構(gòu) PAGEREF _Toc471739089 h 10 HYPERLINK l _Toc471739090 3.1.3 定義文件的結(jié)構(gòu) PAGEREF _Toc471739090 h 11 HYPERLINK
4、l _Toc471739091 3.1.4 頭文件的作用 PAGEREF _Toc471739091 h 12 HYPERLINK l _Toc471739092 3.1.5 目錄結(jié)構(gòu) PAGEREF _Toc471739092 h 13 HYPERLINK l _Toc471739093 3.2 命名規(guī)則 PAGEREF _Toc471739093 h 13 HYPERLINK l _Toc471739094 3.2.1 共性原則 PAGEREF _Toc471739094 h 13 HYPERLINK l _Toc471739095 3.2.2 Windows變量命名規(guī)則 PAGEREF
5、_Toc471739095 h 14 HYPERLINK l _Toc471739096 3.3 程序風(fēng)格 PAGEREF _Toc471739096 h 16 HYPERLINK l _Toc471739097 3.3.1 空行 PAGEREF _Toc471739097 h 17 HYPERLINK l _Toc471739098 3.3.2 代碼行 PAGEREF _Toc471739098 h 18 HYPERLINK l _Toc471739099 3.3.3 代碼行內(nèi)的空格 PAGEREF _Toc471739099 h 19 HYPERLINK l _Toc471739100 3
6、.3.4 對(duì)齊 PAGEREF _Toc471739100 h 20 HYPERLINK l _Toc471739101 3.3.5 長(zhǎng)行拆分 PAGEREF _Toc471739101 h 22 HYPERLINK l _Toc471739102 3.3.6 修飾符的位置 PAGEREF _Toc471739102 h 23 HYPERLINK l _Toc471739103 3.3.7 注釋 PAGEREF _Toc471739103 h 23 HYPERLINK l _Toc471739104 3.4 函數(shù)設(shè)計(jì) PAGEREF _Toc471739104 h 26 HYPERLINK l
7、 _Toc471739105 3.4.1 參數(shù)的規(guī)則 PAGEREF _Toc471739105 h 26 HYPERLINK l _Toc471739106 3.4.2 返回值的規(guī)則 PAGEREF _Toc471739106 h 27 HYPERLINK l _Toc471739107 3.4.3 函數(shù)內(nèi)部實(shí)現(xiàn)的規(guī)則 PAGEREF _Toc471739107 h 30 HYPERLINK l _Toc471739108 3.4.4 其它建議 PAGEREF _Toc471739108 h 32 HYPERLINK l _Toc471739109 3.4.5 使用斷言 PAGEREF _T
8、oc471739109 h 32 HYPERLINK l _Toc471739110 3.4.6 引用與指針的比較 PAGEREF _Toc471739110 h 33 HYPERLINK l _Toc471739111 3.5 變量類(lèi)型定義 PAGEREF _Toc471739111 h 35 HYPERLINK l _Toc471739112 四、軟件測(cè)試規(guī)范 PAGEREF _Toc471739112 h 36 HYPERLINK l _Toc471739113 4.1 單元測(cè)試 PAGEREF _Toc471739113 h 36 HYPERLINK l _Toc471739114 4
9、.2 系統(tǒng)測(cè)試 PAGEREF _Toc471739114 h 37 HYPERLINK l _Toc471739115 4.6 業(yè)務(wù)測(cè)試 PAGEREF _Toc471739115 h 38 HYPERLINK l _Toc471739116 4.7 驗(yàn)收測(cè)試 PAGEREF _Toc471739116 h 38 HYPERLINK l _Toc471739117 4.8 用戶(hù)現(xiàn)場(chǎng)測(cè)試 PAGEREF _Toc471739117 h 38 HYPERLINK l _Toc471739118 五、軟件版本管理 PAGEREF _Toc471739118 h 39 HYPERLINK l _To
10、c471739119 4.1版本管理的必要性 PAGEREF _Toc471739119 h 39一、概述本文制定煙臺(tái)開(kāi)發(fā)區(qū)德聯(lián)軟件有限責(zé)任公司計(jì)算機(jī)軟件開(kāi)發(fā)規(guī)范文檔。本規(guī)范的目的是使公司軟件開(kāi)發(fā)項(xiàng)目階段清晰、要求明確、任務(wù)具體、編寫(xiě)的代碼規(guī)范,使之規(guī)范化、系統(tǒng)化和工程化,向公司內(nèi)從事軟件開(kāi)發(fā)的工程師和管理人員提出一系列規(guī)范和要求,從而有利于開(kāi)發(fā)過(guò)程的控制和管理,提高所開(kāi)發(fā)軟件系統(tǒng)的質(zhì)量,縮短開(kāi)發(fā)時(shí)間,減少開(kāi)發(fā)和維護(hù)費(fèi)用,以保證項(xiàng)目高質(zhì)量、順利進(jìn)行。本規(guī)范包含:開(kāi)發(fā)流程規(guī)范和開(kāi)發(fā)代碼規(guī)范等,開(kāi)發(fā)流程規(guī)范需要技術(shù)開(kāi)發(fā)人員編寫(xiě)相關(guān)內(nèi)容,希望每個(gè)技術(shù)人員形成習(xí)慣,如有新的內(nèi)容更新會(huì)及時(shí)通知大家,如有
11、好的規(guī)范要求也可通知編制人員及時(shí)更新。本規(guī)范為煙臺(tái)開(kāi)發(fā)區(qū)德聯(lián)軟件有限責(zé)任公司內(nèi)部材料,嚴(yán)禁其他商業(yè)應(yīng)用。二、開(kāi)發(fā)流程規(guī)范接受開(kāi)發(fā)任務(wù),詳細(xì)閱讀軟件技術(shù)規(guī)范或技術(shù)文檔,如對(duì)技術(shù)文檔有疑義或者不清楚的地方及時(shí)與項(xiàng)目總工或用戶(hù)溝通,根據(jù)文檔和溝通內(nèi)容編寫(xiě)項(xiàng)目開(kāi)發(fā)計(jì)劃,必須包括但不限于系統(tǒng)軟硬件開(kāi)發(fā)環(huán)境、系統(tǒng)架構(gòu)、系統(tǒng)功能模塊設(shè)計(jì)、系統(tǒng)功能開(kāi)發(fā)流程圖、開(kāi)發(fā)修改記錄。2.1 系統(tǒng)軟硬件開(kāi)發(fā)環(huán)境開(kāi)發(fā)環(huán)境的搭建,最好形成文檔,便于以后同樣工作的使用。開(kāi)發(fā)人員要明確系統(tǒng)開(kāi)發(fā)擬采用的數(shù)據(jù)庫(kù)、操作系統(tǒng)、開(kāi)發(fā)語(yǔ)言、開(kāi)發(fā)工具、服務(wù)器等(具體到版本)。明確整個(gè)系統(tǒng)開(kāi)發(fā)工作流程,至少應(yīng)該包括以下流程。2.2 系統(tǒng)架構(gòu)(系
12、統(tǒng)組成)確定系統(tǒng)整體體系架構(gòu),各層次之間的數(shù)據(jù)流的連接,確定軟件服務(wù)器的硬件配置及用戶(hù)硬件資源配置, 確定與用戶(hù)軟件平臺(tái)的統(tǒng)一協(xié)調(diào)。 開(kāi)發(fā)人員在繪制架構(gòu)圖時(shí)給出基本框架,能反映出基本意義即可,可以直接用文字代替例子中的圖片。圖1 系統(tǒng)邏輯架構(gòu)圖舉例圖2 物理架構(gòu)圖舉例2.3 系統(tǒng)功能模塊設(shè)計(jì)給出系統(tǒng)的主要功能模塊,每個(gè)模塊所包含的功能。圖3 圖書(shū)管理系統(tǒng)模塊規(guī)劃圖舉例2.4 系統(tǒng)功能開(kāi)發(fā)流程圖給出系統(tǒng)主要功能的業(yè)務(wù)流程圖。圖4 系統(tǒng)功能業(yè)務(wù)流程圖舉例2.5 開(kāi)發(fā)修改記錄1. 開(kāi)發(fā)代碼做好備份(可以在完成一個(gè)重大功能之后,或者按時(shí)間周期性進(jìn)行備份),以免由于不可抗力導(dǎo)致代碼不可修復(fù)。2.在每次重
13、大修改之后要做好記錄(改動(dòng)的具體細(xì)節(jié)),修改前的版本要及時(shí)備份,可以方面隨時(shí)還原系統(tǒng)。修改日期修改內(nèi)容是否備份備注三、開(kāi)發(fā)代碼規(guī)范在研究項(xiàng)目團(tuán)隊(duì)協(xié)作開(kāi)發(fā)的情況下(這里的團(tuán)隊(duì)協(xié)作也適合于應(yīng)用項(xiàng)目的開(kāi)發(fā)),編程時(shí)應(yīng)該強(qiáng)調(diào)的一個(gè)重要方面是程序的易讀性,在保證軟件速度等性能指標(biāo)能滿(mǎn)足用戶(hù)需求的情況下,能讓其他程序員容易讀懂你所編寫(xiě)的程序。若研究項(xiàng)目小組的所有開(kāi)發(fā)人員都遵循統(tǒng)一的、鮮明的一套編程風(fēng)格,可以讓協(xié)作者、后繼者和自己一目了然,在很短的時(shí)間內(nèi)看清楚程序結(jié)構(gòu),理解設(shè)計(jì)的思路,大大提高代碼的可讀性、可重用性、程序健壯性、可移植性、可維護(hù)性。制定本編程規(guī)范的目的是為了提高軟件開(kāi)發(fā)效率及所開(kāi)發(fā)軟件的可維
14、護(hù)性,提高軟件的質(zhì)量。本規(guī)范由程序風(fēng)格、命名規(guī)范、注釋規(guī)范、程序健壯性、可移植性、錯(cuò)誤處理以及軟件的模塊化規(guī)范等部分組成。此規(guī)范以C/C+程序設(shè)計(jì)討論。3.1 文件結(jié)構(gòu)每個(gè)C+/C程序通常分為兩個(gè)文件。一個(gè)文件用于保存程序的聲明(declaration),稱(chēng)為頭文件。另一個(gè)文件用于保存程序的實(shí)現(xiàn)(implementation),稱(chēng)為定義(definition)文件。C+/C程序的頭文件以“.h”為后綴,C程序的定義文件以“.c”為后綴,C+程序的定義文件通常以“.cpp”為后綴(也有一些系統(tǒng)以“.cc”或“.cxx”為后綴)。3.1.1 文件信息聲明文件信息聲明位于頭文件和定義文件的開(kāi)頭(參見(jiàn)
15、示例3-1),主要內(nèi)容有:(1) 版權(quán)信息;(2) 文件名稱(chēng),項(xiàng)目代碼,摘要,參考文獻(xiàn);(3) 當(dāng)前版本號(hào),作者/修改者,完成日期;(4) 版本歷史信息;(5) 主要函數(shù)描述。/ Copyright (c) 2015, DeLianSoftCompany YanTai/ All rights reserved./ Filename :filename.h/ Project Code :The project code about this file/ Abstract :Describe the content of this file summarily/ Reference :/ Vers
16、ion :1.1/ Author :the name of author(mender)/ Accomplished date : September 2, 2004/ Replaced version : 1.0 / Original Author : the name of original author(mender)/ Accomplished date : September 10, 2003/ Main functions :/Function 1 Return code Function name(Parameter Explain)/Function 2 Return code
17、 Function name(Parameter Explain)/./Function n Return code Function name(Parameter Explain)/示例3-1 文件信息聲明 【規(guī)則3.1-1】文件信息聲明以?xún)尚行备荛_(kāi)始,以?xún)尚行备芙Y(jié)束,每一行都以?xún)蓚€(gè)斜杠開(kāi)始; 【規(guī)則3.1-2】文件信息聲明包含五個(gè)部分,各部分之間以一空行間隔; 【規(guī)則3.1-3】在主要函數(shù)部分描述了文件所包含的主要函數(shù)的聲明信息,如果是頭文件,這一部分是可以省略的。3.1.2 頭文件的結(jié)構(gòu)頭文件由三部分內(nèi)容組成: (1) 頭文件開(kāi)頭處的文件信息聲明(參見(jiàn)示例3-1);(2) 預(yù)處理塊;(3
18、) 函數(shù)和類(lèi)結(jié)構(gòu)聲明等。假設(shè)頭文件名稱(chēng)為 filesystem.h,頭文件的結(jié)構(gòu)參見(jiàn)示例3-2。 【規(guī)則3.2-1】為了防止頭文件被重復(fù)引用,應(yīng)當(dāng)用ifndef/define/endif結(jié)構(gòu)產(chǎn)生預(yù)處理塊;“#ifndef”或者“#define”后以TAB鍵代替SPACE鍵做空格;如果頭文件名稱(chēng)是由多個(gè)單詞組成,則各單詞間以下劃線“_”連接,例如有頭文件名稱(chēng)為“filesystem.h”,則定義如下:“#ifndef_FILE_SYSTEM_H_”; 【規(guī)則3.2-2】用 #include 格式來(lái)引用標(biāo)準(zhǔn)庫(kù)的頭文件(編譯器將從標(biāo)準(zhǔn)庫(kù)目錄開(kāi)始搜索); 【規(guī)則3.2-3】用 #include “fi
19、lename.h” 格式來(lái)引用非標(biāo)準(zhǔn)庫(kù)的頭文件(編譯器將從用戶(hù)的工作目錄開(kāi)始搜索); 【建議3.2-1】頭文件中只存放“聲明”而不存放“定義”; 【建議3.2-1】頭文件中應(yīng)包含所有定義文件所定義的函數(shù)聲明,如果一個(gè)頭文件對(duì)應(yīng)多個(gè)定義文件,則不同定義文件內(nèi)實(shí)現(xiàn)的函數(shù)要分開(kāi)聲明,并作注釋以解釋所聲明的函數(shù)從屬于那一個(gè)定義文件; 【建議3.2-3】宏定義和函數(shù)聲明分離,在兩個(gè)頭文件中定義,如果沒(méi)有類(lèi)成員函數(shù),可以將類(lèi)和結(jié)構(gòu)的定義與函數(shù)聲明分離,也就是說(shuō)一個(gè)頭文件專(zhuān)用于宏定義,一個(gè)頭文件專(zhuān)用于類(lèi)和結(jié)構(gòu)的定義,一個(gè)頭文件專(zhuān)用于函數(shù)聲明; 【建議3.2-4】在C+ 語(yǔ)法中,類(lèi)的成員函數(shù)可以在聲明的同時(shí)被
20、定義,并且自動(dòng)成為內(nèi)聯(lián)函數(shù)。這雖然會(huì)帶來(lái)書(shū)寫(xiě)上的方便,但卻造成了風(fēng)格不一致,弊大于利。建議將成員函數(shù)的定義與聲明分開(kāi),不論該函數(shù)體有多么小。頭文件的結(jié)構(gòu)如下:/文件信息聲明見(jiàn)示例3-1,此處省略。#ifndef_FILE_SYSTEM_H_/avoid referencing the file filesystem.h repeat#define_FILE_SYSTEM_H_#include /reference standard head file#include “myheader.h” /reference non-standard head filevoid Function1();/
21、global function declareclass CBox /class structure decalre;#endif示例3-2 C+/C頭文件的結(jié)構(gòu)3.1.3 定義文件的結(jié)構(gòu)定義文件有三部分內(nèi)容:(1) 定義文件開(kāi)頭處的文件信息聲明(參見(jiàn)示例3-1);(2) 對(duì)一些頭文件的引用;(3) 程序的實(shí)現(xiàn)體(包括數(shù)據(jù)和代碼)。假設(shè)定義文件的名稱(chēng)為 filesystem.c,定義文件的結(jié)構(gòu)參見(jiàn)示例3-3。/文件信息聲明見(jiàn)示例3-1,此處省略。#include “filesystem.h”/reference a head file/global function realizationvo
22、id Function1()/class member function realizationvoid CBox:Draw()示例3-3 C+/C定義文件的結(jié)構(gòu)3.1.4 頭文件的作用早期的編程語(yǔ)言如Basic、Fortran沒(méi)有頭文件的概念,C+/C語(yǔ)言的初學(xué)者雖然會(huì)用使用頭文件,但常常不明其理。這里對(duì)頭文件的作用略作解釋?zhuān)海?) 通過(guò)頭文件來(lái)調(diào)用庫(kù)功能。在很多場(chǎng)合,源代碼不便(或不準(zhǔn))向用戶(hù)公布,只要向用戶(hù)提供頭文件和二進(jìn)制的庫(kù)即可。用戶(hù)只需要按照頭文件中的接口聲明來(lái)調(diào)用庫(kù)功能,而不必關(guān)心接口怎么實(shí)現(xiàn)的。編譯器會(huì)從庫(kù)中提取相應(yīng)的代碼;(2) 頭文件能加強(qiáng)類(lèi)型安全檢查。如果某個(gè)接口被實(shí)現(xiàn)或
23、被使用時(shí),其方式與頭文件中的聲明不一致,編譯器就會(huì)指出錯(cuò)誤,這一簡(jiǎn)單的規(guī)則能大大減輕程序員調(diào)試、改錯(cuò)的負(fù)擔(dān)。3.1.5 目錄結(jié)構(gòu)如果一個(gè)軟件的頭文件數(shù)目比較多(如超過(guò)十個(gè)),通常應(yīng)將頭文件和定義文件分別保存于不同的目錄,以便于維護(hù)。例如可將頭文件保存于include目錄,將定義文件保存于source目錄(可以是多級(jí)目錄)。如果某些頭文件是私有的,它不會(huì)被用戶(hù)的程序直接引用,則沒(méi)有必要公開(kāi)其“聲明”。為了加強(qiáng)信息隱藏,這些私有的頭文件可以和定義文件存放于同一個(gè)目錄。3.2 命名規(guī)則比較著名的命名規(guī)則當(dāng)推“匈牙利” 命名法,該命名規(guī)則的主要思想是“在變量和函數(shù)名中加入前綴以增進(jìn)人們對(duì)程序的理解”。
24、例如所有的字符變量均以ch為前綴,若是指針變量則追加前綴p。如果一個(gè)變量由ppch開(kāi)頭,則表明它是指向字符指針的指針。“匈牙利”法最大的缺點(diǎn)是煩瑣,例如int i, j, k; float x, y, z;倘若采用“匈牙利”命名規(guī)則,則應(yīng)當(dāng)寫(xiě)成int iI, iJ, ik; / 前綴 i表示int類(lèi)型float fX, fY, fZ; / 前綴 f表示float類(lèi)型如此煩瑣的程序會(huì)讓絕大多數(shù)程序員無(wú)法忍受??偟恼f(shuō)來(lái),沒(méi)有一種命名規(guī)則可以讓所有的程序員贊同,且命名規(guī)則對(duì)軟件產(chǎn)品而言并不是“成敗悠關(guān)”的事,而且在不同的平臺(tái)和不同的環(huán)境下編寫(xiě)的程序所應(yīng)遵循的規(guī)則也不盡相同,所以我們只是追求制定一種令
25、大多數(shù)項(xiàng)目成員滿(mǎn)意的命名規(guī)則,并在項(xiàng)目中貫徹實(shí)施。3.2.1 共性原則本節(jié)論述的共性規(guī)則是被大多數(shù)程序員采納的,我們應(yīng)當(dāng)在遵循這些共性規(guī)則的前提下,再擴(kuò)充特定的規(guī)則,如3.2.2節(jié) 【規(guī)則3.2.1-1】標(biāo)識(shí)符應(yīng)當(dāng)直觀且可以拼讀,可望文知意,不必進(jìn)行“解碼”; 【規(guī)則3.2.1-2】標(biāo)識(shí)符的長(zhǎng)度應(yīng)當(dāng)符合“min-length & max-information”原則; 【規(guī)則3.2.1-3】命名規(guī)則盡量與所采用的操作系統(tǒng)或開(kāi)發(fā)工具的風(fēng)格保持一致; 【規(guī)則3.2.1-4】程序中不要出現(xiàn)僅靠大小寫(xiě)區(qū)分的相似的標(biāo)識(shí)符。 【規(guī)則3.2.1-5】程序中不要出現(xiàn)標(biāo)識(shí)符完全相同的局部變量和全局變量,盡管兩者
26、的作用域不同而不會(huì)發(fā)生語(yǔ)法錯(cuò)誤,但會(huì)使人誤解; 【規(guī)則3.2.1-6】變量的名字應(yīng)當(dāng)使用“名詞”或者“形容詞名詞”; 【規(guī)則3.2.1-7】全局函數(shù)的名字應(yīng)當(dāng)使用“動(dòng)詞”或者“動(dòng)詞名詞”(動(dòng)賓詞組); 【規(guī)則3.2.1-8】用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等; 【建議3.2.1-9】盡量避免名字中出現(xiàn)數(shù)字編號(hào),如Value1,Value2等,除非邏輯上的確需要編號(hào);注:3.2.1 標(biāo)識(shí)符最好采用英文單詞或其組合,便于記憶和閱讀,切忌使用漢語(yǔ)拼音來(lái)命名,程序中的英文單詞一般不要太復(fù)雜,用詞應(yīng)當(dāng)準(zhǔn)確,例如不要把CurrentValue寫(xiě)成NowValue;3.2.2 標(biāo)示符的
27、長(zhǎng)度應(yīng)當(dāng)以最小的長(zhǎng)度實(shí)現(xiàn)最多信息,一般來(lái)說(shuō),長(zhǎng)名字能更好地表達(dá)含義,但并非長(zhǎng)的變量名就一定要比短的變量名要好,此外單字符的名字也是有用的,常見(jiàn)的如i,j,k,m,n,x,y,z等,它們通??捎米骱瘮?shù)內(nèi)的局部變量;3.2.3 不同的操作系統(tǒng)的程序設(shè)計(jì)風(fēng)格是不一樣的,例如Windows應(yīng)用程序的標(biāo)識(shí)符通常采用“大小寫(xiě)”混排的方式,如AddChild,而Unix應(yīng)用程序的標(biāo)識(shí)符通常采用“小寫(xiě)加下劃線”的方式,如add_child,別把這兩類(lèi)風(fēng)格混在一起使用;3.2.2 Windows變量命名規(guī)則 【規(guī)則3.2.2-1】變量的命名規(guī)則要求采用“匈牙利法則”,即開(kāi)頭字母用變量的類(lèi)型,其余部分用變量的英文
28、意思或其英文意思的縮寫(xiě),盡量避免采用中文拼音,要求單詞的第一個(gè)字母大寫(xiě);即:變量名變量類(lèi)型變量英文意思(或縮寫(xiě))變量類(lèi)型請(qǐng)參見(jiàn)附表1變量類(lèi)型表; 【規(guī)則3.2.2-2】類(lèi)名和函數(shù)名用大寫(xiě)字母開(kāi)頭的單詞組合而成;對(duì)struct、union、class變量的命名要求定義的類(lèi)型用大寫(xiě),結(jié)構(gòu)采用S開(kāi)頭,聯(lián)合體采用U開(kāi)頭,類(lèi)采用C開(kāi)頭;例如:struct SPointintm_nX;intm_nY;union URecordLenBYTEm_byRecordNum;BYTEm_byRecordLen;class CNode/類(lèi)成員變量或成員函數(shù); 【規(guī)則3.2.2-3】指針變量命名的基本原則為:一重指針
29、變量的基本原則為:變量名 “p”變量類(lèi)型前綴命名對(duì)多重指針變量的基本原則為:二重指針:變量名“pp”變量類(lèi)型前綴命名三重指針:變量名“ppp”變量類(lèi)型前綴命名例如一個(gè)short*型的變量應(yīng)該表示為pnStart; 【規(guī)則3.2.2-4】全局變量用g_開(kāi)頭;例如一個(gè)全局的長(zhǎng)型變量定義為g_lFileNum,即:變量名g_變量類(lèi)型變量的英文意思(或縮寫(xiě)); 【規(guī)則3.2.2-5】靜態(tài)變量采用s_開(kāi)頭;例如一個(gè)靜態(tài)的指針變量定義為s_plPrevInst,即:變量名s_變量類(lèi)型變量的英文意思(或縮寫(xiě)); 【規(guī)則3.2.2-6】類(lèi)成員變量采用m_開(kāi)頭;例如一個(gè)長(zhǎng)型成員變量定義為m_lCount,即:變
30、量名m_變量類(lèi)型變量的英文意思(或縮寫(xiě)); 【規(guī)則3.2.2-7】對(duì)const的變量要求在變量的命名規(guī)則前加入c_(若作為函數(shù)的輸入?yún)?shù),可以不加),即:變量名c_變量命名規(guī)則,例如:const char* c_szFileName; 【規(guī)則3.2.2-8】對(duì)枚舉類(lèi)型(enum)中的變量,要求用枚舉變量或其縮寫(xiě)做前綴,且用下劃線隔離變量名,所有枚舉類(lèi)型都要用大寫(xiě),例如:enumEMDAYSEMDAYS_MONDAY;EMDAYS_TUESDAY;; 【規(guī)則3.2.2-9】對(duì)常量(包括錯(cuò)誤的編碼)命名,要求常量名用大寫(xiě),常量名用英文意思表示其意思,用下劃線分割單詞,例如:#defineCM_78
31、16_OK0 x9000; 【規(guī)則3.2.2-10】為了防止某一軟件庫(kù)中的一些標(biāo)識(shí)符和其它軟件庫(kù)中的沖突,可以為各種標(biāo)識(shí)符加上能反映軟件性質(zhì)的前綴。例如三維圖形標(biāo)準(zhǔn)OpenGL的所有庫(kù)函數(shù)均以gl開(kāi)頭,所有常量(或宏定義)均以GL開(kāi)頭。3.3 程序風(fēng)格程序風(fēng)格雖然不會(huì)影響程序的功能,但會(huì)影響程序的可讀性,追求清晰、美觀,是程序風(fēng)格的重要構(gòu)成因素。3.3.1 空行空行起著分隔程序段落的作用??招械皿w(不過(guò)多也不過(guò)少)將使程序的布局更加清晰??招胁粫?huì)浪費(fèi)內(nèi)存,雖然打印含有空行的程序是會(huì)多消耗一些紙張,但是值得。 【規(guī)則3.3.1-1】在每個(gè)類(lèi)聲明之后、每個(gè)函數(shù)定義結(jié)束之后都要加空行。參見(jiàn)示例3.3
32、.1(a); 【規(guī)則3.3.1-2】在一個(gè)函數(shù)體內(nèi),邏揖上密切相關(guān)的語(yǔ)句之間不加空行,其它地方應(yīng)加空行分隔。參見(jiàn)示例3.3.1(b);/ blank linevoid Function1() / blank linevoid Function2() / blank linevoid Function3() / blank linewhile (condition)statement1;/ blank lineif (condition) statement2;elsestatement3;/ blank linestatement4; 示例3.3.1(a) 函數(shù)之間的空行 示例3.3.1(b)
33、 函數(shù)內(nèi)部的空行3.3.2 代碼行 【規(guī)則3.3.2-1】一行代碼只做一件事情,如只定義一個(gè)變量,或只寫(xiě)一條語(yǔ)句,這樣的代碼容易閱讀,并且方便于寫(xiě)注釋?zhuān)?【規(guī)則3.3.2-2】if、for、while、do等語(yǔ)句自占一行,執(zhí)行語(yǔ)句不得緊跟其后,不論執(zhí)行語(yǔ)句有多少都要加,這樣可以防止書(shū)寫(xiě)失誤; 【規(guī)則3.3.2-3】if、for、while、do等語(yǔ)句的“”要單獨(dú)占用一行; 【建議3.3.2-1】所有函數(shù)內(nèi)的變量都在函數(shù)開(kāi)始處定義; 【建議3.3.2-2】盡可能在定義變量的同時(shí)初始化該變量(就近原則),如果變量的引用處和其定義處相隔比較遠(yuǎn),變量的初始化很容易被忘記。如果引用了未被初始化的變量,可
34、能會(huì)導(dǎo)致程序錯(cuò)誤,本建議可以減少隱患。示例3.3.2(a)為風(fēng)格良好的代碼行,示例3.3.2(b)為風(fēng)格不良的代碼行。int nWidth;/ widthint nHeight;/ heightint nDepth;/ depthint nWidth,nHight,nDepth;/width,height,depthx = a + b;y = c + d;z = e + f;X a + b; y = c + d; z = e + f;if (nWidth nHight) DoSomething();if (nWidth =”、“=”、“+”、“*”、“%”、“&”、“|”、“”這類(lèi)操作符前后不
35、加空格; 【建議3.3.3-1】對(duì)于表達(dá)式比較長(zhǎng)的for語(yǔ)句和if語(yǔ)句,為了緊湊起見(jiàn)可以適當(dāng)?shù)厝サ粢恍┛崭?,如for (i=0; i10; i+)和if (a=b) & (c= 2000) / favorable styleif(year=2000) / ill styleif (a=b) & (c=b&c=d) / ill stylefor (i=0; i10; i+) / favorable stylefor(i=0;i10;i+) / ill stylefor (i = 0; I 10; i +) / favorable stylex = a b ? a : b; / favorable
36、 stylex=aFunction(); / Do not use b - Function();示例3.3.3 代碼行內(nèi)的空格3.3.4 對(duì)齊 【規(guī)則3.3.4-1】程序的分界符和應(yīng)獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語(yǔ)句左對(duì)齊; 【規(guī)則3.3.4-2】 之內(nèi)的代碼塊在右邊數(shù)格處左對(duì)齊; 【規(guī)則3.3.4.3】代碼的的對(duì)齊采用TAB鍵而不采用空格鍵對(duì)齊,一般TAB鍵設(shè)置為向后空4個(gè)空格。示例3.3.4(a)為風(fēng)格良好的對(duì)齊,示例3.3.4(b)為風(fēng)格不良的對(duì)齊。void Function(int x) / program codevoid Function(int x) / progra
37、m codeif (condition) / program codeelse / program codeif (condition) / program codeelse / program codefor (initialization; condition; update) / program codefor (initialization; condition; update) / program codeWhile (condition) / program codewhile (condition) / program code如果出現(xiàn)嵌套的,則使用縮進(jìn)對(duì)齊,如: 示例3.3.4
38、(a) 風(fēng)格良好的對(duì)齊 示例3.3.4(b) 風(fēng)格不良的對(duì)齊3.3.5 長(zhǎng)行拆分 【規(guī)則3.3.5-1】代碼行最大長(zhǎng)度宜控制在70至80個(gè)字符以?xún)?nèi); 【規(guī)則3.3.5-2】長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處拆分成新行,操作符放在新行之首(以便突出操作符),拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語(yǔ)句可讀。if (very_longer_variable1 = very_longer_variable12)& (very_longer_variable3 = very_longer_variable14)& (very_longer_variable5 0 )*pbTo + = *pbFrom +
39、;return pvTo;示例3.4.5 復(fù)制不重疊的內(nèi)存塊assert不是一個(gè)倉(cāng)促拼湊起來(lái)的宏。為了不在程序的Debug版本和Release版本引起差別,assert不應(yīng)該產(chǎn)生任何副作用。所以assert不是函數(shù),而是宏。程序員可以把a(bǔ)ssert看成一個(gè)在任何系統(tǒng)狀態(tài)下都可以安全使用的無(wú)害測(cè)試手段。如果程序在assert處終止了,并不是說(shuō)含有該assert的函數(shù)有錯(cuò)誤,而是調(diào)用者出了差錯(cuò),assert可以幫助我們找到發(fā)生錯(cuò)誤的原因。 【規(guī)則3.4.5-1】使用斷言捕捉不應(yīng)該發(fā)生的非法情況,不要混淆非法情況與錯(cuò)誤情況之間的區(qū)別,后者是必然存在的并且是一定要作出處理的; 【規(guī)則3.4.5-2】在
40、函數(shù)的入口處,使用斷言檢查參數(shù)的有效性(合法性); 【建議3.4.5-1】在編寫(xiě)函數(shù)時(shí),要進(jìn)行反復(fù)的考查,并且自問(wèn):“我打算做哪些假定?”一旦確定了的假定,就要使用斷言對(duì)假定進(jìn)行檢查; 【建議3.4.5-2】一般教科書(shū)都鼓勵(lì)程序員們進(jìn)行防錯(cuò)設(shè)計(jì),但要記住這種編程風(fēng)格可能會(huì)隱瞞錯(cuò)誤。當(dāng)進(jìn)行防錯(cuò)設(shè)計(jì)時(shí),如果“不可能發(fā)生”的事情的確發(fā)生了,則要使用斷言進(jìn)行報(bào)警。3.4.6 引用與指針的比較引用是C+中的概念,初學(xué)者容易把引用和指針混淆一起。一下程序中,n是m的一個(gè)引用(reference),m是被引用物(referent)。int m;int &n = m;n相當(dāng)于m的別名(綽號(hào)),對(duì)n的任何操作就
41、是對(duì)m的操作。所以n既不是m的拷貝,也不是指向m的指針,其實(shí)n就是m它自己。引用的一些規(guī)則如下:(1) 引用被創(chuàng)建的同時(shí)必須被初始化(指針則可以在任何時(shí)候被初始化);(2) 不能有NULL引用,引用必須與合法的存儲(chǔ)單元關(guān)聯(lián)(指針則可以是NULL);(3) 一旦引用被初始化,就不能改變引用的關(guān)系(指針則可以隨時(shí)改變所指的對(duì)象)。以下示例程序中,k被初始化為i的引用。語(yǔ)句k = j并不能將k修改成為j的引用,只是把k的值改變成為6。由于k是i的引用,所以i的值也變成了6。int i = 5;int j = 6;int &k = i;k = j;/ k和i的值都變成了6;上面的程序看起來(lái)象在玩文字游
42、戲,沒(méi)有體現(xiàn)出引用的價(jià)值。引用的主要功能是傳遞函數(shù)的參數(shù)和返回值。C+語(yǔ)言中,函數(shù)的參數(shù)和返回值的傳遞方式有三種:值傳遞、指針傳遞和引用傳遞。以下是“值傳遞”的示例程序。由于Func1函數(shù)體內(nèi)的x是外部變量n的一份拷貝,改變x的值不會(huì)影響n(yōu), 所以n的值仍然是0。void Func1(int x)x = x + 10;int n = 0;Func1(n);cout “n = ” n endl;/ n = 0以下是“指針傳遞”的示例程序。由于Func2函數(shù)體內(nèi)的x是指向外部變量n的指針,改變?cè)撝羔樀膬?nèi)容將導(dǎo)致n的值改變,所以n的值成為10。void Func2(int *x)(* x) = (*
43、 x) + 10;int n = 0;Func2(&n);cout “n = ” n endl;/ n = 10以下是“引用傳遞”的示例程序。由于Func3函數(shù)體內(nèi)的x是外部變量n的引用,x和n是同一個(gè)東西,改變x等于改變n,所以n的值成為10。void Func3(int &x)x = x + 10;int n = 0;Func3(n);cout “n = ” n endl;/ n = 10對(duì)比上述三個(gè)示例程序,會(huì)發(fā)現(xiàn)“引用傳遞”的性質(zhì)象“指針傳遞”,而書(shū)寫(xiě)方式象“值傳遞”。3.5 變量類(lèi)型定義類(lèi) 型規(guī) 則范 例bool(BOOL)用b開(kāi)頭bIsParentbyte(BYTE)用by開(kāi)頭by
44、Flagshort(SHORT)用n開(kāi)頭nFileLenint(INT)用n開(kāi)頭nStepCountlong(LONG)用l開(kāi)頭lSizechar(CHAR)用ch開(kāi)頭chCountunsigned short(WORD)用w開(kāi)頭wLengthunsigned long(DWORD)用dw開(kāi)頭dwBroadvoid(VOID)用v開(kāi)頭vVariant用0結(jié)尾的字符串用sz開(kāi)頭szFileNameLPCSTR(LPCTSTR)用str開(kāi)頭strStringHANDLE(HINSTANCE)用h開(kāi)頭hHandlestruct用blk開(kāi)頭blkTemplateBYTE*用pb開(kāi)頭pbValueWOR
45、D*用pw開(kāi)頭pwValueLONG*用pl開(kāi)頭plValue四、軟件測(cè)試規(guī)范為了確保軟件產(chǎn)品質(zhì)量,使產(chǎn)品能夠順利交付和通過(guò)驗(yàn)收,特編寫(xiě)軟件測(cè)試規(guī)范,以作參考 測(cè)試的依據(jù)來(lái)源于系統(tǒng)需求說(shuō)明書(shū)、詳細(xì)設(shè)計(jì)、技術(shù)協(xié)議等有關(guān)資料。開(kāi)發(fā)人員按照需求說(shuō)明書(shū)進(jìn)行軟件開(kāi)發(fā)和測(cè)試。 測(cè)試之前要明確每次測(cè)試的目的,必要時(shí)可以編寫(xiě)測(cè)試計(jì)劃,必須明確采用的測(cè)試環(huán)境、工具和測(cè)試軟件;采用的測(cè)試用例、測(cè)試數(shù)據(jù)和預(yù)期的結(jié)果,以達(dá)到不放過(guò)一個(gè)小的bug。下面介紹幾種常用的方法,僅作參考,如果開(kāi)發(fā)人員有好的測(cè)試方法,可以隨時(shí)添加該文檔的內(nèi)容。4.1 單元測(cè)試項(xiàng)目開(kāi)發(fā)實(shí)現(xiàn)過(guò)程中,每個(gè)程序單元(程序單元的劃分視具體開(kāi)發(fā)工具而定,一
46、般定為函數(shù)或子程序級(jí))編碼調(diào)試通過(guò)后,要及時(shí)進(jìn)行單元測(cè)試。單元測(cè)試由使用白盒測(cè)試方法,根據(jù)程序單元的控制流程,爭(zhēng)取達(dá)到分支覆蓋。對(duì)于交互式運(yùn)行的產(chǎn)品,不便于進(jìn)行自動(dòng)測(cè)試的,可以采用功能測(cè)試的方法進(jìn)行。單元測(cè)試針對(duì)程序模塊,從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計(jì)測(cè)試用例。多個(gè)模塊可以獨(dú)立進(jìn)行單元測(cè)試。單元測(cè)試內(nèi)容包括模塊接口測(cè)試、局部數(shù)據(jù)結(jié)構(gòu)測(cè)試、路徑測(cè)試、錯(cuò)誤處理測(cè)試等;單元測(cè)試組織原則一遍根據(jù)開(kāi)發(fā)進(jìn)度安排對(duì)已開(kāi)發(fā)完成的單一模塊進(jìn)行測(cè)試;單元測(cè)試停止標(biāo)準(zhǔn):完成了所有規(guī)定單元的測(cè)試,單元測(cè)試中發(fā)現(xiàn)的bug已經(jīng)得到修改。4.2 系統(tǒng)測(cè)試在項(xiàng)目開(kāi)發(fā)完成之后,應(yīng)對(duì)整個(gè)系統(tǒng)軟件和硬件進(jìn)行系統(tǒng)測(cè)試。對(duì)性能、可靠性、健壯性、壓力承受力等方面分別進(jìn)行評(píng)價(jià),以驗(yàn)證系統(tǒng)是否滿(mǎn)足規(guī)定的需要。系統(tǒng)測(cè)試一般進(jìn)行如下幾種情況的測(cè)試:正常情況非正常情況破壞性測(cè)試邊界情況非法情況強(qiáng)度測(cè)試性能測(cè)試兼容性測(cè)試用戶(hù)友好性測(cè)試界面設(shè)計(jì)規(guī)范測(cè)試:光標(biāo)的初始位置字體是否統(tǒng)一字號(hào)是否符合規(guī)定標(biāo)題顏色按鈕的名稱(chēng)是
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專(zhuān)項(xiàng)鉆孔灌注樁施工合作協(xié)議2024版A版
- 2024年04月福建華夏銀行廈門(mén)分行支行行長(zhǎng)等崗位招考筆試歷年參考題庫(kù)附帶答案詳解
- 2024綜合采購(gòu)戰(zhàn)略合作協(xié)議示范文本版
- 2025年度醫(yī)療設(shè)備試用及臨床研究合作協(xié)議4篇
- 2025年不自愿離婚協(xié)議范本:房產(chǎn)分割與子女撫養(yǎng)權(quán)爭(zhēng)議解決方案3篇
- 2025年度創(chuàng)新創(chuàng)業(yè)基地入駐項(xiàng)目合作協(xié)議3篇
- 2024試用期勞動(dòng)合同(含績(jī)效考核標(biāo)準(zhǔn))3篇
- 2025年度電子產(chǎn)品維修配件銷(xiāo)售代理協(xié)議(含售后保障服務(wù))4篇
- 2025年高新技術(shù)產(chǎn)業(yè)園區(qū)廠房租賃合同協(xié)議2篇
- 2025年度茶葉深加工研發(fā)合作合同范本4篇
- HG∕T 2058.1-2016 搪玻璃溫度計(jì)套
- 九宮數(shù)獨(dú)200題(附答案全)
- 泌尿科一科一品匯報(bào)課件
- 人員密集場(chǎng)所消防安全管理培訓(xùn)
- 白銅錫電鍍工藝
- 拜耳法氧化鋁生產(chǎn)工藝
- 2024年南京信息職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 部編版二年級(jí)下冊(cè)道德與法治第二單元《我們好好玩》全部教案
- 幼兒園利劍護(hù)蕾專(zhuān)項(xiàng)行動(dòng)工作方案總結(jié)與展望
- 合同信息管理方案模板范文
- 2024年大唐云南發(fā)電有限公司招聘筆試參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論