自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從功能安全視角看軟件架構(gòu)設(shè)計(jì)

開發(fā) 前端 智能汽車
功能安全應(yīng)該如何考慮軟件架構(gòu),什么樣的架構(gòu)是符合功能安全標(biāo)準(zhǔn)要求的,對(duì)于軟件架構(gòu)工程師和功能安全工程師,很難在兩個(gè)方面都說(shuō)得明白,本篇來(lái)從功能安全的角度談?wù)勡浖軜?gòu)設(shè)計(jì)的基本要求。

 

功能安全應(yīng)該如何考慮軟件架構(gòu),什么樣的架構(gòu)是符合功能安全標(biāo)準(zhǔn)要求的,對(duì)于軟件架構(gòu)工程師和功能安全工程師,很難在兩個(gè)方面都說(shuō)得明白,本篇來(lái)從功能安全的角度談?wù)勡浖軜?gòu)設(shè)計(jì)的基本要求。

首先,功能安全軟件的架構(gòu)設(shè)計(jì)是基于兩個(gè)層次的:

第一:選取和建立一個(gè)層次分明,易于理解的軟件架構(gòu);

第二:在第一條的基礎(chǔ)上,符合相應(yīng)功能安全等級(jí)要求的軟件設(shè)計(jì)要求。

接下來(lái),以汽車功能安全標(biāo)準(zhǔn)ISO26262-6和軌道交通軟件功能安全標(biāo)準(zhǔn)EN50128作為基準(zhǔn),談?wù)剺?biāo)準(zhǔn)是如何從以上兩個(gè)層次來(lái)做出規(guī)定的。

軟件架構(gòu)階段的開始

軟件架構(gòu)設(shè)計(jì)是軟件生命周期的第二個(gè)階段,前面的階段是軟件需求階段(software requirements specification),在軟件需求設(shè)計(jì)時(shí),把整個(gè)軟件當(dāng)成一個(gè)黑盒處理,來(lái)確定該軟件的所有功能、性能,與硬件的接口定義,與外部其它系統(tǒng)的接口定義,而在軟件架構(gòu)階段,需要設(shè)計(jì)一種架構(gòu)來(lái)滿足軟件需求,通過(guò)層次化結(jié)構(gòu)的方式來(lái)表示軟件架構(gòu)的組件構(gòu)成和他們之間的交互方式。以下圖為例,虛線框之外是軟件需求,虛線框內(nèi)是軟件架構(gòu)。

什么是軟件組件

上面這個(gè)圖用于解釋軟件架構(gòu)所做的工作,將整個(gè)軟件劃分為功能和接口清晰的組件。在ISO26262-6和EN50128中都有軟件組件(component)這個(gè)概念,先來(lái)看看這個(gè)組件的定義:

很多人把組件理解成一個(gè)函數(shù)、或一個(gè)包括多個(gè)函數(shù)的文件,從標(biāo)準(zhǔn)中對(duì)組件的定義來(lái)看,組件作為一組軟件功能需求的集合,有點(diǎn)類似于面向?qū)ο笳Z(yǔ)言中的類的概念,是在軟件架構(gòu)中的一個(gè)個(gè)獨(dú)立的個(gè)體,可以單獨(dú)替換更新的基本元素。通過(guò)軟件組件的應(yīng)用可以達(dá)到重復(fù)使用和替換的目的,它可以被單獨(dú)測(cè)試和版本管理。

軟件架構(gòu)設(shè)計(jì)原則

如何設(shè)計(jì)軟件架構(gòu)中的組件,在ISO26262-6中提出了以下設(shè)計(jì)原則:

設(shè)計(jì)原則從兩個(gè)方面來(lái)進(jìn)行規(guī)定:

  1. 單個(gè)組件:限制組件的規(guī)模,限制接口的數(shù)量,有限的中斷使用,目的在于降低每個(gè)組件的復(fù)雜度,
  2. 多個(gè)組件:組件內(nèi)強(qiáng)內(nèi)聚,組件之間松耦合,組件之間的空間隔離,組件之間共用資源的沖突管理。

避免出現(xiàn)以下情況:

  • 系統(tǒng)的一個(gè)功能分散在不同的組件中,代碼多個(gè)地方改變同一變量或狀態(tài);
  • 未對(duì)系統(tǒng)的中斷功能進(jìn)行限制,多個(gè)中斷造成導(dǎo)致軟件的時(shí)間約束不受控;
  • 組件不具備可維護(hù)性,不可能做到重構(gòu)其中一個(gè)組件;
  • 組件未做到良好的封裝或封裝不合理,對(duì)外的接口過(guò)于繁雜或內(nèi)部狀態(tài)不可知;
  • 組件設(shè)計(jì)缺乏可讀性,只有專家級(jí)人員才能看得懂;

軟件架構(gòu)內(nèi)容要點(diǎn)

