軟件工程(三)軟件設(shè)計與過程管理需求相關(guān)的內(nèi)容我們用了兩個篇幅去闡述,可見需求在軟件工程中是有多么重要的地位。不過這也和這個考試的情況有關(guān),畢竟還有很多不是做開發(fā)的同學(xué)也會來參加這個考試,所以在軟件工程這一大章節(jié)中,真正涉及軟件設(shè)計方面的內(nèi)容反而并不多,大家總算可以稍微放松一下了。那么,話不多說,我們馬上進入今天的學(xué)習(xí)吧。 軟件架構(gòu)設(shè)計其實軟件的架構(gòu)設(shè)計和開發(fā)語言有很大的關(guān)系,即使是跨語言的大型架構(gòu)方案,也會有不同語言框架的作用及結(jié)構(gòu)的展示。因此,這一塊的內(nèi)容其實還是非常偏技術(shù)向的,所以教材中也只是簡單的寫了一些理論風(fēng)格之類的內(nèi)容,并沒有詳細深入到代碼架構(gòu)方面的講解。 軟件架構(gòu)為軟件系統(tǒng)提供了一個結(jié)構(gòu)、行為和屬性的高級抽象,由構(gòu)件的描述、構(gòu)件的相互作用(連接件)、指導(dǎo)構(gòu)件集成的模式以及這些模式的約束組成。說白話就是描述軟件系統(tǒng)的子系統(tǒng)和組件,以及它們之間相互關(guān)系的過程。其實就是將滿足職責(zé)的需求分析到對應(yīng)的組件上。 Garlan 和 Shaw 對通用軟件風(fēng)格進行了分類,將軟件架構(gòu)分為 數(shù)據(jù)流風(fēng)格、調(diào)用/返回風(fēng)格、獨立構(gòu)件風(fēng)格、虛擬機風(fēng)格、倉庫風(fēng)格。架構(gòu)風(fēng)格反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語義特性,并指導(dǎo)如何將各個構(gòu)件有效地組織成一個完整的系統(tǒng)。 對于軟件架構(gòu)的評估來說,可以歸納為三類主要的評估方式,分別是基于調(diào)查問卷(或檢查表)的方式、基于場景的方式和基于度量的方式。其中,基于場景的方式最常用,主要的方式包括:架構(gòu)權(quán)衡分析法(ATAM)、軟件架構(gòu)分析法(SAAM)、成本效益法(CBAM)。在架構(gòu)評估中,一般采用刺激(stimulus)、環(huán)境(environment)和響應(yīng)(response)三方面來對場景進行描述。刺激是場景中解釋或描述項目干系人怎樣引發(fā)與系統(tǒng)的交互部分,環(huán)境描述的是刺激發(fā)生時的情況,響應(yīng)是指系統(tǒng)是如何通過架構(gòu)對刺激作出反應(yīng)的。 在這里我們需要了解到的一點就是架構(gòu)設(shè)計往往都是非常宏觀的,所以它的設(shè)計可能不會那么詳細。最終我們獲得的會是一個完整的架構(gòu)視圖。一個架構(gòu)視圖是對于從某一視角或某一點上看到的系統(tǒng)所做的簡化描述,描述中涵蓋了系統(tǒng)的某一特定方面,而省略了與此方面無關(guān)的實體。這里有一個 Philippe Kruchten 的 4+1 視圖可以供我們參考。 我們來看看這五個視圖。
軟件設(shè)計軟件設(shè)計是需求分析的延伸與拓展。需求分析解決的是“為什么”的問題,軟件設(shè)計則解決“怎么做”的問題。同時,軟件設(shè)計也是后續(xù)開發(fā)和實施的基礎(chǔ),合理的軟件設(shè)計方案可以保證系統(tǒng)的質(zhì)量,提高開發(fā)效率。從方法上來說,軟件設(shè)計目前主要就是兩種,一是 結(jié)構(gòu)化設(shè)計 ,二是 面向?qū)ο笤O(shè)計 。 結(jié)構(gòu)化設(shè)計 SD結(jié)構(gòu)化設(shè)計就是最傳統(tǒng)的面向過程的代碼編寫方式,現(xiàn)在其實已經(jīng)很少了,當然,如果你是做底層的 C 開發(fā)的那么就還是以面向過程為主的。結(jié)構(gòu)化設(shè)計是一個自頂向下、逐步求精和模塊化的過程。基本思想是將軟件設(shè)計成由相對獨立且具有單一功能組成的結(jié)構(gòu),分為概要設(shè)計和詳細設(shè)計兩個階段。 概要設(shè)計又稱總體結(jié)構(gòu)設(shè)計,主要是將系統(tǒng)的功能需求分配給軟件模塊,確定每個模塊的功能和調(diào)用關(guān)系,形成軟件的模塊結(jié)構(gòu)圖,即系統(tǒng)結(jié)構(gòu)圖。 在概要設(shè)計中,將系統(tǒng)開發(fā)的總?cè)蝿?wù)分解成許多基本的、具體的任務(wù),而為每個具體任務(wù)選擇適當?shù)募夹g(shù)手段和處理方法的過程稱為詳細設(shè)計。詳細設(shè)計是一個比較微觀的設(shè)計,在這里,會出現(xiàn)具體的算法、用戶界面、安全可靠性、輸入輸出等等方面的設(shè)計。 在 SD 中,需要遵循一個非常重要的基本原則:高內(nèi)聚,低耦合。
從它們兩個的定義可以看出,高內(nèi)聚低耦合的目的就是為了讓模塊能夠更加獨立,這樣我們就可以在不同的場景中不斷地復(fù)用已有的模塊,從而節(jié)省開發(fā)資源提高開發(fā)效率。關(guān)于內(nèi)聚和耦合還有下面這張圖,表示的是各種內(nèi)聚和耦合的類型,了解一下就好,可以記每個類型的第一個字,比如耦合有 “非數(shù)標控外功內(nèi)” ,而內(nèi)聚有 “巧邏時過通信功” 。 綜合來說,SD 結(jié)構(gòu)化設(shè)計有三個最主要的特點:
面向?qū)ο笤O(shè)計 OOD又見到 面向?qū)ο?這四個字了吧。聰明的你已經(jīng)馬上明白了,又是 類 和 對象 之間的那些東西唄。沒錯,面向?qū)ο笤O(shè)計 OOD 是建立在我們之前學(xué)過的 面向?qū)ο蠓治?OOA 的基礎(chǔ)之上的。在我們學(xué)習(xí)編程的時候,以及新手在面試的時候,經(jīng)常會接觸到一個概念,那就是面向?qū)ο蟮娜筇匦允鞘裁矗肯葎e著急看下一行,想想看! 一般我們講的 封裝、繼承、多態(tài) 就是 OO 的三大特性。不過教程中更詳細些,它把 OO 的基本思想解釋為 抽象、封裝和可擴展性 ,其中可擴展性主要通過繼承和多態(tài)來實現(xiàn)。這些東西我想應(yīng)該不再需要我多解釋了吧,不過畢竟學(xué)習(xí)我們這套課程的還是有非開發(fā)人員,所以還是簡單地講一下吧。
關(guān)于 OO 的概念其實就是這些,包括之前我們講過 類、對象、屬性、行為(方法) 這些的概念。而在 OOD 也就是面向?qū)ο蟮脑O(shè)計中,我們更關(guān)注的是一些面向?qū)ο蟮脑O(shè)計原則。這些原則也會影響到我們后面緊接著要講到的設(shè)計模式。因此,這一塊是一個比較重要的地方(對于開發(fā)來說)。如果你不是開發(fā)人員,了解一下就好。因為后面要推我的 PHP 設(shè)計模式系列的課程呀!
設(shè)計模式設(shè)計模式其實就是在特定的環(huán)境下,如果遇到了特定類型的問題,就可以采用一些他人已經(jīng)使用過的一些成功的解決方案。這些解決方案在積累匯總后,就形成了一系列的設(shè)計模式。這個東西吧,也是各位開發(fā)小伙伴在面試的時候會經(jīng)常遇到的問題。設(shè)計模式一般可以分為三類,分別是 創(chuàng)建型、結(jié)構(gòu)型 和 行為型。 創(chuàng)建型設(shè)計模式包括 工廠方法模式、抽象工廠模式、原型模式、單例模式和建造者模式。 結(jié)構(gòu)型設(shè)計模式包括 適配器模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式和代理模式。 行為型設(shè)計模式包括 職責(zé)鏈模式、命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態(tài)模式、策略模式、模板方法模式、訪問者模式。 關(guān)于這 23 個設(shè)計模式,相信一直跟著我一起學(xué)習(xí)的同學(xué)們一定不會陌生。【PHP設(shè)計模式系列】是我非常早期的文章了,視頻也早就有了,B站和公眾號都有,B站上也有合集,大家自己去找一下吧! 軟件工程的過程管理軟件過程是軟件生命周期中的一系列相關(guān)活動,即用于開發(fā)和維護軟件及相關(guān)產(chǎn)品的一系列活動。軟件產(chǎn)品的質(zhì)量取決于軟件過程,具有良好軟件過程的組織能夠開發(fā)出高質(zhì)量的軟件產(chǎn)品。 在軟件過程管理方面,最著名的就是 能力成熟度模型集成(Capability Maturity Model Integration,CMMI),它融合了多種模型,主要目的是消除不同模型之間的不一致和重復(fù),降低基于模型進行改進的成本。CMMI兩種模型,分別是階段式模型和連續(xù)式模型。 首先是階段式模型,這個相對來說重要一些,可以記憶一下。主要也是記憶那四個成熟度等級就可以了,后面的過程域就不要求啦。
然后就是連續(xù)式模型的過程域分組,這個表格了解一下就好。
可以看出,這兩個表格的過程域其實都是一樣的,只是一個是按階段劃分的,一個是按功能劃分的。CMMI 非常出名,有很多企業(yè)也會去考這個 CMMI 等級認證。目前國內(nèi)大部分擁有 CMMI 資格的公司都是 已定義級 或 量化管理級 的,優(yōu)化管理級的本身在全世界就非常少。有興趣的小伙伴可以再深入的研究一下。 總結(jié)今天的內(nèi)容,相對前兩篇來說并不是特別的重點,其中軟件架構(gòu)設(shè)計中的 4+1 視圖,軟件設(shè)計中 SD 的 高內(nèi)聚低耦合 ,OO 的設(shè)計原則 這幾個部分可以重點了解下。CMMI 的階段式模型也可以多了解一下,只需要記住那四個階段就好了。 下一篇,就是非常重要的軟件測試和質(zhì)量相關(guān)的內(nèi)容,另外在軟件工程的最后一篇文章中,我們還會補充一些軟件設(shè)計典型的架構(gòu)模式以及軟件復(fù)用、集成技術(shù)之類的相關(guān)介紹。 參考資料: 《信息系統(tǒng)項目管理師教程》 《某機構(gòu)培訓(xùn)資料》 |
|
來自: 硬核項目經(jīng)理 > 《待分類》