1. 程式人生 > >軟件構造 第二章 軟件構建的過程和工具

軟件構造 第二章 軟件構建的過程和工具

單位 利用 種類 基礎類型 標識 工作 安裝 java程序 壓縮

第一部分

一、軟件的生命周期

1.from zero to one

計劃、分析、設計、實現、測試、維護

2.from 1 to n

軟件的更新與老化、不同軟件之間相互取代演化

技術分享圖片

技術分享圖片

二、經典軟件模型

兩個基礎類型:線性、叠代

現有模型:瀑布模型、增量模型、V模型、原型法、螺旋模型

考慮的關鍵因素:適應變化的能力、開發效率、項目管理復雜性、軟件質量

1.瀑布模型:線性模型

按步驟依次實現。利於使用,應對變化代價高

技術分享圖片

2.增量模型:非叠代

將整個產品分成不同的增量,逐一完成。

以增量的方式實施瀑布模型

技術分享圖片

3.V模型:線性模型

瀑布模型的擴展,強化測試

強化測試:對代碼、文件進行分析

技術分享圖片

4.原型法:叠代模型

實現系統的原型:原型模擬最終產品的幾個方面,甚至完全不同

過程:分析基礎要求(細節可忽略)、開發初始模型、評論、修改和增強原型

優點:在項目早期可以獲得用戶的反饋、用戶判斷軟件是否符合規格說明、對軟件進行估算

技術分享圖片

5.螺旋模型:叠代模型

一種風險驅動的過程模型,每做完一個層面進行評估

技術分享圖片

三、敏捷開發

1.開發宣言:提倡適應性規劃、演化開發、 盡早交付和持續改進,並鼓勵對變化作出快速和靈活的響應。

人以及人與人的互動勝於過程和工具

可運行的軟件勝於面面俱到的文檔

客戶合作勝於合同談判

響應變化生於遵循計劃

2.快速叠代

用戶參與、短期開發、大量測試、

3.極限編程

原型、持續發布、自動構建、結對編程、測試驅動的開發

四、協同軟件開發

開源軟件構建模型:沒有協同管理控制

細節:

技術分享圖片

五、軟件配置管理(SCM)和版本控制系統(VCS)

SCM的任務是追蹤與控制軟件中的變化

1)SCM實際任務是版本控制和建立基線

軟件配置項是軟件配置管理的基本單位,任何需要管理 的要素都時軟件配置項(源代碼、數據、文檔、軟硬件、環境等)

基線 是在某時間點上,通過評審和認可後的版本,作為後續變化的基點。

2)分支和進化圖(屬於SCI或一個系統)

在分支上進行並行開發,如測試新功能

其他人員不想在新功能完成之前涉及新功能

分支對單個開發人員也很有用

通過正確的設置,任何程序員都可以 從任何位置拉出或推送到任何位置,從而在合作模式中創造出極大的靈 活性。

版本控制系統(VCS)

Local VCS 本地管理

技術分享圖片

Centralized VCS 集中式管理,通過雲端交互

技術分享圖片

Distributed VCS(eg:git)分布式管理,用戶直接交互或通過雲端交互

技術分享圖片

版本控制術語:

?存儲庫:我們項目中版本的本地或遠程存儲

?工作副本:我們可以處理的項目的本地可編輯副本

?文件:我們項目中的單個文件

?版本或修訂版:內容的記錄我們在某個時間點的項目

?改變或差異:兩個版本之間的差異

?頭部:當前版本

版本控制系統的功能
?可靠:只要我們需要,就可以保留版本; 允許備份

?多個文件:跟蹤項目的版本,而不是單個文件

?有意義的版本:變化是什麽,為什麽要制作?

?還原:全部或部分還原舊版本

?比較版本

?查看歷史記錄:整個項目或單個文件

?不僅僅是代碼:散文,圖片,...

允許多個人一起工作

六、git

1)git存儲庫

.git目錄:存儲所有版本、控制數據

緩存區:內存中

工作目錄:本地文件系統

2)文件的三種狀態

修改:工作目錄中的文件與git存儲庫中的文件不同,但不在臨時區域中

分階段:文件已修改並已添加到暫存區

提交:該文件在工作目錄和git目錄中保持相同

3)Git中的對象圖:

Git上的所有操作都是在一個圖數據庫上進行

從另一臺機器/服務器復制git項目意味著復制 整個對象圖。

技術分享圖片

對象圖中的代碼:不重復保存個版本中沒有發生變化的文件、每個文件的每個版本只保存依次,多個提交可共享版本

4)分支:分支是在版本控制下對對象的復制,以便修 改可以沿兩個分支平行進行

技術分享圖片

第二部分

一、軟件構造的一般過程

技術分享圖片

1.編程

1)開發語言:c++,python,java等等

IDE:集成開發環境:方便編寫代碼和管理文件;能夠編譯、構建;結構清晰;有GUI界面;支持第三方擴展工具

2)建模語言:建模語言是一種人工語言,用於表達信息、知識或系統,以一套一致的 規則定義來可視化、推理、驗證和交流系統的設計。

3)配置語言

配置程序的參數和初始設置

應用應提供工具支持配置文件的維護

某些計算機程序只能在啟動時讀取其配置文件

其他人定期檢查配置文件的變化

2.靜態代碼分析:在沒有實際執行程序的情況下執行的計算機軟件分析

1)代碼評審:

