½8-12 :不要一味追求緊湊的代碼
說明:因為緊湊的代碼并不代表高效的機器碼。
〔九〕 =====[ 質量保證 ]=====
¹9-1 :在軟件設計過程中構筑軟件質量
¹9-2 :代碼質量保證優先原則
(1)正確性,指程序要實現設計要求的功能。
(2)穩定性、安全性,指程序穩定、可靠、安全。
(3)可測試性,指程序要具有良好的可測試性。
(4)規范/可讀性,指程序書寫風格、命名規則等要符合規范。
(5)全局效率,指軟件系統的整體效率。
(6)局部效率,指某個模塊/子模塊/函數的本身效率。
(7)個人表達方式/個人方便性,指個人編程習慣。
¹9-3 :只引用屬于自己的存貯空間
說明:若模塊封裝的較好,那么一般不會發生非法引用他人的空間。
¹9-4 :防止引用已經釋放的內存空間
說明:在實際編程過程中,稍不留心就會出現在一個模塊中釋放了某個內存塊(如C語言指針),而另一模塊在隨后的某個時刻又使用了它。要防止這種情況發生。
¹9-5 :過程/ 函數中分配的內存,在過程/ 函數退出之前要釋放
¹9-6 :過程/ 函數中申請的(為打開文件而使用的)文件句柄,在過程/ 函數退出之前要關閉
說明:分配的內存不釋放以及文件句柄不關閉,是較常見的錯誤,而且稍不注意就有可能發生。這類錯誤往往會引起很嚴重后果,且難以定位。
示例:下函數在退出之前,沒有把分配的內存釋放。
typedef unsigned char BYTE;
int example_fun( BYTE gt_len, BYTE *gt_code )
{
BYTE *gt_buf;
gt_buf = (BYTE *) malloc (MAX_GT_LENGTH);
... //program code, include check gt_buf if or not NULL.
/* global title length error */
if (gt_len > MAX_GT_LENGTH)
{
return GT_LENGTH_ERROR; // 忘了釋放gt_buf
}
... // other program code
}
應改為如下。
int example_fun( BYTE gt_len, BYTE *gt_code )
{
BYTE *gt_buf;
gt_buf = (BYTE * ) malloc ( MAX_GT_LENGTH );
... // program code, include check gt_buf if or not NULL.
/* global title length error */
if (gt_len > MAX_GT_LENGTH)
{
free( gt_buf ); // 退出之前釋放gt_buf
return GT_LENGTH_ERROR;
}
... // other program code
}
¹9-7 :防止內存操作越界
說明:內存操作主要是指對數組、指針、內存地址等的操作。內存操作越界是軟件系統主要錯誤之一,后果往往非常嚴重,所以當我們進行這些操作時一定要仔細小心。
示例:假設某軟件系統最多可由10個用戶同時使用,用戶號為1-10,那么如下程序存在問題。
#define MAX_USR_NUM 10
unsigned char usr_login_flg[MAX_USR_NUM]= "";
void set_usr_login_flg( unsigned char usr_no )
{
if (!usr_login_flg[usr_no])
{
usr_login_flg[usr_no]= TRUE;
}
}
當usr_no為10時,將使用usr_login_flg越界?刹捎萌缦路绞浇鉀Q。
void set_usr_login_flg( unsigned char usr_no )
{
if (!usr_login_flg[usr_no - 1])
{
usr_login_flg[usr_no - 1]= TRUE;
}
}
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/