軟件體系結(jié)構(gòu)基礎(chǔ)_第1頁
軟件體系結(jié)構(gòu)基礎(chǔ)_第2頁
軟件體系結(jié)構(gòu)基礎(chǔ)_第3頁
軟件體系結(jié)構(gòu)基礎(chǔ)_第4頁
軟件體系結(jié)構(gòu)基礎(chǔ)_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1軟件體系結(jié)構(gòu)基礎(chǔ)《軟件設(shè)計(jì)與體系結(jié)構(gòu)》主要內(nèi)容1.1為什么需要“軟件體系結(jié)構(gòu)”?——從“軟件危機(jī)”談起1.2什么是軟件體系結(jié)構(gòu)——起源于建筑學(xué)的“體系結(jié)構(gòu)”1.3軟件體系結(jié)構(gòu)的目標(biāo)與作用1.4軟件體系結(jié)構(gòu)的發(fā)展與演化1.5軟件體系結(jié)構(gòu)研究的內(nèi)容1.6軟件體系結(jié)構(gòu)的設(shè)計(jì)原則1.1為什么需要“軟件體系結(jié)構(gòu)”為什么需要“軟件體系結(jié)構(gòu)”最早指出SA的重要性的是大師EdsgerDijkstra(1930-2002)

“..thelargertheproject,themoreessentialthestructuring!”(1968)

為什么需要“軟件體系結(jié)構(gòu)”軟件體系結(jié)構(gòu)的產(chǎn)生軟件體系結(jié)構(gòu)日益作為軟件工程師所遵循的重要原則浮現(xiàn)(emerging)與傳統(tǒng)的學(xué)科不同,作為軟件系統(tǒng)的新概念,它并非成型的、有精確定義的而是在軟件工程師們面對日益復(fù)雜的系統(tǒng)的設(shè)計(jì)與構(gòu)造問題尋求理解軟件系統(tǒng)的更好的方法尋求構(gòu)造更大更復(fù)雜的軟件系統(tǒng)的更有效的方法的過程中,作為設(shè)計(jì)抽象的自然演化而出現(xiàn)的。程序=?程序=算法+數(shù)據(jù)結(jié)構(gòu)(1960’s)程序=子程序+子程序(1970’s)對象=算法+數(shù)據(jù)結(jié)構(gòu)

程序=對象+對象(1980’s)程序=組件+連接件(1990’s)系統(tǒng)=服務(wù)+服務(wù)總線(2000’s)軟件規(guī)模大到什么程度某大型ERP軟件軟件功能模塊>1000個(gè)數(shù)據(jù)表>1000張軟件用戶>1000人并發(fā)用戶>50人Windows操作系統(tǒng)代碼量Windows95:1500萬行Windows98:1800萬行WindowsXP:3500萬行WindowsVista:5000萬行天貓2014.11.11的交易情況軟件規(guī)模大到什么程度QQ在線人數(shù)軟件規(guī)模大到什么程度為什么需要軟件體系結(jié)構(gòu)

