從八個維度解釋軟體構造的物件是什麼,並簡單介紹在每個維度的刻畫技術。
不同視角間的轉換
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(參考軟體工程課程內容)
【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】- 快照圖:著眼於目標計算機記憶體中的變數級執行狀態,體現某時刻記憶體中變數的情況。
- 記憶體轉儲(memory dump):常發生在異常退出時,把記憶體中資訊寫到檔案中(常用來除錯)【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
軟體構造第一章
軟體構造第一章 1 構建時,時刻和 級檢視 源 如何通過基本程式塊 如函式,類,方法,介面等 以及它們之間的依賴關係進行邏輯組織。三種相互關聯的形式 面向詞彙的源 面向語法的程式結構 例如,抽象語法樹 ast 面向語義的程式結構 例如,類圖 1.1軟體構建的多維檢視 源 軟體開發中最重要的資產 基於...
sparql第一章第一節
第2章對rdf提供了一些背景,語義網,並在sparql 適合,但在進入之前,讓我們從動手實踐開始。執行sparql查詢,把背景部分過於理論。但首先,sparql是什麼?這個名字是乙個遞迴的縮寫和sparql協議 rdf查詢語言,它是由w3c的一組規範描述的。w3c或全球資訊網聯盟是同乙個標準機構。負...
軟體構造第一章總結
軟體構造的實質 影響軟體質量的因素 從階段層面看 構造vs執行 build vs run 從動態層面看 時刻vs週期 moment vs period 從級別層面看 vs模組化 code vs component build time,moment and code level view 關注詞彙層...