〔八〕 =====[ 程序效率 ]=====
¹8-1 :編程時要經常注意代碼的效率
說明:代碼效率分為全局效率、局部效率、時間效率及空間效率。全局效率是站在整個系統的角度上的系統效率;局部效率是站在模塊或函數角度上的效率;時間效率是程序處理輸入任務所需的時間長短;空間效率是程序所需內存空間,如機器代碼空間大小、數據空間大小、?臻g大小等。
¹8-2 :在保證軟件系統的正確性、穩定性、可讀性及可測性的前提下,提高代碼效率
說明:不能一味地追求代碼效率,而對軟件的正確性、穩定性、可讀性及可測性造成影響。
¹8-3 :局部效率應為全局效率服務,不能因為提高局部效率而對全局效率造成影響
¹8-4 :通過對系統數據結構的劃分與組織的改進,以及對程序算法的優化來提高空間效率
說明:這種方式是解決軟件空間效率的根本辦法。
示例:如下記錄學生學習成績的結構不合理。
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef struct STUDENT_SCORE_STRU
BYTE name[8];
BYTE age;
BYTE sex;
BYTE class;
BYTE subject;
float score;
} STUDENT_SCORE;
因為每位學生都有多科學習成績,故如上結構將占用較大空間。應如下改進(分為兩個結構),總的存貯空間將變小,操作也變得更方便。
typedef struct STUDENT_STRU
{
BYTE name[8];
BYTE age;
BYTE sex;
BYTE class;
} STUDENT;
typedef struct STUDENT_SCORE_STRU
{
WORD student_index;
BYTE subject;
float score;
} STUDENT_SCORE;
¹8-5 :循環體內工作量最小化
說明:應仔細考慮循環體內的語句是否可以放在循環體之外,使循環體內工作量最小,從而提高程序的時間效率。
示例:如下代碼效率不高。
for (ind = 0; ind < MAX_ADD_NUMBER; ind++)
{
sum += ind;
back_sum = sum; /* backup sum */
}
語句“back_sum = sum;”完全可以放在for語句之后,如下。
for (ind = 0; ind < MAX_ADD_NUMBER; ind++)
{
sum += ind;
}
back_sum = sum; /* backup sum */
½8-1 :仔細分析有關算法,并進行優化
½8-2 :仔細考查、分析系統及模塊處理輸入(如事務、消息等)的方式,并加以改進
½8-3 :對模塊中函數的劃分及組織方式進行分析、優化,改進模塊中函數的組織結構,提高程序效率
說明:軟件系統的效率主要與算法、處理任務方式、系統功能及函數結構有很大關系,僅在代碼上下功夫一般不能解決根本問題。
½8-4 :編程時,要隨時留心代碼效率;優化代碼時,要考慮周全
½8-5 :不應花過多的時間拼命地提高調用不很頻繁的函數代碼效率
說明:對代碼優化可提高效率,但若考慮不周很有可能引起嚴重后果。
½8-6 :要仔細地構造或直接用匯編編寫調用頻繁或性能要求極高的函數
說明:只有對編譯系統產生機器碼的方式以及硬件系統較為熟悉時,才可使用匯編嵌入方式。嵌入匯編可提高時間及空間效率,但也存在一定風險。
½8-7 :在保證程序質量的前提下,通過壓縮代碼量、去掉不必要代碼以及減少不必要的局部和全局變量,來提高空間效率
說明:這種方式對提高空間效率可起到一定作用,但往往不能解決根本問題。
½8-8 :在多重循環中,應將最忙的循環放在最內層
說明:減少CPU切入循環層的次數。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/