(1)正確性,指程式要實現設計要求的功能。
(2)穩定性、安全性,指程式穩定、可靠、安全。
(3)可測試性,指程式要具有良好的可測試性。
(4)規範/可讀性,指程式書寫風格、命名規則等要符合規範。
(5)全域性效率,指軟體系統的整體效率。
(6)區域性效率,指某個模組/子模組/函式的本身效率。
(7)個人表達方式/個人方便性,指個人程式設計習慣。
說明:若模組封裝的較好,那麼一般不會發生非法引用他人的空間。
說明:在實際程式設計過程中,稍不留心就會出現在乙個模組中釋放了某個記憶體塊(如c語言指標),而另一模組在隨後的某個時刻又使用了它。要防止這種情況發生。
說明:分配的記憶體不釋放以及檔案控制代碼不關閉,是較常見的錯誤,而且稍不注意就有可能發生。這類錯誤往往會引起很嚴重後果,且難以定位。
示例:下函式在退出之前,沒有把分配的記憶體釋放。
typedef unsigned charbyte;
int example_fun( bytegt_len, byte *gt_code )
... // other program code
}應改為如下。
int example_fun( bytegt_len, byte *gt_code )
... // other program code
}示例:假設某軟體系統最多可由10個使用者同時使用,使用者號為1-10,那麼如下程式存在問題。
#define max_usr_num10
unsigned charusr_login_***[max_usr_num]= "";
void set_usr_login_***(unsigned char usr_no )
}當usr_no為10時,將使用usr_login_***越界。可採用如下方式解決。
voidset_usr_login_***( unsigned char usr_no )
}說明:使用不一致的資料,容易使系統進入混亂狀態和不可知狀態。
說明:程式設計時,不能隨心所欲地更改不屬於自己模組的有關設定如常量、陣列的大小等。
示例:在b型機的各模組與作業系統的介面函式中,有乙個要由各模組負責編寫的初始化過程,此過程在軟體系統載入完成後,由作業系統傳送的初始化訊息來排程。因此就涉及到初始化訊息的型別與訊息傳送的順序問題,特別是訊息順序,若沒搞清楚就開始程式設計,很容易引起嚴重後果。以下示例引自b型曾出現過的實際**,其中使用了fid_fetch_data與fid_initial初始化訊息型別,注意b型機的系統是在fid_fetch_data之前傳送fid_initial的。
midalarm_module_list[max_alarm_mid];
int farsys_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變數的)其它方式替代,或者是否可以取消此判斷語句。
說明:此類錯誤一般是由於把「<=」誤寫成「<」或「>=」誤寫成「>」等造成的,由此引起的後果,很多情況下是很嚴重的,所以程式設計時,一定要在這些地方小心。當編完程式後,應對這些操作符進行徹底檢查。
說明:形式相近的操作符最容易引起誤用,如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 ));
說明:goto語句會破壞程式的結構性,所以除非確實需要,最好不使用goto語句。
說明:程式中嵌入式彙編,一般都對可移植性有較大的影響。
說明:對不同產品中的某個功能相同的模組,若能做到其核心部分完全或基本一致,那麼無論對產品的測試、維護,還是對以後產品的公升級都會有很大幫助。
示例:如下程式將造成變數下溢。
unsigned char size ;
while (size-- >=0) // 將出現下溢
當size等於0時,再減1不會小於0,而是0xff,故程式是乙個死迴圈。應如下修改。
char size; // 從unsigned char 改為char
while (size-- >=0)
示例:如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;
(1)充分了解應用介面、使用環境及使用時注意事項。
(2)不能過分相信其正確性。
(3)除非必要,不要使用不熟悉的第三方工具包與控制項。
說明:使用工具包與控制項,可加快程式開發速度,節省時間,但使用之前一定對它有較充分的了解,同時第三方工具包與控制項也有可能存在問題。
華為C語言程式設計規範 質量保證
8 1 在軟體設計過程中構築軟體質量。8 2 質量保證優先原則 1 正確性,指程式要實現設計要求的功能。2 穩定性 安全性,指程式穩定 可靠 安全。3 可測試性,指程式要具有良好的可測試性。4 規範 可讀性,指程式書寫風格 命名規則等要符合規範。5 全域性效率,指軟體系統的整體效率。6 區域性效率,...
軟體專案質量保證 編碼規範
一 編碼規範的作用 二 編碼規範不是 物神 三 編寫編碼規範的一些建議 四 編碼規範參考 作為軟體開發者,我們可以開發低等級的軟體,但不能開發低質量的軟體。所以,如何實施質量保證,是我們關注的主要問題之一,而編碼規範則是實施質量保證的第一步。編碼規範已經成為乙個老生常談的問題,幾乎每個專案,每家公司...
軟體專案質量保證 編碼規範
目錄 一 編碼規範的作用 二 編碼規範不是 物神 三 編寫編碼規範的一些建議 四 編碼規範參考 作為軟體開發者,我們可以開發低等級的軟體,但不能開發低質量的軟體。所以,如何實施質量保證,是我們關注的主要問題之一,而編碼規範則是實施質量保證的第一步。編碼規範已經成為乙個老生常談的問題,幾乎每個專案,每...