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

下載本文檔

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

文檔簡介

1軟件體系結(jié)構(gòu)基礎《軟件設計與體系結(jié)構(gòu)》主要內(nèi)容1.1為什么需要“軟件體系結(jié)構(gòu)”?——從“軟件危機”談起1.2什么是軟件體系結(jié)構(gòu)——起源于建筑學的“體系結(jié)構(gòu)”1.3軟件體系結(jié)構(gòu)的目標與作用1.4軟件體系結(jié)構(gòu)的發(fā)展與演化1.5軟件體系結(jié)構(gòu)研究的內(nèi)容1.6軟件體系結(jié)構(gòu)的設計原則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)的學科不同,作為軟件系統(tǒng)的新概念,它并非成型的、有精確定義的而是在軟件工程師們面對日益復雜的系統(tǒng)的設計與構(gòu)造問題尋求理解軟件系統(tǒng)的更好的方法尋求構(gòu)造更大更復雜的軟件系統(tǒng)的更有效的方法的過程中,作為設計抽象的自然演化而出現(xiàn)的。程序=?程序=算法+數(shù)據(jù)結(jié)構(gòu)(1960’s)程序=子程序+子程序(1970’s)對象=算法+數(shù)據(jù)結(jié)構(gòu)

程序=對象+對象(1980’s)程序=組件+連接件(1990’s)系統(tǒng)=服務+服務總線(2000’s)軟件規(guī)模大到什么程度某大型ERP軟件軟件功能模塊>1000個數(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)

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

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

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

我們的目標1.2

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論