Użyj łańcucha narzędzi do projektowania bezpieczeństwa, aby dostarczyć rozwiązanie monitora bezpieczeństwa wygenerowane na podstawie dokumentu projektu Figma. Użyj tej serii narzędzi w odpowiedniej kolejności.
Kompilator projektu bezpieczeństwa tworzy artefakty bezpieczeństwa, które umożliwiają dalsze generowanie kodu na potrzeby tworzenia monitora bezpieczeństwa. Oddzielenie kompilacji projektu od generowania kodu pozwala generatorowi kodu uzyskać ocenę TCL-3 zgodnie z normą ISO-26262.
Rysunek 1. Łańcuch narzędzi do projektowania bezpieczeństwa.
Gdy kompilator wygeneruje artefakty, łańcuch narzędzi utworzy raport, który inżynier ds. bezpieczeństwa OEM może sprawdzić, aby zweryfikować artefakty wygenerowane na podstawie projektu Figma.
Rysunek 2. Przepływ pracy łańcucha narzędzi do projektowania bezpieczeństwa.
Dane wejściowe kompilatora projektu
Zserializowany dokument projektu reprezentuje projekt interfejsu użytkownika zaimportowany z narzędzia do projektowania i przetworzony za pomocą schematu zestawu narzędzi. Plik zawiera te informacje przeanalizowane na podstawie projektu:
- pełne drzewo węzłów projektu,
- obrazy i komponenty,
- metadane, takie jak nazwa, wersja i data ostatniej modyfikacji.
Węzły główne projektu muszą być zdefiniowane na liście węzłów i muszą być węzłami głównymi elementów istotnych z punktu widzenia bezpieczeństwa zidentyfikowanych w projekcie.
Ten plik integruje się z system operacyjny Android Automotive, aby renderować zestaw wskaźników i wyświetlać elementy nieistotne z punktu widzenia bezpieczeństwa za pomocą mechanizm renderowania o wysokiej dostępności (HAR) działającego w SDV Media jako nakładka, która wyświetla użytkownikowi elementy istotne z punktu widzenia bezpieczeństwa.
Kompilator projektu używa dostosowań DesignCompose do generowania danych wyjściowych, aby przełączać widoczność elementów krytycznych z punktu widzenia bezpieczeństwa w projekcie. Projekt jest renderowany bez interfejsu graficznego za pomocą Impeller. Między zmianami dostosowań system wysyła do backendu renderowania polecenia zrzutu ekranu, aby wygenerować artefakty obrazu.
Rysunek 3. Przykładowy plik projektu Figma do tworzenia monitora bezpieczeństwa.
Katalog wyjściowy
Jest to lokalizacja w lokalnym systemie plików, w której kompilator przechowuje wygenerowane artefakty.
Plik konfiguracji JSON
Najczęściej plik konfiguracji JSON tworzy inżynier ds. bezpieczeństwa OEM. Zawiera on metadane, które rejestrują informacje istotne z punktu widzenia bezpieczeństwa pojazdu, które nie są rejestrowane w projekcie interfejsu użytkownika. Ten plik zawiera te dane:
Element projektu wyznaczony jako korzeń wyświetlacza istotnego z punktu widzenia bezpieczeństwa. Ten element projektu jest dopasowany do wyświetlacza pojazdu. Rozmiar musi mieć taką samą rozdzielczość jak wyświetlacz. Wszystkie elementy istotne z punktu widzenia bezpieczeństwa muszą być elementami podrzędnymi tego elementu. Nie muszą to być elementy bezpośrednio podrzędne, ale zagnieżdżone w węzłach pośrednich. Ten korzeń jest obiektem węzła głównego, a jego nazwa musi odpowiadać węzłowi w dokumencie projektu.
Wyświetlacz docelowy projektu. Aby obsługiwać interfejsy użytkownika z elementami na wielu wyświetlaczach, plik konfiguracji może określać więcej niż 1 projekt. Każdy projekt jest przeznaczony do wyświetlania na osobnym ekranie.
Słownik nazw sygnałów magistrali pojazdu powiązanych z elementami interfejsu użytkownika. Klucze i wartości tego słownika to:
Klucze: nazwa sygnału magistrali pojazdu, która ma zawierać znaczenie, aby po aktywowaniu tego sygnału wyświetlał się powiązany element interfejsu użytkownika. Gdy sygnał jest nieaktywny, powiązany element interfejsu użytkownika nie jest wyświetlany.
Wartości: identyfikator węzła Figma elementu istotnego z punktu widzenia bezpieczeństwa, którym steruje sygnał magistrali pojazdu.
Zobacz ten przykładowy plik konfiguracji 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
}
]
}
Uruchamianie kompilatora projektu
Aby uruchomić kompilator projektu:
/path/to/safety-design-compiler -c path/to/<input-file>.json
-o path/to/output_directory
Dane wejściowe kompilatora projektu są opisane w tej tabeli:
| Dane wejściowe | Short | Typ | Opis |
|---|---|---|---|
| Konfiguracja | -c |
tekst | Ścieżka, w której ma zostać zapisany plik JSON konfiguracji bezpieczeństwa. |
| Wyniki | -o |
tekst | Ścieżka, w której mają zostać zapisane wygenerowane artefakty. |
Wyniki kompilatora projektu
Kompilator projektu generuje i zapisuje dane wyjściowe w katalogu wyjściowym określonym podczas wywoływania narzędzia kompilatora. Te dane wyjściowe generują pliki nagłówkowe używane do definiowania testów pikseli w czasie działania w monitorze bezpieczeństwa oraz do generowania raportu zrozumiałego dla człowieka. Dane wyjściowe kompilatora projektu są dostępne w pliku ZIP, który zawiera:
plik metadanych
data.jsonw katalogu głównym wyeksportowanych zasobów, który opisuje strukturę wyeksportowanego projektu. Wszystkie ścieżki w pliku są względne w stosunku do tego pliku.seria izolowanych obrazów elementów interfejsu użytkownika, które pokazują elementy interfejsu użytkownika istotne z punktu widzenia bezpieczeństwa w stanie aktywnym. Są one używane podczas dalszego generowania kodu. Kanał alfa w tych obrazach zawiera informacje o pikselach, które nie mają wpływu na bezpieczeństwo.
seria pełnych obrazów interfejsu użytkownika, które pokazują elementy interfejsu użytkownika istotne z punktu widzenia bezpieczeństwa w stanie aktywnym i nieaktywnym. Są one używane podczas testowania wygenerowanego kodu.
zaktualizowana wersja zserializowanego dokumentu Figma, który jest używany przez kompilator jako dane wejściowe. HAR oznacza i aktualizuje węzły telltale określone w
Config.jsondo dalszego przetwarzania, ustawiając flagęRenderOptions::PixelPerfectw schemacie zestawu narzędzi.
Ten rysunek przedstawia plik projektu Figma.
Rysunek 4. Zawartość pliku ZIP.
Tworzenie pliku wejściowego
Utwórz plik wejściowy data.json dla generatora monitora bezpieczeństwa. Dane wyjściowe są uporządkowane jako tablica, która zawiera dane wymiarowe i link do zdjęcia każdego elementu wyświetlacza istotnego z punktu widzenia bezpieczeństwa. Struktura tego pliku wyjściowego jest opisana w tej tabeli:
| Element | Typ | Jednostki | Opis |
|---|---|---|---|
static_ui_elements |
Słownik | Nie dotyczy | Struktura zawierająca metadane wszystkich elementów interfejsu użytkownika istotnych z punktu widzenia bezpieczeństwa wyodrębnionych z dokumentu Figma. |
x |
int | piksele | Współrzędna pozioma elementu istotnego z punktu widzenia bezpieczeństwa. |
y |
int | piksele | Współrzędna pionowa elementu istotnego z punktu widzenia bezpieczeństwa. |
width |
int | piksele | Szerokość elementu istotnego z punktu widzenia bezpieczeństwa. |
height |
int | piksele | Wysokość elementu istotnego z punktu widzenia bezpieczeństwa. |
name |
tekst | Nie dotyczy | Nazwa elementu interfejsu użytkownika istotnego z punktu widwidzenia bezpieczeństwa wyodrębniona z dokumentu Figma. Reprezentuje ścieżkę względną do obrazów wygenerowanych za pomocą tego elementu. |
screen |
Słownik opisujący ekran, na który jest kierowany interfejs użytkownika. | ||
width |
int | piksele | Szerokość interfejsu użytkownika dokumentu Figma. |
height |
int | piksele | Wysokość interfejsu użytkownika dokumentu Figma. |
build |
Słownik zawierający informacje o kompilacji dla tego wywołania kompilatora projektu. | ||
figma_document_id |
tekst | Nie dotyczy | Identyfikator dokumentu Figma użytego do wygenerowania zestawu artefaktów. |
design_compiler_version |
tekst | Nie dotyczy | Wersja kompilatora projektu użyta do wygenerowania zestawu artefaktów. |
Ta sekcja zawiera przykład wygenerowanego pliku 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"
}
}
Wyeksportowane obrazy projektu
System renderuje i zapisuje obrazy węzłów istotnych z punktu widzenia bezpieczeństwa w zagnieżdżonej strukturze katalogów na podstawie ich nazw w zserializowanym dokumencie projektu.
Rysunek 5. Obrazy do weryfikacji.
System generuje obrazy informacji o elementach istotnych z punktu widzenia bezpieczeństwa dla każdego określonego elementu telltale. Te obrazy zawierają oczekiwane piksele elementu krytycznego z punktu widzenia bezpieczeństwa, gdy jest on widoczny na ekranie. Monitor bezpieczeństwa może ignorować przezroczyste piksele w tych obrazach na potrzeby testów pikseli w czasie działania.
System generuje też obrazy do testowania i weryfikacji interfejsu użytkownika. Renderuje zrzuty ekranu pełnego interfejsu użytkownika z każdym elementem telltale i udostępnia je, aby wygenerować raport zrozumiały dla człowieka. Dzięki temu inżynierowie ds. bezpieczeństwa mogą sprawdzić i zatwierdzić konfigurację bezpieczeństwa.
Możesz też użyć tych obrazów do dalszego testowania monitora bezpieczeństwa. System generuje obrazy do weryfikacji dla wszystkich elementów telltale w stanie włączonym i wyłączonym.
Te obrazy przedstawiają projekt ze wszystkimi elementami istotnymi z punktu widzenia bezpieczeństwa w stanie aktywnym i nieaktywnym.
Rysunek 6 i Rysunek 7. Aktywne i nieaktywne elementy istotne z punktu widzenia bezpieczeństwa.
Rysunek 8 przedstawia obraz informacji o elementach istotnych z punktu widzenia bezpieczeństwa dla elementu telltale „brak zapiętych pasów bezpieczeństwa”:
Rysunek 8. Element telltale „brak zapiętych pasów bezpieczeństwa”.
Rysunek 9 przedstawia obraz do testowania i weryfikacji interfejsu użytkownika dla elementu telltale.
Rysunek 9. Testowanie i weryfikacja interfejsu użytkownika dla elementu telltale.
System generuje obrazy do weryfikacji dla każdego elementu w skompilowanym folderze artefaktów. System przetwarza te obrazy w kroku generowania kodu i dodaje je do pliku nagłówkowego, który będzie używany do testów pikseli w czasie działania w monitorze bezpieczeństwa.
Generator raportów zrozumiałych dla człowieka
Po wygenerowaniu artefaktów z dokumentu Figma możesz wygenerować raport zrozumiały dla człowieka. Generator raportów znajduje się w utils/human-readable-report-generator.
System podsumowuje artefakty węzłów istotnych z punktu widzenia bezpieczeństwa wygenerowane przez kompilator projektu w pliku HTML, w tym zrzut ekranu interfejsu użytkownika z aktywnym węzłem. Przed utworzeniem monitora bezpieczeństwa możesz sprawdzić skompilowane artefakty.
Uruchom generator raportów z wiersza poleceń:
cargo run --bin human-readable-report-generator -- -d /path/to/data.json
-o /path/to/output_folder
Ta tabela opisuje dane wejściowe generatora raportów zrozumiałych dla człowieka.
| Dane wejściowe | Short | Typ | Opis |
|---|---|---|---|
data_folder |
-d |
tekst | Lokalizacja pliku data.json wygenerowanego przez kompilator bezpieczeństwa. |
output_path |
-o |
tekst | Ścieżka, w której ma zostać zapisany wygenerowany raport. |
Narzędzie do zatwierdzania bezpieczeństwa
Aby wygenerować token zatwierdzenia, po sprawdzeniu raportu zrozumiałego dla człowieka inżynier ds. bezpieczeństwa może uruchomić skrypt zatwierdzania bezpieczeństwa w pliku output.json.
To narzędzie znajduje się też w utils/human-readable-report-generator.
Przykład:
cargo run --bin approve-hrr -- -f /path/to/compiler_inspection_output.html -n
"Your Name" -e youremail@domain.com -o output/path
Rysunek 10. Przykładowy raport HTML.
Ta sekcja opisuje dane wejściowe narzędzia do zatwierdzania bezpieczeństwa.
| Dane wejściowe | Short | Typ | Opis |
|---|---|---|---|
file_path |
-f |
tekst | Ścieżka do pliku raportu zrozumiałego dla człowieka. |
approver_name |
-n |
tekst | Imię i nazwisko inżyniera zatwierdzającego. |
approver_email |
-e |
tekst | Adres e-mail inżyniera zatwierdzającego. |
output_path |
-o |
tekst | Miejsce docelowe wygenerowanych danych wyjściowych. |
Ta sekcja zawiera przykład pliku 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.
}
Referencyjny monitor bezpieczeństwa
Referencyjny monitor bezpieczeństwa to usługa oparta na języku Rust, która znajduje się w reference/safety-monitor. Monitor używa artefaktów wygenerowanych przez kompilator projektu do monitorowania stanu systemu, aby zapewnić zgodność z zasadami bezpieczeństwa wyświetlania.
Monitor działa jako samodzielny plik binarny (har_safety_monitor) i przyjmuje jako argumenty ścieżkę do pliku data.json oraz ścieżkę podstawową do artefaktów.
/path/to/har_safety_monitor --data-json-path /path/to/data.json
--artifact-base-path /path/to/artifacts
Monitor wykonuje te zadania:
- Wczytywanie artefaktów: wczytuje plik
data.json, aby zidentyfikować elementy interfejsu użytkownika istotne z punktu widzenia bezpieczeństwa oraz ich oczekiwane położenie i wymiary. - Porównywanie obrazów wzorcowych: porównuje bieżącą zawartość ekranu z obrazami wzorcowymi elementów krytycznych z punktu widzenia bezpieczeństwa wygenerowanymi przez kompilator.
- Integracja danych pojazdu: łączy się ze źródłami danych pojazdu, aby określić oczekiwany stan każdego elementu telltale.
- Wykrywanie niezgodności: rejestruje błąd, jeśli wystąpi niezgodność między tym, co jest oczekiwane na podstawie danych pojazdu, a tym, co jest widoczne na ekranie.
Monitor bezpieczeństwa jest przeznaczony do tworzenia i wdrażania jako część obrazu systemu, zwykle w ramach dedykowanego APEX.