華爲C語言編程規範(11)—代碼測試、維護

10-1:單元測試要求至少達到語句覆蓋。

10-2:單元測試開始要跟蹤每一條語句,並觀察數據流及變量的變化。

10-3:清理、整理或優化後的代碼要經過審查及測試。

10-4:代碼版本升級要經過嚴格測試。

10-5:使用工具軟件對代碼版本進行維護。

10-6:正式版本上軟件的任何修改都應有詳細的文檔記錄。

10-7:發現錯誤立即修改,並且要記錄下來。

10-8:關鍵的代碼在彙編級跟蹤。

10-9:仔細設計並分析測試用例,使測試用例覆蓋儘可能多的情況,以提高測試用例的效率。

10-11:儘可能模擬出程序的各種出錯情況,對出錯處理代碼進行充分的測試。

10-12:仔細測試代碼處理數據、變量的邊界情況。

10-13:保留測試信息,以便分析、總結經驗及進行更充分的測試。

10-14:不應通過“試”來解決問題,應尋找問題的根本原因。

10-15:對自動消失的錯誤進行分析,搞清楚錯誤是如何消失的。

10-16:修改錯誤不僅要治表,更要治本。

10-17:測試時應設法使很少發生的事件經常發生。

10-18:明確模塊或函數處理哪些事件,並使它們經常發生。

10-19: 堅持在編碼階段就對代碼進行徹底的單元測試,不要等以後的測試工作來發現問題。

10-20:去除代碼運行的隨機性(如去掉無用的數據、代碼及儘可能防止並注意函數中的“內部寄存器”等),讓函數運行的結果可預測,並使出現的錯誤可再現。

11-1:用宏定義表達式時,要使用完備的括號。

示例:如下定義的宏都存在一定的風險。
#define RECTANGLE_AREA( a, b ) a * b
#define RECTANGLE_AREA( a, b ) (a * b)
#define RECTANGLE_AREA( a, b ) (a) * (b)

正確的定義應爲:
#define RECTANGLE_AREA( a, b ) ((a) * (b))

11-2:將宏所定義的多條表達式放在大括號中。

示例:下面的語句只有宏的第一條表達式被執行。爲了說明問題,for 語句的書寫稍不符規範。
#define INTI_RECT_VALUE( a, b )\
a = 0;\
b = 0;
for (index = 0; index < RECT_TOTAL_NUM; index++)
INTI_RECT_VALUE( rect.a, rect.b );

正確的用法應爲:
#define INTI_RECT_VALUE( a, b )\
{\
a = 0;\
b = 0;\
}
for (index = 0; index < RECT_TOTAL_NUM; index++)
{
INTI_RECT_VALUE( rect[index].a, rect[index].b );
}

11-3:使用宏時,不允許參數發生變化。

示例:如下用法可能導致錯誤。
#define SQUARE( a ) ((a) * (a))
int a = 5;
int b;
b = SQUARE( a++ ); // 結果:a = 7,即執行了兩次增1。
正確的用法是:
b = SQUARE( a );
a++; // 結果:a = 6,即只執行了一次增1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章