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