田 宇,趙昶宇
(1.海軍裝備部駐天津地區(qū)第二軍事代表室,天津300308;2.天津津航計(jì)算技術(shù)研究所,天津300308)
嵌入式軟件的設(shè)計(jì)流程完全遵循GJB5000A標(biāo)準(zhǔn),傳統(tǒng)的嵌入式軟件設(shè)計(jì)方法在需求分析、體系設(shè)計(jì)及軟件設(shè)計(jì)過程中采取大量的文字描述,無法將軟件的架構(gòu)設(shè)計(jì)清晰地表達(dá)出來,并存在描述歧義的風(fēng)險(xiǎn)。
隨著嵌入式軟件的日益復(fù)雜,為提高軟件質(zhì)量,降低開發(fā)成本,縮短開發(fā)周期,本文利用結(jié)構(gòu)化設(shè)計(jì)方法引進(jìn)了Hatley-Pirbhai實(shí)時(shí)系統(tǒng)結(jié)構(gòu)化分析設(shè)計(jì)理論,并運(yùn)用該理論對(duì)嵌入式軟件進(jìn)行了結(jié)構(gòu)化的定義和分析,并在嵌入式軟件的研制過程中實(shí)現(xiàn)了需求分析、體系設(shè)計(jì)和軟件設(shè)計(jì)。
嵌入式軟件屬于實(shí)時(shí)系統(tǒng)范疇,包括如圖1所示的軟件開發(fā)行為。
圖1 實(shí)時(shí)系統(tǒng)軟件開發(fā)行為
需求分析用來對(duì)用戶需求和與系統(tǒng)交互的環(huán)境進(jìn)行建模,包括對(duì)象建模和動(dòng)態(tài)建模兩個(gè)過程,以描述系統(tǒng)的靜態(tài)行為和動(dòng)態(tài)行為。
體系結(jié)構(gòu)設(shè)計(jì)是定義系統(tǒng)的軟件體系結(jié)構(gòu),用體系結(jié)構(gòu)環(huán)境圖、軟件模塊結(jié)構(gòu)圖和并發(fā)圖來描述。
詳細(xì)設(shè)計(jì)用來細(xì)化體系結(jié)構(gòu)中的軟件模塊,描述每個(gè)軟件模塊算法、控制邏輯等。
設(shè)計(jì)測(cè)試用例為測(cè)試工作設(shè)計(jì)出測(cè)試用例,供測(cè)試環(huán)節(jié)對(duì)系統(tǒng)進(jìn)行全面測(cè)試,確保實(shí)現(xiàn)的系統(tǒng)能夠滿足用戶需求。
目標(biāo)化階段用來生成最終應(yīng)用,并使開發(fā)出的實(shí)時(shí)系統(tǒng)能夠在目標(biāo)環(huán)境下協(xié)調(diào)運(yùn)行。
Hatley-Pirbhai實(shí)時(shí)系統(tǒng)結(jié)構(gòu)化分析方法是由DEREK和ⅠMTⅠAZ在20世紀(jì)末提出的一種針對(duì)實(shí)時(shí)系統(tǒng)的功能需求分析方法。它通過建立需求分析模型來描述系統(tǒng)實(shí)現(xiàn)的功能和這些功能執(zhí)行的條件。需求分析模型由處理模型、控制模型以及數(shù)據(jù)字典組成,處理模型通過數(shù)據(jù)流圖DFD(Data Flow Diagram)和 處 理 規(guī) 格 說 明P-SPEC(Process Specification)描述系統(tǒng)的功能;控制模型通過控制流圖CFD(Control Flow Diagram)和控制規(guī)格說明C-SPEC(Control Specification)描述系統(tǒng)中功能執(zhí)行的條件。
需求分析模型最終將系統(tǒng)的功能需求轉(zhuǎn)化為處理、控制以及時(shí)序,如圖2所示。
圖2 需求分析模型
數(shù)據(jù)流圖明確系統(tǒng)的輸入、處理、存儲(chǔ)和輸出及其協(xié)調(diào)工作的過程,采用數(shù)據(jù)流圖將軟件功能分解為一系列的處理,處理根據(jù)復(fù)雜程度可以繼續(xù)分解為子處理。數(shù)據(jù)流圖分多個(gè)層次,下層數(shù)據(jù)流圖為上層某一處理的細(xì)化分解,通過多層次數(shù)據(jù)流圖能表示系統(tǒng)所有的處理以及各處理的輸入和輸出。處理說明則是采用結(jié)構(gòu)化自然語言方式詳細(xì)描述處理如何將輸入轉(zhuǎn)換為輸出。
控制流圖描述系統(tǒng)處理執(zhí)行的條件,是對(duì)數(shù)據(jù)流的補(bǔ)充,實(shí)時(shí)系統(tǒng)中的處理執(zhí)行由事件觸發(fā),控制流描述的就是觸發(fā)處理執(zhí)行的事件,控制規(guī)格說明描述處理執(zhí)行的事件條件。
數(shù)據(jù)字典由控制流和數(shù)據(jù)流中出現(xiàn)的數(shù)據(jù)項(xiàng)定義組成,是提供關(guān)于數(shù)據(jù)的描述信息,是對(duì)所有與系統(tǒng)相關(guān)的數(shù)據(jù)元素的一個(gè)有組織的列表,精確、嚴(yán)格定義各個(gè)數(shù)據(jù)元素,使得用戶和系統(tǒng)分析員對(duì)于輸入、輸出、存儲(chǔ)成分和中間計(jì)算有共同的理解。
體系結(jié)構(gòu)設(shè)計(jì)通過需求分析階段產(chǎn)生的靜態(tài)模型和動(dòng)態(tài)模型來定義應(yīng)用的體系結(jié)構(gòu),包括一系列軟件模塊、軟件模塊間接口關(guān)系,同時(shí)在這一階段需要確定軟件需求分析階段所確定的功能在軟件模塊中的功能分配。
在體系結(jié)構(gòu)設(shè)計(jì)過程中,系統(tǒng)被看成是將外部輸入轉(zhuǎn)換為外部輸出的系統(tǒng)模塊,此模塊與結(jié)構(gòu)化分析模型系統(tǒng)環(huán)境圖中處理不是同一概念,因?yàn)橄到y(tǒng)體系結(jié)構(gòu)建模時(shí)需要考慮系統(tǒng)具體實(shí)現(xiàn),會(huì)增加與技術(shù)手段相關(guān)的設(shè)計(jì)決策,這些設(shè)計(jì)決策將會(huì)在基本結(jié)構(gòu)化分析模型基礎(chǔ)上派生出新的處理。系統(tǒng)模塊可以進(jìn)一步分解或細(xì)化為一系列簡單子模塊,如需要,子模塊可以進(jìn)一步細(xì)化與分解,不需細(xì)化分解的模塊稱為基本模塊。體系設(shè)計(jì)模型可由體系結(jié)構(gòu)環(huán)境圖、體系結(jié)構(gòu)流圖、體系結(jié)構(gòu)模塊說明、并發(fā)圖、模塊結(jié)構(gòu)圖來描述。
系統(tǒng)體系結(jié)構(gòu)環(huán)境圖是最頂層的系統(tǒng)體系結(jié)構(gòu)圖,系統(tǒng)體系結(jié)構(gòu)環(huán)境圖將整個(gè)系統(tǒng)看成一個(gè)整體,系統(tǒng)模塊描述其與外部環(huán)境(終端)間關(guān)系。
系統(tǒng)體系結(jié)構(gòu)環(huán)境圖中包含一個(gè)體系結(jié)構(gòu)模塊(Architecture Module),用于表示所建系統(tǒng),多個(gè)終端(Terminator)用于表示外部使用者與被使用者,信息流用于表示系統(tǒng)與外部終端間信息交換。
系統(tǒng)體系結(jié)構(gòu)流圖將所構(gòu)建的系統(tǒng)表示為一系列互聯(lián)的系統(tǒng)體系結(jié)構(gòu)模塊,并描述模塊之間信息交互,模塊間交互的信息可以是控制信息,稱為控制流,也可以是數(shù)據(jù)信息,稱為數(shù)據(jù)流。
系統(tǒng)體系結(jié)構(gòu)模塊說明描述每一個(gè)系統(tǒng)體系結(jié)構(gòu)模塊信息、處理及需求分配,同時(shí)描述模塊設(shè)計(jì)細(xì)節(jié),比如模塊采用何種處理器、系統(tǒng)主頻、內(nèi)存空間大小與地址、使用的軟件如操作系統(tǒng)、數(shù)據(jù)庫及通信協(xié)議包等信息。
在系統(tǒng)體系結(jié)構(gòu)建模過程中所創(chuàng)建的數(shù)據(jù)項(xiàng)將被統(tǒng)一保存到數(shù)據(jù)詞典中,成為系統(tǒng)體系結(jié)構(gòu)數(shù)據(jù)詞典,數(shù)據(jù)項(xiàng)定義與屬性描述方式與需求分析階段數(shù)據(jù)項(xiàng)定義方法完全相同。
并發(fā)圖是用來表示軟件系統(tǒng)并發(fā)性的圖示方法,通過并發(fā)圖可以將軟件系統(tǒng)劃分為多個(gè)并發(fā)線程或任務(wù),同時(shí)描述并發(fā)線程或任務(wù)間信息交互,以及并發(fā)線程或任務(wù)間共享資源時(shí)的同步機(jī)制。
模塊結(jié)構(gòu)圖描述函數(shù)模塊間數(shù)據(jù)與控制流,同時(shí)描述函數(shù)模塊調(diào)用層次。對(duì)于一個(gè)計(jì)算機(jī)軟件配置項(xiàng),根據(jù)任務(wù)設(shè)計(jì)準(zhǔn)則可以將系統(tǒng)軟件劃分為多個(gè)線程或任務(wù),針對(duì)每一個(gè)線程或任務(wù)有一個(gè)入口函數(shù)模塊,需要為每個(gè)入口函數(shù)模塊構(gòu)建模塊結(jié)構(gòu)圖。
嵌入式軟件屬于前后臺(tái)系統(tǒng)軟件,其應(yīng)用模式由一個(gè)主程序外加數(shù)個(gè)中斷處理程序構(gòu)成,其中主程序不斷循環(huán),在循環(huán)中執(zhí)行相應(yīng)的程序以完成特定的功能,稱為后臺(tái)線程;而中斷處理程序則響應(yīng)外部事件并執(zhí)行相應(yīng)的功能,稱為前臺(tái)線程。每個(gè)線程執(zhí)行都有一個(gè)入口函數(shù)模塊,并通過入口函數(shù)模塊對(duì)底層函數(shù)模塊逐層調(diào)用。可通過體系結(jié)構(gòu)環(huán)境圖、體系結(jié)構(gòu)流圖、體系結(jié)構(gòu)模塊說明來描述軟件的靜態(tài)結(jié)構(gòu),包括數(shù)據(jù)的輸入、輸出等信息;采用并發(fā)圖和模塊結(jié)構(gòu)圖描述軟件的動(dòng)態(tài)模型,包括前后臺(tái)并發(fā)機(jī)制的描述和各函數(shù)模塊間的調(diào)用層次。
嵌入式軟件的體系結(jié)構(gòu)設(shè)計(jì)模型如圖3所示。
圖3 嵌入式軟件體系結(jié)構(gòu)設(shè)計(jì)模型
軟件建模技術(shù)極大地提高了嵌入式軟件的設(shè)計(jì)水平,一改傳統(tǒng)的大量文字?jǐn)⑹龇椒ǎ瑢⒚嫦驅(qū)ο蟮脑O(shè)計(jì)思想運(yùn)用于結(jié)構(gòu)化軟件設(shè)計(jì)中。采用Hatley-Pirbhai實(shí)時(shí)系統(tǒng)結(jié)構(gòu)化分析、設(shè)計(jì)理論,通過建模圖例來描述嵌入式軟件在需求分析和體系設(shè)計(jì)過程中的設(shè)計(jì)思想。目前軟件建模技術(shù)已運(yùn)用于多種類型嵌入式軟件設(shè)計(jì)中,不僅使軟件架構(gòu)設(shè)計(jì)思想更加清晰,同時(shí)提高了軟件設(shè)計(jì)效率,可以直接調(diào)用軟件重用模塊,極大地節(jié)約了人力成本,后續(xù)可推廣到更多的嵌入式系統(tǒng)設(shè)計(jì)中。