隨著社會(huì)的巨大進(jìn)步,計(jì)算機(jī)系統(tǒng)的整體發(fā)展,新技術(shù)的不斷涌現(xiàn),使計(jì)算機(jī)應(yīng)用的需求迅速增加。而軟件費(fèi)用的增加,高可靠性能下降,維護(hù)工作量增大,出現(xiàn)了嚴(yán)重的“軟件危機(jī)”。軟件危機(jī)已經(jīng)持續(xù)了三十多年,表現(xiàn)為:軟件的產(chǎn)品質(zhì)量難以保障軟件的開發(fā)效率難以提高軟件危機(jī)隨著計(jì)算機(jī)應(yīng)用的逐漸擴(kuò)大,軟件需求量逐漸增加,規(guī)模也日益增長,軟件規(guī)模的快速增長,也帶來了軟件的復(fù)雜程度的增加和程序代碼的劇增。即使是富有經(jīng)驗(yàn)的程序員,也難免會(huì)對較大軟件的程序代碼顧此失彼。其結(jié)果是軟件開發(fā)的費(fèi)用經(jīng)常超支,而且常常延長軟件的開發(fā)時(shí)間。軟件生產(chǎn)的重點(diǎn)在于開發(fā)和維護(hù),對于這些在軟件開發(fā)和維護(hù)過程中遇到的一系列嚴(yán)重問題,計(jì)算機(jī)科學(xué)家稱之為“軟件危機(jī)”。軟件危機(jī)”于1968年在原西德Garmish召開的國際軟件工程會(huì)議上首次提出軟件危機(jī)是指計(jì)算機(jī)軟件開發(fā)和維護(hù)過程中所遇到的一系列嚴(yán)重問題。(1)能否滿足對軟件日益增長的需求?(2)能否維護(hù)數(shù)量日益增長的現(xiàn)有軟件?開發(fā)時(shí)間呈指數(shù)上升、進(jìn)度難以控制;智力開發(fā),無法“三班倒”;用戶需求變化;增加人員也未必能加快速度;軟件質(zhì)量不可靠;軟件系統(tǒng)復(fù)雜度增加;缺乏工程化思想指導(dǎo);軟件體系結(jié)構(gòu)發(fā)展相對滯后;軟件危機(jī)表現(xiàn)用戶不滿意;開發(fā)初期用戶需求表達(dá)不清;與用戶溝通有問題;軟件維護(hù)困難;早期設(shè)計(jì)存在問題;缺乏系統(tǒng)的文檔資料;維護(hù)費(fèi)用已高達(dá)40~75%。軟件危機(jī)表現(xiàn)年代19551970197519801985軟件成本比重18%60%72%80%85%軟件危機(jī)表現(xiàn)軟件成本日益增長;硬件越來越便宜,軟件越來越復(fù)雜;1950’s10~20%1960’s50%;美國空軍計(jì)算系統(tǒng):軟件危機(jī)表現(xiàn)軟件質(zhì)量問題對經(jīng)濟(jì)的影響:美國NIST(國家商業(yè)標(biāo)準(zhǔn)和技術(shù))報(bào)告,“由于軟件bug的普遍存在,使美國經(jīng)濟(jì)每年損失$590.5億美元”,而Standish組織的數(shù)據(jù)是每年2000億美元改進(jìn)軟件質(zhì)量已經(jīng)成為取得高投資回報(bào)率的直接途徑,質(zhì)量低的公司只會(huì)被遺忘軟件質(zhì)量問題對生命安全的威脅:1963年,美國金星探測火箭飛行失敗,造成經(jīng)濟(jì)損失達(dá)一千萬美元,因?yàn)榭刂瞥绦蛑械囊粋€(gè)極小的錯(cuò)誤,即將一逗號(hào)誤寫為一小數(shù)點(diǎn)!由于著陸系統(tǒng)的高度報(bào)警程序問題部分導(dǎo)致了1997年發(fā)生在關(guān)島的韓國客機(jī)空難,228人遇難。1996年,歐洲耗資高達(dá)7億美元的Ariane5火箭發(fā)射后解體爆炸,究其原因是慣性參考系統(tǒng)中的一個(gè)軟件設(shè)計(jì)錯(cuò)誤,并由于認(rèn)為這個(gè)軟件不會(huì)發(fā)生錯(cuò)誤而缺乏充分的測試。......軟件規(guī)模越來越大;隨著軟件應(yīng)用范圍的增廣,軟件規(guī)模愈來愈大。大型軟件項(xiàng)目需要組織一定的人力共同完成,而多數(shù)管理人員缺乏開發(fā)大型軟件系統(tǒng)的經(jīng)驗(yàn),而多數(shù)軟件開發(fā)人員又缺乏管理方面的經(jīng)驗(yàn)。各類人員的信息交流不及時(shí)、不準(zhǔn)確、有時(shí)還會(huì)產(chǎn)生誤解。軟件項(xiàng)目開發(fā)人員不能有效地、獨(dú)立自主地處理大型軟件的全部關(guān)系和各個(gè)分支,因此容易產(chǎn)生疏漏和錯(cuò)誤。軟件危機(jī)的原因軟件復(fù)雜程度越來越高;軟件不僅僅是在規(guī)模上快速地發(fā)展擴(kuò)大,而且其復(fù)雜性也急劇地增加。軟件產(chǎn)品的特殊性和人類智力的局限性,導(dǎo)致人們無力處理“復(fù)雜問題”。所謂“復(fù)雜問題”的概念是相對的,一旦人們采用先進(jìn)的組織形式、開發(fā)方法和工具提高了軟件開發(fā)效率和能力,新的、更大的、更復(fù)雜的問題又?jǐn)[在人們的面前。軟件危機(jī)的原因用戶需求不明確;在軟件開發(fā)完成之前,用戶不清楚軟件的具體需求;用戶對軟件需求的描述不精確,可能有遺漏、有二義性、甚至有錯(cuò)誤;在軟件開發(fā)過程中,用戶還提出修改軟件功能、界面、支撐環(huán)境等方面的要求;開發(fā)人員對用戶需求的理解與用戶本來愿望有差異。軟件危機(jī)的原因用戶需求不明確;軟件危機(jī)的原因缺乏正確的理論指導(dǎo);缺乏有力的方法學(xué)和工具方面的支持。由于軟件不同于大多數(shù)其他工業(yè)產(chǎn)品,其開發(fā)過程是復(fù)雜的邏輯思維過程,其產(chǎn)品極大程度地依賴于開發(fā)人員高度的智力投入。由于過分地依靠程序設(shè)計(jì)人員在軟件開發(fā)過程中的技巧和創(chuàng)造性,加劇軟件產(chǎn)品的個(gè)性化,也是發(fā)生軟件危機(jī)的一個(gè)重要原因。軟件危機(jī)的原因人們面臨的不光是技術(shù)問題,更重要的是管理問題。管理不善必然導(dǎo)致失敗。要提高軟件開發(fā)效率,提高軟件產(chǎn)品質(zhì)量,必須采用工程化的開發(fā)方法與工業(yè)化的生產(chǎn)技術(shù)。在技術(shù)上,應(yīng)該采用基于重用的軟件生產(chǎn)技術(shù);在管理上,應(yīng)該采用多維的工程管理模式。如何克服軟件危機(jī)如何克服軟件危機(jī)解決問題的想法更好的管理(Bettermanagement)出眾的團(tuán)隊(duì)組織(Differentteamorganizations)更好的語言和工具(Betterlanguages&tools)統(tǒng)一的編程規(guī)范(Uniformcodingconventions)工程化方法(Engineeringmethod)

必須意識(shí)到:“軟件”≠編程,它有自己的生命周期(lifecycle)。大型軟件系統(tǒng)的開發(fā)與其它工程項(xiàng)目如建造橋梁、制造飛機(jī)、輪船等的開發(fā)是同理的。因?yàn)椤S著軟件系統(tǒng)規(guī)模越來越大、越來越復(fù)雜用戶需求(功能性)越來越復(fù)雜,變化越來越頻繁;用戶對軟件質(zhì)量(非功能性)的要求也越來越高;如何將成百上千個(gè)功能組合起來,同時(shí)滿足用戶質(zhì)量需求,變得越來越困難。因?yàn)椤S著軟件系統(tǒng)規(guī)模越來越大、越來越復(fù)雜用戶需求(功能性)越來越復(fù)雜,變化越來越頻繁;用戶對軟件質(zhì)量(非功能性)的要求也越來越高;如何將成百上千個(gè)功能組合起來,同時(shí)滿足用戶質(zhì)量需求,變得越來越困難。此時(shí),整個(gè)系統(tǒng)的全局結(jié)構(gòu)和設(shè)計(jì)顯得越來越重要。很多質(zhì)量需求主要體現(xiàn)在體系結(jié)構(gòu)中而非功能模塊內(nèi)部的實(shí)現(xiàn)中。結(jié)論:對于大規(guī)模的復(fù)雜軟件系統(tǒng)來說,對系統(tǒng)全局結(jié)構(gòu)的設(shè)計(jì)比起對算法的選擇和數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)明顯重要得多。

