安全性設計ツールチェーンを使用して、Figma 設計ドキュメントから生成された安全性モニター ソリューションを提供します。この一連のツールは順番に使用します。
安全性設計コンパイラは、安全性モニターを構築するための後続のコード生成を駆動する安全性アーティファクトを生成します。設計コンパイルとコード生成を分離することで、コード生成ツールは ISO-26262 の TCL-3 評価を達成できます。
図 1. 安全性設計ツールチェーン。
コンパイラがアーティファクトを生成すると、ツールチェーンは、OEM の安全エンジニアが Figma デザインから生成されたアーティファクトを検証するために検査できるレポートを作成します。
図 2. 安全性設計ツールチェーンのワークフロー。
コンパイラの入力を設計する
シリアル化された設計ドキュメントは、設計ツールからインポートされ、ツールキット スキーマで処理された UI 設計を表します。このファイルには、デザインから解析された次の情報が含まれています。
- デザインの完全なノードツリー
- イメージとコンポーネント
- 名前、バージョン、最終更新日などのメタデータ
設計のルートノードはノードリストで定義され、設計で特定された安全関連要素のルートノードでなければなりません。
このファイルは Android Automotive OS と統合され、インストルメント クラスタをレンダリングします。また、SDV Media で実行されている高可用性レンダラ(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 要素を示します。これらの画像のアルファ チャンネルには、安全性に影響しないピクセル情報が含まれています。
生成されたコードのテスト中に使用する、アクティブ状態と非アクティブ状態の安全性関連 UI 要素を示す一連の UI 全体画像。
コンパイラが入力として使用する、シリアル化された Figma ドキュメントの更新バージョン。HAR は、ツールキット スキーマで
RenderOptions::PixelPerfectフラグを設定することで、Config.jsonで指定された目印ノードをマークして更新し、さらなる処理を行います。
この図は、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 は、警告灯の 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 内に構築、デプロイされるように設計されています。