安全設計工具鍊

使用安全設計工具鍊,從 Figma 設計文件產生安全監控解決方案。請依序使用這一系列的工具。

安全設計編譯器會產生安全構件,以驅動後續的程式碼產生作業,建構安全監控器。設計編譯和程式碼生成程序分開進行,因此程式碼產生器可達到 TCL-3 的 ISO-26262 評等。

安全設計工具鍊

圖 1. 安全設計工具鍊。

編譯器產生構件後,工具鍊會建立報表,OEM 安全工程師可以檢查這份報表,驗證從 Figma 設計產生的構件。

安全設計工具鍊工作流程

圖 2. 安全設計工具鍊工作流程。

設計編譯器輸入內容

序列化設計文件代表從設計工具匯入的 UI 設計,並以工具包結構定義處理。檔案包含從設計稿剖析的下列資訊:

  • 設計的完整節點樹狀結構
  • 圖片和元件
  • 中繼資料,例如名稱、版本和上次修改日期

設計的根節點必須在節點清單中定義,且必須是設計中識別出的安全相關元素的根節點。

這個檔案會與 Android Automotive OS 整合,以便算繪儀表板,並透過在 SDV 媒體上執行的「高可用性」算繪器 (HAR) 顯示與安全無關的元素,做為向使用者顯示與安全相關元素的疊加層。

設計編譯器會使用 DesignCompose 自訂項目產生輸出內容,以切換設計中安全關鍵元素的顯示狀態。設計會以無頭模式透過 Impeller 算繪。在自訂變更之間,系統會向算繪後端發出螢幕截圖指令,生成圖片構件。

用來建構安全監控器的 Figma 設計檔案範例

圖 3. 用來建構安全監控器的 Figma 設計檔案範例。

輸出內容目錄

這是本機檔案系統中的位置,編譯器會將產生的構件儲存在這裡。

JSON 設定檔

通常,OEM 安全工程師會編寫 JSON 設定檔,其中包含擷取 UI 設計未擷取的車輛安全相關資訊的中繼資料。這個檔案包含下列資料:

  • 指定為安全相關顯示內容根層級的設計元素。 這個設計元素的大小會配合車輛螢幕調整,大小必須與螢幕解析度相同。所有安全相關元素都必須是這個元素的子項。不一定要是直接後代,但必須巢狀內嵌於中間節點。這個根是根節點物件,其名稱必須與設計文件中的節點相符。

  • 設計的目標螢幕。如要支援 UI,讓元素跨多個螢幕顯示,設定檔可以指定多個設計,每個設計都指定在不同螢幕上顯示。

  • 車輛匯流排信號名稱與相關聯 UI 元素的字典。這個字典的鍵和值如下:

    • 鍵:車輛匯流排訊號名稱,包含意義,因此當這個訊號處於啟用狀態時,系統會顯示相關聯的 UI 元素。信號處於非啟用狀態時,系統不會顯示相關聯的 UI 元素。

    • 值:由車輛匯流排信號控管的安全相關元素 Figma 節點 ID。

請參閱這個 JSON 設定檔範例:

{
  "documents" : [
    {
    "rootnode" : "#Stage",
    "display_id" : 1,
    "document_id": "GLJJrR1JI4HVEjL1qB40zq",
    "states" : {
      "abs": "#cluster/telltale/abs",
      "airbag": "#cluster/telltale/airbag",
      "low_tire_pressure": "#cluster/telltale/low-tire-pressure",
      "brake": "#cluster/telltale/brake",
      "traction": "#cluster/telltale/traction",
      "lowbeam": "#cluster/telltale/lowbeam",
      "hibeam": "#cluster/telltale/hibeam",
      "park_lights": "#cluster/telltale/park-lights",
      "fog_lights": "#cluster/telltale/fog-lights",
      "seatbelts" : "#cluster/telltale/no-seatbelt"
    }
    }
  ]
  ,
  "displays": [
    {
      "id": 1,
      "width": 1920,
      "height": 720
    }
  ]
 }