研究背景我們需要的是軟件符合質(zhì)量要求??!軟件需求是進(jìn)行“質(zhì)量”度量的基礎(chǔ),與需求不符就是質(zhì)量不高。通常有一組“隱含需求(implicitrequirements)”是不被提及的(如對維護(hù)性的需求)。如果軟件符合了明確的需求卻沒有滿足隱含需求,軟件質(zhì)量仍然值得懷疑。性能Performance可用性Usability可靠性Availability可擴(kuò)展性Extensibility安全性Security功能性Functionality研究背景如果有什么東西可以在軟件開發(fā)之前用于描述軟件,并能進(jìn)行質(zhì)量分析,從而保證軟件質(zhì)量就好了~軟件體系結(jié)構(gòu)解決軟件危機(jī)告訴人們?nèi)绾卧O(shè)計(jì)軟件、開發(fā)軟件、管理軟件軟件工程方法/軟件體系結(jié)構(gòu)/軟件設(shè)計(jì)模式的合理應(yīng)用提高軟件產(chǎn)品的質(zhì)量!降低軟件開發(fā)的成本!

我們的目標(biāo)1.2

什么是“軟件體系結(jié)構(gòu)”軟件體系結(jié)構(gòu)的本意對于大規(guī)模的,分布的,需要協(xié)作的,需要交互的,需要監(jiān)測的,需要擴(kuò)展的,需要演化的復(fù)雜軟件系統(tǒng)的規(guī)劃。軟件體系結(jié)構(gòu)從字面上理解,軟件體系結(jié)構(gòu)=軟件的體系結(jié)構(gòu)SoftwareArchitecture(SA)=Software’sArchitecture(S’A)什么是“體系結(jié)構(gòu)”(Architecture)詞典的定義:Theartandscienceofdesigninganderectingbuildings(建筑學(xué):設(shè)計(jì)和建造建筑物的藝術(shù)與科學(xué));Astyleandmethodofdesignandconstruction(設(shè)計(jì)及構(gòu)造的方式和方法);Orderlyarrangementofparts;structure(部件的有序安排;結(jié)構(gòu));Theoveralldesignorstructureofacomputersystem,includingthehardwareandthesoftwarerequiredtorunit,especiallytheinternalstructureofthemicroprocessor(計(jì)算機(jī)系統(tǒng)的總體設(shè)計(jì)或結(jié)構(gòu),包括其硬件和支持硬件運(yùn)行的軟件,尤其是微處理器內(nèi)部的結(jié)構(gòu))。起源于建筑學(xué)的“體系結(jié)構(gòu)”“體系結(jié)構(gòu)(Architecture)”一詞起源于建筑學(xué)如何使用基本的建筑模塊構(gòu)造一座完整的建筑?包含兩個(gè)因素:基本的建筑模塊:磚、瓦、灰、沙、石、預(yù)制梁、柱、屋面板…建筑模塊之間的粘接關(guān)系:如何把這些“磚、瓦、灰、沙、石、預(yù)制梁、柱、屋面板”有機(jī)的組合起來形成整體建筑?建筑設(shè)計(jì)原則堅(jiān)固實(shí)用美觀建筑設(shè)計(jì)不僅是一門科學(xué),而且是一項(xiàng)藝術(shù)!起源于建筑學(xué)的“體系結(jié)構(gòu)”如何克服軟件危機(jī)解決問題的想法更好的管理(Bettermanagement)出眾的團(tuán)隊(duì)組織(Differentteamorganizations)更好的語言和工具(Betterlanguages&tools)統(tǒng)一的編程規(guī)范(Uniformcodingconventions)工程化方法(Engineeringmethod)

