目標
這份文件的目標
Fuchsia 可測試性是一種可讀性,旨在確保使用者能夠 變更 Fuchsia 中的程式碼,導入可測試及測試的程式碼。
如同所有可讀性程序,指南和標準內容最完善 公開提供給審查人員與審查人員這份文件是 Fuchsia 相當於程式設計語言可讀性的樣式指南的可測試性 上傳資料集之後,您可以運用 AutoML 自動完成部分資料準備工作
請務必持續套用可測試性標準,因此 重點在於,「可測試性」的所有參與人員都應研究這份文件 並對變更內容提出變更要求
文件的確切內容可能會隨時間變動。
你做為可測試性審查員的目標
- 判斷是否要測試變更。如果您符合以下情況,請套用
Code-Review+2
表示接受測試,並回覆缺失或缺失的部分。 - 統一套用標準 (本文件)。
- 如需修訂異動以符合標準,請提供可行 提供意見回饋。
- 宣傳 Fuchsia 測試與可測試性。
- 找出未由這份文件處理的案件,並提出變更建議。
- 堅持遵守標準,但也秉持優秀的評估標準。目標為 有助於改善品質及營造考試文化您必須遵守 執行精確的決策演算法
你成為改革者的目標
- 閱讀本文件,讓自己瞭解相關標準 (你的做法正確無誤) 立即啟動!)。
- 請尊重可測試性審查人員擔任這個職務的自願性 妥善處理
- 想想有哪些意見回饋可以提升產品的信心 測試變更。
要測試哪些項目?如何測試?
- 功能變更應具有失敗的測試 做出的改變
- 測試必須來自變更的程式碼:包含測試的依附元件 涵蓋率不會計入測試涵蓋範圍。舉例來說,如果「A」標籤 「B」和「B」含有測試,並不提供「A」的涵蓋率。 如果在「B」測試中偵測到錯誤,它們就會間接導致 也更難精準找出「A」同樣地,如果「B」已停止支援 變更其依附元件) 所有「A」的涵蓋範圍因此就遺失了
- 測試必須為自動化作業 (如支援 CI/CQ)。手動測試 十分方便,因為這無法保證程式碼日後會變更 (尤其是由其他工程師編寫時) 必須練習相同的手冊 測試。程式碼集的某些部分可能會發生例外狀況,以利辨識 但自動化功能帶來的挑戰也不夠完整
- 測試必須盡可能減少外部依附元件。我們的測試基礎架構 明確佈建每項測試使用特定資源,但測試能 以便存取比已佈建的更多資源資源範例 包括硬體、CPU、記憶體、永久儲存空間、網路、其他 IO 裝置、保留的網路通訊埠和系統服務。穩定性和 可用性,以便測試未明確佈建用於測試的資源 無法提供保證,因此,測試存取這類資源的測試 不穩定且 / 或難以重現。測試不得存取外部 無法控制測試基礎架構例如 不得在網際網路上存取服務。測試應只使用資源 所需的資源適用對象 例如,測試可能必須存取未進行測試的系統服務 提供雙倍數。這項規則有一小部分的例外狀況 端對端測試
- 修改舊版程式碼 (早於可測試性規定的舊程式碼) 且未經妥善測試) 必須進行測試。程式碼測試不良的情況 讓您有機會測試新程式碼未經測試的舊版程式碼不見得過時 而且可能會經過實證及戰鬥,而新程式碼則會 如果不測試,很可能失敗!
- 您對他人的程式碼所做的變更也會遵循 可測試性需求。如果作者更改了程式碼,從未修改過程式碼 因此更加容易 作者能與負責的個人或團隊合作 找出測試變更的有效方式負責程式碼的人員 且能協助作者進行測試 優先處理。
不需測試的項目
缺少下列項目的測試涵蓋範圍,應該不會導致變更:
接收 Code-Review+2
。
- 記錄:在大多數情況下,測試記錄輸出內容可能並不值得
元件其餘記錄通常會將記錄輸出視為不透明資料
這代表對記錄輸出所做的變更不太可能中斷
有些人會將 Cloud Storage 視為檔案系統
但實際上不是不過,如果記錄輸出以某種方式載入 (例如
一些其他系統可能需要觀察某些記錄訊息),然後
值得測試的合約這也適用於其他形式的
追蹤,例如追蹤這不適用於檢測作業
舉例來說,您可以將檢查用量視為合約
是否應以預期方式運作 (例如使用
ffx inspect
或意見回饋報告)。 - 程式碼不屬於我們所有 (可靠資料來源不在 Fuchsia 樹狀結構中)。 記錄從其他位置複製而來的原始碼更新的變更 並非可測試性要求
- 純重重 (變更可以完全由 自動重構工具,例如移動檔案、重新命名符號或 刪除這些項目,並非可測試性要求。部分語言 曝露在執行階段反射方面的行為 (例如執行階段反射) 的行為, 但可能會有例外狀況。
- 產生的程式碼。使用工具所產生的變更 (例如格式、 或產生的程式碼檢查是否為黃金檔案) Google Cloud 就是最佳選擇不過,一般來說,最好不要檢查 (更不用說使用工具,並在建構時產生程式碼) 在特殊情況下,您不需要測試由 Google 編寫的程式碼 您甚至可以設定網路介面 並混合執行 Linux 與 Windows 機器
- 可測試性啟動。或正在準備變更 導入程式碼的可測試性, 則可供測試性審查員自行斟酌, 資源
- 手動測試:手動測試通常用於
示範難以以自動化方式測試的功能
因此在手動測試中加入或修改,因此不需要
以及自動化測試不過,我們強烈建議
與
README.md
或TESTING.md
文件配對,說明如何執行這些項目。 - 硬式編碼值。新增或變更硬式編碼值不會
測試時不一定要執行測試通常,這些值控制的是
無法輕易觀察,例如未公開的實作
詳細資料、經驗法則或「美容」變更 (例如 UI 的背景顏色)。
對
assert_eq!(CONFIG_PARAM, 5);
樣式的測試還不實用 也不必為可測試性設定不過,如果貢獻成果 並做出容易觀察到的行為變化 請納入新行為的測試。
需要測試的項目
如要修正瑕疵,請在 CQ 中測試不穩定
如要修正瑕疵,請在 CQ 中測試不穩定性,藉此確認修正結果。
測試不應進入睡眠階段
睡眠可能導致不穩定測試,因為時間很難控制 不同的測試環境可能造成這種情況的一些因素 難易度是測試目標的 CPU 速度、核心數量和系統 以及溫度等環境因素
請避免:
// Check if the callback was called. zx_nanosleep(zx_deadline_after(ZX_MSEC(100))); EXPECT_EQ(true, callback_happened);
反之,明確等待以下條件:
// In callback callback() { sync_completion_signal(&event_); } // In test sync_completion_wait(&event_, ZX_TIME_INFINITE); sync_completion_reset(&event_);
這個程式碼範例是從
task_test.cc
改編而來。
競爭狀況的迴歸測試
撰寫競爭狀況沒有偏高的競爭狀況時,會難以編寫迴歸測試 錯誤率如果您可以編寫測試可以重現問題的內容 我們會盡力而為請參閱「編寫可重現的確定性測試」 取得提示。否則,如果改善鎖定以修正資料競爭 使用的配置,您可以新增執行緒註解做為迴歸測試。其他種族 您應嘗試設計防止競爭狀況存在的 API。
最近移除的豁免項目
- Engprod 指令碼 (例如
fx
指令) 和相關聯的設定檔 免於可測試性。「fx
」必須整合 然後進行測試FX 團隊可允許例外情形發生 諮詢可測試性審查員後
臨時可測試性豁免項目
下列項目目前不受「可測試性」規範,但持續性工作的目標是 進行變更
tools/devshell/contrib
中的 Engprod 指令碼,以及相關聯的 就會豁免設定- GN 範本難以測試。我們正在打造一個測試架構 例如 GN 範本在此之前,您可以對建構範本變更 進行手動測試
- C 樣式的程式碼難以避免資源外洩。長久 因此,請重構這類程式碼,以便使用 Rust 或新型 C++ 慣用語 降低發生資料外洩的可能性,自動化系統應該就能 自動偵測資訊外洩。
- Gigaboot 是
//src/firmware/gigaboot
中的 UEFI 系統啟動載入程式, 可測試性政策。目前沒有可用的基礎架構 編寫 UEFI 程式碼的整合測試。這項功能正式登場 https://fxbug.dev/42109789 追蹤。已授予可測試性例外狀況 直到 https://fxbug.dev/42109789 解決。