軟體構造(一)

2022-10-11 18:06:14 字數 3987 閱讀 1924

一、軟體構造多維度檢視

1.1

從三個維度看軟體系統的構成

按階段劃分:

build-time

(構造階段)和

run-time

(執行階段)

按動態劃分:

moment

(時刻)和

period

(時期)

按層次劃分:

code

(**層面)和

component

(元件,檔案層面)

二、軟體構造的階段劃分、各階段的構造活動

2.1. build-time

想法⇒需求⇒設計⇒**⇒可安裝並執行的包

code-level view

:**的邏輯組織(函式、類、方法、介面等)

component-level view

:**的物理組織(檔案、目錄、包、程式庫等)

moment view

:特定時刻的軟體形態

period view

:軟體形態隨時間的變化

1. build-time; moment; code-level

三種相互關聯的形式

面向詞彙、詞法、語義三個層面

2. build-time; period; code-level code churn

(**變化)

3. build-time; moment; component-level

源**如何組織成檔案——通過類庫 檔案被壓縮進

package

,邏輯上進入

components

(元件)

and sub-systems

(子系統)

鏈結技術(動態

/ 靜態)

library:作業系統提供的庫;程式語言提供的庫;第三方公司提供的庫;自己編寫的庫

build

時,需告訴

ide和

jvm在**尋找某些庫。

靜態鏈結

庫被拷貝進入**形成整體,執行的時候無需提供庫檔案。

靜態鏈結發生在構造階段。

4. build-time; period; component-level sci

配置項的更改

vcs

版本控制系統 各項軟體實體隨時間如何變化 軟體隨時間變化的版本 版本控制(通過

git,

svn等等)

2.2 run-time

程式被載入目標機器,開始執行。

code-level view

:邏輯實體在記憶體中的呈現方式

component-level view

:物理實體在物理硬體環境中的呈現方式

moment view

:在記憶體

/硬體環境中特定時刻的形態

period view

:硬體環境中的形態隨時間的變化

動態鏈結

庫檔案不會在

build

階段被加入可執行軟體,僅僅做出標記。 程式執行時,根據標記裝載庫至記憶體。 發布軟體時,記得將程式所依賴的所有動態庫都複製給使用者。 分布式程式需要多個執行程式,分別部署於多個計算機物理環境。 需要多埠或者多執行緒。

5. run-time; moment; code-level code snapshot

(**快照) 描述程式執行時記憶體裡變數層面的狀態,即某一時間點記憶體中物件及物件的值。

memory dump

(記憶體資訊轉儲) 常發生在異常退出時,把記憶體中資訊寫到檔案中(常用來除錯)。

6. run-time, period and code-level view uml

執行時圖,描述程式執行時間各個種類間的依賴關係。

execution tracing

(執行跟蹤) 用日誌方式記錄程式執行的呼叫次序。

7. run-time; moment; component-level uml

部署圖執行跟蹤:根據跟蹤日誌裡的資訊進行除錯或診斷軟體問題。

8. run-time; period; component-level

事件日誌(系統層面)

9. 相互聯絡

三、內部

/外部的質量指標

外部質量因素影響使用者

內部質量因素影響軟體本身和它的開發者

外部質量取決於內部質量

3.1 external quality factors

(外部質量因素)

1. correctness

(正確性) 按照預先定義的「規約」執行 正確性是至高無上的質量指標 每一層保證自己的正確性,同時假設其下層是正確的 測試和除錯:發現不正確、消除不正確 防禦式程式設計:在寫程式的時候就確保正確性 形式化方法:通過形式化驗證發現問題

2.robustness

(健壯性) 針對異常情況的處理 – 健壯性是對正確性的補充 – 正確性:軟體的行為要嚴格的符合規約中定義的行為 – 出現規約定義之外的情形的時候,軟體要做出恰當的反應 出現異常時不要「崩潰」 健壯性是主觀而非客觀 – 未被

specification

覆蓋的情況即為「異常情況」 – 所謂的「異常」,取決於

spec

的範疇3. extendibility

(可擴充套件性) 定義:對軟體的規約進行修改,是否足夠容易的程度。 規模越大,擴充套件起來越不容易。 目的是為了變化。 兩個準則(為了可擴充套件性):簡約主義設計,分離主義設計

4. reusability

(可復用性) 一次開發,多次使用 找到不同問題之間的共性

5. compatibility

(相容性) 不同的軟體系統之間相互可容易的整合 相容性很重要因為開發設計不在真空中,所以需要相互聯絡 方法:保持設計的同構性並標準化

6. efficiency

(效能) 效能包括很多內容,最常見的就是時間複雜度和空間複雜度。 效能毫無意義,除非有足夠的正確性。 – 對效能的關注要與其他質量屬性進行折中 – 過度的優化導致軟體不再適應變化和復用 過早優化是萬惡之源

7. portability

(可移植性) 軟體可方便的在不同的技術環境之間移植 硬體、作業系統中的移植

8. ease of use

(易用性) 容易學、安裝、操作、監控 給使用者提供詳細的指南

9. functionality

(功能性) 每增加一小點功能,都確保其他質量屬性不受到損失。 程式設計中一種不適宜的趨勢,即軟體開發者增加越來越多的功能,企圖跟上競爭,其結果是程式極為複雜、不靈活、占用過多的磁碟空間。

10. timeliness

(及時性) 當使用者需要的時候,要能及時地設計出來。

11. other qualities verifiability

(可驗證性)

integrity

(完整性)

repair ability

(可修復性)

economy

(經濟性)

3.2 internal quality factors

(內部質量因素)

source code related factors such as lines of code (loc), cyclomatic complexity

(圈複雜度)

, etc architecture-related factors such as coupling

(耦合度)

, cohesion

(內聚度)

, etc read ability

(可讀性)

understand ability

(可理解性)

clearness

(清晰性)

size

(大小)

3.3 trade-off between quality properties

(質量折中)

正確的軟體開發過程中,開發者應該將不同質量因素之間如何做出折中的設計決策和標準明確的寫下來。

雖然需要折中,但

「正確性」絕不能與其他質量因素折中。 最重要的幾個質量因素

軟體構造(一)

明顯感覺到實驗一次比一次難。本以為在編寫實驗二的時候就已經是物件導向程式設計了。編寫完p3後覺得自己已經可以完成許多任務了。結果又學了兩節課之後發現,p3編寫的可復用性很差,並不是通過介面之類來實現復用,而是只能完成圍棋和西洋棋兩種棋類遊戲。當然,這和之前上課沒有講到也有一定關係。這次實驗布置出來之...

軟體構造 複習筆記一

軟體構造 複習筆記一 內部質量指標 開發者 外部質量指標 使用者 其中,使用者高於開發者,外部指標高於內部指標 正確性 spec 健壯性 處理spec中沒有包含的情況,可以認作是對正確性的補充 健壯性是軟體系統對異常情況做出適當反應的能力,確保如果出現此類情況,系統不會導致災難性事件 它應生成適當的...

軟體構造課程

課程目標 在高階語言程式設計的基礎上,認識軟體構造的質量標準與目標,學習軟體 構造的基本過程,從而具備面向質量目標的複雜軟體構造方法與能力 深入學習抽象資料型別 adt 與物件導向程式設計 oop 初步掌握面向關鍵質量目標 可理解性 可維護性 可復用性 健壯性 時 空效能 的軟體構造基本技術 了解軟...