必須意識(shí)到:“軟件”≠編程,它有自己的生命周期(lifecycle)。大型軟件系統(tǒng)的開發(fā)與其它工程項(xiàng)目如建造橋梁、制造飛機(jī)、輪船等的開發(fā)是同理的。軟件體系結(jié)構(gòu)起源結(jié)構(gòu)設(shè)計(jì)師:設(shè)計(jì)圖紙管理人員:施工計(jì)劃施工人員:建造建筑物軟件體系結(jié)構(gòu)思想來源于建筑業(yè)計(jì)算機(jī)硬件系統(tǒng)的“體系結(jié)構(gòu)”如何將設(shè)備組裝起來形成完整的計(jì)算機(jī)硬件系統(tǒng)?包含兩個(gè)因素:基本的硬件模塊:控制器、運(yùn)算器、內(nèi)存儲(chǔ)器、外存儲(chǔ)器、輸入設(shè)備、輸出設(shè)備、…硬件模塊之間的連接關(guān)系:總線計(jì)算機(jī)體系結(jié)構(gòu)的風(fēng)格:以存儲(chǔ)程序原理為基礎(chǔ)的馮·諾依曼結(jié)構(gòu)存儲(chǔ)系統(tǒng)的層次結(jié)構(gòu)并行處理機(jī)結(jié)構(gòu)流水線結(jié)構(gòu)多核CPU……業(yè)界中的軟件架構(gòu),定義歸結(jié)而言可分為:組成派和決策派兩大流派軟件架構(gòu)概念的分類軟件架構(gòu)是一組關(guān)于下述問題的重要決定,軟件系統(tǒng)的組織構(gòu)成系統(tǒng)的結(jié)構(gòu)化元素和它們接口的選擇這些模型元素之間的協(xié)作所描述的行為這些結(jié)構(gòu)化和行為元素的組裝,以形成更大的子系統(tǒng)指導(dǎo)這種組織(靜態(tài)和動(dòng)態(tài)元素,以及它們的接口、協(xié)作和組裝)的架構(gòu)風(fēng)格軟件架構(gòu)不僅關(guān)注結(jié)構(gòu)和行為,也關(guān)注使用、功能、性能、彈性、復(fù)用、可理解性、經(jīng)濟(jì)和技術(shù)約束與折衷、審美考慮——Booch、Rumbaugh和Jacobson,1999一個(gè)軟件系統(tǒng)的架構(gòu)定義了組成系統(tǒng)的計(jì)算構(gòu)件和構(gòu)件之間相互作用的關(guān)系軟件架構(gòu)層次的設(shè)計(jì)主要包括以下方面:

組成系統(tǒng)的構(gòu)件描述構(gòu)件之間的交互指導(dǎo)構(gòu)件交互的模式,以及施加在模式上的約束——Garlan和Shawn,1996

