華為C語言程式設計規範 質量保證

2021-07-13 14:52:41 字數 4414 閱讀 1276

8-1:在軟體設計過程中構築軟體質量。

8-2:**質量保證優先原則

(1)正確性,指程式要實現設計要求的功能。

(2)穩定性、安全性,指程式穩定、可靠、安全。

(3)可測試性,指程式要具有良好的可測試性。

(4)規範/可讀性,指程式書寫風格、命名規則等要符合規範。

(5)全域性效率,指軟體系統的整體效率。

(6)區域性效率,指某個模組/子模組/函式的本身效率。

(7)個人表達方式/個人方便性,指個人程式設計習慣。

8-3:只引用屬於自己的存貯空間。

說明:若模組封裝的較好,那麼一般不會發生非法引用他人的空間。

8-4:防止引用已經釋放的記憶體空間。

說明:在實際程式設計過程中,稍不留心就會出現在乙個模組中釋放了某個記憶體塊(如c 語言指標),而另一模組在隨後的某個時刻又使用了它。要防止這種情況發生。

8-5:過程/函式中分配的記憶體,在過程/函式退出之前要釋放。

8-6:過程/函式中申請的(為開啟檔案而使用的)檔案控制代碼,在過程/函式退出之前要關閉。

說明:分配的記憶體不釋放以及檔案控制代碼不關閉,是較常見的錯誤,而且稍不注意就有可能發生。這類錯誤往往會引起很嚴重後果,且難以定位。

示例:下函式在退出之前,沒有把分配的記憶體釋放。

typedef unsigned char byte;

int example_fun( byte gt_len, byte *gt_code )

... // other program code

}應改為如下。

int example_fun( byte gt_len, byte *gt_code )

... // other program code

}8-7:防止記憶體操作越界。

說明:記憶體操作主要是指對陣列、指標、記憶體位址等的操作。記憶體操作越界是軟體系統主要錯誤之一,後果往往非常嚴重,所以當我們進行這些操作時一定要仔細小心。

示例:假設某軟體系統最多可由10 個使用者同時使用,使用者號為1-10,那麼如下程式存在問題。

#define max_usr_num 10

unsigned char usr_login_***[max_usr_num]= "";

void set_usr_login_***( unsigned char usr_no )

}當usr_no 為10 時,將使用usr_login_*** 越界。可採用如下方式解決。

void set_usr_login_***( unsigned char usr_no )

}8-8:認真處理程式所能遇到的各種出錯情況。

8-9:系統執行之初,要初始化有關變數及執行環境,防止未經初始化的變數被引用。

8-10:系統執行之初,要對載入到系統中的資料進行一致性檢查。

說明:使用不一致的資料,容易使系統進入混亂狀態和不可知狀態。

8-11:嚴禁隨意更改其它模組或系統的有關設定和配置。

說明:程式設計時,不能隨心所欲地更改不屬於自己模組的有關設定如常量、陣列的大小等。

8-12:不能隨意改變與其它模組的介面。

8-13:充分了解系統的介面之後,再使用系統提供的功能。

示例:在b 型機的各模組與作業系統的介面函式中,有乙個要由各模組負責編寫的初始化過程,此過程在軟體系統載入完成後,由作業系統傳送的初始化訊息來排程。因此就涉及到初始化訊息的型別與訊息傳送的順序問題,特別是訊息順序,若沒搞清楚就開始程式設計,很容易引起嚴重後果。以下示例引自b 型曾出現過的實際**,其中使用了fid_fetch_data與fid_initial 初始化訊息型別,注意b 型機的系統是在fid_fetch_data 之前傳送fid_initial 的。

mid alarm_module_list[max_alarm_mid];

int far sys_alarm_proc( fid function_id, int handle )}}

... // program code

break;

case fid_fetch_data:

... // program code

get_alarm_module( ); // 初始化alarm_module_list

break;

... // program code}}

由於fid_initial 是在fid_fetch_data 之前執行的,而初始化alarm_module_list 是在fid_fetch_data 中進行的,故在fid_initial 中(**)處引用alarm_module_list 變數時,它還沒有被初始化。這是個嚴重錯誤。應如下改正:要麼把get_alarm_module 函式放在fid_initial 中(**)之前;要麼就必須考慮(**)處的判斷語句是否可以用(不使用alarm_module_list 變數的)其它方式替代,或者是否可以取消此判斷語句。

8-14:程式設計時,要防止差1 錯誤。

說明:此類錯誤一般是由於把「<=」誤寫成「<」或「>=」誤寫成「>」等造成的,由此引起的後果,很多情況下是很嚴重的,所以程式設計時,一定要在這些地方小心。當編完程式後,應對這些操作符進行徹底檢查。

8-15:要時刻注意易混淆的操作符。當編完程式後,應從頭至尾檢查一遍這些操作符,以防止拼寫錯誤。

