軟件工程 設(shè)計(jì)基礎(chǔ)

2021-10-26 17:23 更新

軟件設(shè)計(jì)是將用戶需求轉(zhuǎn)化為某種合適形式的過程,有助于程序員進(jìn)行軟件編碼和實(shí)現(xiàn)。

為評估用戶需求,創(chuàng)建了 SRS(軟件需求規(guī)范)文檔,而對于編碼和實(shí)施,需要在軟件方面有更具體和詳細(xì)地需求。這個(gè)過程的輸出可以直接用于編程語言的實(shí)現(xiàn)。

軟件設(shè)計(jì)是 SDLC(軟件設(shè)計(jì)生命周期)的第一步,它將注意力從問題域轉(zhuǎn)移到解決方案域。它視圖指定如何滿足 SRS 中提到的要求。

軟件設(shè)計(jì)水平

軟件設(shè)計(jì)產(chǎn)生三個(gè)層面的結(jié)果:

  • 架構(gòu)設(shè)計(jì):是系統(tǒng)的最高抽象版本。它將軟件標(biāo)識為具有許多相互交互的組件的系統(tǒng)。在這個(gè)層次上,設(shè)計(jì)者獲得了提議的解決方案域的想法。
  • 高層設(shè)計(jì):將架構(gòu)設(shè)計(jì)的“單實(shí)體-多組件”概念分解為子系統(tǒng)和模塊的抽象視圖,并描繪了它們之間的相互作用。高層設(shè)計(jì)側(cè)重于如何以模塊的形式實(shí)現(xiàn)系統(tǒng)及其所有組件。它識別每個(gè)子系統(tǒng)的模塊化結(jié)構(gòu)以及它們之間的關(guān)系和相互作用。
  • 詳細(xì)設(shè)計(jì):處理在前兩種設(shè)計(jì)中被視為系統(tǒng)及其子系統(tǒng)的實(shí)現(xiàn)部分。它更詳細(xì)地介紹了模塊及其實(shí)現(xiàn)。它定義了每個(gè)模塊的邏輯結(jié)構(gòu)及其與其他模塊通信的接口。

模塊化

模塊化是一種將軟件系統(tǒng)劃分為多個(gè)離散且獨(dú)立的模塊的技術(shù),這些模塊有望獨(dú)立執(zhí)行任務(wù)。這些模塊可以作為整個(gè)軟件的基本結(jié)構(gòu)。設(shè)計(jì)人員傾向于設(shè)計(jì)模塊,以便它們可以單獨(dú)和獨(dú)立地執(zhí)行或者編譯。

模塊化設(shè)計(jì)無意中遵循了“分而治之”的問題解決策略的規(guī)則,這是因?yàn)檐浖哪K化設(shè)計(jì)還有許多其他好處。

模塊化的優(yōu)勢:

  • 更小的元件更易于維護(hù)
  • 程序可以根據(jù)功能方面進(jìn)行劃分
  • 可以在程序中引入所需的抽象級別
  • 高內(nèi)聚的組件可以重復(fù)使用
  • 可以實(shí)現(xiàn)并發(fā)執(zhí)行
  • 從安全方面期望

并發(fā)

回到過去,所有軟件都應(yīng)該按順序執(zhí)行。通過順序執(zhí)行,我們的意思是編碼指令將一個(gè)接一個(gè)地執(zhí)行,這意味著在任何給定時(shí)間只有一部分程序被激活。比如說,一個(gè)軟件有多個(gè)模塊,那么在任何時(shí)候執(zhí)行時(shí)只能發(fā)現(xiàn)所有模塊中的一個(gè)是活動的。

在軟件設(shè)計(jì)中,并發(fā)是通過將軟件拆分為多個(gè)獨(dú)立地執(zhí)行單元(如模塊)并并行執(zhí)行來實(shí)現(xiàn)的。換句話說,并發(fā)為軟件提供了并行執(zhí)行多個(gè)代碼部分的能力。

程序員和設(shè)計(jì)師有必要識別那些可以并行執(zhí)行的模塊。

例如

文字處理器中的拼寫檢查功能是一個(gè)軟件模塊,它與文字處理器本身一起運(yùn)行。

耦合和內(nèi)聚

當(dāng)一個(gè)軟件程序被模塊化時(shí),它的任務(wù)根據(jù)一些特性被分成幾個(gè)模塊。眾所周知,模塊是為了完成某些任務(wù)而組合在一起的指令集。不過,它們被視為單個(gè)實(shí)體,但可以相互引用以協(xié)同工作。有一些方法可以用衡量模塊設(shè)計(jì)的質(zhì)量以及它們之間的交互。這些措施稱為耦合和內(nèi)聚。

