सुरक्षा को ध्यान में रखकर डिज़ाइन करने से जुड़ी टूलचेन

Figma के डिज़ाइन दस्तावेज़ से जनरेट किए गए सुरक्षा मॉनिटरिंग समाधान को डिलीवर करने के लिए, सुरक्षा डिज़ाइन टूलचेन का इस्तेमाल करें. इन टूल का इस्तेमाल क्रम से करें.

सेफ़्टी डिज़ाइन कंपाइलर, सेफ़्टी आर्टफ़ैक्ट बनाता है. इनका इस्तेमाल, सेफ़्टी मॉनिटर बनाने के लिए कोड जनरेट करने में किया जाता है. डिज़ाइन कंपाइलेशन और कोड जनरेशन को अलग-अलग करने से, कोड जनरेटर को आईएसओ-26262 रेटिंग टीसीएल-3 हासिल करने में मदद मिलती है.

सुरक्षा को ध्यान में रखकर डिज़ाइन करने से जुड़ी टूलचेन

पहली इमेज. सुरक्षा को ध्यान में रखकर डिज़ाइन करने से जुड़ी टूलचेन.

कंपाइलर के आर्टफ़ैक्ट जनरेट करने के बाद, टूलचेन एक रिपोर्ट बनाता है. ओईएम का सुरक्षा इंजीनियर इस रिपोर्ट की जांच करके, Figma डिज़ाइन से जनरेट किए गए आर्टफ़ैक्ट की पुष्टि कर सकता है.

सुरक्षा को ध्यान में रखकर डिज़ाइन करने से जुड़ी टूलचेन का वर्कफ़्लो

दूसरी इमेज. सुरक्षा को ध्यान में रखकर डिज़ाइन करने से जुड़ी टूलचेन का वर्कफ़्लो.

डिज़ाइन कंपाइलर के इनपुट

सीरियलाइज़ किए गए डिज़ाइन दस्तावेज़ में, डिज़ाइन टूल से इंपोर्ट किया गया यूज़र इंटरफ़ेस (यूआई) डिज़ाइन होता है. इसे टूलकिट स्कीमा के साथ प्रोसेस किया जाता है. फ़ाइल में, डिज़ाइन से पार्स की गई यह जानकारी शामिल होती है:

  • किसी डिज़ाइन का पूरा नोड ट्री
  • इमेज और कॉम्पोनेंट
  • मेटाडेटा, जैसे कि नाम, वर्शन, और पिछली बार बदलाव किए जाने की तारीख

डिज़ाइन के रूट नोड, नोड की सूची में तय किए जाने चाहिए. साथ ही, डिज़ाइन में सुरक्षा से जुड़े जिन एलिमेंट की पहचान की गई है उनके लिए रूट नोड होने चाहिए.

यह फ़ाइल, Android Automotive OS के साथ इंटिग्रेट होती है, ताकि इंस्ट्रुमेंट क्लस्टर को रेंडर किया जा सके. साथ ही, यह सुरक्षा से जुड़े एलिमेंट को दिखाने के लिए, एसडीवी मीडिया पर चलने वाले हाई अवेलेबिलिटी रेंडरर (एचएआर) के साथ, सुरक्षा से जुड़े एलिमेंट को ओवरले के तौर पर दिखाती है.

डिज़ाइन कंपाइलर, DesignCompose की कस्टम सेटिंग का इस्तेमाल करके आउटपुट जनरेट करता है. इससे डिज़ाइन में सुरक्षा से जुड़े अहम एलिमेंट की दिखने की सेटिंग को टॉगल किया जा सकता है. इस डिज़ाइन को Impeller की मदद से हेडलेस रेंडर किया जाता है. पसंद के मुताबिक किए गए बदलावों के बीच, सिस्टम रेंडरिंग बैकएंड को स्क्रीनशॉट के निर्देश देता है, ताकि इमेज आर्टफ़ैक्ट जनरेट किए जा सकें.

सुरक्षा मॉनिटर बनाने के लिए, Figma की डिज़ाइन फ़ाइल का सैंपल