軟件架構(gòu)概念的分類決策派軟件架構(gòu)是在一些重要方面所作出的決策的集合關(guān)注架構(gòu)實(shí)踐中的主體——人,以人的決策為描述對象歸納了架構(gòu)決策的類型,指出架構(gòu)決策不僅包括關(guān)于軟件系統(tǒng)的組織、元素、子系統(tǒng)和架構(gòu)風(fēng)格等幾類決策,還包括關(guān)于眾多非功能需求的決策組成派MaryShaw:軟件系統(tǒng)的架構(gòu)將系統(tǒng)描述為計(jì)算組件及組件之間的交互“組成派”軟件架構(gòu)概念有如下兩個(gè)顯著特點(diǎn):關(guān)注架構(gòu)實(shí)踐中的客體——軟件,以軟件本身為描述對象分析了軟件的組成,即軟件由承擔(dān)不同計(jì)算任務(wù)的組件組成,這些組件通過相互交互完成更高層次的計(jì)算組成派Garlan和Shaw的定義架構(gòu)包括組件、連接件和約束三大要素。組件可以是一組代碼(例如程序模塊),也可以是獨(dú)立的程序(例如數(shù)據(jù)庫服務(wù)器)。連接件可以是過程調(diào)用、管道和消息等,用于表示組件之間的相互關(guān)系?!凹s束”一般為組件連接時(shí)的條件Perry和Wolf的定義軟件架構(gòu)是一組具有特定形式的架構(gòu)元素,這些元素分為三類:負(fù)責(zé)完成數(shù)據(jù)加工的處理元素、作為被加工信息的數(shù)據(jù)元素及用于把架構(gòu)的不同部分組合在一起的連接元素組成派(續(xù))Boehm的定義軟件架構(gòu)包括系統(tǒng)組件、連接件和約束的集合,反應(yīng)不同涉眾需求的集合,以及原理的集合。其中的原理,用于說明由組件、連接件和約束所定義的系統(tǒng)在實(shí)現(xiàn)時(shí),是如何滿足不同涉眾需求的IEEE的定義架構(gòu)是以組件、組件之間的關(guān)系、組件與環(huán)境之間的關(guān)系為內(nèi)容的某一系統(tǒng)的基本組織結(jié)構(gòu),以及指導(dǎo)上述內(nèi)容設(shè)計(jì)與演化的原理Bass(SEI)的定義某個(gè)軟件或計(jì)算機(jī)系統(tǒng)的軟件架構(gòu)是該系統(tǒng)的一個(gè)或多個(gè)結(jié)構(gòu),每個(gè)結(jié)構(gòu)均由軟件元素、這些元素的外部可見屬性、這些元素之間的關(guān)系組成觀點(diǎn)總結(jié)組成派的觀點(diǎn)更關(guān)注軟件,傾向于“組件+交互”的思想決策派的觀點(diǎn)更關(guān)注人,傾向于重大決策集合的思想,除了結(jié)構(gòu)和行為,還關(guān)注一些非功能的因素組成派和決策派軟件架構(gòu)概念并不矛盾,它們只不過是所站的角度不同罷了在具體的軟件架構(gòu)實(shí)踐中,總是同時(shí)體現(xiàn)著這兩“派”的架構(gòu)概念總結(jié)與強(qiáng)調(diào)將軟件架構(gòu)的概念總體上分為組成派和決策派,有利于我們理解軟件架構(gòu)概念的精髓兩個(gè)架構(gòu)概念流派雖然角度不同,但卻相輔相成。我們既應(yīng)從“架構(gòu)=組件+交互”的觀點(diǎn)中獲益,又應(yīng)運(yùn)用“架構(gòu)=重要決策集”的實(shí)踐經(jīng)驗(yàn),這一點(diǎn)對于軟件業(yè)界的實(shí)踐者(而不僅僅是理論研究者)尤其重要SA的定義(1)1994年(D.GarlanandM.Shaw)Structuralissuesincludetheorganizationofasystemasacompositionofcomponents;globalcontrolstructures;theprotocolsforcommunication,synchronization,anddataaccess;theassignmentoffunctionalitytodesignelements;thecompositionofdesignelements;physicaldistribution;scalingandperformance;dimensionsofevolution;andselectionamongdesignalternatives.SA={components,connectors,constrains}構(gòu)件(component)可以是一段代碼,如程序的模塊,也可以是一個(gè)獨(dú)立的程序,如數(shù)據(jù)庫的SQL服務(wù)器。連接器(connector)表示構(gòu)件之間的相互作用。一個(gè)軟件體系結(jié)構(gòu)還包括某些限制(constrain)。SA的定義(2)2000年(IEEE1471–2000)Architecture={component,connector,environment,principle}.thefundamentalorganizationofasystemembodiedinitscomponents,theirrelationshipstoeachother,andtotheenvironment,andtheprinciplesguidingitsdesignandevolution體系結(jié)構(gòu)是以構(gòu)件、構(gòu)件之間的關(guān)系、構(gòu)件與環(huán)境之間的關(guān)系為內(nèi)容的某一系統(tǒng)的基本組織結(jié)構(gòu),以及指導(dǎo)上述內(nèi)容設(shè)計(jì)與演化的原理。SA的定義(3)1992年(D.PerryandA.Wolf)SA={elements,form,rational}軟件體系結(jié)構(gòu)是由一組具有一定形式的元素(elements)構(gòu)成:這組元素分成3類:處理元素(processingelements)、數(shù)據(jù)元素(dataelements)和連接元素(connectingelements);處理元素負(fù)責(zé)對數(shù)據(jù)進(jìn)行加工,數(shù)據(jù)元素是被加工的信息,連接元素把體系結(jié)構(gòu)的不同部分組合連接起來。軟件體系結(jié)構(gòu)形式(form)是由專有特性(properties)和關(guān)系(relationship)組成。專有特性用于限制軟件體系結(jié)構(gòu)元素的選擇,關(guān)系用于限制軟件體系結(jié)構(gòu)元素組合的拓?fù)浣Y(jié)構(gòu)。在多個(gè)體系結(jié)構(gòu)方案中選擇合適的體系結(jié)構(gòu)方案往往基于一組準(zhǔn)則(rational)。SA的定義“Thereisnostandard,universally-accepteddefinitionoftheterm,forsoftwarearchitectureisafieldinitsinfancy,althoughitsrootsrundeepinsoftwareengineering.”很多人都試圖給”軟件架構(gòu)”下定義,而這些定義本身卻很難統(tǒng)一。

