日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

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

軟件工程(三)軟件設(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 視圖可以供我們參考。

我們來看看這五個視圖。

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

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

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

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

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

軟件設(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)聚:內(nèi)聚表示模塊內(nèi)部各成分之間的聯(lián)系程度,一個好的內(nèi)聚模塊應(yīng)當恰好做目標單一的一件事。

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

從它們兩個的定義可以看出,高內(nèi)聚低耦合的目的就是為了讓模塊能夠更加獨立,這樣我們就可以在不同的場景中不斷地復(fù)用已有的模塊,從而節(jié)省開發(fā)資源提高開發(fā)效率。關(guān)于內(nèi)聚和耦合還有下面這張圖,表示的是各種內(nèi)聚和耦合的類型,了解一下就好,可以記每個類型的第一個字,比如耦合有 “非數(shù)標控外功內(nèi)” ,而內(nèi)聚有 “巧邏時過通信功” 。

綜合來說,SD 結(jié)構(gòu)化設(shè)計有三個最主要的特點:

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

  2. 信息隱蔽。

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

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

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

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

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

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

關(guān)于 OO 的概念其實就是這些,包括之前我們講過 類、對象、屬性、行為(方法) 這些的概念。而在 OOD 也就是面向?qū)ο蟮脑O(shè)計中,我們更關(guān)注的是一些面向?qū)ο蟮脑O(shè)計原則。這些原則也會影響到我們后面緊接著要講到的設(shè)計模式。因此,這一塊是一個比較重要的地方(對于開發(fā)來說)。如果你不是開發(fā)人員,了解一下就好。因為后面要推我的 PHP 設(shè)計模式系列的課程呀!

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

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

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

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

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

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

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

設(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ù)式模型。

首先是階段式模型,這個相對來說重要一些,可以記憶一下。主要也是記憶那四個成熟度等級就可以了,后面的過程域就不要求啦。

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

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

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

可以看出,這兩個表格的過程域其實都是一樣的,只是一個是按階段劃分的,一個是按功能劃分的。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)資料》

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多