劃分了層次化的組件后,軟件架構(gòu)重點(diǎn)描述組件之間的關(guān)系:靜態(tài)關(guān)系和動(dòng)態(tài)關(guān)系。靜態(tài)設(shè)計(jì)方面如組件之間的接口、與硬件的關(guān)系、組件的分層結(jié)構(gòu)通常比較明確,容易忽視的是動(dòng)態(tài)設(shè)計(jì),軟件的動(dòng)態(tài)行為需要考慮:

  • 事件和行為的功能;
  • 數(shù)據(jù)處理的邏輯順序;
  • 控制流和并發(fā)進(jìn)程;
  • 通過(guò)接口和全局變量傳遞的數(shù)據(jù)流;
  • 時(shí)間約束。

這些內(nèi)容僅用文字表達(dá)容易造成歧義,難以描述準(zhǔn)確,因此推薦使用建模和文字表達(dá)相結(jié)合的方式,下表是EN50128對(duì)建模方法的推薦表,雖然標(biāo)準(zhǔn)中僅要求至少使用一種,但從軟件架構(gòu)需要表達(dá)的不同動(dòng)態(tài)行為上,強(qiáng)烈建議根據(jù)不同的行為采用適合的建模方法。例如采用文字表達(dá)難以準(zhǔn)確描述不同系統(tǒng)通信交互的時(shí)序關(guān)系,采用Sequence Diagrams(序列圖)可以明確表示交互關(guān)系。

EN50128 Table A.17 建模技術(shù)

在上表中,常用的建模方法有:

數(shù)據(jù)流圖——描述數(shù)據(jù)如何由輸入逐步流向輸出的過(guò)程;

控制流圖——描述由輸入經(jīng)過(guò)一系列控制動(dòng)作到輸出的過(guò)程;

狀態(tài)機(jī)圖——描述系統(tǒng)不同狀態(tài)之間的轉(zhuǎn)換關(guān)系;

真值表——描述一個(gè)復(fù)雜的組合邏輯關(guān)系;

序列圖——描述不同組成部分通過(guò)信息交互的時(shí)序關(guān)系;

結(jié)構(gòu)圖——描述組件之間的層次關(guān)系。

序列圖示例

這些軟件建模方法屬于軟件通用的設(shè)計(jì)方法,在UML、SysML軟件建模語(yǔ)言中就有上述建模方法,屬于半形式化類方法。

注意這些建模方法在項(xiàng)目中使用,需要讓項(xiàng)目中與軟件架構(gòu)關(guān)聯(lián)的人理解一致,需要建立建模方法的使用指南,以規(guī)范其編寫要求。

以上作為軟件架構(gòu)的通用性要求,軟件缺陷為系統(tǒng)性失效,不存在失效概率的問(wèn)題,因此,如果寫的代碼沒(méi)有bug,它百分之百是按照定義的需求去執(zhí)行。但是,有兩個(gè)問(wèn)題是安全軟件需要考慮的,第一,軟件不可避免會(huì)存在bug;第二,軟件的實(shí)現(xiàn)與它所運(yùn)行的硬件,與它所接口的外部系統(tǒng)相關(guān)聯(lián),任何與它關(guān)聯(lián)的外部環(huán)境發(fā)生改變,都會(huì)對(duì)軟件的預(yù)期行為產(chǎn)生影響,因此,安全軟件不僅要考慮正常情況下的預(yù)期行為,也要考慮故障和干擾情況下的預(yù)期行為。

軟件架構(gòu)設(shè)計(jì)應(yīng)用技術(shù)

在EN50128中的A.3表,列舉了軟件架構(gòu)可供選擇的技術(shù)方法,其中

2-14,16項(xiàng)是底層的安全設(shè)計(jì)技術(shù),其中較為常用的是Fault detection & Diagnosis,與硬件或外部接口相關(guān)聯(lián);Graceful degradation作為fail-operational的一種實(shí)現(xiàn)方式,用于確保故障情況下的功能依然保持一定的可用性。對(duì)于軟件的安全技術(shù),應(yīng)該適當(dāng)?shù)剡x擇使用,畢竟增加了軟件的復(fù)雜度,也加大了系統(tǒng)性失效的可能,而且安全技術(shù)往往難以兼顧可測(cè)試性。

防御性編程作為SIL1-SIL4都高度推薦使用的技術(shù),是最常用的軟件安全技術(shù),用于檢查軟件執(zhí)行中不正確的數(shù)據(jù)流、控制流和數(shù)據(jù)值情況下的預(yù)期行為,一種是防護(hù)軟件自身設(shè)計(jì)缺陷造成的問(wèn)題,如變量的范圍檢查、檢查輸入值的可信性、程序入口檢查入?yún)⒌念愋?、大小和范圍;另一種是防護(hù)外部環(huán)境輸入的不受控造成的問(wèn)題,如檢查物理變量值輸入的有效性、濾波處理、配置數(shù)據(jù)的完整性和軟件自身的完整性。

EN50128 A.3

已存在軟件組件的使用

