系統外部模塊的異步響應都須要設置超時時間,要有超時處理,超時時間要和外部模塊協商一個合理時間。安全
發送消息失敗和設置timer失敗統一作處理。服務器
須要設計相關機制(好比心跳包機制)監控進程/線程是否發生了堵塞,發生堵塞後須要設計相應的處理流程。異步
須要設計相關機制來監控CPU的佔有率,當CPU佔有率超過閾值後要設計相應的處理流程。函數
系統內部全部須要等待的異步響應都要有超時處理。工具
關聯組件的行爲不一致要作異常處理:好比:APP模塊認爲通訊已經斷開,故不會再次請求通訊MID模塊去執行通訊,而通訊MID模塊等待APP模塊來觸發下一次通訊。oop
模塊內部暫態都要設置最長停留時間,以及超過這個時間後作什麼樣的處理。性能
模塊的錯誤處理至少要考慮如下幾種類型錯誤:測試
輸入了範圍外的值spa
在規定時間內,處理沒有結束或者沒有應答線程
與期待的時序不一致
期待的數據不完整:
由錯誤轉化爲異常的斷定標準:
不以單次Error作斷定,而是執行必定次數(3次)的Retry處理。
測試時間以大於必定時間爲目標 。
通訊關聯的功能模塊在設計時須要考慮:
用戶異常切斷時怎麼處理
通訊正常切斷時怎麼處理
通訊正常終了時怎麼處理
設備異常切斷時怎麼處理"
作狀態遷移表的設計時,若是狀態遷移表的事件有外部設備異常切斷的通知。要明確各狀態下收到該通知時處理的穩當性,而且明確這些設計。
須要考慮起動處理時各模塊消息的同步問題。例如,優先級高的A模塊啓動後,發送消息給後B模塊,考慮若是此時B模塊未啓動的處理狀況。
對於Backup的數據,須要考慮Backup各類狀態下啓動以後處理:
1 沒有讀取到Backup數據
2 Backup數據爲初始值
3 Backup數據達到最大邊界值
4 Backup數據超過最大邊界值或者異常。
備份的數據要有默認值。
備份的數據要進行完整性校驗。
設計模塊時,儘可能保證此模塊能夠有機制來恢復。
模塊出現異常時,有一套機制能夠檢測出來。
輸入範圍以外的值須要作處理。
函數設計時須要明確設計目標函數所調用函數的全部返回值。對正常值之外的返回值進行分析,分析不一樣的返回值是否須要作不一樣的異常處理。而且明確這些異常設計。
Loop循環,必定要設定跳出循環的條件或者是範圍的斷定。
進行數據的格式轉換的處理,須要明確:1 數據轉換先後的格式2 轉換規則3 是否有數據在轉換時須要特殊處理,好比邊界值。
不容許使用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++語言)。
儘可能避免強制類型轉換。
測試用例至少覆蓋如下幾種狀況:
基本功能:典型時序(全部的錯誤;異步超時須要重點關注)。
性能:性能相關時序。
邊界值:外部輸入全部的邊界值。
異常值:接口中數據範圍異常;時序重複混亂;備份數據損壞;服務器來的數據破壞;總線上數據異常等 。
惡意操做:ACC ON,OFF頻繁操做;外部線惡意插拔;外部沒有獲得結果就再次請求;外部連續兩個相反的請求;外部連續兩個不一樣的請求等。
內部狀態:內存使用量大時;CPU佔有率大時;各類電源狀態下 。
外部狀態:總線負載大時;Linux下2038問題;MQTT/HTTP同時進行;正常功能和debug功能同時進行。OTA/diag/factory reset處於執行中時。
測試用例要能支持迴歸測試。
搭建自動化測試環境。
未完待續.......