|
![]() |
級(jí)別: 中級(jí) Tilak Mitra, 認(rèn)證高級(jí) IT 架構(gòu)師, IBM Global Services 2008 年 10 月 16 日 軟 件架構(gòu)對(duì)于復(fù)雜實(shí)時(shí)系統(tǒng)的開發(fā)已日益變得更加重要。在這個(gè)新的系列中,了解為什么以及應(yīng)該如何編寫軟件架構(gòu)文檔說明。您將了解為任何中大型軟件開發(fā)項(xiàng)目編 寫文檔說明的五個(gè)不同視圖或方面。這是本系列中的第一篇文章,其中將介紹軟件架構(gòu)和文檔說明的重要性。您還將概略了解將在后續(xù)文章中介紹的體系結(jié)構(gòu)視圖。 軟件架構(gòu)是一門學(xué)科,開始于 20 世紀(jì) 70 年代。面對(duì)不斷增加的復(fù)雜性和開發(fā)復(fù)雜實(shí)時(shí)系統(tǒng)的壓力,作為主流系統(tǒng)工程和軟件開發(fā)的基本構(gòu)造,軟件架構(gòu)應(yīng)運(yùn)而生。 與任何其他久經(jīng)考驗(yàn)的學(xué)科一樣,軟件架構(gòu)在誕生之初也面臨許多挑戰(zhàn)。軟件架構(gòu)表示系統(tǒng)的結(jié)構(gòu)和行為方面。在早期為軟件架構(gòu)編寫文檔說明時(shí),所使用的文本和 圖解表達(dá)常常不足或者不夠精確。所需的是某種一致并得到充分理解的偽(或元)語言,以便將對(duì)軟件架構(gòu)進(jìn)行表示和編寫文檔說明的不同方式統(tǒng)一起來。在學(xué)術(shù)研 究的推動(dòng)下,在用于開發(fā)有效軟件架構(gòu)文檔說明的最佳實(shí)踐和指導(dǎo)原則方面,工程和計(jì)算機(jī)科學(xué)領(lǐng)域已取得了長足的發(fā)展。 在本系列中,您將了解如何編寫軟件架構(gòu)文檔說明。了解編寫文檔說明的不同方面:系統(tǒng)上下文、體系結(jié)構(gòu)概述、功能體系結(jié)構(gòu)、操作體系結(jié)構(gòu)和體系結(jié)構(gòu)決策。 在這第一篇文章中,了解軟件架構(gòu)是什么,以及為該學(xué)科的不同方面編寫文檔說明的重要性。
不同的研究人員已解釋了軟件架構(gòu)是什么,并且他們對(duì)有關(guān)如何最好地表示軟件系統(tǒng)的體系結(jié)構(gòu)具有不同的觀點(diǎn)。其中沒有哪一種解釋是錯(cuò)誤的;每種解釋都具有自己的價(jià)值。Bass L 等人抓住了軟件架構(gòu)的本質(zhì): “程序或計(jì)算系統(tǒng)的軟件架構(gòu)是該系統(tǒng)的結(jié)構(gòu),包括軟件組件、那些組件的外部可見的屬性,以及那些組件之間的關(guān)系” 。 此定義重點(diǎn)關(guān)注由粗粒度的構(gòu)造(軟件組件)所構(gòu)成的體系結(jié)構(gòu),可以將這些構(gòu)造看作是體系結(jié)構(gòu)的構(gòu)建塊。每個(gè)軟件組件或體系結(jié)構(gòu)構(gòu)建塊具有某些外部可見的屬 性,這是它向其他體系結(jié)構(gòu)構(gòu)建塊公開的屬性。軟件組件的內(nèi)部設(shè)計(jì)和實(shí)現(xiàn)細(xì)節(jié)不是系統(tǒng)的其他部分所關(guān)心的內(nèi)容,系統(tǒng)的其他部分只是將某個(gè)特定組件視為一個(gè)黑 盒。該黑盒具有某些所公開的屬性,其他軟件組件可以使用這些屬性來共同實(shí)現(xiàn)業(yè)務(wù)或 IT 目標(biāo)。軟件架構(gòu)在恰當(dāng)?shù)牧6燃?jí)別標(biāo)識(shí)體系結(jié)構(gòu)構(gòu)建塊。軟件架構(gòu)還標(biāo)識(shí)那些構(gòu)建塊如何彼此相關(guān),并進(jìn)行文檔記錄。 與軟件工程相關(guān)的體系結(jié)構(gòu)涉及到將單個(gè)系統(tǒng)分解或劃分為一組可迭代地、漸進(jìn)地和獨(dú)立地構(gòu)造的部分。各個(gè)部分彼此具有顯式的關(guān)系。當(dāng)組合在一起時(shí),各個(gè)部分就形成了系統(tǒng)、企業(yè)或應(yīng)用程序的體系結(jié)構(gòu)。 關(guān)于體系結(jié)構(gòu)與設(shè)計(jì)之間的區(qū)別,存在一些混淆。正如 Clements P 等人 所指出的,所有體系結(jié)構(gòu)都是設(shè)計(jì),但不是所有設(shè)計(jì)都是體系結(jié)構(gòu)。需要綁定以使系統(tǒng)滿足其功能性和非功能性需求和目標(biāo)的設(shè)計(jì)本質(zhì)上是體系結(jié)構(gòu)。體系結(jié)構(gòu)將體 系結(jié)構(gòu)構(gòu)建塊視為黑盒,而設(shè)計(jì)則處理體系結(jié)構(gòu)構(gòu)建塊的配置、自定義和內(nèi)部工作。體系結(jié)構(gòu)將軟件組件與其外部屬性綁定在一起。設(shè)計(jì)通常要比體系結(jié)構(gòu)松散得 多,因?yàn)樗试S以更多的方式遵守組件的外部屬性。設(shè)計(jì)還考慮用于實(shí)現(xiàn)組件內(nèi)部細(xì)節(jié)的各種方法。 軟件架構(gòu)可以遞歸地使用。請(qǐng)考慮一個(gè)屬于某個(gè)系統(tǒng)的軟件架構(gòu)組成部分的軟件組件 (C1)。軟件架構(gòu)師將該組件及其應(yīng)該公開的屬性、功能和非功能特性及其與其他軟件組件的關(guān)系交給系統(tǒng)設(shè)計(jì)人員。設(shè)計(jì)人員在分析軟件組件 C1 之后,決定將該組件分解為更細(xì)粒度的組件(C11、C12 和 C13),其中每個(gè)組件提供可重用的功能,這些功能將用于實(shí)現(xiàn) C1 的要求屬性。設(shè)計(jì)人員詳細(xì)設(shè)計(jì)了 C11、C12、C13 及其接口。 此時(shí),對(duì)設(shè)計(jì)人員來說,C11、C12 和 C13 是體系結(jié)構(gòu)構(gòu)造(或組件);其中每個(gè)構(gòu)造具有顯式定義的外部接口。對(duì)設(shè)計(jì)人員來說,C11、C12 和 C13 是軟件組件 C1 的體系結(jié)構(gòu),并且這些構(gòu)造需要進(jìn)一步的改進(jìn)和設(shè)計(jì),以處理它們的內(nèi)部實(shí)現(xiàn)。通過將大型、復(fù)雜的系統(tǒng)劃分為小型的構(gòu)成部分并集中于每個(gè)部分,可以遞歸地使用 體系結(jié)構(gòu)。 體系結(jié)構(gòu)使用共同滿足行為和質(zhì)量目標(biāo)的體系結(jié)構(gòu)構(gòu)建塊將系統(tǒng)綁定在一起。參與者必須能夠理解體系結(jié)構(gòu)。因此必須為體系結(jié)構(gòu)編寫足夠的文檔說明,下一個(gè)部分將對(duì)此進(jìn)行討論。
向參與者傳達(dá)您正在構(gòu)建的系統(tǒng)藍(lán)圖的關(guān)鍵是為系統(tǒng)體系結(jié)構(gòu)編寫文檔說明。軟件架構(gòu)通過不同的視圖進(jìn)行表示——功能、操作、決策等等。沒有任何單一視圖能夠表示整個(gè)體系結(jié)構(gòu)。并非所有視圖都需要表示特定企業(yè)或問題領(lǐng)域的系統(tǒng)體系結(jié)構(gòu)。架構(gòu)師將確定足以表示所需軟件架構(gòu)范疇的視圖集。 通過編寫不同視圖的文檔說明并捕獲每個(gè)部分的開發(fā),您可以向開發(fā)團(tuán)隊(duì)和業(yè)務(wù)及 IT 參與者傳達(dá)有關(guān)該不斷發(fā)展的系統(tǒng)的信息。軟件架構(gòu)具有一組其預(yù)期要滿足的業(yè)務(wù)和工程目標(biāo)。體系結(jié)構(gòu)的文檔說明可以向參與者傳達(dá)這些目標(biāo)將如何實(shí)現(xiàn)。 為體系結(jié)構(gòu)的各個(gè)方面編寫文檔說明,有助于架構(gòu)師彌補(bǔ)用白板描述解決方案(使用框線圖方法)與以對(duì)下游設(shè)計(jì)和實(shí)現(xiàn)團(tuán)隊(duì)有意義的方式表示解決方案之間眾所周知的差距。體系結(jié)構(gòu)的框線圖留下了大量有待解釋的空間。需要揭示的細(xì)節(jié)通常隱藏并令人混淆地固守在那些框線背后。 文檔說明還可以促進(jìn)創(chuàng)建切合實(shí)際并且可以系統(tǒng)開發(fā)(例如遵循標(biāo)準(zhǔn)模板)的體系結(jié)構(gòu)構(gòu)件。作為一門學(xué)科,軟件架構(gòu)是非常成熟的。您可以利用最佳實(shí)踐和指導(dǎo)原 則來為每種視圖創(chuàng)建標(biāo)準(zhǔn)模板,以表示體系結(jié)構(gòu)的某個(gè)部分或范疇。模板可以為架構(gòu)師提供有關(guān)需要實(shí)際產(chǎn)生什么結(jié)果的訓(xùn)練。并且模板還可以幫助架構(gòu)師執(zhí)行強(qiáng)化 訓(xùn)練——超越框線圖技術(shù)。模板以更具體的術(shù)語定義體系結(jié)構(gòu),因此可直接追溯到解決方案預(yù)期要滿足的業(yè)務(wù)和 IT 目標(biāo)。 由于復(fù)雜性,典型的系統(tǒng)開發(fā)活動(dòng)可能要花 18 個(gè)月左右的時(shí)間。人員縮減在設(shè)計(jì)和開發(fā)團(tuán)隊(duì)是司空見慣的事情,從而導(dǎo)致瘋狂尋找恰當(dāng)?shù)奶鎿Q人員。新的團(tuán)隊(duì)成員通常阻礙進(jìn)度,因?yàn)樗麄儽仨毥?jīng)歷一個(gè)學(xué)習(xí)過程才能成為高效的參與者。具有良好文檔說明構(gòu)件的軟件架構(gòu)可以提供:
請(qǐng)考慮一個(gè)名為“體系結(jié)構(gòu)決策”的假想構(gòu)件(后續(xù)部分還將對(duì)此進(jìn)行討論)。此構(gòu)件確定要解決的問題,并評(píng)估備選機(jī)制以解決該問題。此構(gòu)件對(duì)為什么選擇某種備選機(jī)制而不選擇其他機(jī)制提供了論證。 所 確定的問題涉及到訪問大型機(jī) IBM DB2? 表的機(jī)制。對(duì)兩種備選機(jī)制進(jìn)行了評(píng)估:使用 IBM MQSeries?,或者使用 NEON Shadow Direct 適配器(一種供應(yīng)商適配器)。盡管 MQSeries 具備相關(guān)功能并且花費(fèi)較少,但是后者要穩(wěn)定得多,并且在制定決策時(shí),后者具有一定的優(yōu)勢(shì)?,F(xiàn)在設(shè)想原架構(gòu)師在一年后離開了該項(xiàng)目,新的架構(gòu)師粉墨登場(chǎng)。新 的架構(gòu)師質(zhì)問該團(tuán)隊(duì)為什么不使用 IBM MQSeries 來訪問大型機(jī) DB2 表。該團(tuán)隊(duì)很快返回到體系結(jié)構(gòu)決策構(gòu)件,并指出了做出該選擇的原因。由于 IBM MQSeries 已在過去一年中經(jīng)測(cè)試證明與另一個(gè)解決方案不相上下,并且由于其價(jià)格較低,于是對(duì)該決策進(jìn)行了重新審視并做出更改以反映更新后的解決方案。 這個(gè)示例說明了為什么對(duì)系統(tǒng)軟件架構(gòu)的各個(gè)方面編寫文檔說明,是教育新團(tuán)隊(duì)成員和在最少的停機(jī)情況下幫助他們?nèi)腴T所必需的。
您已經(jīng)了解到可以通過不同的視圖來表示體系結(jié)構(gòu),每種視圖集中于該體系結(jié)構(gòu)的特定方面或范疇。正如 Bass L 等人 所指出的,視圖 是由系統(tǒng)參與者編寫和讀取的體系結(jié)構(gòu)元素或構(gòu)造以及它們之間關(guān)系的內(nèi)聚集合。 體系結(jié)構(gòu)的功能 視圖描述各個(gè)體系結(jié)構(gòu)構(gòu)建塊、構(gòu)建塊之間的關(guān)系,以及如何將它們分配到體系結(jié)構(gòu)中的不同層。操作 視圖(也稱為技術(shù)視圖)描述各個(gè)基礎(chǔ)結(jié)構(gòu)和中間件軟件組件,這些組件為將要部署的功能體系結(jié)構(gòu)組件提供運(yùn)行時(shí)平臺(tái)。對(duì)應(yīng)用程序架構(gòu)師而言,功能視圖具有第一位的重要性。對(duì)基礎(chǔ)結(jié)構(gòu)架構(gòu)師而言,操作視圖是要重點(diǎn)關(guān)注的視圖。 這兩種視圖采用不同的方法解決相同的問題,兩種視圖都需要從概念體系結(jié)構(gòu)推進(jìn)到物理實(shí)現(xiàn)。視圖用于強(qiáng)調(diào)特定的體系結(jié)構(gòu)范疇,同時(shí)有意地抑制其他范疇。 自從 20 世紀(jì) 90 年代以來,已經(jīng)存在許多不同的視圖集。Perry 和 Wolf 提出,關(guān)于構(gòu)建具有多種視圖的體系結(jié)構(gòu)(包括軟件架構(gòu)),存在一些非常有趣的要點(diǎn)。發(fā)表軟件架構(gòu)的 4 + 1 視圖的 Kruchten 認(rèn)為存在五種視圖,這些視圖組合起來可以表示軟件架構(gòu)。下面將描述前四種視圖。
第五種視圖更多的是一種 Litmus Test 視圖。它采用一組在體系結(jié)構(gòu)上非常重要的用例(業(yè)務(wù)場(chǎng)景),并說明如何將四種視圖的每一種視圖中的體系結(jié)構(gòu)元素集與針對(duì)那些元素的體系結(jié)構(gòu)約束和決策結(jié)合起來,用于實(shí)現(xiàn)那些用例。 由 Soni 等人 在 Applied Software Architecture 中發(fā)表的另一種視圖由四種構(gòu)成軟件架構(gòu)的主要視圖組成:
軟件架構(gòu)出版物中描述了許多其他視圖,但是介紹所有這些視圖超出了本文的范圍。對(duì)軟件架構(gòu)的不同視圖進(jìn)行仔細(xì)分析后表明,不同的研究結(jié)果之間存在大量的相似性。我們擁有一個(gè)最常用于表示系統(tǒng)軟件架構(gòu)的最優(yōu)視圖集合。 下一個(gè)部分將提供一些構(gòu)件的概述,建議將這些構(gòu)件用作可在軟件開發(fā)生命周期的體系結(jié)構(gòu)階段生成的體系結(jié)構(gòu)文檔的最小集。
可以對(duì)軟件架構(gòu)的許多不同視圖或方面做文檔說明。對(duì)于任何中大型軟件開發(fā)項(xiàng)目,建議您至少為以下體系結(jié)構(gòu)構(gòu)件集編寫文檔說明:
本系列的其余部分將討論如何對(duì)軟件架構(gòu)中的這五個(gè)構(gòu)件編寫文檔說明。
軟件架構(gòu)已經(jīng)存在 30 多年了。過去幾十年已見證了軟件工程方面的大量工作。軟件架構(gòu)師在設(shè)計(jì)滿足企業(yè)的業(yè)務(wù)、工程和 IT 目標(biāo)的解決方案中起著中流砥柱的作用。為軟件架構(gòu)編寫文檔說明是極其重要的。您可以使用文檔說明,就某個(gè)正在發(fā)展的系統(tǒng)與參與者進(jìn)行交流。文檔說明對(duì)于使 新的團(tuán)隊(duì)成員迅速投入工作也是非常有用的,因?yàn)樾碌膱F(tuán)隊(duì)成員可以在實(shí)現(xiàn)解決方案時(shí)使用體系結(jié)構(gòu)透視圖作為上下文和邊界前提。 關(guān)于什么在性質(zhì)上是體系結(jié)構(gòu),什么在性質(zhì)上不是體系結(jié)構(gòu),以及應(yīng)該對(duì)系統(tǒng)的哪些方面做文檔說明,一直存在大量的混淆。體系結(jié)構(gòu)模板定義并標(biāo)準(zhǔn)化每種類型的構(gòu)件中的內(nèi)容,支持采用一致的方法來對(duì)軟件架構(gòu)編寫文檔說明。 在本文中,您了解了作為一門學(xué)科的軟件架構(gòu),并了解了對(duì)體系結(jié)構(gòu)的基本元素編寫文檔說明的重要性。您還閱讀了建議作為文檔說明最小集的體系結(jié)構(gòu)構(gòu)件的概述。請(qǐng)繼續(xù)關(guān)注本系列的其他文章,它們將詳述如何使用一組指導(dǎo)原則,以及如何對(duì)每個(gè)構(gòu)件編寫文檔說明。 學(xué)習(xí)
討論
|
聯(lián)系客服