【software construction】第一章 軟體構造的多維視角 - 描述軟體系統的三個維度 - 元素、關係和各種視角的模式 - 不同視角間的轉換 ...
第一章 軟體構造的多維視圖
Outline
-
描述軟體系統的三個維度
-
階段:build-time && run-time
-
-
動態:moment && period
-
級別:code && component
-
元素、關係和各種視角的模式
-
不同視角間的轉換
Notes
【軟體的構成要素】
- 軟體=演算法+數據結構
- 軟體=程式+數據+文檔(80年代)
- 軟體=Modules(Components)+Data/Control Flow 模塊(組件)+數據流/控制流
【軟體系統的組成】 Software system =
Programs(UI,演算法,utilities(實用工具 function),APIs,test cases)
+ Data(files,database) + Documents(SRS(需求規格聲明),SDD(設計規格聲明),user manuals) + Users(誰來使用) + Business Objective(為什麼使用它) + Social Environment(法規) + Technological Environement(如何部署) + Hardware / Network(硬體) (前三個是主要) 【軟體構造的多維視角】 1.階段:構建 || 運行 2.動態:時刻 || 周期 3.級別:代碼 || 組件
# Buildtime概述
想法 -> 需求 -> 設計 -> 代碼 -> 可安裝可執行的包
- 代碼是如何組建起來的?(依賴關係)
- 體系架構 源代碼如何組成文件
- 時間角度 源代碼在特定的時間什麼樣,隨著時間如何變化
【Code-level;Build-time;Moment】
三種相互關聯的形式
- 面向詞法 半結構化源代碼
- 面向語法 (AST抽象語法樹)半結構化的源代碼變成語法樹(編譯器能夠處理)
- 面向語義 UML(參考軟體工程課程內容)
關於詞法、語法、語義的更多內容
https://www.cnblogs.com/lightsong/p/6107310.html
【Code-level;Build-time;Period——Code Churn(代碼變化)】
- Churn Trends
- 代碼變化包括添加、修改、刪除
【Component-level ;Build-time;Moment】
- 源代碼如何組織成文件——通過詞典
- 文件被壓縮進package,邏輯上進入components(組件)and sub-systems(子系統)
- 鏈接技術(動態 / 靜態)
【類庫(Library)】
來源
- 操作系統自帶
- 語言自帶的SDK
- 第三方
- 自己編寫
鏈接到類庫
- 編譯器形成關於外部庫的鏈表,編譯器找到庫的目標文件,複製加到程式中
【Component-level ;Build-time;Period】
- 版本控制(Git、SVN)
- 版本演化圖(SCI)
- Software Configuration Item(軟體生命周期各個階段活動的產物,經審核後可稱為軟體配置項)
- version:major.minor.patch
- software evolution(軟體演化)
# Runtime概述
【運行時軟體的高級概念】
- 可執行程式:CPU能直接理解執行的指令序列(二進位文件)
- 庫文件:可復用的代碼,庫文件本身不能執行
【可執行程式的四種形式】
【本地機器碼】
- 載入記憶體——OS調用機器碼
- 優點:CPU直接執行,速度快;
- 缺點:可移植性差;
【完全解釋】
- Basic與UNIX中的shell
- 操作系統提供解析器,一邊解析,一邊運行
【自解碼】
- 源代碼編譯為自解碼,然後通過JVM變為機器碼
- 或自解碼通過解析器進行邊解析邊運行
- 優點:跨平臺
- 缺點:速度慢
【靜態鏈接】
- 類庫就像是特別的對象文件的集合
- 編譯前就需要知道方法對應的文件
- 構建時,從類庫中提取文件並複製到可執行文件中
【動態鏈接】
- 操作系統為應用程式提供了豐富的函數調用,這些函數調用都包含在動態鏈接庫中。在可執行文件裝載時或運行時,由操作系統的裝載程式載入庫。
- 優點:多個程式可以共用同一個副本,減少記憶體占用;打包方便,方便庫升級。
更多關於動態鏈接與靜態鏈接
【配置文件和數據文件】
- 程式調用操作系統,來請求將數據讀入記憶體; - configuration:保存程式的參數 - Data:保存程式中如點陣圖圖形圖像、數字化波形音頻等文件 【分散式程式】 - 多埠或者多線程 - 如:QQ通過客戶端訪問伺服器(client & server) - 健壯性要求很高 【Code level;Run-time;Moment】 - 快照圖:著眼於目標電腦記憶體中的變數級執行狀態,體現某時刻記憶體中變數的情況。
- 記憶體轉儲:常發生在異常退出時,把記憶體中信息寫到文件中(常用來調試)
【Code level;Run-time;Period】
- UML時序圖(類之間的段落關係)
- 執行跟蹤:根據跟蹤日誌里的信息進行調試或診斷軟體問題
【Component level;Run-time;Moment】
- UML部署圖:程式中的各個模塊在物理上如何分佈;表明客戶端、伺服器之間的關係。
【Component level;Run-time;Period】
- 事件日誌:每個事件有唯一編號
- 比較“執行跟蹤”和“事件日誌”
【Transformations between views】
- 從無到有:
- ADT/OOP
- 可理解性
- 從代碼變為組件:
- Design
- Build
- 構建階段到運行階段
- inatall