在ISO26262和EN50128中都規(guī)定了在安全軟件中如何復(fù)用一個(gè)已存在軟件組件,存在兩種情況,會(huì)使用已存在組件:

  • 來(lái)自于公司外部的CTOS組件;
  • 以前開發(fā)組件的再利用。

首先一個(gè)組件能夠被重復(fù)使用,它的接口必須能清晰識(shí)別,確定其應(yīng)用環(huán)境,實(shí)現(xiàn)的規(guī)格也是明確的。在EN50128中,如果應(yīng)用于SIL3和SIL4,需要分析已存在軟件可能的失效對(duì)整體軟件的影響,以及檢測(cè)已存在軟件失效的策略,如包裝技術(shù)。在ISO26262.8中,第12章規(guī)定了對(duì)已存在組件的鑒定要求。兩個(gè)標(biāo)準(zhǔn)均要求對(duì)已存在軟件進(jìn)行鑒定,確定可用的功能、組件版本與配置、應(yīng)用環(huán)境的假設(shè)、關(guān)聯(lián)的安全完整性等級(jí)、組件殘余缺陷情況,并對(duì)鑒定過(guò)程進(jìn)行驗(yàn)證。

軟件組件的相互影響

當(dāng)軟件由不同安全完整性等級(jí)的組件組成時(shí),在EN50128 7.3.4.9和ISO26262-6 7.4.8的要求一致:

除非有證據(jù)表明高級(jí)別組件和低級(jí)別組件之間彼此獨(dú)立,從時(shí)間分區(qū)和空間分區(qū)兩個(gè)維度,其它情況都應(yīng)按照最高等級(jí)要求開發(fā)。

在ISO26262-6提出有兩種不同組件分區(qū)的方法,第一種是軟件分區(qū),從執(zhí)行時(shí)序、數(shù)據(jù)保護(hù)、組件之間的數(shù)據(jù)交互方面考慮組件之間的干擾影響,第二種是硬件保護(hù)機(jī)制的支持,如MPU;第三種是操作系統(tǒng)或虛擬化層對(duì)不同組件互不干擾的支持。

最后,回顧一下五方面主要內(nèi)容:

  1. 軟件需求、軟件架構(gòu)與組件的關(guān)系;
  2. 軟件架構(gòu)需涵蓋的內(nèi)容;
  3. 安全軟件應(yīng)用技術(shù);
  4. 如何應(yīng)用已存在軟件;
  5. 不同安全等級(jí)軟件的影響分析

在不同標(biāo)準(zhǔn)中,架構(gòu)設(shè)計(jì)還有各自側(cè)重的部分,ISO26262-6對(duì)軟件安全分析有相應(yīng)要求,EN50128安全分析的工作放在系統(tǒng)層面進(jìn)行,要求從系統(tǒng)功能和接口的角度進(jìn)行分析。EN50128在架構(gòu)設(shè)計(jì)階段對(duì)軟件設(shè)計(jì)方法(建模指南、設(shè)計(jì)指南和編碼規(guī)則)有更為詳細(xì)的定義,并需要在架構(gòu)階段完成軟件集成測(cè)試規(guī)范和軟硬件集成測(cè)試規(guī)范。

 

責(zé)任編輯:張燕妮 來(lái)源: 于薄說(shuō)安全
相關(guān)推薦

2022-05-27 12:42:31

網(wǎng)絡(luò)安全工業(yè)企業(yè)工控安全領(lǐng)域

2012-06-07 10:45:12

軟件架構(gòu)設(shè)計(jì)原則

2009-02-01 10:17:19

Java架構(gòu)設(shè)計(jì)設(shè)計(jì)模式

2025-03-26 09:41:19

2023-04-13 08:23:28

軟件架構(gòu)設(shè)計(jì)

2023-04-26 09:32:12

智能汽車

2013-06-07 11:31:36

面向?qū)ο?/a>設(shè)計(jì)模式

2023-05-12 07:52:13

架構(gòu)設(shè)計(jì)設(shè)計(jì)原則

2022-04-02 11:42:48

Git存儲(chǔ)庫(kù)代碼隱私安全掃描工具

2010-07-12 16:40:39

Visual Stud

2022-08-22 11:45:59

架構(gòu)技術(shù)

2022-06-01 11:14:22

云原生安全架構(gòu)設(shè)計(jì)

2016-11-29 08:50:17

數(shù)據(jù)庫(kù)軟件架構(gòu)

2022-08-15 19:49:57

Consul架構(gòu)注冊(cè)中心

2013-05-27 10:58:28

Tumblr架構(gòu)設(shè)計(jì)雅虎收購(gòu)

2022-02-28 10:05:12

組件化架構(gòu)設(shè)計(jì)從原組件化模塊化

2023-04-11 07:50:27

軟件架構(gòu)設(shè)計(jì)

2021-03-07 17:17:07

Java內(nèi)存閉包

2015-08-18 13:58:07

2019-01-31 10:48:28

軟件開發(fā)者 設(shè)計(jì)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)