तीसरी इमेज. सुरक्षा मॉनिटर बनाने के लिए, Figma की डिज़ाइन फ़ाइल का सैंपल.

आउटपुट डायरेक्ट्री

यह लोकल फ़ाइल सिस्टम में वह जगह है जहां कंपाइलर, जनरेट किए गए आर्टफ़ैक्ट सेव करता है.

JSON कॉन्फ़िगरेशन फ़ाइल

ज़्यादातर मामलों में, OEM का सुरक्षा इंजीनियर JSON कॉन्फ़िगरेशन फ़ाइल बनाता है. इसमें ऐसा मेटाडेटा होता है जिसमें वाहन की सुरक्षा से जुड़ी ऐसी जानकारी शामिल होती है जो यूज़र इंटरफ़ेस (यूआई) डिज़ाइन में शामिल नहीं होती. इस फ़ाइल में यह डेटा मौजूद है:

  • यह डिज़ाइन एलिमेंट, सुरक्षा से जुड़ी जानकारी दिखाने वाले डिसप्ले का रूट होता है. इस डिज़ाइन एलिमेंट का साइज़, वाहन के डिसप्ले के हिसाब से होता है. आकार का रिज़ॉल्यूशन, डिसप्ले के रिज़ॉल्यूशन के बराबर होना चाहिए. सुरक्षा से जुड़े सभी एलिमेंट, इस एलिमेंट के डिसेंडेंट होने चाहिए. यह ज़रूरी नहीं है कि वे सीधे तौर पर डिसेंडेंट हों. हालांकि, वे इंटरमीडिएट नोड में नेस्ट किए गए होने चाहिए. यह रूट, रूट नोड ऑब्जेक्ट है. इसका नाम, डिज़ाइन दस्तावेज़ में मौजूद नोड से मेल खाना चाहिए.

  • डिजाइन के लिए डिसप्ले टारगेट करें. एक से ज़्यादा डिसप्ले पर एलिमेंट वाले यूज़र इंटरफ़ेस (यूआई) के लिए, कॉन्फ़िगरेशन फ़ाइल में एक से ज़्यादा डिज़ाइन तय किए जा सकते हैं. हर डिज़ाइन को अलग-अलग स्क्रीन पर दिखाने के लिए टारगेट किया जाता है.

  • वाहन के बस सिग्नल के नामों की डिक्शनरी, जो यूज़र इंटरफ़ेस (यूआई) के एलिमेंट से जुड़ी होती है. इस डिक्शनरी की कुंजियां और वैल्यू ये हैं:

    • कुंजियां: वाहन के बस सिग्नल का नाम, ताकि जब यह सिग्नल चालू हो, तो इससे जुड़ा यूज़र इंटरफ़ेस (यूआई) एलिमेंट दिखाया जा सके. सिग्नल के बंद होने पर, उससे जुड़ा यूज़र इंटरफ़ेस (यूआई) एलिमेंट नहीं दिखता.

    • वैल्यू: वाहन बस सिग्नल के तहत आने वाले सुरक्षा से जुड़े एलिमेंट के लिए, Figma नोड आईडी.

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 स्ट्रिंग जनरेट किए गए आर्टफ़ैक्ट को सेव करने का पाथ.

कंपाइलर के आउटपुट को डिज़ाइन करना