說明:形式相近的操作符最容易引起誤用,如c/c++中的「=」與「==」、「|」與「||」、「&」與「&&」等,若拼寫錯了,編譯器不一定能夠檢查出來。

示例:如把「&」寫成「&&」,或反之。

ret_*** = (pmsg->ret_*** & return_mask);

被寫為:

ret_*** = (pmsg->ret_*** && return_mask);

rpt_*** = (valid_task_no( taskno ) && data_not_zero( stat_data ));

被寫為:

rpt_*** = (valid_task_no( taskno ) & data_not_zero( stat_data ));

8-16:有可能的話,if 語句盡量加上else 分支,對沒有else 分支的語句要小心對待;switch語句必須有default 分支。

8-17:unix 下,多執行緒的中的子執行緒退出必需採用主動退出方式,即子執行緒應return 出口。

8-18:不要濫用goto 語句。

說明:goto 語句會破壞程式的結構性,所以除非確實需要,最好不使用goto 語句。

8-19:精心地構造、劃分子模組,並按「介面」部分及「核心」部分合理地組織子模組,以提高「核心」部分的可移植性和可重用性。

說明:對不同產品中的某個功能相同的模組,若能做到其核心部分完全或基本一致,那麼無論對產品的測試、維護,還是對以後產品的公升級都會有很大幫助。

8-20:精心構造演算法,並對其效能、效率進行測試。

8-21:對較關鍵的演算法最好使用其它演算法來確認。

8-22:時刻注意表示式是否會上溢、下溢。

示例:如下程式將造成變數下溢。

unsigned char size ;

while (size-- >= 0) // 將出現下溢

當size 等於0 時,再減1 不會小於0,而是0xff,故程式是乙個死迴圈。應如下修改。

char size; // 從unsigned char 改為char

while (size-- >= 0)

8-23:使用變數時要注意其邊界值的情況。

示例:如c 語言中字元型變數,有效值範圍為-128 到127。故以下表示式的計算存在一定風險。

char chr = 127;

int sum = 200;

chr += 1; // 127 為chr 的邊界值,再加1 將使chr 上溢到-128,而不是128。

sum += chr; // 故sum 的結果不是328,而是72。

若chr 與sum 為同一種型別,或表示式按如下方式書寫,可能會好些。

sum = sum + chr + 1;

8-24:留心程式機器碼大小(如指令空間大小、資料空間大小、堆疊空間大小等)是否超出系統有關限制。

8-25:為使用者提供良好的介面介面,使使用者能較充分地了解系統內部執行狀態及有關系統出錯情況。

8-26:系統應具有一定的容錯能力,對一些錯誤事件(如使用者誤操作等)能進行自動補救。

8-27:對一些具有危險性的操作**(如寫硬碟、刪資料等)要仔細考慮,防止對資料、硬體等的安全構成危害,以提高系統的安全性。

8-28:使用第三方提供的軟體開發工具包或控制項時,要注意以下幾點:

(1)充分了解應用介面、使用環境及使用時注意事項。

(2)不能過分相信其正確性。

(3)除非必要,不要使用不熟悉的第三方工具包與控制項。

說明:使用工具包與控制項,可加快程式開發速度,節省時間,但使用之前一定對它有較充分的了解,同時第三方工具包與控制項也有可能存在問題。

8-29:資源檔案(多語言版本支援),如果資源是對語言敏感的,應讓該資源與源**檔案脫離,具體方法有下面幾種:使用單獨的資源檔案、dll 檔案或其它單獨的描述檔案(如資料庫格式)

程式設計規範 質量保證

1 正確性,指程式要實現設計要求的功能。2 穩定性 安全性,指程式穩定 可靠 安全。3 可測試性,指程式要具有良好的可測試性。4 規範 可讀性,指程式書寫風格 命名規則等要符合規範。5 全域性效率,指軟體系統的整體效率。6 區域性效率,指某個模組 子模組 函式的本身效率。7 個人表達方式 個人方便性...

軟體專案質量保證 編碼規範

一 編碼規範的作用 二 編碼規範不是 物神 三 編寫編碼規範的一些建議 四 編碼規範參考 作為軟體開發者,我們可以開發低等級的軟體,但不能開發低質量的軟體。所以,如何實施質量保證,是我們關注的主要問題之一,而編碼規範則是實施質量保證的第一步。編碼規範已經成為乙個老生常談的問題,幾乎每個專案,每家公司...

軟體專案質量保證 編碼規範

目錄 一 編碼規範的作用 二 編碼規範不是 物神 三 編寫編碼規範的一些建議 四 編碼規範參考 作為軟體開發者,我們可以開發低等級的軟體,但不能開發低質量的軟體。所以,如何實施質量保證,是我們關注的主要問題之一,而編碼規範則是實施質量保證的第一步。編碼規範已經成為乙個老生常談的問題,幾乎每個專案,每...