內(nèi)聚

內(nèi)聚力是一種度量,用于定義模塊元素內(nèi)的內(nèi)部依賴性程度。內(nèi)距離越大,程序設(shè)計(jì)就越好。

有七種類型的內(nèi)聚:

  • 巧合內(nèi)聚:它是無計(jì)劃的和隨機(jī)的內(nèi)聚,這可能是為了模塊化而將程序分解成更小的模塊的結(jié)果。因?yàn)樗怯?jì)劃外的,它可能會給程序員帶來混亂并且通常不被接受。
  • 邏輯內(nèi)聚:當(dāng)邏輯上分類的元素被放在一個(gè)模塊中時(shí),它被稱為邏輯內(nèi)聚。
  • 時(shí)間內(nèi)聚:當(dāng)模塊的元素被組織成在相似的時(shí)間點(diǎn)進(jìn)行處理時(shí),它被稱為時(shí)間內(nèi)聚。
  • 過程內(nèi)聚:當(dāng)模塊的元素組合在一起時(shí),它們按順序執(zhí)行以執(zhí)行任務(wù),稱為過程內(nèi)聚。
  • 通信內(nèi)聚:當(dāng)模塊的元素組合在一起,按順序執(zhí)行并處理相同的數(shù)據(jù)(信息)時(shí),稱為通信內(nèi)聚。
  • 順序內(nèi)聚:當(dāng)模塊的元素因?yàn)橐粋€(gè)元素的輸出作為另一個(gè)元素的輸入而被分組時(shí),它被稱為順序內(nèi)聚。
  • 功能內(nèi)聚:被認(rèn)為是最高的內(nèi)聚力,值得期待。功能內(nèi)聚中的模塊元素被分組,因?yàn)樗鼈兌加兄趩蝹€(gè)定義良好的功能。它也可以重復(fù)使用。

耦合

耦合是一種定義程序模塊之間相互依賴程度的度量。它告訴模塊在什么級別相互干擾和交互。耦合度越低,程序越好。

有五個(gè)級別的耦合:

  • 內(nèi)容耦合:當(dāng)一個(gè)模塊可以直接訪問或修改或引用另一個(gè)模塊的內(nèi)容時(shí),稱為內(nèi)容耦合。
  • 公共耦合:當(dāng)多個(gè)模塊對某些全局?jǐn)?shù)據(jù)具有讀寫訪問權(quán)限時(shí),稱為公共或者全局耦合。
  • 控制耦合:如果其中一個(gè)模塊決定另一個(gè)模塊的功能或改變其執(zhí)行流程,則兩個(gè)模塊稱為控制耦合。
  • 戳耦合:當(dāng)多個(gè)模塊共享公共數(shù)據(jù)結(jié)構(gòu)并在其中的不同部分工作時(shí),稱為戳耦合。
  • 數(shù)據(jù)耦合:是指兩個(gè)模塊通過傳遞數(shù)據(jù)(作為參數(shù))進(jìn)行交互。如果模塊將數(shù)據(jù)結(jié)構(gòu)作為參數(shù)傳遞,則接收模塊應(yīng)使用其所有組件。

理想情況下,沒有耦合被認(rèn)為是最好的。

設(shè)計(jì)驗(yàn)證

軟件設(shè)計(jì)過程的輸出是設(shè)計(jì)文檔、偽代碼、詳細(xì)地邏輯圖、流程圖以及所有功能或非功能需求的詳細(xì)描述。

下一階段,即軟件的實(shí)施,取決于上述所有輸出。

在進(jìn)入下一階段之前,有必要驗(yàn)證輸出。任何錯誤發(fā)現(xiàn)越早越好,否則在產(chǎn)品測試之前可能不會被發(fā)現(xiàn)。如果設(shè)計(jì)階段的輸出采用正式的符號形式,則應(yīng)使用其相關(guān)的驗(yàn)證工具,否則可使用徹底的設(shè)計(jì)審查進(jìn)行驗(yàn)證和確認(rèn)。

通過結(jié)構(gòu)化的驗(yàn)證方法,審查者可以發(fā)現(xiàn)由于忽略某些條件而可能導(dǎo)致的缺陷。良好的設(shè)計(jì)審查對于良好的軟件設(shè)計(jì)、準(zhǔn)確性和質(zhì)量非常重要。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號