डिज़ाइन कंपाइलर, आउटपुट को जनरेट करता है और उसे आउटपुट डायरेक्ट्री में सेव करता है. यह डायरेक्ट्री, कंपाइलर टूल को शुरू करते समय तय की जाती है. इस आउटपुट से, हेडर फ़ाइलें जनरेट होती हैं. इनका इस्तेमाल, सुरक्षा मॉनिटर में रनटाइम पिक्सल टेस्ट तय करने के लिए किया जाता है. साथ ही, इससे ऐसी रिपोर्ट जनरेट होती है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. डिज़ाइन कंपाइलर का आउटपुट, ज़िप फ़ाइल में दिया जाता है. इसमें ये चीज़ें शामिल होती हैं:

  • एक्सपोर्ट की गई ऐसेट के रूट में मौजूद data.json फ़ाइल मेटाडेटा फ़ाइल, एक्सपोर्ट किए गए डिज़ाइन के स्ट्रक्चर के बारे में बताती है. फ़ाइल में मौजूद सभी पाथ, इस फ़ाइल के हिसाब से तय किए जाते हैं.

  • अलग-अलग यूज़र इंटरफ़ेस (यूआई) एलिमेंट की इमेज की सीरीज़. इसमें सुरक्षा से जुड़े यूज़र इंटरफ़ेस (यूआई) एलिमेंट को ऐक्टिव स्टेट में दिखाया गया है. इनका इस्तेमाल बाद में कोड जनरेट करने के दौरान किया जाता है. इन इमेज में मौजूद ऐल्फ़ा चैनल में पिक्सल की ऐसी जानकारी होती है जिससे सुरक्षा पर कोई असर नहीं पड़ता.

  • यूज़र इंटरफ़ेस (यूआई) की पूरी इमेज की सीरीज़. इसमें जनरेट किए गए कोड की जांच करते समय, ऐक्टिव और इनऐक्टिव स्थितियों में सुरक्षा से जुड़े यूज़र इंटरफ़ेस (यूआई) एलिमेंट दिखाए गए हैं.

  • Figma के क्रम से लगाए गए दस्तावेज़ का अपडेट किया गया वर्शन, जिसे कंपाइलर इनपुट के तौर पर इस्तेमाल करता है. HAR, Config.json में बताए गए टेलटेल नोड को मार्क करता है और उन्हें अपडेट करता है. ऐसा इसलिए किया जाता है, ताकि टूलकिट स्कीमा में RenderOptions::PixelPerfect फ़्लैग सेट करके, आगे की प्रोसेसिंग की जा सके.

इस इमेज में, Figma की डिज़ाइन फ़ाइल दिखाई गई है.

ज़िप फ़ाइल का कॉन्टेंट

चौथी इमेज. ज़िप फ़ाइल का कॉन्टेंट.

इनपुट फ़ाइल बनाना

सेफ़्टी मॉनिटर जनरेटर के लिए data.json इनपुट फ़ाइल बनाएं. आउटपुट को एक ऐरे के तौर पर स्ट्रक्चर किया जाता है, ताकि इसमें डाइमेंशनल डेटा और सुरक्षा से जुड़े हर डिसप्ले एलिमेंट के लिए इमेज का लिंक शामिल किया जा सके. इस आउटपुट फ़ाइल के स्ट्रक्चर के बारे में इस टेबल में बताया गया है:

एलिमेंट प्रकार इकाइयां ब्यौरा
static_ui_elements शब्दकोश लागू नहीं इस स्ट्रक्चर में, सुरक्षा से जुड़े सभी यूज़र इंटरफ़ेस (यूआई) एलिमेंट का मेटाडेटा शामिल होता है. यह मेटाडेटा, Figma दस्तावेज़ से निकाला जाता है.
x आईएनटी पिक्सल सुरक्षा से जुड़े एलिमेंट का हॉरिज़ॉन्टल कोऑर्डिनेट.
y आईएनटी पिक्सल सुरक्षा से जुड़े एलिमेंट का वर्टिकल कोऑर्डिनेट.
width आईएनटी पिक्सल सुरक्षा से जुड़े एलिमेंट की चौड़ाई
height आईएनटी पिक्सल सुरक्षा से जुड़े एलिमेंट की ऊंचाई.
name स्ट्रिंग लागू नहीं Figma दस्तावेज़ से निकाला गया, सुरक्षा से जुड़े यूज़र इंटरफ़ेस (यूआई) एलिमेंट का नाम. यह इस एलिमेंट से जनरेट की गई इमेज का रिलेटिव पाथ दिखाता है.
screen डिक्शनरी, जिसमें यूज़र इंटरफ़ेस (यूआई) से टारगेट की गई स्क्रीन के बारे में बताया गया है.
width आईएनटी पिक्सल Figma दस्तावेज़ के यूज़र इंटरफ़ेस (यूआई) की चौड़ाई.
height आईएनटी पिक्सल Figma दस्तावेज़ के यूज़र इंटरफ़ेस (यूआई) की ऊंचाई.
build यह डिक्शनरी, डिज़ाइन कंपाइलर के इस इनवोकेशन के लिए बिल्ड की जानकारी देती है.
figma_document_id स्ट्रिंग लागू नहीं आर्टफ़ैक्ट का सेट जनरेट करने के लिए इस्तेमाल किए गए Figma दस्तावेज़ का आईडी.
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"
 }
}