MartinFowler,《企業(yè)應(yīng)用架構(gòu)模式》“體系結(jié)構(gòu)”的共性共性:一組基本的構(gòu)成要素——構(gòu)件這些要素之間的連接關(guān)系——連接件這些要素連接之后形成的拓?fù)浣Y(jié)構(gòu)——物理分布作用于這些要素或連接關(guān)系上的限制條件——約束質(zhì)量——性能類推:軟件體系結(jié)構(gòu)軟件體系結(jié)構(gòu)(SoftwareArchitecture,SA):構(gòu)件:各種基本的軟件構(gòu)造模塊(函數(shù)、對象、模式等);連接件:將它們組合起來形成完整的軟件系統(tǒng);物理分布約束質(zhì)量歸納:SA的定義軟件體系結(jié)構(gòu)(SA):提供了一個(gè)結(jié)構(gòu)、行為和屬性的高級抽象從一個(gè)較高的層次來考慮組成系統(tǒng)的構(gòu)件、構(gòu)件之間的連接,以及由構(gòu)件與構(gòu)件交互形成的拓?fù)浣Y(jié)構(gòu)這些要素應(yīng)該滿足一定的限制,遵循一定的設(shè)計(jì)規(guī)則,能夠在一定的環(huán)境下進(jìn)行演化。反映系統(tǒng)開發(fā)中具有重要影響的設(shè)計(jì)決策,便于各種人員的交流,反映多種關(guān)注,據(jù)此開發(fā)的系統(tǒng)能完成系統(tǒng)既定的功能和性能需求。體系結(jié)構(gòu)=構(gòu)件+連接件+拓?fù)浣Y(jié)構(gòu)+約束+質(zhì)量Architecture=Components+Connectors+Topology+Constraints+Performance你已經(jīng)知道的SA分層(網(wǎng)絡(luò)協(xié)議,OS)客戶/服務(wù)器模式瀏覽器/服務(wù)器模式P2P......“軟件體系結(jié)構(gòu)”你早就知道...軟件體系結(jié)構(gòu)描述SA描述的現(xiàn)狀:非正式、抽象通常用在長期的實(shí)踐中非正式的浮現(xiàn)【即:沒有通過理論抽象與統(tǒng)一的形式化描述】的特殊模型來描述通常用線/框圖與一些文字描述線框體現(xiàn)出形象的結(jié)構(gòu),文字則描述符號(hào)的含義并提供在部件與其間的交互中所做的特定選擇的理由軟件體系結(jié)構(gòu)描述不規(guī)范的體系結(jié)構(gòu)描述Wehavechosenadistributed,object-orientedapproachtomanaginginformationTheeasiestwaytomakethecanonicalsequentialcomplierintoconcurrentcomplieristopipelinetheexecutionofthecompilerphasesovernumberofprocessors...基于自然語言的描述,有效但是不正式不嚴(yán)格。軟件體系結(jié)構(gòu)描述問題為什么為產(chǎn)生這樣非正式、抽象的描述?這樣的體系結(jié)構(gòu)的描述對軟件工程是否有用?軟件體系結(jié)構(gòu)描述【關(guān)于非正式】:對軟件系統(tǒng)的組織而言,經(jīng)過長期的積累,已有一系列習(xí)慣用語、模式、風(fēng)格,構(gòu)成共享的、語義豐富的(體系結(jié)構(gòu)用)詞匯例如,說一個(gè)系統(tǒng)是pipe-filter結(jié)構(gòu)的風(fēng)格,即該系統(tǒng)主要涉及流,且系統(tǒng)的功能可由構(gòu)成系統(tǒng)的過濾器構(gòu)成,系統(tǒng)延遲與吞吐量可相對直接的得到。即:該非正式的描述對軟件工程師具有相當(dāng)?shù)南到y(tǒng)結(jié)構(gòu)信息。軟件體系結(jié)構(gòu)描述【關(guān)于抽象】:雖然體系結(jié)構(gòu)相對于具體的實(shí)現(xiàn)與組件構(gòu)造的細(xì)節(jié)要抽象,但提供了更廣的、結(jié)構(gòu)層上理解系統(tǒng)層上的問題的自然的骨架這個(gè)骨架在系統(tǒng)沒有形成的時(shí)候就已經(jīng)在起作用例如:系統(tǒng)可能的演化軌跡、可擴(kuò)展性、通訊的模式、數(shù)據(jù)組織模式等通過對主要系統(tǒng)需求(此時(shí)主要是非功能需求,以及功能需求的共性構(gòu)件)對應(yīng)描述,展現(xiàn)系統(tǒng)滿足全部需求的能力軟件體系結(jié)構(gòu)描述總體現(xiàn)狀沒有完整的軟件體系結(jié)構(gòu)理論現(xiàn)有軟件體系結(jié)構(gòu)的基本內(nèi)容一些體系結(jié)構(gòu)描述的基本成分(需要描述什么內(nèi)容)一些體系結(jié)構(gòu)模式、風(fēng)格、習(xí)慣語等1.3軟件體系結(jié)構(gòu)的目標(biāo)與作用軟件體系結(jié)構(gòu)的目標(biāo)軟件體系結(jié)構(gòu)關(guān)注的是:如何將復(fù)雜的軟件系統(tǒng)劃分為模塊如何規(guī)范模塊的構(gòu)成,如何將這些模塊組織為完整的系統(tǒng),以及保證系統(tǒng)的質(zhì)量要求。主要目標(biāo):建立一個(gè)一致的系統(tǒng)及其視圖集,并表達(dá)為最終用戶和軟件設(shè)計(jì)者需要的結(jié)構(gòu)形式,支持用戶和設(shè)計(jì)者之間的交流與理解。分為兩方面:外向目標(biāo):建立滿足最終用戶要求的系統(tǒng)需求;內(nèi)向目標(biāo):建立滿足系統(tǒng)設(shè)計(jì)者需要以及易于系統(tǒng)實(shí)現(xiàn)、維護(hù)和擴(kuò)展的系統(tǒng)構(gòu)件構(gòu)成。SA的作用交流的手段:

Itisavehicleforcommunicationamongstakeholders.在軟件設(shè)計(jì)者、最終用戶之間方便的交流;可傳遞的、可復(fù)用的模型:Itisareusable,transferableabstractionofasystem.可重復(fù)利用的、可轉(zhuǎn)移的系統(tǒng)抽象).canbeappliedtoothersystemsexhibitingsimilarrequirements(用到其它的項(xiàng)目)canpromotelarge-scalereuseandsoftwareproductlines(提高大規(guī)模重復(fù)利用率)關(guān)鍵決策的體現(xiàn)

