小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【信管1.9】軟件工程(三)軟件設(shè)計(jì)與過程管理

 硬核項(xiàng)目經(jīng)理 2022-10-31 發(fā)布于湖南

軟件工程(三)軟件設(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è)視圖。

  • 場景視圖:4個(gè)視圖的轉(zhuǎn)換規(guī)則,也相當(dāng)于是一個(gè)說明書??梢允褂?用例圖、活動(dòng)圖、狀態(tài)圖、交互圖 來表示。

  • 邏輯視圖:面向用戶的,主要是展示可以滿足的功能需求。當(dāng)使用面向?qū)ο蠓绞介_發(fā)時(shí),邏輯視圖表示的就是對象模型。可以使用 類圖、對象圖、活動(dòng)圖、狀態(tài)圖、交互圖 來表示。

  • 開發(fā)視圖:面向開發(fā)人員的,描述軟件在開發(fā)環(huán)境下的靜態(tài)組織,可以使用 類圖、組件圖 來表示。在它的下面還可以再細(xì)分為 過程視圖(并發(fā)問題)、組件視圖(實(shí)現(xiàn)問題)、部署視圖(分布問題) 三個(gè)視圖。

  • 處理視圖:主要面向系統(tǒng)分析師,描述系統(tǒng)的并發(fā)和同步方面的設(shè)計(jì)以及設(shè)計(jì)約束,可以用 類圖、活動(dòng)圖、交互圖、狀態(tài)圖 來表示。

  • 物理視圖:主要是部署運(yùn)維人員,描述軟件如何映射到硬件,反映系統(tǒng)在分布方面的設(shè)計(jì),可以用 部署圖、活動(dòng)圖、狀態(tài)圖、交互圖 來表示。

軟件設(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)聚,低耦合。

  • 高內(nèi)聚:內(nèi)聚表示模塊內(nèi)部各成分之間的聯(lián)系程度,一個(gè)好的內(nèi)聚模塊應(yīng)當(dāng)恰好做目標(biāo)單一的一件事。

  • 低耦合:耦合表示模塊之間的聯(lián)系的程度。低耦合或者說松散耦合就是表示模塊之間的聯(lián)系比較弱,一個(gè)模塊的變動(dòng)不會影響到另一個(gè)模塊或者只有很小的影響。

從它們兩個(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):

  1. 自頂向下,逐步求精。

  2. 信息隱蔽。

  3. 模塊獨(dú)立:高內(nèi)聚、低耦合。

面向?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ā)人員,所以還是簡單地講一下吧。

  • 封裝:就是編程語言中的類修飾符的主要功能,private 私有的只能類自己看,protected 受保護(hù)的只能類自己和繼承的子類看到,public 公共的,所有實(shí)例化的對象都可以看到。這里的看到的意思指的就是從對象的角度,也就是實(shí)例化之后的角度我們能夠獲取到類內(nèi)部的什么屬性和方法。封裝可以保護(hù)數(shù)據(jù)。

  • 繼承:之前講 UML 和 OOA 的時(shí)候已經(jīng)說過很多次啦。

  • 多態(tài):一個(gè)方法,可以通過不同的參數(shù)或者不同的返回值來產(chǎn)生不同的執(zhí)行結(jié)果,這就是多態(tài)。多態(tài)中有兩個(gè)重要的概念就是方法的 重寫 和 重載 。重寫的意思是子類重寫父類的方法,而重載則是在同一個(gè)類中通過不同的參數(shù)或返回值來重載同名的函數(shù)。

  • 抽象:客觀事物的抽象,一個(gè)事物一定有屬性和方法,我們需要把它抽象成一個(gè)類。第二篇文章中關(guān)于 面向?qū)ο箝_發(fā) 中就已經(jīng)講過這些內(nèi)容。

關(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ì)模式系列的課程呀!

  1. 單一職責(zé)原則:設(shè)計(jì)功能目的單一的類。一個(gè)類應(yīng)該只是一種具體事物的抽象,比如說動(dòng)物類不應(yīng)該有能發(fā)電生火之類的方法。

  2. 開放-封閉原則:對擴(kuò)展開放,對修改封閉。如何擴(kuò)展?繼承、接口、組合。修改則是指的類編寫完成后,應(yīng)該盡可能的不要再回來修改類內(nèi)部的內(nèi)容。

  3. 里氏(Liskov)替換原則:子類可以替換父類。其實(shí)就是在實(shí)例化的時(shí)候,用子類實(shí)例化和用父類實(shí)例化對于對象的調(diào)用來說沒有影響。

  4. 依賴倒置原則:要依賴于抽象,而不是具體的實(shí)現(xiàn)。用流行點(diǎn)的話說就是要針對接口編程,不要針對實(shí)現(xiàn)編程。

  5. 接口隔離原則:使用多個(gè)專門的接口比使用單一的總接口好。就是接口或方法的單一職責(zé)原則,接口要盡量小,不要讓一個(gè)接口或方法提供一大堆的功能。不過也不是一定要非常小非常細(xì)節(jié)才好,這里也是有一個(gè)度的,具體的把握還是要看業(yè)務(wù)情況以及開發(fā)人員的經(jīng)驗(yàn)。

  6. 組合重用原則:要盡量使用組合,而不是繼承關(guān)系達(dá)到重用目的。組合其實(shí)就是我們在 UML 中的 include ,而繼承是 extend 。組合更好的原因是,如果父類要變動(dòng),很多情況下,子類也需要跟著變動(dòng),這樣就很容易違背第 2 條原則,也就是開放封閉的原則。

  7. 迪米特法則(demeter)(最少知識法則):一個(gè)對象應(yīng)當(dāng)對其他對象有盡可能少的了解。這個(gè)原則和 SD 中的低耦合原則是一致的。為什么呢?知道的越少,依賴的越少,依賴越少,修改越少。

設(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è)成熟度等級就可以了,后面的過程域就不要求啦。

成熟度等級過程域
可管理級需求管理、項(xiàng)目計(jì)劃、配置管理、項(xiàng)目監(jiān)督與控制、供應(yīng)商合同管理、度量和分析、過程和產(chǎn)品質(zhì)量保證
已定義級需求開發(fā)、技術(shù)解決方案、產(chǎn)品集成、驗(yàn)證、確認(rèn)、組織級過程焦點(diǎn)、組織級過程定義、組織級培訓(xùn)、集成項(xiàng)目管理、風(fēng)險(xiǎn)管理、集成化的團(tuán)隊(duì)、決策分析和解決方案、組織級集成管理
量化管理級組織級過程性能、定量項(xiàng)目管理
優(yōu)化管理級組織級改革與實(shí)施、因果分析和解決方案

然后就是連續(xù)式模型的過程域分組,這個(gè)表格了解一下就好。

成熟度等級過程域
過程管理組織級過程焦點(diǎn)、組織級過程定義、組織級培訓(xùn)、組織級過程性能、組織改革與實(shí)施
項(xiàng)目管理項(xiàng)目計(jì)劃、項(xiàng)目監(jiān)督與控制、供應(yīng)商合同管理、集成項(xiàng)目管理、風(fēng)險(xiǎn)管理、集成化的團(tuán)隊(duì)、定量項(xiàng)目管理
工程需求管理、需求開發(fā)、技術(shù)解決方案、產(chǎn)品集成、驗(yàn)證、確認(rèn)
支持配置管理、度量和分析、過程和產(chǎn)品質(zhì)量保證、決策分析和解決方案、組織級集成環(huán)境、因果分析和解決方案

可以看出,這兩個(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)資料》

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多