【软件构造】第二章 软件构建的过程和工具(2)
二.軟件構造的編程、系統、工具
【廣義軟件構造的過程】
?
1. 編程
(1)開發語言:Java、C、C++、Python等
·IDE:集成開發環境
- 方便編寫代碼和管理文件
- 能夠編譯、構建
- 結構清晰
- 有GUI界面
- 支持第三方擴展工具
·以Eclipse為例
- 開始支持多種語言的開發
- 允許第三方插件
- 運行內核:啟動基礎功能、動態發現和運行插件
- OSGi:Java動態化模塊化系統的一系列規范
(2)建模語言:UML等
·針對不同流程可使用不同語言
·結構由一組一致的規則定義
·目的是對系統的設計進行可視化,推理,驗證和交流
(3)配置語言:XML、YAML、JSON等
·配置程序的參數和初始設置
- 應用程序應提供工具來創建,修改和驗證其配置文件的語法
- 某些計算機程序只能在啟動時讀取其配置文件
- 其他人定期檢查配置文件的變化
·目的實例
- 部署環境設置
- 應用程序功能的變體
- 組件之間連接的變量
2. 靜態代碼分析:在沒有實際執行程序的情況下執行的計算機軟件分析
(1)代碼評審
·正式代碼評審:一種結構化的檢查代碼與文檔缺陷的過程
·輕量代碼評審:電子郵件、結對編程、工具輔助代碼審查
(2)該過程提供了對代碼結構的理解,并有助于確保代碼符合行業標準。
(3)自動化工具可以幫助程序員和開發人員進行靜態分析。
3. 動態代碼分析:通過執行程序執行的軟件分析
(1)目標程序必須執行足夠的測試輸入以產生行為。
(2)使用軟件測試措施觀察程序的一組可能行為。
(3)配置:一種動態程序分析的形式,用于度量程序的空間或時間復雜度,特定指令的使用情況或函數調用的頻率和持續時間。
4. 調試和測試
(1)測試
·狹義:程序能否正常運行、能否滿足所有需求
·廣義:聯想V字模型、測試需求文檔
(2)調試:定位問題、解決問題
5. 重構:不改變函數和接口的外在表現,優化內部結構
(1)投入短期時間/工作成本,對系統的整體質量進行長期投資
(2)保留語義使代碼更易維護和修改、進行單元測試以證明代碼正常工作
?
【狹義軟件構造過程】
1.?構建系統:典型的BUILD場景
(1)編寫用傳統編譯語言編寫的軟件,如C,C ++,Java等。
·用解釋性語言編寫的軟件(如Perl和Python)的打包和測試。
·基于Web的應用程序的編譯和打包。
- 使用靜態HTML頁面
- 使用Java或C# 編寫的源代碼
- 使用JSP,ASP或PHP語法編寫的混合文件以及多種類型的配置文件
·單元測試的執行與代碼的其余部分對軟件進行隔離驗證。
·執行靜態分析工具來識別程序源代碼中的錯誤。
·生成PDF或HTML文檔。
(2)編譯語言:C、C ++、Java、C# 等
·源文件被編譯成目標文件,然后鏈接到代碼庫或可執行程序中。
·生成的文件被收集到可安裝在目標機器上的發行包中。
·版本控制工具。
·源樹和對象樹:特定開發人員使用的源文件和編譯對象文件集。
·編譯工具:輸入文件并生成輸出文件的工具(例如,將源代碼文件轉換為目標代碼和可執行程序)。編譯工具的常見示例包括C或Java編譯器,但它們還包括文檔和單元測試發電機。
·構建機器:執行編譯工具的計算設備。
·發布打包和目標機器:打包軟件,分發給最終用戶,然后安裝到目標機器上的方法。
(3)解釋類型語言
·解釋的源代碼不會被編譯到目標代碼中,所以不需要對象樹。 源文件本身被收集到一個發行包中,可以安裝在目標機器上。
·編譯工具專注于轉換源文件并將它們存儲在發行包中。
·編譯成機器碼不會在構建時執行,即使它可能在運行時發生。
(4)基于Web的應用程序:編譯代碼,解釋代碼和配置或數據文件的混合
·靜態HTML文件,只包含標記數據,直接復制到發行包。
·包含代碼的JavaScript文件將由最終用戶瀏覽器解釋,直接復制到發行包。
·JSP,ASP或PHP頁面,包含HTML和程序代碼的混合,由Web應用程序服務器而不是構建系統編譯和執行,復制到發布包,準備安裝到Web服務器上。
·構建系統在編譯打包Java類文件之前執行轉換。Java類在Web應用程序服務器上或瀏覽器內(小程序)執行。
2. 構建系統的組件
(1)源樹:程序的源代碼被存儲為多個磁盤文件,將這些文件安排到不同的地方稱為源樹,其結構通常反映了軟件的體系結構。
(2)對象樹:一個單獨的樹層次結構,用于存儲由構建過程構建的任何對象文件或可執行程序。
(3)編譯工具:將可讀的源文件轉換為機器可讀的可執行程序文件的程序。
·編譯器:源文件?-> 對象文件
·鏈接器:多個相關的目標文件?-> 可執行的程序映像
·基于UML的代碼生成器:模型?-> 源代碼文件
·文件生成器:腳本?-> 文件
(4)發布打包和目標機器:生成可以實際安裝在用戶機器上的東西。
·從源和目標樹中提取相關文件并將它們存儲在發行包中。
·發行包應該是單個磁盤文件,并且應該進行壓縮以減少下載所需的時間。
·任何不重要的調試信息都應該被刪除,以免它使軟件的安裝變得混亂。
(5)包裝類型:
·檔案文件:zip和解壓縮
·軟件包管理工具:UNIX風格,例如.rpm和.deb
·定制的GUI安裝工具:Windows風格
3. 構建過程和構建描述
(1)構建過程:端到端的事件序列,構建工具調用每個編譯工具來完成工作。
(2)構建描述:基于文本格式編寫,如使用Make時,將以規則的形式指定interfile依賴信息,存儲在Makefile中。
(3)如何構建系統
·開發人員構建:開發人員已檢出VCS的源代碼并正在專用工作區中構建軟件,結果發布包將用于開發人員的私人開發。
·發布版本:為測試組提供一個完整的軟件包供驗證,軟件的質量足夠高時為客戶提供相同的軟件包。用于發布版本的源代碼樹只編譯一次,永不修改。
·Sanity構建:與發布版本類似,但并非針對客戶,可以每天發生多次,并且趨向于完全自動化。
4. Java中的編譯工具
(1)Java開發工具包(JDK)
(2)GNU Java編譯器
(3)Eclipse Java編譯器(ECJ)
5. 子目標和構建變體
(1)三種不同的構建方法
·構建子目標:僅重建開發人員正在處理的樹的部分。
·構建不同版本的軟件:定制輸出以改變軟件的行為。
·構建不同的目標體系結構:為各種不同的CPU類型和操作系統編譯相同的源文件集,包括x86,MIPS和PowerPC等CPU以及Linux,Windows和Mac OS X等操作系統。
(2)構建子目標
·任何大型軟件都可以分成許多子組件,通常采用靜態或動態庫的形式。
·避免耗費時間,最好限制構建子組件的數量。
6.?構建工具:Make、Ant、Maven、Gradle、Eclipse
轉載于:https://www.cnblogs.com/zhangyushuqing/p/8627280.html
總結
以上是生活随笔為你收集整理的【软件构造】第二章 软件构建的过程和工具(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 9.优先队列,priority_queu
- 下一篇: 372. Super Pow