執行設計編譯器

如要執行設計編譯器,請按照下列指示操作:

/path/to/safety-design-compiler -c path/to/<input-file>.json
-o path/to/output_directory

下表說明設計編譯器輸入內容:

輸入 類型 說明
設定 -c 字串 儲存安全設定 JSON 檔案的路徑。
輸出 -o 字串 儲存所產生構件的路徑。

設計編譯器輸出內容

設計編譯器會產生輸出內容,並儲存至您叫用編譯器工具時指定的輸出目錄。這項輸出內容會產生標頭檔案,用於定義安全監控中的執行階段像素測試,以及產生可供人閱讀的報表。設計編譯器輸出內容會以 Zip 檔案的形式提供,內含:

  • 匯出資產根目錄中的 data.json 檔案中繼資料檔案,用於說明匯出設計的結構。檔案中的所有路徑都與這個檔案相關。

  • 一系列獨立的 UI 元素圖片,顯示處於啟用狀態的安全性相關 UI 元素,用於後續的程式碼產生作業。這些圖片的 Alpha 通道會攜帶像素資訊,但不會影響安全性。

  • 一系列完整的 UI 圖片,顯示處於啟用和停用狀態的安全相關 UI 元素,供您測試產生的程式碼。

  • 編譯器會將更新後的序列化 Figma 文件做為輸入內容。HAR 會標記並更新 Config.json 中指定的特徵節點,並在工具包結構定義中設定 RenderOptions::PixelPerfect 旗標,以供後續處理。

這張圖顯示 Figma 設計檔案。

ZIP 檔案內容

圖 4. ZIP 檔案內容。

建立輸入檔案

為安全監控產生器建立 data.json 輸入檔案。輸出內容會以陣列形式呈現,包含每個安全相關顯示元素的維度資料和圖片連結。下表說明這個輸出檔案的結構:

元素 類型 單位 說明
static_ui_elements 字典 不適用 這個結構包含從 Figma 文件擷取的所有安全相關 UI 元素中繼資料。
x int 像素 與安全相關元素的水平座標。
y int 像素 與安全相關元素的垂直座標。
width int 像素 安全相關元素的寬度
height int 像素 安全相關元素的高度。
name 字串 不適用 從 Figma 文件擷取的安全性相關 UI 元素名稱。代表使用這個元素生成的圖片相對路徑。
screen 用來描述 UI 目標畫面的字典。
width int 像素 Figma 文件 UI 的寬度。
height int 像素 Figma 文件 UI 的高度。
build 字典,其中包含設計編譯器這次呼叫的建構資訊。
figma_document_id 字串 不適用 用於產生構件集的 Figma 文件 ID。
design_compiler_version 字串 不適用 用於產生構件集的 Design Compiler 版本。

本節提供產生的 data.json 檔案範例:

{
 "static_ui_elements": [
   {
     "x": 71,
     "y": 663,
     "width": 38,
     "height": 47,
     "name": "cluster/telltale/no-seatbelt"
   },
   {
     "x": 149,
     "y": 667,
     "width": 40,
     "height": 39,
     "name": "cluster/telltale/low-tire-pressure"
   },
      {
     "x": 1727,
     "y": 676,
     "width": 43,
     "height": 27,
     "name": "cluster/telltale/hibeam"
   },
   {
     "x": 1810,
     "y": 675,
     "width": 43,
     "height": 30,
     "name": "cluster/telltale/lowbeam"
   },
  ...
  ...
 ],
 "screen": {
   "width": 1920,
   "height": 720
 },
 "build": {
   "figma_document_id": "taQnsdPS96wZY8dB1TbzOH",
   "design_compiler_version": "0.1.0"
 }
}

匯出的設計圖片

系統會根據序列化設計文件中的命名方式,在巢狀目錄結構中算繪並儲存安全相關節點的圖片。

產生的驗證圖片目錄結構

圖 5. 驗證圖片。

