1. 系統
-
系統外部模組的非同步響應都需要設定超時時間,要有超時處理,超時時間要和外部模組協商一個合理時間。
-
傳送訊息失敗和設定timer失敗統一做處理。
-
需要設計相關機制(比如心跳包機制)監控程式/執行緒是否發生了堵塞,發生堵塞後需要設計相應的處理流程。
-
需要設計相關機制來監控CPU的佔有率,當CPU佔有率超過閾值後要設計相應的處理流程。
2. 模組
-
系統內部所有需要等待的非同步響應都要有超時處理。
-
關聯元件的行為不一致要做異常處理:比如:APP模組認為通訊已經斷開,故不會再次請求通訊MID模組去執行通訊,而通訊MID模組等待APP模組來觸發下一次通訊。
-
模組內部暫態都要設定最長停留時間,以及超過這個時間後做什麼樣的處理。
-
模組的錯誤處理至少要考慮以下幾種型別錯誤:
-
輸入了範圍外的值
-
在規定時間內,處理沒有結束或者沒有應答
-
與期待的時序不一致
-
期待的資料不完整:
-
-
由錯誤轉化為異常的判定標準:
-
不以單次Error做判定,而是執行一定次數(3次)的Retry處理。
-
測試時間以大於一定時間為目標 。
-
-
通訊關聯的功能模組在設計時需要考慮:
-
使用者異常切斷時怎麼處理
-
通訊正常切斷時怎麼處理
-
通訊正常終了時怎麼處理
-
裝置異常切斷時怎麼處理"
-
-
做狀態遷移表的設計時,如果狀態遷移表的事件有外部裝置異常切斷的通知。要明確各狀態下收到該通知時處理的妥當性,並且明確這些設計。
-
需要考慮起動處理時各模組訊息的同步問題。例如,優先順序高的A模組啟動後,傳送訊息給後B模組,考慮如果此時B模組未啟動的處理情況。
-
對於Backup的資料,需要考慮Backup各種狀態下啟動之後處理:
1 沒有讀取到Backup資料
2 Backup資料為初始值
3 Backup資料達到最大邊界值
4 Backup資料超過最大邊界值或者異常。 -
備份的資料要有預設值。
-
備份的資料要進行完整性校驗。
-
設計模組時,儘量保證此模組可以有機制來恢復。
-
模組出現異常時,有一套機制可以檢測出來。
3. 函式
-
輸入範圍之外的值需要做處理。
-
函式設計時需要明確設計目標函式所呼叫函式的所有返回值。對正常值以外的返回值進行分析,分析不同的返回值是否需要做不同的異常處理。並且明確這些異常設計。
-
Loop迴圈,一定要設定跳出迴圈的條件或者是範圍的判定。
-
進行資料的格式轉換的處理,需要明確:1 資料轉換前後的格式2 轉換規則3 是否有資料在轉換時需要特殊處理,比如邊界值。
2. 實現
-
不允許使用C語言中非安全的經典函式,如下:
-
strcpy/wcscpy/stpcpy/ wcpcpy
-
scanf/ sscanf /vscanf /fwscanf /swscanf/ wscanf
-
gets/ puts
-
strcat /wcscat
-
wcrtomb /wctob
-
sprintf/ vsprintf /vfprintf
-
asprintf/ vasprintf
-
strncpy /wcsncpy
-
strtok/ wcstok
-
-
程式碼滿足靜態檢查規範(cert C,misra C)。
-
函式的入參要進行範圍判斷。
-
不允許使用函式的遞迴。
-
優先使用RAII技術來管理資源(使用C++語言),比如鎖,檔案控制程式碼等。
-
優先使用引用來代替裸指標(使用C++語言)。
-
優先使用智慧指標代替裸指標(使用C++語言)。
-
儘量避免強制型別轉換。
3.測試
1. 測試用例
測試用例至少覆蓋以下幾種情況:
-
基本功能:典型時序(所有的錯誤;非同步超時需要重點關注)。
-
效能:效能相關時序。
-
邊界值:外部輸入所有的邊界值。
-
異常值:介面中資料範圍異常;時序重複混亂;備份資料損壞;伺服器來的資料破壞;匯流排上資料異常等 。
-
惡意操作:ACC ON,OFF頻繁操作;外部線惡意插拔;外部沒有得到結果就再次請求;外部連續兩個相反的請求;外部連續兩個不同的請求等。
-
內部狀態:記憶體使用量大時;CPU佔有率大時;各種電源狀態下 。
-
外部狀態:匯流排負載大時;Linux下2038問題;MQTT/HTTP同時進行;正常功能和debug功能同時進行。OTA/diag/factory reset處於執行中時。
2. 測試工具
-
測試用例要能支援迴歸測試。
-
搭建自動化測試環境。
未完待續.......