एक्सपोर्ट की गई डिज़ाइन इमेज

सिस्टम, सुरक्षा से जुड़े नोड की इमेज को रेंडर करता है और उन्हें नेस्ट किए गए डायरेक्ट्री स्ट्रक्चर में सेव करता है. ऐसा, सीरियल किए गए डिज़ाइन दस्तावेज़ में उनके नाम के आधार पर किया जाता है.

पुष्टि के लिए जनरेट की गई इमेज का डायरेक्ट्री स्ट्रक्चर

पांचवीं इमेज. पुष्टि करने के लिए इमेज.

सिस्टम, सुरक्षा से जुड़ी एलिमेंट की जानकारी वाली इमेज जनरेट करता है. ये इमेज, हर बताए गए टेलटेल के लिए होती हैं. इन इमेज में, सुरक्षा के लिहाज़ से ज़रूरी एलिमेंट के अनुमानित पिक्सल शामिल होते हैं. ये पिक्सल तब दिखते हैं, जब एलिमेंट स्क्रीन पर दिखता है. सुरक्षा मॉनिटर, रन-टाइम पिक्सल टेस्ट के लिए इन इमेज में मौजूद पारदर्शी पिक्सल को अनदेखा कर सकता है.

सिस्टम, यूज़र इंटरफ़ेस की टेस्टिंग और पुष्टि करने वाली इमेज भी जनरेट करता है. यह टूल, पूरे यूज़र इंटरफ़ेस (यूआई) के स्क्रीनशॉट रेंडर करता है. साथ ही, हर स्क्रीनशॉट में गड़बड़ी की जानकारी देने वाले एलिमेंट को हाइलाइट करता है. इसके बाद, यह टूल इन स्क्रीनशॉट को ऐसी रिपोर्ट जनरेट करने के लिए इस्तेमाल करता है जिसे आसानी से पढ़ा जा सकता है. इससे सुरक्षा इंजीनियर, सुरक्षा कॉन्फ़िगरेशन की समीक्षा कर सकते हैं और उसे मंज़ूरी दे सकते हैं.

इन इमेज का इस्तेमाल, सुरक्षा मॉनिटर की बाद में होने वाली टेस्टिंग के लिए भी किया जा सकता है. सिस्टम, चालू और बंद स्थितियों में सभी टेलटेल के लिए पुष्टि करने वाली इमेज जनरेट करता है.

इन इमेज में, सुरक्षा से जुड़े सभी ज़रूरी एलिमेंट के साथ डिज़ाइन दिखाया गया है. इसमें चालू और बंद, दोनों तरह के एलिमेंट शामिल हैं.

सुरक्षा से जुड़े चालू और बंद एलिमेंट सुरक्षा से जुड़े चालू और बंद एलिमेंट

छठी इमेज और सातवीं इमेज. सुरक्षा से जुड़े ऐक्टिव और इनऐक्टिव एलिमेंट.

आठवीं इमेज में, सीट बेल्ट न लगाने पर दिखने वाले इंडिकेटर के लिए, सुरक्षा से जुड़ी जानकारी वाली इमेज दिखाई गई है:

सीट बेल्ट न लगाने पर दिखने वाली चेतावनी के लिए, सुरक्षा से जुड़ी जानकारी

