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