Zestaw narzędzi do projektowania bezpiecznych systemów

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.

Zestaw narzędzi do projektowania bezpiecznych systemów

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.

Przepływ pracy w łańcuchu narzędzi do projektowania bezpieczeństwa

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.

Przykładowy plik projektu Figma do utworzenia monitora bezpieczeństwa

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.json w 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.json do dalszego przetwarzania, ustawiając flagę RenderOptions::PixelPerfect w schemacie zestawu narzędzi.

Ten rysunek przedstawia plik projektu Figma.

Zawartość pliku ZIP

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.

Struktura katalogów wygenerowanych obrazów weryfikacyjnych

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.

Aktywne i nieaktywne elementy związane z bezpieczeństwem Aktywne i nieaktywne elementy związane z bezpieczeństwem

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”:

Informacje dotyczące bezpieczeństwa w przypadku kontrolki niezapiętych pasów

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.

Testowanie i weryfikacja interfejsu użytkownika wskaźnika

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

Przykładowy raport HTML do sprawdzenia

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.