Itistherepresentationoftheearliestdesigndecisionsthathasthemostsignificantinfluenceonsystemqualities.Itshowsthetradeoffs(折衷)betweenperformanceandsecurity,betweenmaintainabilityandreliability,andbetweenthecostofthecurrentdevelopmenteffortandthecostoffuturedevelopmentsinthearchitecture.SA的重要意義SA是軟件開發(fā)過程初期的產(chǎn)品,在開發(fā)的早期階段就考慮系統(tǒng)的正確設(shè)計(jì)與方案選擇,為以后開發(fā)、測試、維護(hù)各個(gè)階段提供了保證;與其他后期的設(shè)計(jì)活動(dòng)相比,SA設(shè)計(jì)的成本和代價(jià)要低得多;正確有效的SA設(shè)計(jì)會(huì)給軟件開發(fā)帶來極大的便利;在大型軟件系統(tǒng)中,質(zhì)量屬性更多的是由系統(tǒng)結(jié)構(gòu)和功能劃分來實(shí)現(xiàn)的,而不再僅僅依靠所選擇的算法或數(shù)據(jù)結(jié)構(gòu)。SA在軟件生命周期中的作用項(xiàng)目規(guī)劃需求分析軟件設(shè)計(jì)軟件實(shí)現(xiàn)測試與評審維護(hù)與升級考慮項(xiàng)目的規(guī)模、復(fù)雜度、可行性等;利用SA,支持用戶、項(xiàng)目負(fù)責(zé)人、系統(tǒng)架構(gòu)師、程序員、測試人員之間進(jìn)行交流和協(xié)商;從不同視角審查備選的SA,對得出的意見進(jìn)行綜合,找出合理的平衡方案;從用戶角度考慮未來的需求會(huì)發(fā)生什么變化,并使SA能夠提前支持這些變化;參考經(jīng)典SA風(fēng)格,設(shè)計(jì)系統(tǒng)體系結(jié)構(gòu)模型,推敲其存在的缺陷和替代方案,并進(jìn)行評估;進(jìn)而逐步細(xì)化SA,并對定型后的SA作文檔化工作;各開發(fā)團(tuán)隊(duì)按照SA規(guī)定的“構(gòu)件及其之間的相互關(guān)系”進(jìn)行開發(fā),保證最終得到的系統(tǒng)與最初的SA一致;根據(jù)SA的約束條件,對軟件的質(zhì)量屬性進(jìn)行測試。把SA文檔作為維護(hù)和升級的重要依據(jù)。與其他軟件設(shè)計(jì)活動(dòng)的比較起點(diǎn)模糊在用戶需求尚沒有明確定義、用戶對其所期望的系統(tǒng)功能、行為和性能尚未確定的情況下就要進(jìn)行SA設(shè)計(jì);——故而需要交流與反復(fù);高抽象層次SA分析處理的是高層次的系統(tǒng)構(gòu)件或子系統(tǒng)之間的關(guān)系,而非變量、函數(shù)等低層次的概念;分布決策來自用戶、架構(gòu)師、測試人員等多方面;貫穿全局SA設(shè)計(jì)活動(dòng)在項(xiàng)目開始時(shí)進(jìn)行,但其作用則貫穿整個(gè)項(xiàng)目周期,越往后越顯出重要性。1.4軟件體系結(jié)構(gòu)的發(fā)展與演化軟件體系結(jié)構(gòu)的演化史功能函數(shù)對象構(gòu)件框架設(shè)計(jì)模式服務(wù)面向過程的分析與設(shè)計(jì)面向?qū)ο蟮姆治雠c設(shè)計(jì)基于構(gòu)件的軟件開發(fā)面向服務(wù)的計(jì)算面向服務(wù)的體系結(jié)構(gòu)SOA軟件即服務(wù)SaaS細(xì)粒度粗粒度IT技術(shù)商務(wù)過程封閉開發(fā)個(gè)人企業(yè)內(nèi)企業(yè)間全球體系結(jié)構(gòu)風(fēng)格面向模式的體系結(jié)構(gòu)軟件體系結(jié)構(gòu)的發(fā)展與演化系統(tǒng)=算法+數(shù)據(jù)結(jié)構(gòu)(1960’s)系統(tǒng)=子程序+子程序(1970’s)系統(tǒng)=對象+對象(1980’s)系統(tǒng)=構(gòu)件+連接件(1990’s)系統(tǒng)=服務(wù)+服務(wù)總線(2000’s)簡單復(fù)雜系統(tǒng)規(guī)模與復(fù)雜度封閉開放系統(tǒng)開放度細(xì)粗模塊粒度模塊連接件關(guān)注層面軟件體系結(jié)構(gòu)的演化“無體系結(jié)構(gòu)”設(shè)計(jì)階段萌芽階段以匯編語言進(jìn)行小規(guī)模應(yīng)用程序開發(fā)為特征以描述系統(tǒng)的高層抽象結(jié)構(gòu)為中心,不關(guān)心具體的建模細(xì)節(jié),劃分了體系結(jié)構(gòu)模型與傳統(tǒng)軟件結(jié)構(gòu)的界限,該階段以Kruchten提出的“4+1”模型為標(biāo)志出現(xiàn)了從不同側(cè)面描述系統(tǒng)的結(jié)構(gòu)模型,以UML為典型代表。出現(xiàn)了程序結(jié)構(gòu)設(shè)計(jì)主題,以控制流圖和數(shù)據(jù)流圖構(gòu)成軟件結(jié)構(gòu)為特征高級階段初期階段1.5體系結(jié)構(gòu)研究

