使用安全設計工具鍊,從 Figma 設計文件產生安全監控解決方案。請依序使用這一系列的工具。
安全設計編譯器會產生安全構件,以驅動後續的程式碼產生作業,建構安全監控器。設計編譯和程式碼生成程序分開進行,因此程式碼產生器可達到 TCL-3 的 ISO-26262 評等。
圖 1. 安全設計工具鍊。
編譯器產生構件後,工具鍊會建立報表,OEM 安全工程師可以檢查這份報表,驗證從 Figma 設計產生的構件。
圖 2. 安全設計工具鍊工作流程。
設計編譯器輸入內容
序列化設計文件代表從設計工具匯入的 UI 設計,並以工具包結構定義處理。檔案包含從設計稿剖析的下列資訊:
- 設計的完整節點樹狀結構
- 圖片和元件
- 中繼資料,例如名稱、版本和上次修改日期
設計的根節點必須在節點清單中定義,且必須是設計中識別出的安全相關元素的根節點。
這個檔案會與 Android Automotive OS 整合,以便算繪儀表板,並透過在 SDV 媒體上執行的「高可用性」算繪器 (HAR) 顯示與安全無關的元素,做為向使用者顯示與安全相關元素的疊加層。
設計編譯器會使用 DesignCompose 自訂項目產生輸出內容,以切換設計中安全關鍵元素的顯示狀態。設計會以無頭模式透過 Impeller 算繪。在自訂變更之間,系統會向算繪後端發出螢幕截圖指令,生成圖片構件。
圖 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 設計檔案。
圖 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 測試和驗證圖片。
圖 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
圖 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 內。