系統會為每個指定的特徵生成安全相關元素資訊圖片。這些圖片包含安全關鍵元素在螢幕上顯示時的預期像素。為了進行執行階段像素測試,安全監控器可能會忽略這些圖片中的透明像素。

系統也會生成 UI 測試和驗證圖片。這項工具會針對每個可疑跡象,擷取完整 UI 的螢幕截圖,並提供這些截圖來生成易於閱讀的報告,方便安全工程師審查及核准安全設定。

您也可以使用這些圖片,後續測試安全監控器。 系統會為「開啟」和「關閉」狀態的所有警示燈產生驗證圖片。

這些圖片會顯示設計,以及所有相關安全元素 (包括啟用和停用狀態)。

有效和無效的安全相關元素 有效和無效的安全相關元素

圖 6圖 7。有效和無效的安全相關元素。

圖 8 顯示未繫安全帶警示燈的安全相關資訊圖片:

未繫安全帶警示燈的安全相關資訊

圖 8. 未繫安全帶警示燈。

圖 9 顯示了 telltale 的 UI 測試和驗證圖片。

測試及驗證警示燈的 UI

圖 9.測試及驗證指標的 UI。

系統會為編譯後構件資料夾中的每個元素產生驗證圖片。系統會在程式碼產生步驟中處理這些圖片,並將其新增至標頭檔案,以用於安全監控器中的執行階段像素測試。

人類可讀的報表產生器

從 Figma 文件生成構件後,您可以生成易讀的報表。報表產生器位於 utils/human-readable-report-generator

系統會將 Design Compiler 產生的安全相關節點構件,以 HTML 檔案的形式歸納重點,包括 UI 的螢幕截圖 (節點處於啟用狀態)。您可以在建構安全監控器之前,先檢查編譯的構件。

從指令列執行報表產生器:

cargo run --bin human-readable-report-generator -- -d /path/to/data.json
-o /path/to/output_folder

下表說明報表產生器可讀取的輸入內容。

輸入 類型 說明
data_folder -d 字串 安全編譯器產生的 data.json 位置。
output_path -o 字串 儲存所產生報表的路徑。

安全核准工具

如要產生核准權杖,安全工程師可以先查看易讀的報告,然後對 output.json 執行安全核准指令碼。這項工具也位於 utils/human-readable-report-generator。 例如:

cargo run --bin approve-hrr -- -f /path/to/compiler_inspection_output.html -n
"Your Name" -e youremail@domain.com -o output/path

供審查的 HTML 報表範例

圖 10. HTML 報表範例。

本節說明安全審核工具的輸入內容。

輸入 類型 說明
file_path -f 字串 使用者可判讀報表的檔案路徑。
approver_name -n 字串 核准工程師的姓名。
approver_email -e 字串 核准工程師的電子郵件地址。
output_path -o 字串 生成內容的目的地。

本節顯示 approval_file.json 的範例。

{
    "approver_name": //Name of the approver
    "approver_email": //Email of the approver
    "file_hash": //SHA-256 hash generated against the human readable report.
}

參考安全監控器

參考安全監控器是位於 reference/safety-monitor 的 Rust 服務。監視器會使用 Design Compiler 產生的構件監控系統狀態,確保顯示器符合安全法規。

監控器會以獨立二進位檔 (har_safety_monitor) 形式執行,並將 data.json 檔案的路徑和構件的基本路徑做為引數。

/path/to/har_safety_monitor --data-json-path /path/to/data.json
--artifact-base-path /path/to/artifacts

監控器會執行下列工作:

  • 構件載入:載入 data.json,找出與安全相關的 UI 元素,以及這些元素預期的位置和尺寸。
  • 黃金圖片比較:比較目前畫面內容與編譯器產生的安全關鍵元素黃金圖片。
  • 車輛資料整合:連結至車輛資料來源,判斷每個警示燈的預期狀態。
  • 不符偵測:如果車輛資料與螢幕上顯示的內容不符,系統會記錄錯誤。

安全監控器的設計目的是要建構及部署為系統映像檔的一部分,通常位於專屬 APEX 內。