正式代碼評審:一種結構化的檢查 代碼和文檔缺陷的過程

輕量代碼評審:電子郵件、結對編程、工具輔助

2)該過程提供了對代碼結構的理解,並有助於確保代碼符合行業標準、自動化工具可以幫助程序員和開發人員進行靜態分析。

3.動態代碼分析:運行程序以分析代碼

程序需要經過充分的測試

利用測試度量技術(如覆蓋率)確保 代碼的可能功能均被充分測試到

用來測量 程序的時空復雜度,特定指令或函數的調用頻率或持續時間

4.調試與測試

測試為軟件的利益相關者提供有關被測產品或服務 質量的信息

1)測試:程序能否正常運行,能否滿足所有需求

技巧:聯想V字模型、測試需求文檔

2)調試:

調試是識別錯誤的根本原因並對其進行糾正的過程

調試往往是成功測試的後續環節,成功測試不意味著沒有發現錯誤, 反而相反

測試和調試不會提升軟 件質量,而是發現缺陷的主要手段

軟件質量應通過認真的分析需求、良好 的設計、高質量的編碼來確保。

調試是最後的手段

5.重構

重構是在不改變代碼外部行為的前提下,改善其內部結 構。

(1)投入短期時間/工作成本,對系統的整體質量進行長期投資

(2)保留語義使代碼更易維護和修改、進行單元測試以證明代碼正常工作

二、狹義軟件構造過程:

1.構建系統:

編譯代碼、打包和測試解釋型語言、編譯和打包web應用程序、執行單元測試、進行靜態分析得到bug報告、輸入不同格式的輸入文件,得到人可讀的文檔

2.編譯語言

編譯後得到目標文件, 後續被鏈接入類庫或者可執行程序中

最終得到可部署到目標機器的發布包

版本控制工具。

源樹和對象樹:特定開發人員使用的源文件和編譯對象文件集。

編譯工具:輸入文件並生成輸出文件的工具(例如,將源代碼文件轉換為目標代碼和可執行程序)。編譯工具的常見示例包括C或Java編譯器,但它們還包括文檔和單元測試發電機。

構建機器:執行編譯工具的計算設備。

發布打包和目標機器:打包軟件,分發給最終用戶,然後安裝到目標機器上的方法。

·基於Web的應用程序的編譯和打包。

  - 使用靜態HTML頁面

  - 使用Java或C# 編寫的源代碼

  - 使用JSP,ASP或PHP語法編寫的混合文件以及多種類型的配置文件

技術分享圖片

2.構建系統的組件:

1)源樹:程序的源代碼被存儲為多個磁盤文件,將這些文件安排到不同的地方稱為源樹,其結構通常反映了軟件的體系結構。

2)對象樹:一個單獨的樹層次結構,用於存儲由構建過程構建的任何對象文件或可執行程序。

3)編譯工具:將可讀的源文件轉換為機器可讀的可執行程序文件的程序。

編譯器:源文件 -> 對象文件

鏈接器:多個相關的目標文件 -> 可執行的程序映像

基於UML的代碼生成器:模型 -> 源代碼文件

文件生成器:腳本 -> 文件

4)包裝類型:

檔案文件:zip和解壓縮

軟件包管理工具:UNIX風格,例如.rpm和.deb

定制的GUI安裝工具:Windows風格

3.構建過程和構建描述

構建過程:構建工具調用每個編譯工具來完成工作,這是一個端到端的事件序列。

構建描述:構建工具需要構建描述信息,基於文本的格式編寫

構建系統如何被使用:

開發人員構建:開發人員已檢出VCS的源代碼並正在專用工作區中構建軟件,結果發布包將用於開發人員的私人開發。

發布版本:為測試組提供一個完整的軟件包供驗證,軟件的質量足夠高時為客戶提供相同的軟件包。用於發布版本的源代碼樹只編譯一次,永不修改。

健全性構建:與發布版本類似,但並非針對客戶,可以每天發生多次,並且趨向於完全自動化。

4.java編譯工具

(1)Java開發工具包(JDK)

(2)GNU Java編譯器

(3)Eclipse Java編譯器(ECJ)

java中打開文件:與機器無關的字節代碼,用於描述程序流,而不是直接編譯為本 地機器代碼

java的可執行程序:Java 語言是動態進行類的加載,在運行時根據需要,類會被加載入內存。

java程序要求兩點:必須為JVM提供包含main方法的類的名稱。 這用作執行的起點。 - 還必須為JVM提供類路徑,該路徑用於標識其他類的位置。

java中的庫:.由於動態加載的特性,可以隨 時替換和升級JAR文件(需要確保兼容性)。

5.子目標和構建變體

構建方法:可以存在任意數量的構建方式,每個方式都使用稍微 修改的構建過程並創建一個稍微不同的發布包

1)三種不同的構建方法:

構建子目標:僅重建開發人員正在處理的樹的部分。

構建不同版本的軟件:定制輸出以改變軟件的行為。

構建不同的目標體系結構:為各種不同的CPU類型和操作系統編譯相同的源文件集,包括x86,MIPS和PowerPC等CPU以及Linux,Windows和Mac OS X等操作系統。

2)構建子目標

任何大型軟件都可以分成許多子組件,通常采用靜態或動態庫的形式。

避免耗費時間,最好限制構建子組件的數量。

6. 構建工具:Make、Ant、Maven、Gradle、Eclipse

軟件構造 第二章 軟件構建的過程和工具