आठवीं इमेज. सीट बेल्ट न लगाने पर चेतावनी देने वाला इंडिकेटर.

नौवीं इमेज में, टेलटेल के लिए यूज़र इंटरफ़ेस (यूआई) की जांच और पुष्टि करने वाली इमेज दिखाई गई है.

टेलटेल के लिए यूज़र इंटरफ़ेस की जांच और पुष्टि करना

नौवीं इमेज. Telltale के लिए यूज़र इंटरफ़ेस की जांच और पुष्टि करना.

सिस्टम, कंपाइल किए गए आर्टफ़ैक्ट फ़ोल्डर में मौजूद हर एलिमेंट के लिए पुष्टि करने वाली इमेज जनरेट करता है. सिस्टम, कोड जनरेट करने के चरण में इन इमेज को प्रोसेस करता है. इसके बाद, इन्हें हेडर फ़ाइल में जोड़ता है. इस फ़ाइल का इस्तेमाल, सुरक्षा मॉनिटर में रंटाइम पिक्सल टेस्ट के लिए किया जाता है.

रिपोर्ट जनरेट करने की ऐसी सुविधा जो किसी व्यक्ति के लिए आसानी से पढ़ी जा सके

Figma दस्तावेज़ से आर्टफ़ैक्ट जनरेट करने के बाद, ऐसी रिपोर्ट जनरेट की जा सकती है जिसे आसानी से पढ़ा जा सके. रिपोर्ट जनरेटर utils/human-readable-report-generator में मौजूद है.

सिस्टम, एचटीएमएल फ़ाइल में सुरक्षा से जुड़े नोड के आर्टफ़ैक्ट की खास जानकारी देता है. ये आर्टफ़ैक्ट, डिज़ाइन कंपाइलर ने जनरेट किए हैं. इसमें नोड चालू होने पर यूज़र इंटरफ़ेस (यूआई) का स्क्रीनशॉट भी शामिल होता है. सेफ़्टी मॉनिटर बनाने से पहले, कंपाइल किए गए आर्टफ़ैक्ट की समीक्षा की जा सकती है.

कमांड लाइन से रिपोर्ट जनरेट करने की सुविधा को चलाएं:

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

समीक्षा के लिए एचटीएमएल रिपोर्ट का सैंपल

दसवीं इमेज. एचटीएमएल रिपोर्ट का सैंपल.

इस सेक्शन में, सुरक्षा से जुड़े अनुरोधों को मंज़ूरी देने वाले टूल के इनपुट के बारे में बताया गया है.

इनपुट छोटा प्रकार ब्यौरा
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.
}

सुरक्षा मॉनिटर करने की सुविधा

रेफ़रंस सेफ्टी मॉनिटर, Rust पर आधारित एक सेवा है. यह reference/safety-monitor में मौजूद है. मॉनिटर, 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 को लोड करता है, ताकि सुरक्षा से जुड़े यूज़र इंटरफ़ेस (यूआई) एलिमेंट और उनकी संभावित पोज़िशन और डाइमेंशन की पहचान की जा सके.
  • गोल्डन इमेज की तुलना करना: इसमें, मौजूदा स्क्रीन के कॉन्टेंट की तुलना, कंपाइलर से जनरेट किए गए सुरक्षा से जुड़े अहम एलिमेंट की गोल्डन इमेज से की जाती है.
  • वाहन डेटा इंटिग्रेशन: यह वाहन के डेटा सोर्स से कनेक्ट होता है, ताकि हर टेलटेल की संभावित स्थिति का पता लगाया जा सके.
  • मेल न खाने वाली जानकारी का पता लगाना: अगर वाहन के डेटा के हिसाब से अनुमानित जानकारी और स्क्रीन पर दिखने वाली जानकारी मेल नहीं खाती है, तो यह गड़बड़ी को लॉग करता है.

सेफ़्टी मॉनिटर को सिस्टम इमेज के हिस्से के तौर पर बनाया और डिप्लॉय किया जाता है. आम तौर पर, इसे किसी खास APEX में डिप्लॉय किया जाता है.