的內(nèi)容從建筑體系結(jié)構(gòu)看起基本的建筑單元都有哪些?有哪些實(shí)用、美觀、強(qiáng)度、造價(jià)合理、可復(fù)用的大粒度建筑單元,使建造出來的建筑更能滿足用戶的需求?建筑模塊怎樣搭配才合理?有哪些典型的建筑風(fēng)格?每種典型建筑(醫(yī)院、工廠、旅館)的典型結(jié)構(gòu)是什么樣子?需要什么樣的構(gòu)件?如何繪制建筑體系結(jié)構(gòu)的圖紙?如何根據(jù)圖紙進(jìn)行質(zhì)量評估?如何快速節(jié)省的將圖紙變?yōu)閷?shí)物(即施工過程)?建筑完成之后,如何對其進(jìn)行恰當(dāng)程度的修改?重要模塊有了更改后,如何保證整棟建筑質(zhì)量不受影響?軟件體系結(jié)構(gòu)要解決的問題軟件的基本構(gòu)造單元是什么?這些構(gòu)造單元之間如何連接?最終形成何種樣式的拓?fù)浣Y(jié)構(gòu)?每個(gè)典型應(yīng)用領(lǐng)域(例如CAD、ERP)的典型體系結(jié)構(gòu)是什么樣子?如何進(jìn)行軟件體系結(jié)構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)?如果對已經(jīng)存在的軟件體系結(jié)構(gòu)進(jìn)行修改?使用何種工具來支持軟件體系結(jié)構(gòu)的設(shè)計(jì)?如何對軟件的體系結(jié)構(gòu)進(jìn)行描述,并據(jù)此進(jìn)行分析和驗(yàn)證?軟件體系結(jié)構(gòu)研究的內(nèi)容當(dāng)前,軟件體系結(jié)構(gòu)已經(jīng)成為軟件工程研究者和實(shí)踐者的一個(gè)重要研究領(lǐng)域,主要包括以下幾個(gè)方面:軟件體系結(jié)構(gòu)的建模與表示軟件體系結(jié)構(gòu)風(fēng)格的研究體系結(jié)構(gòu)描述語言(ArchtecturalDescriptionLanguage,ADL)軟件體系結(jié)構(gòu)的評價(jià)方法軟件產(chǎn)品線及特定領(lǐng)域軟件框架的研究......1.6軟件體系結(jié)構(gòu)的設(shè)計(jì)原則分解人們面對復(fù)雜性有一個(gè)常見的做法:即分而治之,將大問題分解為多個(gè)小問題,將復(fù)雜問題分解為多個(gè)簡單問題。抽象更高層次來講,人們處理復(fù)雜性有一個(gè)通用的技術(shù),即抽象。由于不能掌握全部的復(fù)雜對象,我們選擇忽視它的非本質(zhì)細(xì)節(jié),而去處理泛化和理想化了的對象模型。示例:如何解決復(fù)雜性?在多年的軟件開發(fā)實(shí)踐中,對軟件體系結(jié)構(gòu)的設(shè)計(jì)總結(jié)出一些帶有普遍性的原則,這些原則和策略獨(dú)立于具體的軟件開發(fā)方法,一直被廣泛地運(yùn)用著。抽象封裝(信息隱藏)模塊化

(分而治之)關(guān)注點(diǎn)分離耦合和內(nèi)聚充分性、完備性和簡單性策略和實(shí)現(xiàn)的分離接口和實(shí)現(xiàn)的分離層次性軟件體系結(jié)構(gòu)的設(shè)計(jì)原則抽象是人們用來處理復(fù)雜問題的基本原理之一。抽象有多種形式,如數(shù)據(jù)抽象、對象抽象、實(shí)體抽象、行為抽象、過程抽象等。數(shù)據(jù)、實(shí)體的抽象使得軟件操作的對象和參數(shù)針對邏輯結(jié)構(gòu),而非存儲(chǔ)結(jié)構(gòu)。行為、過程的抽象使得操作的指派是依據(jù)標(biāo)識(shí)而非地址,由此產(chǎn)生了操作的接口和動(dòng)態(tài)約束描述。在處理系統(tǒng)復(fù)雜性方面,抽象起到了重要的作用,減少構(gòu)件耦合、接口與實(shí)現(xiàn)的分離等都得益于抽象。抽象在面向?qū)ο蟪绦蛟O(shè)計(jì)當(dāng)中,封裝是一種重要的機(jī)制。所謂對象的概念就是屬性(數(shù)據(jù))及其操作(行為)的封裝體。封裝的機(jī)制并不局限于面向?qū)ο箢I(lǐng)域,在結(jié)構(gòu)化程序設(shè)計(jì)中封裝在函數(shù)和子程序當(dāng)中也得到了體現(xiàn)。封裝有利于提高抽象的層次,有利于結(jié)枸和實(shí)現(xiàn)的分離,最終提高了軟件的可維護(hù)性、可復(fù)用性和可靠性。封裝信息隱藏是軟件工程的最基本和最重要的原理之一。信息隱藏對用戶隱藏了構(gòu)件的實(shí)現(xiàn)細(xì)節(jié),用來更好地處理系統(tǒng)的復(fù)雜性和減少各構(gòu)件之間的耦合。為了更好地應(yīng)用,用戶不需要知道的細(xì)節(jié)都應(yīng)該由構(gòu)件封裝起來。封裝原理經(jīng)常被用來作為實(shí)現(xiàn),信息隱藏的方法,信息隱藏也可以通過接口與實(shí)現(xiàn)分離的原理來實(shí)現(xiàn)。信息隱藏模塊化關(guān)心的是如何將一個(gè)軟件系統(tǒng)分

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論