版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章軟件體系結(jié)構(gòu)概論2.1軟件體系結(jié)構(gòu)的定義2.2軟件體系結(jié)構(gòu)的研究意義2.3軟件體系結(jié)構(gòu)的發(fā)展歷程2.4軟件體系結(jié)構(gòu)的研究現(xiàn)狀及發(fā)展方向2.5本章小結(jié)習(xí)題
2.1軟件體系結(jié)構(gòu)的定義
軟件體系結(jié)構(gòu)尚處在發(fā)展期,對(duì)于其定義,目前學(xué)術(shù)界尚未形成統(tǒng)一意見,不同學(xué)者有不同的看法。以下介紹并分析幾個(gè)具有代表性的定義。
定義1IEEE610.12—1990軟件工程標(biāo)準(zhǔn)詞匯中的定義
體系結(jié)構(gòu)是以構(gòu)件、構(gòu)件之間的關(guān)系、構(gòu)件與環(huán)境之間的關(guān)系為內(nèi)容的某一系統(tǒng)的基本組織以及指導(dǎo)上述內(nèi)容設(shè)計(jì)與演化的原理,即
軟件體系結(jié)構(gòu)={構(gòu)件,連接件,環(huán)境,原理}
定義2Booch&Rumbaugh&Jacobson的定義
體系結(jié)構(gòu)是一系列重要決策的集合,這些決策與以下內(nèi)容相關(guān):軟件的組織、構(gòu)成系統(tǒng)的結(jié)構(gòu)元素及其接口的選擇,這些元素在相互協(xié)作中明確表現(xiàn)出的行為、這些結(jié)構(gòu)元素和行為元素進(jìn)一步組合構(gòu)成的更大規(guī)模的子系統(tǒng),和引導(dǎo)這一組織(包括這些元素及其接口、它們的協(xié)作、它們的組合)的體系結(jié)構(gòu)風(fēng)格,即
軟件體系結(jié)構(gòu)={組織,元素,子系統(tǒng),風(fēng)格}
定義3Bass的定義
程序或計(jì)算系統(tǒng)的軟件體系結(jié)構(gòu)是系統(tǒng)的一個(gè)或多個(gè)結(jié)構(gòu),包括軟件構(gòu)件、構(gòu)件的外部可視屬性和構(gòu)件之間的關(guān)系。
這個(gè)定義有以下含義:首先,體系結(jié)構(gòu)定義了構(gòu)件,描述了構(gòu)件間如何交互,這意味著體系結(jié)構(gòu)略去了那些僅與某構(gòu)件自身有關(guān)的信息。同時(shí),這個(gè)定義明確指出系統(tǒng)可以包含多個(gè)結(jié)構(gòu),但沒有其中的哪一個(gè)可以被稱為是體系結(jié)構(gòu)。這個(gè)定義還意味著每一個(gè)軟件系統(tǒng)都有一個(gè)體系結(jié)構(gòu),因?yàn)槊總€(gè)軟件系統(tǒng)都是由若干構(gòu)件及其之間的關(guān)系構(gòu)成的。此外,只要一個(gè)構(gòu)件的行為可以被其他構(gòu)件觀察或辨明,這個(gè)構(gòu)件就是體系結(jié)構(gòu)的一部分。這里的外部可視屬性,是指其他構(gòu)件認(rèn)為該構(gòu)件所具備的特征,如所提供的服務(wù)、具有的性能特點(diǎn)、錯(cuò)誤處理機(jī)制、共享資源的用法等。需要注意的是,此定義中,特意未指明什么是構(gòu)件,什么是關(guān)系。構(gòu)件既可以是對(duì)象,也可以是進(jìn)程,還可以是函數(shù)庫(kù)或是數(shù)據(jù)庫(kù)。
定義4Shaw的定義
在第一屆軟件系統(tǒng)體系結(jié)構(gòu)國(guó)際研討會(huì)上,MaryShaw對(duì)于當(dāng)時(shí)術(shù)語(yǔ)使用的混亂情況予以了澄清:不同學(xué)者的軟件體系結(jié)構(gòu)定義之間并不相互抵觸,在回答什么是軟件體系結(jié)構(gòu)這樣的問題時(shí),也并沒有根本的沖突。實(shí)際上,它們代表了軟件體系結(jié)構(gòu)研究者對(duì)于體系結(jié)構(gòu)研究重點(diǎn)的一系列不同看法。在會(huì)上,Shaw對(duì)當(dāng)時(shí)的各種觀點(diǎn)做了如下的分類。
(1)結(jié)構(gòu)模型:結(jié)構(gòu)模型認(rèn)為,軟件體系結(jié)構(gòu)由構(gòu)件、構(gòu)件之間的連接和一些其他方面組成。這些方面包括如下幾類:
·配置,風(fēng)格;
·約束,語(yǔ)義;
·分析,屬性;
·原理,需求。
(2)框架模型:框架模型的觀點(diǎn)與結(jié)構(gòu)模型相似,但其重點(diǎn)在于整個(gè)系統(tǒng)的連貫結(jié)構(gòu)(這種結(jié)構(gòu)通常是唯一的),這與重視其組成恰好相反??蚣苣P统R阅撤N特定領(lǐng)域或某類問題為目標(biāo)。
(3)動(dòng)態(tài)模型:動(dòng)態(tài)模型強(qiáng)調(diào)系統(tǒng)的行為質(zhì)量。“動(dòng)態(tài)”可以有多種含義。它可以是指整個(gè)系統(tǒng)配置的變化,也可以是指禁止預(yù)先激活了的通信或交互,還可以是指計(jì)算中表現(xiàn)出的動(dòng)態(tài)特性,如改變數(shù)據(jù)的值。
(4)過程模型:過程模型關(guān)注系統(tǒng)結(jié)構(gòu)的構(gòu)建及其步驟和過程。在這一觀點(diǎn)下,體系結(jié)構(gòu)是所進(jìn)行的一系列過程的結(jié)果。
定義5Garlan&Shaw的模型
軟件體系結(jié)構(gòu)={構(gòu)件,連接件,約束}
(1)構(gòu)件(Component)可以是一組代碼,如程序的模塊,也可以是一個(gè)獨(dú)立的程序,如數(shù)據(jù)庫(kù)服務(wù)器。構(gòu)件是相關(guān)對(duì)象的集合,運(yùn)行后實(shí)現(xiàn)某計(jì)算邏輯。它們或是結(jié)構(gòu)相關(guān)或是邏輯相關(guān)。構(gòu)件相對(duì)獨(dú)立,僅通過接口與外部相互作用,可作為獨(dú)立單元嵌入到不同應(yīng)用系統(tǒng)中。構(gòu)件的定制和規(guī)范化對(duì)于實(shí)現(xiàn)構(gòu)件的重用有重要意義。
(2)連接件(Connector)可以是過程調(diào)用、管道、遠(yuǎn)程過程調(diào)用等,用于表示構(gòu)件之間的相互作用,它把不同的構(gòu)件連接起來構(gòu)成體系結(jié)構(gòu)的一部分。連接件也是一組對(duì)象。它一般表現(xiàn)為框架式對(duì)象或轉(zhuǎn)換式對(duì)象(調(diào)用遠(yuǎn)程構(gòu)件資源),例如“樁”、“代理”對(duì)象等。
(3)約束(Constrain)一般為對(duì)象連接時(shí)的規(guī)則,或指明構(gòu)件連接的姿態(tài)和條件。例如,上層構(gòu)件可要求下層構(gòu)件的服務(wù),反之不行;兩個(gè)對(duì)象不得以遞歸方式發(fā)送消息;代碼復(fù)制遷移的一致性約束;在什么條件下此種連接無(wú)效等。
定義6Perry&Wolf的模型
軟件體系結(jié)構(gòu)是一組具有特定形式的體系結(jié)構(gòu)元素(Elements)。這組元素分為3類:負(fù)責(zé)完成數(shù)據(jù)加工的處理元素(ProcessingElements)、被加工的數(shù)據(jù)元素(DataElements)和用于把體系結(jié)構(gòu)的不同部分組合連接到一起的連接元素(ConnectingElements)。軟件體系結(jié)構(gòu)形式由專有特性和關(guān)系組成。專有特性用于限制軟件體系結(jié)構(gòu)元素的選擇,關(guān)系用于限制軟件體系結(jié)構(gòu)元素組合的拓?fù)浣Y(jié)構(gòu)。在多個(gè)體系結(jié)構(gòu)方案中選擇合適的體系結(jié)構(gòu)方案往往基于一組準(zhǔn)則,即
軟件體系結(jié)構(gòu)={元素,形式,準(zhǔn)則}
定義7Garlan&Perry的定義
1995年,DavidGarlan和DewnePerry在IEEE軟件工程學(xué)報(bào)上所做的特約評(píng)論中提出:軟件體系結(jié)構(gòu)是一個(gè)程序或系統(tǒng)各構(gòu)件的結(jié)構(gòu)、它們的相互關(guān)系以及進(jìn)行設(shè)計(jì)的原則和指導(dǎo)方針,這些原則和方針隨時(shí)間變化而變化。
定義8Boehm的模型
軟件體系結(jié)構(gòu)包括系統(tǒng)構(gòu)件、連接件、約束的集合,反映不同人員需求的集合,以及準(zhǔn)則的集合。其中,這些準(zhǔn)則能夠說明由構(gòu)件、連接件和約束所定義的系統(tǒng)在實(shí)現(xiàn)時(shí)是如何滿足系統(tǒng)不同人員需求的,即
軟件體系結(jié)構(gòu)={構(gòu)件,連接件,約束,不同人員的需求,準(zhǔn)則}
比較上述體系結(jié)構(gòu)定義,可以發(fā)現(xiàn):盡管各種定義都從不同的角度關(guān)注軟件體系結(jié)構(gòu),研究對(duì)象各有側(cè)重,但其核心內(nèi)容都是軟件的系統(tǒng)結(jié)構(gòu),并且都蘊(yùn)含構(gòu)件、構(gòu)件之間的關(guān)系、構(gòu)件和連接件之間的關(guān)系等實(shí)體。根據(jù)國(guó)內(nèi)普遍認(rèn)可的看法,可以將體系結(jié)構(gòu)定義為構(gòu)件、連接件和約束。軟件體系結(jié)構(gòu)指可預(yù)制和可重構(gòu)的軟件框架結(jié)構(gòu)。構(gòu)件是可預(yù)制和可重用的軟件部件,是組成體系結(jié)構(gòu)的基本計(jì)算單元或數(shù)據(jù)存儲(chǔ)單元;連接件也是可預(yù)制和可重用的構(gòu)件部件,是構(gòu)件之間的連接單元;構(gòu)件和連接件之間的關(guān)系用約束來描述。這樣就可以把軟件體系結(jié)構(gòu)寫成:
體系結(jié)構(gòu)(Architecture)=構(gòu)件(Components)+連接件(Connectors)+約束(Constraints)除了構(gòu)件、連接件和約束這3個(gè)最基本的組成元素,軟件體系結(jié)構(gòu)還包括端口(Port)和角色(Role)兩種元素。構(gòu)件作為一個(gè)封裝的實(shí)體,僅通過其接口與外部環(huán)境交互,而構(gòu)件的接口由一組端口組成,每個(gè)端口表示了構(gòu)件和外部環(huán)境的交互點(diǎn)。連接件作為建模軟件體系結(jié)構(gòu)的主要實(shí)體,同樣也有接口。連接件的接口由一組角色組成,連接的每個(gè)角色定義了該連接表示的交互的參與者。圖2-1形式化地描述了軟件體系結(jié)構(gòu)的基本概念。圖2-1軟件體系結(jié)構(gòu)的基本概念其中:
軟件體系結(jié)構(gòu)∷=軟件體系模型|體系結(jié)構(gòu)風(fēng)格
軟件體系模型∷={構(gòu)件,連接件,約束}
構(gòu)件∷={端口1,端口2,…,端口n}
連接件∷={角色1,角色2,…,角色m}
約束∷={(端口i,角色j),…}
體系結(jié)構(gòu)風(fēng)格∷={管道-過濾器,層次系統(tǒng),客戶/服務(wù)器,…,解釋器}
下面,我們對(duì)構(gòu)件、連接件、約束這3個(gè)基本概念作進(jìn)一步的解釋。
1.構(gòu)件
一般認(rèn)為,構(gòu)件是指具有一定功能、可明確辨識(shí)的軟件單位,并且具備以下特點(diǎn):語(yǔ)義完整、語(yǔ)法正確、有可重用價(jià)值。這就意味著,在結(jié)構(gòu)上,構(gòu)件是語(yǔ)義描述、通信接口和實(shí)現(xiàn)代碼的復(fù)合體。更具體地說,可以把構(gòu)件視為用于實(shí)現(xiàn)某種計(jì)算邏輯的相關(guān)對(duì)象的集合,這些對(duì)象或是結(jié)構(gòu)相關(guān)或是邏輯相關(guān)。在體系結(jié)構(gòu)中,構(gòu)件可以有不同的粒度。一個(gè)構(gòu)件可以小到只有一個(gè)過程,也可以大到包含一個(gè)應(yīng)用程序。它可以包括函數(shù)、例程、對(duì)象、二進(jìn)制對(duì)象、類庫(kù)、數(shù)據(jù)包等。構(gòu)件內(nèi)部包含了多種屬性,如端口、類型、語(yǔ)義、約束、演化、非功能屬性等。端口是構(gòu)件與外部世界交互的一組接口。構(gòu)件端口說明了構(gòu)件提供哪些服務(wù)(消息、操作、變量)。它定義了構(gòu)件能夠提交的計(jì)算委托及其用途上的約束。構(gòu)件類型是實(shí)現(xiàn)構(gòu)件重用的手段。構(gòu)件類型保證了構(gòu)件自身能夠在體系結(jié)構(gòu)的描述中多次實(shí)例化。
從抽象程度來看,構(gòu)件是對(duì)一組類的組合進(jìn)行封裝,并代表完成一個(gè)或多個(gè)功能的特定服務(wù),也為用戶提供了多個(gè)接口。構(gòu)件之間是相對(duì)獨(dú)立的。構(gòu)件隱藏其具體實(shí)現(xiàn),只通過接口提供服務(wù)。如果不用指定的接口與之通信,則外界不會(huì)對(duì)它的運(yùn)行造成任何影響。因此,構(gòu)件可以作為獨(dú)立單元被應(yīng)用于不同的體系結(jié)構(gòu)和軟件系統(tǒng)中,實(shí)現(xiàn)構(gòu)件的重用。構(gòu)件的使用與它的開發(fā)也是獨(dú)立的。
2.連接件
連接件是用來建立構(gòu)件間的交互以及支配這些交互規(guī)則的體系結(jié)構(gòu)構(gòu)造模塊。構(gòu)件之間的交互包括消息或信號(hào)量的傳遞,功能或方法調(diào)用,數(shù)據(jù)的傳送和轉(zhuǎn)換,構(gòu)件之間的同步關(guān)系、依賴關(guān)系等。在最簡(jiǎn)單的情況下,構(gòu)件之間可以直接完成交互,這時(shí)體系結(jié)構(gòu)中的連接件就退化為直接連接。在比較復(fù)雜的情況下,構(gòu)件間交互的處理和維持都需要連接件來實(shí)現(xiàn)。常見的連接件有管道(在管道-過濾器結(jié)構(gòu)中)、通信協(xié)議或通信機(jī)制(在客戶/服務(wù)器結(jié)構(gòu)中)等。連接件的接口由它與所連接構(gòu)件之間的一組交互點(diǎn)構(gòu)成,這些交互點(diǎn)稱做角色。角色代表了所連接構(gòu)件的作用和地位,并體現(xiàn)了連接所具有的方向性。因此,角色存在主動(dòng)和被動(dòng)、請(qǐng)求和響應(yīng)之分。
體系結(jié)構(gòu)級(jí)的通信需要有復(fù)雜協(xié)議來表達(dá),為了抽象這些協(xié)議并使之能夠重用,可以將連接件構(gòu)造為類型。連接件的主要特性有可擴(kuò)展性、互操作性、動(dòng)態(tài)連接性和請(qǐng)求響應(yīng)特性。連接件的可擴(kuò)展性是連接件允許動(dòng)態(tài)改變被關(guān)聯(lián)構(gòu)件的集合和交互關(guān)系的性質(zhì)?;ゲ僮餍灾傅氖潜贿B接的構(gòu)件通過連接件對(duì)其他構(gòu)件進(jìn)行直接或間接操作的能力。動(dòng)態(tài)連接性是對(duì)連接的動(dòng)態(tài)約束,即連接件對(duì)于不同的所連接構(gòu)件實(shí)施不同的動(dòng)態(tài)處理方法的能力。請(qǐng)求響應(yīng)特性包括響應(yīng)的并發(fā)性和時(shí)序性。在并行和并發(fā)系統(tǒng)中,多個(gè)構(gòu)件有可能并行或并發(fā)地提出交互請(qǐng)求,這就要求連接件能夠正確協(xié)調(diào)這些交互請(qǐng)求之間的邏輯關(guān)系和時(shí)序關(guān)系。對(duì)于構(gòu)件而言,連接件是構(gòu)件的黏合劑,是構(gòu)件交互的實(shí)現(xiàn)。連接件和構(gòu)件的區(qū)別主要在于它們?cè)隗w系結(jié)構(gòu)中承擔(dān)著不同的作用。連接件也是一組對(duì)象。它把不同的構(gòu)件連接起來,形成體系結(jié)構(gòu)的一部分,一般表現(xiàn)為框架式對(duì)象或轉(zhuǎn)換式對(duì)象(調(diào)用遠(yuǎn)程構(gòu)件資源)。
3.約束(配置)
體系結(jié)構(gòu)的約束描述了體系結(jié)構(gòu)配置和拓?fù)涞囊?,確定了體系結(jié)構(gòu)的構(gòu)件與連接件的連接關(guān)系。它是基于規(guī)則和參數(shù)配置的。體系結(jié)構(gòu)約束提供限制以確定構(gòu)件是否正確連接、接口是否匹配、連接件構(gòu)成的通信是否正確,并說明實(shí)現(xiàn)所要求行為的組合語(yǔ)義。
體系結(jié)構(gòu)往往用于大型的、生存期長(zhǎng)的軟件系統(tǒng)的描述。為了更好地在一個(gè)較高的抽象層上理解系統(tǒng)的分析和設(shè)計(jì),同時(shí)為了方便系統(tǒng)開發(fā)者、使用者等多種有關(guān)人員之間的交流,需要簡(jiǎn)單的、可理解的語(yǔ)法來配置結(jié)構(gòu)化(拓?fù)涞?信息。理想的情況是從約束說明中澄清系統(tǒng)結(jié)構(gòu),即不需研究構(gòu)件與連接件就能使構(gòu)件系統(tǒng)的各種參與者理解系統(tǒng)。
2.2軟件體系結(jié)構(gòu)的研究意義
軟件體系結(jié)構(gòu)是軟件系統(tǒng)的高級(jí)抽象,往往體現(xiàn)了系統(tǒng)開發(fā)中最早做出的決策。它體現(xiàn)了根本性的系統(tǒng)設(shè)計(jì)思路,對(duì)系統(tǒng)起著最為深遠(yuǎn)的影響。體系結(jié)構(gòu)在明確了系統(tǒng)的各個(gè)組成部分的同時(shí),也限定了各部分間的交互方式。這將進(jìn)一步影響到開發(fā)資源的配置和開發(fā)團(tuán)隊(duì)的組織等其他方方面面的開發(fā)活動(dòng),并影響著最終的軟件產(chǎn)品質(zhì)量。在大型軟件系統(tǒng)中,軟件體系結(jié)構(gòu)是決定系統(tǒng)能否順利實(shí)現(xiàn)的關(guān)鍵因素之一,不當(dāng)?shù)捏w系結(jié)構(gòu)會(huì)給整個(gè)系統(tǒng)帶來災(zāi)難性的后果。
良好的體系結(jié)構(gòu)對(duì)于軟件系統(tǒng)的重要意義在軟件生命周期中的各個(gè)階段都有體現(xiàn),這主要有如下4個(gè)方面。
1.對(duì)系統(tǒng)分析的意義
在系統(tǒng)分析階段,軟件體系結(jié)構(gòu)發(fā)揮著巨大作用。
一方面,借助于軟件體系結(jié)構(gòu)進(jìn)行描述,可以使問題得以進(jìn)一步抽象,使整個(gè)系統(tǒng)更易于被系統(tǒng)分析設(shè)計(jì)人員把握,更清晰地認(rèn)識(shí)系統(tǒng),完善對(duì)系統(tǒng)的理解。除此之外,體系結(jié)構(gòu)對(duì)于系統(tǒng)分析帶來的優(yōu)勢(shì)還體現(xiàn)在,它為系統(tǒng)分析設(shè)計(jì)人員提供了新的思路。比如,在更高層次上進(jìn)行系統(tǒng)一致性檢查、使用成熟的軟件體系結(jié)構(gòu)風(fēng)格等。另一方面,它能夠幫助軟件系統(tǒng)的各有關(guān)權(quán)益方(客戶、用戶、項(xiàng)目管理人員、設(shè)計(jì)開發(fā)人員以及測(cè)試人員等)形成統(tǒng)一認(rèn)識(shí),互相交流。交流是軟件開發(fā)的重要組成部分。在軟件開發(fā)活動(dòng)中,各有關(guān)權(quán)益方承擔(dān)著不同角色,關(guān)注同一軟件系統(tǒng)不同的側(cè)面,這要求他們要從不同的角度交流對(duì)共同面對(duì)的軟件系統(tǒng)的認(rèn)識(shí)。例如,用戶關(guān)心系統(tǒng)是否滿足可用性及可靠性需求;客戶關(guān)心此結(jié)構(gòu)能否按期按預(yù)算實(shí)現(xiàn);管理人員擔(dān)心在經(jīng)費(fèi)支出和進(jìn)度條件下,按此體系結(jié)構(gòu)能否使開發(fā)組成員在一定程度上獨(dú)立開發(fā),并有條不紊地有序地交互;開發(fā)人員關(guān)心達(dá)到全部目的的策略。體系結(jié)構(gòu)代表了系統(tǒng)的公共的高層次的抽象,是大家都關(guān)心的一個(gè)重要因素。它作為項(xiàng)目參與人員共同使用的語(yǔ)言,還具有很強(qiáng)的描述能力,起到了難以替代的溝通作用。系統(tǒng)的大部分有關(guān)人員(即使不是全部)能把它作為建立互相理解的基礎(chǔ),通過體系結(jié)構(gòu)的概念、術(shù)語(yǔ)和規(guī)范,設(shè)計(jì)者與用戶之間、設(shè)計(jì)者之間等各方面相關(guān)人員可以更好地彼此理解。
2.對(duì)軟件開發(fā)的意義
軟件體系結(jié)構(gòu)代表了系統(tǒng)早期的設(shè)計(jì)決策。與開發(fā)、設(shè)計(jì)、編碼或運(yùn)行服務(wù)及維護(hù)階段相比,早期設(shè)計(jì)決策的處理難度最大,對(duì)系統(tǒng)的生命期的影響也最大。同時(shí),軟件體系結(jié)構(gòu)也難于改變,會(huì)對(duì)整個(gè)系統(tǒng)開發(fā)活動(dòng)造成深遠(yuǎn)影響。軟件體系結(jié)構(gòu)是系統(tǒng)實(shí)現(xiàn)的基本約束,即系統(tǒng)的后繼開發(fā)工作要遵循體系結(jié)構(gòu)所描述的設(shè)計(jì)決策。每個(gè)構(gòu)件或連接件必須滿足體系結(jié)構(gòu)規(guī)格說明中指定的功能、語(yǔ)義和接口,并且按體系結(jié)構(gòu)配置中所規(guī)定的方式完成交互。這樣,構(gòu)件或連接件的開發(fā)人員在體系結(jié)構(gòu)給定的約束下進(jìn)行工作,他們既不關(guān)心其他構(gòu)件或連接件的開發(fā),也不會(huì)對(duì)其產(chǎn)生影響。而體系結(jié)構(gòu)設(shè)計(jì)者也不必設(shè)計(jì)算法或精通編程語(yǔ)言。軟件體系結(jié)構(gòu)決定了開發(fā)和維護(hù)項(xiàng)目的組織活動(dòng)。軟件體系結(jié)構(gòu)也會(huì)反映到開發(fā)工作的分解,以及項(xiàng)目的人員組織。項(xiàng)目組成員還要使用構(gòu)件的接口規(guī)格說明相互交流。即使到了維護(hù)期,項(xiàng)目維護(hù)人員的組織形式也常常要依據(jù)特定的軟件體系結(jié)構(gòu)成分來安排。此外,對(duì)于項(xiàng)目組新成員,可以用軟件體系結(jié)構(gòu)作為培訓(xùn)基礎(chǔ)或高層次的系統(tǒng)概述,使他們迅速、準(zhǔn)確地認(rèn)識(shí)系統(tǒng)和自己的任務(wù),快速進(jìn)入開發(fā)角色。軟件體系結(jié)構(gòu)對(duì)于軟件質(zhì)量控制有重要意義。軟件質(zhì)量特性可分為兩類:第一類是可以通過運(yùn)行軟件并觀察其效果來度量的特性,如功能、性能、安全性及可靠性等;第二類是指那些無(wú)法通過觀察系統(tǒng)來度量,只能通過觀察開發(fā)活動(dòng)或維護(hù)活動(dòng)來考察的特性,包括各種可維護(hù)性問題,如可適應(yīng)性、可移植性、可重用性等(例如,可重用性依賴于系統(tǒng)中的構(gòu)件與其他構(gòu)件的聯(lián)系情況)。軟件體系結(jié)構(gòu)在很大程度上確定了系統(tǒng)是否能達(dá)到其需求的質(zhì)量特性。使用軟件體系結(jié)構(gòu)的一些評(píng)估技術(shù)(如SAAM),對(duì)軟件體系結(jié)構(gòu)加以分析,能夠?qū)浖哪承┵|(zhì)量特性加以預(yù)測(cè)。但同時(shí),也必須認(rèn)識(shí)到,好的軟件體系結(jié)構(gòu)是成功的必要條件,但不是充分條件。僅重視軟件體系結(jié)構(gòu)并不能保證系統(tǒng)所要求的功能和質(zhì)量——低劣的設(shè)計(jì)及實(shí)現(xiàn)都會(huì)損害整個(gè)體系結(jié)構(gòu)。
3.對(duì)軟件重用的意義
重用是提高軟件開發(fā)效率、保證軟件質(zhì)量的重要手段。軟件開發(fā)經(jīng)歷了從機(jī)器語(yǔ)言、匯編語(yǔ)言、結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言、面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言、形式化(非形式化)規(guī)格說明語(yǔ)言(如體系結(jié)構(gòu)描述語(yǔ)言)的發(fā)展過程,越來越適合開發(fā)人員的思維活動(dòng)模型,代碼重用的級(jí)別也在不斷地提升。體系結(jié)構(gòu)技術(shù)的研究,使軟件重用從代碼重用發(fā)展到設(shè)計(jì)重用和過程重用,實(shí)現(xiàn)多層次的軟件重用。構(gòu)件的重用是體系結(jié)構(gòu)良好的軟件系統(tǒng)最基本的一點(diǎn)。面向體系結(jié)構(gòu)的開發(fā)方法常常注意構(gòu)件的組合與裝配,而不一定把編程作為主要活動(dòng)。有效地利用標(biāo)準(zhǔn)構(gòu)件,或是識(shí)別并重用系統(tǒng)內(nèi)部的構(gòu)件,或是購(gòu)買第三方構(gòu)件,只要這些構(gòu)件與當(dāng)前體系結(jié)構(gòu)相容,都能減少開發(fā)中的重復(fù)勞動(dòng)和系統(tǒng)中的重復(fù)代碼。體系結(jié)構(gòu)起了組織產(chǎn)品的構(gòu)件、接口及運(yùn)行的作用。這里要著重指出的是標(biāo)準(zhǔn)構(gòu)件的應(yīng)用。應(yīng)用標(biāo)準(zhǔn)構(gòu)件庫(kù)的關(guān)鍵在于要能夠從整體上對(duì)庫(kù)中構(gòu)件進(jìn)行把握。一旦做到了這點(diǎn),就可以快速、靈活地在構(gòu)件庫(kù)中選擇出合適的構(gòu)件應(yīng)用到系統(tǒng)中去;反之,構(gòu)件的選取就只能通過反復(fù)地瀏覽來尋找,這實(shí)際上影響到了體系結(jié)構(gòu)所帶來的優(yōu)勢(shì),造成了不必要的資源浪費(fèi)。體系結(jié)構(gòu)良好的軟件系統(tǒng)中,不僅構(gòu)件庫(kù)能夠重用,還可以在更高層次上實(shí)現(xiàn)軟件子系統(tǒng)乃至軟件系統(tǒng)框架的重用。軟件體系結(jié)構(gòu)級(jí)的重用意味著體系結(jié)構(gòu)的決策能在具有相似需求的多個(gè)系統(tǒng)中發(fā)生影響,這比代碼級(jí)的重用要有更大的好處。通過對(duì)體系結(jié)構(gòu)的抽象可以使設(shè)計(jì)者能夠?qū)σ恍?shí)踐證明有效的體系結(jié)構(gòu)構(gòu)件進(jìn)行重用,從而提高設(shè)計(jì)效率和可靠性。在設(shè)計(jì)過程中我們常常會(huì)發(fā)現(xiàn),對(duì)一個(gè)體系結(jié)構(gòu)構(gòu)件稍加抽象,就可以將它應(yīng)用到其他設(shè)計(jì)中去,這樣會(huì)大大降低設(shè)計(jì)的復(fù)雜度。例如,我們?cè)谀硞€(gè)設(shè)計(jì)中采用了管道-過濾器風(fēng)格,當(dāng)我們將系統(tǒng)映射到Unix系統(tǒng)中時(shí),我們就會(huì)發(fā)現(xiàn)Unix系統(tǒng)已經(jīng)為我們提供了功能豐富的管道-過濾器功能,這樣我們就可以充分利用Unix系統(tǒng)提供的這些構(gòu)件來簡(jiǎn)化我們的設(shè)計(jì)和開發(fā)。當(dāng)前,針對(duì)特定領(lǐng)域的體系結(jié)構(gòu),人們開展了許多研究和實(shí)踐工作。這在某種意義上也是一種重用。軟件重用的層次越高,所帶來的收益也就越大。某些情況下,重用的設(shè)計(jì)方案本身也許不是最適合該系統(tǒng)的,但是從整體上權(quán)衡,通過重用帶來的成本節(jié)約和質(zhì)量提供能夠讓重用變得非常值得。軟件體系結(jié)構(gòu)有利于形成完整的軟件生產(chǎn)線。1976年P(guān)arnas提出了發(fā)展軟件族的軟件生產(chǎn)線。軟件族的軟件生產(chǎn)線成功的關(guān)鍵問題是設(shè)計(jì)決策的次序問題,要求對(duì)于最容易發(fā)生變動(dòng)的決策應(yīng)當(dāng)盡量放在最遲作出。事實(shí)上,軟件族的軟件生產(chǎn)線代表了早期決策的總和,將影響軟件族的軟件生產(chǎn)線的全體成員??梢哉f,體系結(jié)構(gòu)在一定程度上限制了設(shè)計(jì)選擇的范圍或內(nèi)容。要認(rèn)識(shí)到這種決策對(duì)于每一個(gè)部分來說不一定是最優(yōu),但其優(yōu)點(diǎn)一般可以補(bǔ)償失去的特定領(lǐng)域優(yōu)化的損失。
4.對(duì)系統(tǒng)演化的意義
對(duì)軟件系統(tǒng)的演化過程中,維護(hù)人員需要不斷地進(jìn)行調(diào)整、修改、增加新的功能或構(gòu)件等工作。通常情況下,軟件系統(tǒng)的開發(fā)成本中,有80%是在初次投入使用之后產(chǎn)生的。因此,解決好系統(tǒng)演化階段的開發(fā)問題具有重要意義。
軟件體系結(jié)構(gòu)決定著系統(tǒng)構(gòu)件的劃分和交互方式。一方面,在設(shè)計(jì)系統(tǒng)的體系結(jié)構(gòu)之初,就應(yīng)當(dāng)充分考慮到將來可能的系統(tǒng)演化;另一方面,在進(jìn)行系統(tǒng)演化階段的開發(fā)時(shí),由于體系結(jié)構(gòu)充分地刻畫了當(dāng)前系統(tǒng),清晰地描述了構(gòu)件及其相互關(guān)系和整個(gè)系統(tǒng)的框架,所以應(yīng)當(dāng)充分利用。以現(xiàn)有體系結(jié)構(gòu)為基礎(chǔ),把握需要進(jìn)行的系統(tǒng)變動(dòng),在系統(tǒng)范圍內(nèi)綜合考慮,有助于確定系統(tǒng)維護(hù)的最優(yōu)方案,更好地控制軟件質(zhì)量和維護(hù)成本。軟件為主的系統(tǒng)總是存在著“利用軟件作為增加或修改系統(tǒng)總體功能的工具”的傾向。重要的是要決定何時(shí)進(jìn)行改動(dòng),確定哪種改動(dòng)風(fēng)險(xiǎn)最小,評(píng)估改動(dòng)的后果,仲裁改動(dòng)的順序及優(yōu)先級(jí)。所有這些都需要深入地洞察系統(tǒng)各部分的關(guān)系、相互依存關(guān)系、性能及行為特性。而在軟件體系結(jié)構(gòu)這一級(jí)進(jìn)行討論,就能提供這種觀察力,更重要的是軟件體系結(jié)構(gòu)可以把可能發(fā)生的變動(dòng)分為3類:局部的、非局部的和體系結(jié)構(gòu)級(jí)的。局部的是指只要修改單個(gè)構(gòu)件本身;非局部的是指要修改幾個(gè)構(gòu)件,但不影響基礎(chǔ)體系結(jié)構(gòu)的變動(dòng);而體系結(jié)構(gòu)級(jí)是指會(huì)影響各部分的相互關(guān)系,甚至要改動(dòng)整個(gè)系統(tǒng)。顯然,局部改動(dòng)應(yīng)是最經(jīng)常發(fā)生的,也是最容易進(jìn)行的。軟件體系結(jié)構(gòu)承擔(dān)了“保證最經(jīng)常發(fā)生的變動(dòng)是最容易進(jìn)行的”這一重任。
2.3軟件體系結(jié)構(gòu)的發(fā)展歷程
軟件工程作為一門獨(dú)立的學(xué)科,其發(fā)展已逾30年。無(wú)論從應(yīng)用規(guī)模還是從技術(shù)水平看,計(jì)算機(jī)軟件產(chǎn)業(yè)所經(jīng)歷的發(fā)展都是迅猛的。這體現(xiàn)在諸多方面。首先,軟件系統(tǒng)的應(yīng)用領(lǐng)域從實(shí)驗(yàn)室滲透到了人類社會(huì)的各個(gè)角落。最初的軟件是以穿孔紙帶或卡片的形式出現(xiàn)在實(shí)驗(yàn)室和機(jī)房中用于科學(xué)計(jì)算的;而在今天的人類社會(huì)中,各種軟件系統(tǒng)運(yùn)行在從手持設(shè)備(如手機(jī))到大型機(jī)(如進(jìn)行天氣預(yù)報(bào)的服務(wù)器)的各種規(guī)模和用途的信息處理設(shè)備上。其次,軟件系統(tǒng)的規(guī)模也迅速增長(zhǎng)。從微機(jī)不斷躍增的內(nèi)存配置就可以明顯看出這一點(diǎn)。1981年,IBM公司推出的第一臺(tái)PC機(jī)的配置是16KB的內(nèi)存;2003年,主流PC機(jī)的內(nèi)存配置是256MB;2008年,主流PC機(jī)的內(nèi)存配置是2GB。此外,隨著計(jì)算機(jī)產(chǎn)業(yè)的發(fā)展,軟件成本也在增長(zhǎng)。20世紀(jì)50年代,軟件成本在整個(gè)計(jì)算機(jī)系統(tǒng)成本中所占的比例為10%~20%。到20世紀(jì)60年代中期,軟件成本在計(jì)算機(jī)系統(tǒng)中所占的比例已經(jīng)增長(zhǎng)到50%左右。相反,計(jì)算機(jī)硬件價(jià)格隨著技術(shù)進(jìn)步和生產(chǎn)規(guī)模擴(kuò)大卻在不斷下降。軟件成本在計(jì)算機(jī)系統(tǒng)中所占的比例越來越大。下面是一組來自美國(guó)空軍計(jì)算機(jī)系統(tǒng)的數(shù)據(jù):1955年,軟件費(fèi)用約占總費(fèi)用的18%,1970年達(dá)到60%,1975年達(dá)到72%,1980年達(dá)到80%,1985年達(dá)到85%左右。
在軟件應(yīng)用規(guī)模和應(yīng)用領(lǐng)域迅速擴(kuò)大的同時(shí),軟件開發(fā)技術(shù)也在發(fā)生著根本性的變革。軟件規(guī)模的迅速增長(zhǎng)使得軟件開發(fā)成為了一項(xiàng)過去難以想象的系統(tǒng)工程。根據(jù)微軟公司公布的數(shù)據(jù),Windows2000開發(fā)過程中測(cè)試用代碼行數(shù)超過1000萬(wàn)行,測(cè)試兼容性的應(yīng)用軟件數(shù)量約1000種,應(yīng)用軟件測(cè)試中所使用的腳本程序約6500種,每月備份的數(shù)據(jù)約
88?TB,每晚模擬打印數(shù)量約25萬(wàn)頁(yè),每周刻錄CD約12000盤。在此過程中,軟件體系結(jié)構(gòu)也經(jīng)歷了與之相對(duì)應(yīng)的一系列變革,由最初的模糊概念發(fā)展成為一門日益成熟的技術(shù)。下面我們分階段進(jìn)行討論。2.3.1“無(wú)體系結(jié)構(gòu)”設(shè)計(jì)階段
1946年,隨著具有里程碑意義的ENIAC機(jī)的問世,軟件行業(yè)開始在美國(guó)和歐洲的實(shí)驗(yàn)室出現(xiàn)。1955~1965年間,運(yùn)算速度越來越快、價(jià)格越來越低的新計(jì)算機(jī)不斷涌現(xiàn)。這期間的軟件多數(shù)應(yīng)用于學(xué)術(shù)界,或者是政府、軍隊(duì)及私人公司。但是,由于當(dāng)時(shí)的計(jì)算機(jī)硬件向著專用方向發(fā)展,科學(xué)與商業(yè)領(lǐng)域使用完全不同的機(jī)器硬件。不斷地針對(duì)不同計(jì)算機(jī)編寫軟件讓軟件工作人員應(yīng)接不暇,反復(fù)地開發(fā)相同或類似的軟件使得軟件研究者開始著手處理軟件的移植問題,即設(shè)法使一種機(jī)器的匯編語(yǔ)言程序能夠自動(dòng)移植到另一臺(tái)機(jī)器上去。但研究人員很快發(fā)現(xiàn)這難以實(shí)現(xiàn),大量復(fù)雜代碼仍必須由程序員進(jìn)行改寫。在這樣的背景下,高級(jí)語(yǔ)言應(yīng)運(yùn)而生。FORTRAN語(yǔ)言誕生于20世紀(jì)50年代中期,是最早發(fā)布的高級(jí)語(yǔ)言;50年代后期,COBOL語(yǔ)言出現(xiàn);60年代早期,ALGOL語(yǔ)言出現(xiàn)。而在當(dāng)時(shí),高級(jí)語(yǔ)言不能被程序編制人員所接受,他們認(rèn)為真正的程序員應(yīng)使用匯編語(yǔ)言。總的說來,20世紀(jì)70年代以前,尤其是在以ALGOL68為代表的高級(jí)語(yǔ)言出現(xiàn)以前,軟件開發(fā)基本上都是用匯編程序設(shè)計(jì)。盡管此階段軟件工作者開始逐漸形成模塊編程的方法,但軟件投入的資金和人力無(wú)法預(yù)測(cè),軟件完工的時(shí)間無(wú)法確定,軟件的可靠性無(wú)法控制等問題開始表露出來,軟件危機(jī)從此階段開始出現(xiàn)。一個(gè)著名的例子是1962年7月美國(guó)飛往金星的火箭控制系統(tǒng)中的指令,“DO5I=1,3”誤寫成“DO5I=1.3”,導(dǎo)致火箭偏離軌道,被迫炸毀。
因?yàn)榇穗A段系統(tǒng)規(guī)模較小,很少明確考慮軟件體系結(jié)構(gòu),所以一般不存在軟件系統(tǒng)的建模工作。2.3.2萌芽階段
在1968年NATO會(huì)議上,“軟件工程”的概念首次被提出。自此,圍繞軟件項(xiàng)目,開展了有關(guān)開發(fā)模型、方法以及支持工具的研究。其主要成果有:提出了瀑布模型,開發(fā)了一些結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言(例如PASCAL語(yǔ)言、Ada語(yǔ)言),結(jié)構(gòu)化軟件開發(fā)技術(shù),并且圍繞項(xiàng)目管理提出了費(fèi)用估算、文檔復(fù)審等方法和工具。結(jié)構(gòu)化軟件開發(fā)技術(shù)在20世紀(jì)70年代中后期出現(xiàn),以PASCAL、COBOL等程序設(shè)計(jì)語(yǔ)言和關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)為標(biāo)志,以強(qiáng)調(diào)數(shù)據(jù)結(jié)構(gòu)、程序模塊化結(jié)構(gòu)為特征,采用自頂向下逐步求精的設(shè)計(jì)方法和單入口單出口的控制結(jié)構(gòu)。隨著結(jié)構(gòu)化開發(fā)技術(shù)的出現(xiàn)與廣泛應(yīng)用,軟件開發(fā)中出現(xiàn)了以數(shù)據(jù)流設(shè)計(jì)和控制流設(shè)計(jì)為主要任務(wù)的概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。伴隨著結(jié)構(gòu)化軟件技術(shù)而出現(xiàn)的軟件工程方法(包括CASE工具),使軟件工作的范圍從只考慮程序的編寫擴(kuò)展到從定義、編碼、測(cè)試到使用、維護(hù)等活動(dòng)的整個(gè)軟件生命周期。總的說來,在此階段,軟件體系結(jié)構(gòu)已經(jīng)是系統(tǒng)開發(fā)中的一個(gè)明確概念。結(jié)構(gòu)化程序中,由語(yǔ)句構(gòu)成模塊,模塊的聚集和嵌套又構(gòu)成層層調(diào)用的高層結(jié)構(gòu)。這種程序(表達(dá))結(jié)構(gòu)和(計(jì)算的)邏輯結(jié)構(gòu)的一致性形成了結(jié)構(gòu)化程序的體系結(jié)構(gòu)。
結(jié)構(gòu)化程序設(shè)計(jì)時(shí)代程序規(guī)模不算大,同時(shí),采用結(jié)構(gòu)化程序設(shè)計(jì)方法進(jìn)行自頂向下逐步求精的設(shè)計(jì),并注意模塊的耦合性,就可以得到相對(duì)良好的結(jié)構(gòu)。因此,體系結(jié)構(gòu)問題并不是當(dāng)時(shí)軟件開發(fā)中的主要問題,也就沒有開展深入的研究工作。2.3.3初級(jí)階段
20世紀(jì)80年代初,面向?qū)ο箝_發(fā)技術(shù)逐漸興起。隨著面向?qū)ο蠹夹g(shù)成為研究的熱點(diǎn),出現(xiàn)了幾十種支持軟件開發(fā)的面向?qū)ο蠓椒āF渲?,Booch、Coad/Yourdon、OMT和Jacobson的方法在面向?qū)ο筌浖_發(fā)界得到了廣泛的認(rèn)可。
面向?qū)ο箝_發(fā)技術(shù)以對(duì)象作為最基本的元素,將軟件系統(tǒng)看成是離散的對(duì)象的集合。一個(gè)對(duì)象既包括數(shù)據(jù),也包括行為。面向?qū)ο蠓椒ǘ贾С?種基本的活動(dòng):識(shí)別對(duì)象和類,描述對(duì)象和類之間的關(guān)系,以及通過描述每個(gè)類的功能定義對(duì)象的行為。對(duì)象技術(shù)的優(yōu)點(diǎn)在于,它能讓分析者、設(shè)計(jì)者及用戶更清楚地表達(dá)概念,相互交流;同時(shí),它作為描述、分析和建立軟件文檔的一種手段,大大提高了軟件的易讀性、可維護(hù)性、可重用性;使得從軟件分析到軟件設(shè)計(jì)的過渡非常自然,因此可顯著降低軟件開發(fā)成本。另外,面向?qū)ο蠹夹g(shù)中的繼承、封裝、多態(tài)性等機(jī)制,直接為軟件重用提供了進(jìn)一步的支持。在面向?qū)ο箝_發(fā)方法階段,由于對(duì)象是對(duì)數(shù)據(jù)及其操作的封裝,因而數(shù)據(jù)流設(shè)計(jì)與控制流設(shè)計(jì)統(tǒng)一為對(duì)象建模。同時(shí),面向?qū)ο蠓椒ㄟ€提出了一些其他的結(jié)構(gòu)視圖。如OMT方法提出了功能視圖、對(duì)象視圖和動(dòng)態(tài)視圖,Booch方法提出了類視圖、對(duì)象視圖、狀態(tài)遷移圖、交互作用圖、模塊圖、進(jìn)程圖,UML則從功能模型、靜態(tài)模型、動(dòng)態(tài)模型、配置模型等方面描述應(yīng)用系統(tǒng)的結(jié)構(gòu)。從1994年開始,Booch、Rumbaugh和Jacobson三人經(jīng)過共同努力,推出了統(tǒng)一建模語(yǔ)言UML(UnifiedModelingLanguage)。它結(jié)合了Booch、OMT和Jacobson方法的優(yōu)點(diǎn),統(tǒng)一了符號(hào)體系,并從其他的方法和工程實(shí)踐中吸收了許多經(jīng)過實(shí)際檢驗(yàn)的經(jīng)驗(yàn)和技術(shù)。對(duì)象管理組織OMG于1997年11月正式采納UML1.1作為建模語(yǔ)言規(guī)范,然后成立任務(wù)組不斷修訂。盡管UML取得了巨大成功,但仍然有一些批評(píng)意見。工業(yè)界的批評(píng)主要是,它的龐大和復(fù)雜使得多數(shù)用戶難以實(shí)際應(yīng)用或只能應(yīng)用少許概念。學(xué)術(shù)界的批評(píng)則主要針對(duì)它在理論上的缺陷和錯(cuò)誤,包括語(yǔ)言體系結(jié)構(gòu)、語(yǔ)法、語(yǔ)義等方面的問題。隨著抽象數(shù)據(jù)類型和面向?qū)ο蠹夹g(shù)的出現(xiàn),體系結(jié)構(gòu)研究逐漸得到重視。這是由以下因素決定的:對(duì)象的封裝減低了模塊間的耦合,為構(gòu)件層次上的軟件重用提供了可能;此外,類庫(kù)的構(gòu)造、分布式應(yīng)用系統(tǒng)的設(shè)計(jì)等規(guī)模大、復(fù)雜性高的系統(tǒng),也需要對(duì)體系結(jié)構(gòu)進(jìn)行研究。2.3.4高級(jí)階段
20世紀(jì)90年代后,軟件開發(fā)技術(shù)進(jìn)入了基于構(gòu)件的軟件開發(fā)階段。軟件開發(fā)的目標(biāo)是軟件具備很強(qiáng)的自適應(yīng)性、互操作性、可擴(kuò)展性和可重用性,軟件開發(fā)強(qiáng)調(diào)采用構(gòu)件化技術(shù)和體系結(jié)構(gòu)技術(shù)。軟件構(gòu)件技術(shù)與面向?qū)ο蠹夹g(shù)有著重要的不同。面向?qū)ο蠹夹g(shù)中的軟件重用主要是源代碼形式的重用,這要求設(shè)計(jì)者在重用軟件時(shí)必須理解其設(shè)計(jì)思路和編程風(fēng)格。軟件構(gòu)件技術(shù)則實(shí)現(xiàn)了對(duì)軟件的最終形式——可執(zhí)行二進(jìn)制碼的重用。這樣,構(gòu)件的實(shí)現(xiàn)是完全與實(shí)現(xiàn)語(yǔ)言無(wú)關(guān)的。任何一種過程化語(yǔ)言,從Ada到C到Java到C#,均可用來開發(fā)構(gòu)件,并且任何一種程序設(shè)計(jì)語(yǔ)言都可以直接或稍作修改后使用構(gòu)件技術(shù)。一個(gè)軟件可被切分成一些構(gòu)件,這些構(gòu)件可以單獨(dú)開發(fā)、單獨(dú)編譯,甚至單獨(dú)調(diào)試與測(cè)試。當(dāng)完成了所有構(gòu)件的開發(fā),再對(duì)它們加以組合,就得到了完整的軟件系統(tǒng)。在投入使用后,不同的構(gòu)件還可以在不影響系統(tǒng)的其他部分的情況下,分別進(jìn)行維護(hù)和升級(jí)。此階段中,軟件體系結(jié)構(gòu)逐漸成為軟件工程的重要研究領(lǐng)域,并最終作為一門學(xué)科得到了業(yè)界的普遍認(rèn)同。在基于構(gòu)件和體系結(jié)構(gòu)的軟件開發(fā)方法下,程序開發(fā)模式也相應(yīng)地發(fā)生了根本變化。軟件開發(fā)不再是“算法+數(shù)據(jù)結(jié)構(gòu)”,而是“構(gòu)件開發(fā)+基于體系結(jié)構(gòu)的構(gòu)件組裝”。軟件體系結(jié)構(gòu)作為開發(fā)文檔和中間產(chǎn)品,開始出現(xiàn)在軟件過程中。有研究人員認(rèn)為,“未來的年代將是研究軟件體系結(jié)構(gòu)的時(shí)代”。2.3.5綜合
從軟件技術(shù)的發(fā)展過程可以看出,在各個(gè)時(shí)期,軟件體系結(jié)構(gòu)的問題實(shí)際上總是存在的,但是它是隨著軟件系統(tǒng)的規(guī)模和復(fù)雜性的日益膨脹才逐漸表露、被人們發(fā)現(xiàn)和研究的。從最初的“無(wú)體系結(jié)構(gòu)”設(shè)計(jì)到今天的基于體系結(jié)構(gòu)的軟件開發(fā),軟件體系結(jié)構(gòu)技術(shù)大致經(jīng)歷了以下4個(gè)階段:
(1)“無(wú)體系結(jié)構(gòu)”設(shè)計(jì)階段:開發(fā)主要采用匯編語(yǔ)言,規(guī)模一般較小。
(2)萌芽階段:主要采用結(jié)構(gòu)化的開發(fā)技術(shù)。
(3)初級(jí)階段:主要采用面向?qū)ο蟮拈_發(fā)技術(shù),從多種角度對(duì)系統(tǒng)建模(如UML)。
(4)高級(jí)階段:該階段以Kruchten提出的“4+1”模型為標(biāo)志。軟件開發(fā)的中心是描述系統(tǒng)的高層抽象結(jié)構(gòu)模型,相比之下,傳統(tǒng)的軟件結(jié)構(gòu)更關(guān)心具體的建模細(xì)節(jié)。
軟件體系結(jié)構(gòu)技術(shù)仍存在諸多問題,如概念定義尚不統(tǒng)一、描述規(guī)范不能一致等。有研究人員認(rèn)為在軟件開發(fā)實(shí)踐中軟件體系結(jié)構(gòu)尚不能發(fā)揮重要作用,軟件體系結(jié)構(gòu)技術(shù)仍有待研究、發(fā)展和完善。
2.4軟件體系結(jié)構(gòu)的研究現(xiàn)狀及發(fā)展方向
2.4.1軟件體系結(jié)構(gòu)的研究現(xiàn)狀
軟件體系結(jié)構(gòu)作為軟件工程研究領(lǐng)域的一部分,已經(jīng)取得了長(zhǎng)足的發(fā)展,受到大多數(shù)軟件系統(tǒng)設(shè)計(jì)和研究人員的重視。但當(dāng)前,體系結(jié)構(gòu)仍是一個(gè)處在不斷發(fā)展中的新研究領(lǐng)域,許多定義還不夠統(tǒng)一,歸納現(xiàn)有體系結(jié)構(gòu)的研究活動(dòng),主要的討論和研究大致集中在以下幾個(gè)方面。
1.軟件體系結(jié)構(gòu)描述研究
構(gòu)建軟件體系結(jié)構(gòu)的目的之一就是建立一個(gè)可供各種人員交流的平臺(tái),并且要具備系統(tǒng)架構(gòu)級(jí)的可重用性。因此如何恰當(dāng)、準(zhǔn)確地對(duì)軟件體系結(jié)構(gòu)進(jìn)行描述是至關(guān)重要的。這種描述應(yīng)當(dāng)能夠?yàn)楦鞣N人員提供不同的視圖以滿足其不同的要求;同時(shí),當(dāng)要構(gòu)建新的應(yīng)用或?qū)?yīng)用進(jìn)行系統(tǒng)級(jí)更改時(shí),這種描述應(yīng)該能夠快速提供可重用的系統(tǒng)架構(gòu)視圖或系統(tǒng)模塊視圖。這方面的研究包括軟件體系結(jié)構(gòu)描述語(yǔ)言、使用“4+1”模型描述軟件體系結(jié)構(gòu)、使用UML描述軟件體系結(jié)構(gòu)等方面的研究。
1)軟件體系結(jié)構(gòu)描述語(yǔ)言
現(xiàn)有的一些軟件體系結(jié)構(gòu)描述方法采用非形式化的方法,體系結(jié)構(gòu)設(shè)計(jì)經(jīng)常難以理解,難以對(duì)體系結(jié)構(gòu)進(jìn)行形式化分析和模擬,缺乏相應(yīng)的支持工具幫助設(shè)計(jì)師完成設(shè)計(jì)工作。為了解決這個(gè)問題,用于描述和推理的形式化語(yǔ)言得以發(fā)展,這些語(yǔ)言就叫做體系結(jié)構(gòu)描述語(yǔ)言(ArchitectureDescriptionLanguage,ADL),ADL尋求增加軟件體系結(jié)構(gòu)設(shè)計(jì)的可理解性和重用性。
ADL是這樣一種語(yǔ)言,系統(tǒng)設(shè)計(jì)師可以利用它所提供的特性進(jìn)行軟件系統(tǒng)概念體系結(jié)構(gòu)建模。ADL提供了具體的語(yǔ)法與刻畫體系結(jié)構(gòu)的概念框架。它使得系統(tǒng)開發(fā)者能夠很好地描述他們?cè)O(shè)計(jì)的體系結(jié)構(gòu),以便與他人交流,能夠用提供的工具對(duì)許多實(shí)例進(jìn)行分析。研究人員已經(jīng)設(shè)計(jì)出了若干種ADL,典型的有Aesop、MetaH、C2、Rapide、SADL、UniCon和Wright等,盡管它們都描述軟件體系結(jié)構(gòu),卻有不同的特點(diǎn):Aesop支持體系結(jié)構(gòu)風(fēng)格的應(yīng)用;MetaH為設(shè)計(jì)者提供了關(guān)于實(shí)時(shí)電子控制軟件系統(tǒng)的設(shè)計(jì)指導(dǎo);C2支持基于消息傳遞風(fēng)格的用戶界面系統(tǒng)的描述;Rapide支持體系結(jié)構(gòu)設(shè)計(jì)的模擬并提供了分析模擬結(jié)果的工具;SADL提供了關(guān)于體系結(jié)構(gòu)加細(xì)的形式化基礎(chǔ);UniCon支持異構(gòu)的構(gòu)件和連接件類型,并提供了關(guān)于體系結(jié)構(gòu)的高層編譯器;Wright支持體系結(jié)構(gòu)構(gòu)件之間交互的說明和分析。這些ADL及它們的支持工具、描述方法和形式各不相同,強(qiáng)調(diào)了體系結(jié)構(gòu)不同的側(cè)面,對(duì)體系結(jié)構(gòu)的研究和應(yīng)用起到了重要的作用,但也有負(fù)面的影響。每一種ADL都以獨(dú)立的形式存在,描述語(yǔ)法不同且互不兼容。同時(shí)又有許多共同的特征,這使設(shè)計(jì)人員很難選擇一種合適的ADL;大部分ADL都是領(lǐng)域相關(guān)的,不利于對(duì)不同領(lǐng)域的體系結(jié)構(gòu)進(jìn)行分析;一些ADL在某些方面大同小異,有很多冗余的部分。針對(duì)這些不足,已出現(xiàn)一些交換語(yǔ)言,其目標(biāo)是提供一個(gè)公共形式把各種語(yǔ)言綜合起來,以此來綜合不同的體系結(jié)構(gòu)描述。ACME就是其中較有影響的一個(gè),它的目標(biāo)是抽取諸多ADL中與具體ADL無(wú)關(guān)的信息作為交換的依據(jù),同時(shí),允許并入相關(guān)信息作為保留的輔助信息。另外一個(gè)研究熱點(diǎn)是開發(fā)基于XML的體系結(jié)構(gòu)描述語(yǔ)言。XML是可擴(kuò)展標(biāo)記語(yǔ)言,它簡(jiǎn)單并易于實(shí)現(xiàn),因此被工業(yè)界廣泛使用。若能用XML來表示軟件體系結(jié)構(gòu),必能極大推動(dòng)軟件體系結(jié)構(gòu)領(lǐng)域的研究成果在軟件產(chǎn)業(yè)界的應(yīng)用。由于XML在體系結(jié)構(gòu)描述上的許多優(yōu)點(diǎn),研究者們已經(jīng)開發(fā)出了不同的基于XML的體系結(jié)構(gòu)描述語(yǔ)言,如XADL2.0、XBA、XCOBA等。
2)使用“4+1”模型描述軟件體系結(jié)構(gòu)
按照一定的描述方法,用體系結(jié)構(gòu)描述語(yǔ)言對(duì)體系結(jié)構(gòu)進(jìn)行說明的結(jié)果稱為體系結(jié)構(gòu)的表示,而將描述體系結(jié)構(gòu)的過程稱為體系結(jié)構(gòu)構(gòu)造。在體系結(jié)構(gòu)描述方面,Kruchten提出的“4+1”模型是當(dāng)前軟件體系結(jié)構(gòu)描述的一個(gè)經(jīng)典范例,該模型由邏輯視圖、開發(fā)視圖、過程視圖和物理視圖組成,并通過場(chǎng)景將這4個(gè)視圖有機(jī)地結(jié)合起來,比較細(xì)致地描述了需求和體系結(jié)構(gòu)之間的關(guān)系?!?+1”模型實(shí)際上使得有不同需求的人員能夠得到他們對(duì)于軟件體系結(jié)構(gòu)想要了解的東西。系統(tǒng)工程師先從物理視圖,然后從過程視圖靠近體系結(jié)構(gòu)。最終使用者、客戶、數(shù)據(jù)專家從邏輯視圖看體系結(jié)構(gòu);項(xiàng)目經(jīng)理、軟件配置人員從開發(fā)視圖看體系結(jié)構(gòu)。
3)使用UML描述軟件體系結(jié)構(gòu)
Booch從UML的角度給出了一種由設(shè)計(jì)視圖、過程視圖、實(shí)現(xiàn)視圖和部署視圖,再加上一個(gè)用例視圖構(gòu)成的體系結(jié)構(gòu)描述模型。Medividovic則總結(jié)了用UML描述體系結(jié)構(gòu)的三種途徑:不改變UML用法而直接對(duì)體系結(jié)構(gòu)建模;利用UML支持的擴(kuò)充機(jī)制擴(kuò)展UML的元模型對(duì)體系結(jié)構(gòu)建模概念的支持;對(duì)UML進(jìn)行擴(kuò)充,增加體系結(jié)構(gòu)建模元素。本書第3章介紹了不改變UML用法而直接對(duì)體系結(jié)構(gòu)建模的方法。UML的靜態(tài)建模機(jī)制包括用例圖、類圖、對(duì)象圖、包、構(gòu)件圖和部署圖。UML的動(dòng)態(tài)建模機(jī)制包括順序圖、協(xié)作圖、狀態(tài)圖和活動(dòng)圖。可以使用UML對(duì)構(gòu)件交互模式進(jìn)行靜態(tài)建模和動(dòng)態(tài)建模。
2.軟件體系結(jié)構(gòu)設(shè)計(jì)研究
軟件體系結(jié)構(gòu)設(shè)計(jì)研究包括體系結(jié)構(gòu)風(fēng)格研究、體系結(jié)構(gòu)設(shè)計(jì)原理、設(shè)計(jì)模式和設(shè)計(jì)方法研究。
1)體系結(jié)構(gòu)風(fēng)格研究
體系結(jié)構(gòu)設(shè)計(jì)研究的重點(diǎn)內(nèi)容之一就是體系結(jié)構(gòu)風(fēng)格的研究。人們?cè)陂_發(fā)不同系統(tǒng)時(shí),會(huì)逐漸發(fā)現(xiàn)一類系統(tǒng)的體系結(jié)構(gòu)上有許多共性,于是抽取出這些共性構(gòu)成一些富有代表性和被廣泛接受的體系結(jié)構(gòu)風(fēng)格。所以說體系結(jié)構(gòu)風(fēng)格是用來刻畫具有相似結(jié)構(gòu)和語(yǔ)義性質(zhì)的一類系統(tǒng)族的。它定義一組構(gòu)件、連接件的類型以及它們之間應(yīng)該如何連接的約束。一般來說,一個(gè)系統(tǒng)不一定只具有一種風(fēng)格,在不同層次或抽象級(jí)別上,可具有多種風(fēng)格。雖然系統(tǒng)組織方式可以是無(wú)窮的,但如果能用少量的風(fēng)格類型表達(dá)出較多的系統(tǒng)組織方式,不僅可以縮短系統(tǒng)分析設(shè)計(jì)的時(shí)間,還能大大提高大規(guī)模軟件重用的機(jī)會(huì)。
Garlan和Shaw給出了對(duì)通用體系結(jié)構(gòu)風(fēng)格的分類:數(shù)據(jù)流風(fēng)格、調(diào)用/返回風(fēng)格、獨(dú)立構(gòu)件風(fēng)格、虛擬機(jī)風(fēng)格和倉(cāng)庫(kù)風(fēng)格。
2)體系結(jié)構(gòu)設(shè)計(jì)原理
參照軟件工程、結(jié)構(gòu)化程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)原理,結(jié)合軟件體系結(jié)構(gòu)設(shè)計(jì)本身的特點(diǎn),可以總結(jié)出軟件體系結(jié)構(gòu)設(shè)計(jì)過程中用到的原理主要有以下幾個(gè):抽象、封裝、信息隱藏、模塊化、注意點(diǎn)分離、耦合和內(nèi)聚、接口和實(shí)現(xiàn)分離、分而治之、層次化等。
3)體系結(jié)構(gòu)設(shè)計(jì)模式
設(shè)計(jì)模式的概念最早是由美國(guó)的一位叫做ChristopherAlexander的建筑理論家提出來的,他試圖找到一種結(jié)構(gòu)化、可重用的方法,以在圖紙上捕捉到建筑物的基本要素。后來被作為總結(jié)軟件設(shè)計(jì),特別是面向?qū)ο笤O(shè)計(jì)的實(shí)踐和經(jīng)驗(yàn)而提出。在幾十年的軟件設(shè)計(jì)研究和實(shí)踐中,設(shè)計(jì)人員和程序員積累了大量的實(shí)際經(jīng)驗(yàn),發(fā)現(xiàn)并提出了大量在眾多應(yīng)用中普遍存在的軟件結(jié)構(gòu)和結(jié)構(gòu)關(guān)系,模式被用于軟件體系結(jié)構(gòu)設(shè)計(jì)中。利用設(shè)計(jì)模式可以方便地重用成功的設(shè)計(jì)和結(jié)構(gòu)。把已經(jīng)證實(shí)的技術(shù)表示為設(shè)計(jì)模式,使它們更加容易被新系統(tǒng)的開發(fā)者所接受。設(shè)計(jì)模式幫助設(shè)計(jì)師選擇可使系統(tǒng)重用的設(shè)計(jì)方案,避免選擇危害到可重用性的方案。
4)體系結(jié)構(gòu)設(shè)計(jì)方法
生成一個(gè)滿足軟件需求的體系結(jié)構(gòu)的過程即為體系結(jié)構(gòu)設(shè)計(jì)。體系結(jié)構(gòu)設(shè)計(jì)過程的本質(zhì)在于:將系統(tǒng)分解成相應(yīng)的組成成分(如構(gòu)件、連接件),并將這些成分重新組裝成一個(gè)系統(tǒng)。常用的體系結(jié)構(gòu)設(shè)計(jì)方法有4類,分別為制品驅(qū)動(dòng)(artifact-driven)的方法,用例驅(qū)動(dòng)(use-case-driven)的方法,模式驅(qū)動(dòng)(pattern-driven)的方法和領(lǐng)域驅(qū)動(dòng)(domain-driven)的方法。每種方法在過程的順序上、在概念的特定內(nèi)容上有所不同,但最后都生成對(duì)體系結(jié)構(gòu)的描述。
3.基于體系結(jié)構(gòu)的軟件開發(fā)方法
本質(zhì)上,軟件體系結(jié)構(gòu)是對(duì)軟件需求的一種抽象解決方案。在引入了體系結(jié)構(gòu)的軟件開發(fā)中,應(yīng)用系統(tǒng)的構(gòu)造過程變?yōu)椤皢栴}定義→軟件需求→軟件體系結(jié)構(gòu)→軟件設(shè)計(jì)→軟件實(shí)現(xiàn)”,可以認(rèn)為軟件體系結(jié)構(gòu)架起了軟件需求與軟件設(shè)計(jì)之間的一座橋梁。而在由軟件體系結(jié)構(gòu)到實(shí)現(xiàn)的過程中,借助一定的中間件技術(shù)與軟件總線技術(shù),軟件體系結(jié)構(gòu)易于映射成相應(yīng)的實(shí)現(xiàn)。Bass等人提出了一種基于體系結(jié)構(gòu)的軟件開發(fā)過程,該過程包括6個(gè)步驟:導(dǎo)出體系結(jié)構(gòu)需求;設(shè)計(jì)體系結(jié)構(gòu);文檔化體系結(jié)構(gòu);分析體系結(jié)構(gòu);實(shí)現(xiàn)體系結(jié)構(gòu);維護(hù)體系結(jié)構(gòu)。對(duì)此在本書第5章中會(huì)進(jìn)行介紹。軟件開發(fā)模型是跨越整個(gè)軟件生存周期的系統(tǒng)開發(fā)、運(yùn)行、維護(hù)所實(shí)施的全部工作和任務(wù)的結(jié)構(gòu)框架,給出了軟件開發(fā)活動(dòng)各階段之間的關(guān)系。目前,常見的軟件開發(fā)模型大致可分為3種類型:
(1)以軟件需求完全確定為前提的瀑布模型。
(2)在軟件開發(fā)初始階段只能提供基本需求時(shí)采用的漸進(jìn)式開發(fā)模型,如螺旋模型等。
(3)以形式化開發(fā)方法為基礎(chǔ)的變換模型。所有開發(fā)方法都是要解決需求與實(shí)現(xiàn)之間的差距。但是,這3種類型的軟件開發(fā)模型都存在這樣或那樣的缺陷,不能很好地支持基于軟件體系結(jié)構(gòu)的開發(fā)過程。因此,研究人員在發(fā)展基于體系結(jié)構(gòu)的軟件開發(fā)模型方面做了一定的工作。
在基于構(gòu)件和基于體系結(jié)構(gòu)的軟件開發(fā)逐漸成為主流的開發(fā)方法的情況下,已經(jīng)出現(xiàn)了基于構(gòu)件的軟件工程。但是,對(duì)體系結(jié)構(gòu)的描述、表示、設(shè)計(jì)和分析以及驗(yàn)證等內(nèi)容的研究還相對(duì)不足,隨著需求復(fù)雜化及其演化,切實(shí)可行的體系結(jié)構(gòu)設(shè)計(jì)規(guī)則與方法將更為重要。
4.軟件體系結(jié)構(gòu)評(píng)估
軟件體系結(jié)構(gòu)的設(shè)計(jì)是整個(gè)軟件開發(fā)過程中關(guān)鍵的一步。對(duì)于當(dāng)今世界上龐大而復(fù)雜的系統(tǒng)來說,沒有一個(gè)合適的體系結(jié)構(gòu)而要有一個(gè)成功的軟件設(shè)計(jì)幾乎是不可想象的。不同類型的系統(tǒng)需要不同的體系結(jié)構(gòu),甚至一個(gè)系統(tǒng)的不同子系統(tǒng)也需要不同的體系結(jié)構(gòu)。體系結(jié)構(gòu)的選擇是一個(gè)軟件系統(tǒng)設(shè)計(jì)成敗的關(guān)鍵。
但是,怎樣才能知道為軟件系統(tǒng)所選用的體系結(jié)構(gòu)是否恰當(dāng)?如何確保按照所選用的體系結(jié)構(gòu)能順利地開發(fā)出成功的軟件產(chǎn)品呢?要回答這些問題,需要使用專門的方法對(duì)軟件體系結(jié)構(gòu)進(jìn)行分析和評(píng)估。常用的軟件體系結(jié)構(gòu)評(píng)估方法有軟件體系結(jié)構(gòu)分析方法(SoftwareArchitectureAnalysisMethod,SAAM)和體系結(jié)構(gòu)權(quán)衡分析方法(ArchitectureTradeoffAnalysisMethod,ATAM)。它們都是基于場(chǎng)景的軟件體系結(jié)構(gòu)評(píng)估方法,這類評(píng)估方法分析軟件體系結(jié)構(gòu)對(duì)場(chǎng)景也就是對(duì)系統(tǒng)的使用或修改活動(dòng)的支持程度,從而判斷該體系結(jié)構(gòu)對(duì)這一場(chǎng)景所代表的質(zhì)量需求的滿足程度。例如,用一系列對(duì)軟件的修改來反映易修改性方面的需求,用一系列攻擊性操作來代表安全性方面的需求等。SAAM本質(zhì)上是一個(gè)尋找受場(chǎng)景影響的體系結(jié)構(gòu)元素的方法,而ATAM建立在SAAM基礎(chǔ)上,關(guān)注對(duì)風(fēng)險(xiǎn)、非風(fēng)險(xiǎn)、敏感點(diǎn)和權(quán)衡點(diǎn)的識(shí)別。
5.特定領(lǐng)域的體系結(jié)構(gòu)框架
特定領(lǐng)域的應(yīng)用通常具有相似的特征,如果能夠充分挖掘系統(tǒng)所在領(lǐng)域的共同特征,提煉出領(lǐng)域的一般需求,抽象出領(lǐng)域模型,歸納總結(jié)出這類系統(tǒng)的軟件開發(fā)方法,就能夠指導(dǎo)領(lǐng)域內(nèi)其他系統(tǒng)的開發(fā),提高軟件質(zhì)量和開發(fā)效率、節(jié)省軟件開發(fā)成本。正是基于這種考慮,人們?cè)谲浖睦碚撗芯亢凸こ虒?shí)踐中,逐漸形成一種稱之為特定領(lǐng)域的軟件體系結(jié)構(gòu)(DomainSpecificSoftwareArchitecture,DSSA)的理論與工程方法,它對(duì)軟件設(shè)計(jì)與開發(fā)過程具有一定參考和
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省綿陽(yáng)市江油市2025-2026學(xué)年九年級(jí)上學(xué)期1月期末數(shù)學(xué)試題(含答案)
- 2025~2026學(xué)年濟(jì)南市槐蔭區(qū)九年級(jí)物理第一學(xué)期期末考試試題以及答案(含答案)
- 五年級(jí)下冊(cè)數(shù)學(xué)試卷題及答案
- 無(wú)領(lǐng)導(dǎo)面試真題及答案
- 文學(xué)常識(shí)試題及答案
- 22春“電氣工程及其自動(dòng)化”專業(yè)《控制系統(tǒng)數(shù)字仿真》在線作業(yè)一答案參考6
- 2021年二年級(jí)語(yǔ)文上冊(cè)期中考試卷(參考答案)
- 22春福建師范大學(xué)《學(xué)前兒童數(shù)學(xué)教育》在線作業(yè)二答案參考3
- 22春“金融學(xué)”專業(yè)《個(gè)人理財(cái)》在線作業(yè)一答案參考7
- 生物招生考試題及答案
- 養(yǎng)老院老人生活設(shè)施管理制度
- 2026年稅務(wù)稽查崗位考試試題及稽查實(shí)操指引含答案
- (2025年)林業(yè)系統(tǒng)事業(yè)單位招聘考試《林業(yè)知識(shí)》真題庫(kù)與答案
- 2026年七臺(tái)河職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性考試備考題庫(kù)有答案解析
- 2020海灣消防GST-DJ-N500-GST-DJ-N900 消防設(shè)備電源狀態(tài)監(jiān)控器安裝使用說明書
- 河北省滄州市青縣2024-2025學(xué)年七年級(jí)上學(xué)期期末生物試卷
- 淮安市2022-2023學(xué)年七年級(jí)上學(xué)期期末地理試題
- 2024屆高考語(yǔ)文二輪復(fù)習(xí)專題-文言文閱讀(上海專用)(解析版)
- 2024可打印的離婚協(xié)議書模板
- EPC項(xiàng)目組織架構(gòu)圖
- 《房顫的藥物治療》課件
評(píng)論
0/150
提交評(píng)論