【软件构造】第一章 软件构造基础(1)
一.軟件構(gòu)建多維視圖
1. 什么是軟件
(1)構(gòu)成
·程序Program:UI, Algorithms, Utilities, APIs, test cases, etc
·數(shù)據(jù)Data:files, databases, etc
·文檔Documents:SRS需求規(guī)格說(shuō)明, SDD設(shè)計(jì)規(guī)格說(shuō)明, user manuals, etc
(2)考慮因素
·用戶(hù):誰(shuí)來(lái)使用
·商業(yè)目標(biāo):為何有用
·社會(huì)環(huán)境:應(yīng)遵循何種法則
·技術(shù)環(huán)境:如何實(shí)施
·硬件/網(wǎng)絡(luò):在何處運(yùn)行
2. 軟件構(gòu)造的多維視角
(1)描述維度
·階段:構(gòu)建 || 運(yùn)行
·動(dòng)態(tài):時(shí)刻 || 周期
·級(jí)別:代碼 || 組件
?
(2)構(gòu)建視角
A. 概述:想法 -> 需求 -> 設(shè)計(jì) -> 代碼 -> 可安裝可執(zhí)行的包
·代碼:源代碼由基本程序塊及其依賴(lài)關(guān)系進(jìn)行邏輯組織。
·組件:源代碼通過(guò)文件,目錄,包,庫(kù)及其依賴(lài)關(guān)系進(jìn)行物理組織。
·時(shí)刻:特定時(shí)間內(nèi)源代碼和組件的形式。
·時(shí)期:程序如何隨時(shí)間演變。
B.?代碼-時(shí)刻
·三種相互關(guān)聯(lián)的形式:
- 面向詞匯的源代碼
- 面向語(yǔ)法的程序結(jié)構(gòu):例如,抽象語(yǔ)法樹(shù)(AST)
- 面向語(yǔ)義的程序結(jié)構(gòu):例如,類(lèi)圖
C. 代碼-周期
·代碼變化:添加、修改、刪除從一個(gè)版本到另一個(gè)版本的文件
D. 組件-時(shí)刻
·源代碼被物理地組織成文件,進(jìn)一步按目錄進(jìn)行組織
·文件被封裝成包,并在邏輯上封裝組件和子系統(tǒng)
·可重用模塊以庫(kù)的形式存在。
·庫(kù):
- 來(lái)源:造作系統(tǒng)預(yù)安裝、語(yǔ)言JDK、互聯(lián)網(wǎng)下載、開(kāi)發(fā)人員自己發(fā)布
- 鏈接:提供庫(kù)列表 -> 找到所需函數(shù) -> 復(fù)制到可執(zhí)行程序中
·靜態(tài)鏈接:當(dāng)鏈接器工具確定需要某個(gè)函數(shù)時(shí),從庫(kù)中提取適當(dāng)?shù)膶?duì)象文件并將其復(fù)制到可執(zhí)行程序中,將可執(zhí)行程序加載到目標(biāo)機(jī)器上。
·UML部署圖
E. 組件-周期
·版本控制系統(tǒng)(VCS)
?
·演化圖(SCI或軟件的演變圖)
?
·版本控制:將唯一版本名稱(chēng)或唯一版本號(hào)分配給計(jì)算機(jī)軟件
·軟件演變:軟件維護(hù)中的更新過(guò)程
(3)運(yùn)行視角
A. 概述
·高級(jí)概念
- 可執(zhí)行程序:CPU執(zhí)行的機(jī)器可讀指令序列以及相關(guān)的數(shù)據(jù)值,已完全編譯,可加載到計(jì)算機(jī)的內(nèi)存中執(zhí)行。
- 庫(kù):可被不同程序復(fù)用,不能直接在目標(biāo)機(jī)器上加載和執(zhí)行,必須首先與一個(gè)可執(zhí)行程序鏈接。
- 配置和數(shù)據(jù)文件:提供程序可以從磁盤(pán)加載的有用數(shù)據(jù)和配置信息。
- 分布式程序:在同一臺(tái)計(jì)算機(jī)上運(yùn)行的多個(gè)進(jìn)程。
·本地機(jī)器碼
- 程序首先載入內(nèi)存,將可執(zhí)行程序徹底轉(zhuǎn)換為CPU的本機(jī)機(jī)器碼。
- 所有執(zhí)行純粹使用CPU硬件。
- 執(zhí)行時(shí)程序可選擇調(diào)用操作系統(tǒng)來(lái)訪(fǎng)問(wèn)文件和其他系統(tǒng)資源。
- 優(yōu)點(diǎn):CPU直接執(zhí)行,速度快
- 缺點(diǎn):可移植性差
·完整程序解釋:運(yùn)行時(shí)系統(tǒng)將整個(gè)源代碼加載到內(nèi)存中并解釋(如BASIC、UNIX、shell等)
?
·解釋字節(jié)碼:CPU不能直接理解字節(jié)碼,需首先將其解釋為本機(jī)機(jī)器碼或在程序執(zhí)行時(shí)進(jìn)行解釋,因此字節(jié)碼環(huán)境要求加載一個(gè)額外的解釋器或編譯器。
- Java虛擬機(jī)(JVM)
- Perl或Python:被解釋而非編譯,運(yùn)行時(shí)使用字節(jié)碼,執(zhí)行其腳本的簡(jiǎn)單行為會(huì)自動(dòng)觸發(fā)字節(jié)代碼的生成。?
·動(dòng)態(tài)鏈接:升級(jí)時(shí)無(wú)需重新創(chuàng)建可執(zhí)行程序、具有共享性
?
·配置和數(shù)據(jù)文件:程序調(diào)用操作系統(tǒng)來(lái)請(qǐng)求將數(shù)據(jù)讀入內(nèi)存
-?屏幕上顯示的位圖圖形圖像
-?存儲(chǔ)為數(shù)字化波形的聲音
-?定制程序行為的配置文件
-?一組包含在線(xiàn)幫助文檔的文檔
-?包含名稱(chēng)和地址的數(shù)據(jù)庫(kù)
?
·分布式程序:如軟件系統(tǒng)可能使用的客戶(hù)端/服務(wù)器模型,在一臺(tái)計(jì)算機(jī)上運(yùn)行單個(gè)服務(wù)器程序,在許多其他計(jì)算機(jī)上運(yùn)行大量客戶(hù)端程序。這種情況下,構(gòu)建系統(tǒng)可以創(chuàng)建兩個(gè)發(fā)布包,或者使用相同的發(fā)行包來(lái)安裝兩個(gè)獨(dú)立的程序。
B. 代碼-時(shí)刻
·快照?qǐng)D:著眼于目標(biāo)計(jì)算機(jī)內(nèi)存中的變量級(jí)執(zhí)行狀態(tài)。
·內(nèi)存轉(zhuǎn)儲(chǔ):硬盤(pán)上的一個(gè)包含進(jìn)程內(nèi)存副本的文件,當(dāng)進(jìn)程因特定類(lèi)型的內(nèi)部錯(cuò)誤或信號(hào)而中止時(shí)創(chuàng)建。分析程序狀態(tài)時(shí),調(diào)試器可以加載轉(zhuǎn)儲(chǔ)文件并顯示它包含的有關(guān)正在運(yùn)行的程序狀態(tài)的信息,包括寄存器,調(diào)用堆棧和所有其他程序數(shù)據(jù)的內(nèi)容,程序員可查看內(nèi)存緩沖區(qū)中哪些數(shù)據(jù)項(xiàng)在失敗時(shí)運(yùn)行。
C. 代碼-周期
·UML中的順序圖:程序單元(對(duì)象)之間的交互
?
·執(zhí)行追蹤:使用日志記錄關(guān)于程序執(zhí)行的信息,以便調(diào)試。
D. 組件-時(shí)刻
·UML中的部署圖
?
E. 組件-周期
·事件記錄為系統(tǒng)管理員提供對(duì)診斷和審計(jì)有用的信息。
·每一類(lèi)事件都被賦予一個(gè)唯一的“代碼”來(lái)格式化并輸出一條可讀信息。
·執(zhí)行追蹤和事件記錄
| 事件記錄 | 軟件追蹤 |
| 主要由系統(tǒng)管理員使用 | 主要由開(kāi)發(fā)人員使用 |
| 記錄高級(jí)信息(如程序安裝失敗) | 記錄低級(jí)信息(如拋出的異常) |
| 不能包含過(guò)多重復(fù)事件或無(wú)效信息 | 可以包含重復(fù)事件及無(wú)效信息 |
| 通常需要基于標(biāo)準(zhǔn)的輸出格式 | 輸出格式幾乎無(wú)限制 |
| 事件日志通常本地化 | 很少考慮本地化 |
| 對(duì)于添加新類(lèi)型的事件或消息不靈活 | 對(duì)于添加新的追蹤消息必須靈活 |
轉(zhuǎn)載于:https://www.cnblogs.com/zhangyushuqing/p/8484486.html
總結(jié)
以上是生活随笔為你收集整理的【软件构造】第一章 软件构造基础(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么是算法,什么是数据结构
- 下一篇: 硬件——STM32 , 录音