摘要:建模語言建模語言是可用于表達信息或知識或系統的任何人造語言,該結構由一組一致的規則定義,目標是可視化,推理,驗證和傳達系統設計。將這些文件安排到不同的地方稱為源代碼樹。源代碼樹的結構通常反映了軟件的體系結構。
大綱
軟件構建的一般過程:
編程/重構
審查和靜態代碼分析
調試(傾倒和記錄)和測試
動態代碼分析/分析
軟件構建的狹義過程(Build):
構建系統:組件和過程
構建變體并構建語言 - 構建工具:Make,Ant,Maven,Gradle,Eclipse
總結
軟件構建的一般過程(1)編程
構建語言可根據以下兩種原則分類:
語言的目的
編程語言(例如C,C ++,Java,Python)
建模語言(例如UML)
配置語言(例如XML)
構建語言(如XML)
語言的形式
基于語言學的
基于數學(形式語言)
基于圖形(可視化)
(1)編程語言
編程工具
集成開發環境(IDE):為程序員提供軟件開發的綜合設施。
IDE通常由以下部分組成:
帶智能代碼完成的代碼編輯器,代碼重構工具
文件管理工具
庫管理工具
類瀏覽器,對象瀏覽器,類層次結構圖
圖形用戶界面(GUI)生成器
編譯器,解釋器
構建自動化工具
版本控制系統
可通過更多外部第三方工具擴展
Eclipse作為IDE的例子
Eclipse IDE:用于Java的開放源代碼IDE,但不限于C / C ++,PHP,Python等,最初是作為專有IBM產品開發的(Visual age for Smalltalk / Java)
它包含一個基礎工作區,其中包含用于編碼,構建,運行和調試應用程序的工具以及用于定制環境的可擴展插件系統。
插件是為系統貢獻功能的結構化代碼和/或數據包。功能可以以代碼庫,平臺擴展甚至文檔的形式提供。
插件可以定義擴展點,定義明確的地方,其他插件可以添加功能。
Eclipse IDE的核心組件
運行時核心
平臺運行時內核實現啟動平臺基礎并動態發現并運行插件的運行時引擎。
插件是一個結構化組件,它使用OSGi清單(MANIFEST.MF)文件和插件清單(plugin.xml)文件向系統描述自己。該平臺維護已安裝插件的注冊表及其提供的功能。
資源管理
資源管理插件定義了用于管理工具插件工件的公共資源模型。插件可以創建和修改用于在磁盤上組織和存儲開發工件的項目,文件夾和文件。
Eclipse IDE的核心組件
工作臺UI核心
該插件實現了工作臺UI,并定義了許多擴展點,允許其他插件提供菜單和工具欄操作,拖放操作,對話框,向導以及自定義視圖和編輯器。
標準Widget工具包(SWT)和JFace框架?
Java開發工具(JDT)
它通過提供用于編輯,查看,編譯,調試和運行Java代碼的功能來擴展平臺工作臺。?
插件開發環境(PDE)
自動創建,操作,調試和部署插件的工具。
(2)建模語言
建模語言是可用于表達信息或知識或系統的任何人造語言,該結構由一組一致的規則定義,目標是可視化,推理,驗證和傳達系統設計。
UML:Unified Modeling Language統一建模語言
(3)配置語言
配置文件配置程序的參數和初始設置。
應用程序應提供工具來創建,修改和驗證其配置文件的語法;
某些計算機程序僅在啟動時讀取其配置文件。其他人定期檢查配置文件的變化。?
目的示例:
部署環境設置
應用程序功能的變體
組件之間連接的變體?
配置語言示例:
鍵值文本(.ini,.properties,.rc等)
XML,YAML,JSON
(2)回顧和靜態代碼分析
審查和靜態分析/檢查
代碼審查是對源代碼的系統審查(同行評議)。
旨在發現初始發展階段忽視的錯誤,提高整體質量。
評審以各種形式完成,如配對編程,非正式演練和正式檢查。
正式的代碼審查
正式的代碼審查,例如Fagan檢查,涉及多個參與者和多個階段的仔細和詳細的過程。
正式的代碼審查是傳統的審查方式,軟件開發者通常使用材料的印刷副本逐行參加一系列會議和審查代碼。
正式檢查非常徹底,已被證明有效發現所審查代碼中的缺陷。
輕量級代碼審查
輕量級代碼審查通常比正式的代碼檢查要求更少的開銷,但如果正確完成,它可以同樣有效。
輕量級審查通常作為正常開發過程的一部分進行:
在肩上(Over the shoulder)——一位開發人員從作者的肩膀上看過去,然后檢查代碼。
電子郵件傳遞 - 源代碼管理系統在簽入后自動將電子郵件代碼發送給審閱者。
結對編程 - 兩位作者在同一工作站上共同開發代碼,這在極限編程中很常見。
工具輔助代碼審查 - 作者和審稿人使用軟件工具,非正式的例如pastebins和IRC,或專為同行代碼審查而設計的工具。
靜態代碼分析
靜態代碼分析是在沒有實際執行程序的情況下執行的計算機軟件分析(對執行程序執行的分析稱為動態分析)。?
該過程提供了對代碼結構的理解,并有助于確保代碼符合行業標準。?
自動化工具可以幫助程序員和開發人員進行靜態分析。
例如,CheckStyle,FindBugs和PMD for Java
(3)動態代碼分析/性能分析
動態程序分析是通過執行程序執行的軟件分析。
目標程序必須執行足夠的測試輸入以產生有趣的行為。?
使用諸如代碼覆蓋率之類的軟件測試措施有助于確保已經觀察到該程序的一組可能行為的足夠部分。
性能分析(“程序性能分析”,“軟件性能分析”)是一種動態程序分析的形式,用于度量程序的空間(內存)或時間復雜度,特定指令的使用情況,函數調用的頻率和持續時間。
(4)調試和測試
什么是測試?
軟件測試是一項調查,旨在為利益相關者提供有關被測產品或服務質量的信息。?
測試技術包括執行程序或應用程序的過程,目的是查找軟件錯誤(錯誤或其他缺陷),并驗證軟件產品是否適合使用。?
軟件測試涉及執行軟件組件或系統組件來評估一個或多個感興趣的屬性。
什么是調試?
調試是識別錯誤的根本原因并對其進行糾正的過程。與測試形成對比,測試是最初檢測錯誤的過程,調試是作為成功測試的結果而發生的。
在某些項目中,調試占用了總開發時間的50%。
對于許多程序員來說,調試是編程中最難的部分。?
像測試一樣,調試不是提高軟件質量的方法,但它是診斷缺陷的一種方法。
軟件質量必須從一開始就內置。構建優質產品的最佳方式是仔細開發需求,設計良好并使用高質量的編碼實踐。
調試是最后的手段。
(5)重構
重構是改變軟件系統的過程,它不會改變代碼的外部行為,但會改進其內部結構。
投入短期時間/工作成本以獲得長期收益,并對系統的整體質量進行長期投資。?
重構包括:
重組(重新排列)代碼...
...在一系列小的保留語義的轉換中......
...為了使代碼更易于維護和修改?
重構不僅僅是舊的重組
您需要保持代碼正常工作
您需要一些小步驟來保留語義
您需要進行單元測試來證明代碼正常工作
2軟件構建的狹義過程(Build)
粗略理解build:build-time到run-time 借助于工具,將軟件構造各階段的活動“自動化” (編譯、打包、靜態分析、測試、生成文檔、部署、…) 盡可能脫離“手工作業”,提高構造效率。
(1)構建系統
典型的BUILD場景
用傳統編譯語言編寫的軟件,如C,C ++,Java和C#。?
用諸如Perl和Python之類的解釋性語言編寫的軟件的打包和測試。?
編譯和打包基于Web的應用程序。
這些包括靜態HTML頁面,使用Java或C#編寫的源代碼,使用JSP(Java Server Pages),ASP(Active Server Pages)或PHP(超文本預處理器)語法編寫的混合文件以及多種類型的配置文件。
執行單元測試以驗證軟件的一小部分與代碼的其余部分隔離。?
執行靜態分析工具來識別程序源代碼中的錯誤。 這個構建系統的輸出是一個錯誤報告文檔,而不是一個可執行程序。?
生成PDF或HTML文檔。 這種類型的構建系統使用一系列不同格式的輸入文件,但生成可讀的文檔作為輸出。
編譯型語言
編譯型語言,如C,C ++,Java和C#。 在這個模型中,源文件被編譯成目標文件,然后鏈接到代碼庫或可執行程序中。?
生成的文件被收集到可安裝在目標機器上的發行包中。
解釋型語言
解釋型語言的源代碼不會被編譯到目標代碼中,所以不需要對象樹。 源文件本身被收集到一個發行包中,可以安裝在目標機器上。?
編譯工具專注于轉換源文件并將它們存儲在發行包中。?
編譯成機器碼不會在構建時執行,而是可能在運行時發生。
基于Web的應用程序
基于Web應用程序的構建系統是編譯代碼,解釋代碼和配置或數據文件的混合。?
有些文件(如HTML文件)直接從源代碼樹復制到發行包,而其他文件(如Java源文件)則首先編譯為目標代碼。
靜態HTML文件,只包含標記數據以便在Web瀏覽器中顯示。 這些文件直接復制到發行包。?
包含代碼的JavaScript文件將由最終用戶的Web瀏覽器解釋。 這些文件也直接復制到發行包。?
JSP,ASP或PHP頁面,包含HTML和程序代碼的混合。 這些文件由Web應用程序服務器而不是構建系統編譯和執行。 這些文件也被復制到發布包中,準備安裝到Web服務器上。
將Java源文件編譯為目標代碼并打包為Web應用程序的一部分。 構建系統在打包Java類文件之前執行此轉換。 Java類在Web應用程序服務器上執行,甚至在Web瀏覽器內執行(使用Java小程序)。
(2)構建系統的組件
版本控制工具?
源代碼樹:程序的源代碼被存儲為多個磁盤文件。 將這些文件安排到不同的地方稱為源代碼樹。 源代碼樹的結構通常反映了軟件的體系結構。?
對象樹:一個多帶帶的樹層次結構,用于存儲由構建過程構建的任何對象文件或可執行程序。
編譯工具:將可讀的源文件轉換為機器可讀的可執行程序文件的程序。
編譯器:源文件?對象文件
鏈接器:多個相關的目標文件?可執行程序映像
基于UML的代碼生成器:模型?源代碼文件
文件生成器:腳本?文件
構建系統的組件
構建工具:一種在編譯工具之上的級別上運行的程序。 它必須對源文件和目標文件之間的關系有足夠的了解,以便它可以編排整個構建過程。 構建工具調用必要的編譯工具來產生最終的構建輸出。
構建機器:編譯和構建工具執行的機器。
本地編譯環境:軟件在與生成機器相同的目標機器上執行;
交叉編譯環境:需要兩臺不同的機器,目標機器上有不同的操作系統或CPU。
發布打包和目標機器:生成可以實際安裝在用戶機器上的東西。
從源和目標樹中提取相關文件并將它們存儲在發行包中。
發行包應該是單個磁盤文件,并且應該進行壓縮以減少下載所需的時間。
任何不必要的調試信息都應該被刪除,以免它們擾亂軟件的安裝。
包裝類型:
檔案文件:zip和解壓縮
軟件包管理工具:UNIX風格,例如.rpm和.deb
定制的GUI安裝工具:Windows風格
(3)構建過程和構建描述
構建過程:構建工具調用每個編譯工具來完成工作,這是一個端到端的事件序列。
構建語言(構建說明)
構建工具需要構建描述以基于文本的格式編寫。
它遵循特定構建語言的語法規則。
例如,使用Make時,將以規則的形式指定文件間依賴關系信息,這些規則存儲在名為Makefile的文件中。?
您可以手動編寫描述或通過IDE生成描述。
如何使用構建系統
開發人員(或私人)構建:開發人員檢出了VCS的源代碼并正在專用工作區中構建軟件。
發布版本:為測試組提供一個完整的軟件包供驗證。 當測試人員確信軟件的質量足夠高時,就可以為客戶提供相同的軟件包。?
可用性構建:構建過程確定當前的源代碼是否沒有錯誤并且通過了一套基本的可用性測試。 這種構建可以每天發生多次,并且趨向于完全自動化。
每日生成/每晚構建
持續集成(CI)
(4)Java編譯工具
那么Java呢?
Java語言的一大賣點是它的“一次編寫,隨處運行”的理念。?
也就是說,應該可以在Linux機器上編譯一個Java程序,然后在Windows或Solaris機器上運行它而不做任何修改。?
這是通過使用由Java虛擬機(JVM)解釋的標準字節代碼集來實現的。?
由于Java的安全特性,可以限制執行Java程序的環境,因此可以執行不受信任的程序而不用擔心會損害主機。
Java中的編譯工具
Java開發工具包(JDK)?
GNU Java編譯器?
Eclipse Java編譯器(ECJ)
Java中的對象文件
Java類的目標文件格式稱為類文件,其后綴為.class。?
與機器無關的字節代碼,用于描述程序的流程,而不是直接編譯為本地機器代碼。?
Java虛擬機(JVM)需要加載和解釋這些字節代碼,盡管JVM在實際執行程序之前可能首先將它們轉換為本地機器代碼。
使用javac命令將Java源文件轉換為類文件。
Java的可執行程序
Java編程是動態類加載。 生成可執行程序不需要構建時鏈接步驟。 相反,當運行的程序需要它們時,Java類會多帶帶加載到內存中。 沒有單個可執行程序映像需要加載。?
Java程序只是一個動態庫的集合,盡管單個類一次加載一次,而不是作為更大的共享庫的一部分。
Java程序需要執行兩件事情:
必須為JVM提供包含主方法的類的名稱。 這被用作執行的起點。
JVM還必須提供一個類路徑,該路徑用于標識可以找到其他類的位置。
Java中的庫
除了指定可以找到.class文件的目錄列表之外,可以將Java類放入較大的歸檔文件中,稱為JAR文件。?
大多數Java應用程序更喜歡JAR文件格式(后綴為.jar),只是因為操作JAR文件比打包和分發大量.class文件更容易。
JAR文件通常用作分發程序的手段。
您不僅可以將自己的軟件打包為JAR文件,還可以通過獲取其他人的JAR文件并將其添加到您自己的類路徑中來合并第三方軟件包。
由于動態加載系統,您可以隨時替換和升級JAR文件。
(5)子目標和構建變體
構造方式
是否只有一種方法可以將每個源文件編譯并鏈接到可執行程序中,并且只能生成一種類型的發布包?
但實際上,可以存在任意數量的變體,每個變體都使用稍微修改的構建過程并創建一個稍微不同的發布包。
三種不同的構建方式
構建子目標:只對構建樹的一部分進行增量更改的開發人員更愿意僅重建他們正在處理的樹的部分。?
構建軟件的不同版本:輸出是自定義的,以改變軟件的行為。 這些變化可能包括支持自然語言或支持不同的產品功能組合,例如家庭版或專業版。?
構建不同的目標體系結構:要在不同的目標機器上支持軟件產品,必須為各種不同的CPU類型和操作系統編譯相同的源文件集。 這包括x86,MIPS和PowerPC等CPU以及Linux,Windows和Mac OS X等操作系統。
構建子目標
任何大型軟件都可以分成許多子組件,通常采用靜態或動態庫的形式。 每個組件僅提供程序的全部功能的一部分,并且在某種程度上獨立于其他組件開發。
為了避免耗費時間構建整個源代碼樹來創建最終的可執行程序,最好選擇限制它們構建的子組件的數量,而不是始終重建整個源代碼樹。
構建不同版本的軟件
構建不同的版本
語言和文化,本地化
硬件變化
定價選項?
指定構建變體:
修改代碼:
逐行變化
每個變體文件
每個變體目錄
每個變體的構建描述文件
構建不同的目標架構
只有在編譯為本地代碼的C和C ++等語言編程時,這種類型的變體才有意義。
它與使用與機器無關的虛擬機的Java和C#不相關。
(6)構建工具
Java的構建工具:
Make
Ant
Maven
Gradle
Eclipse IDE
總結
軟件構建的一般過程:設計->編程/重構->調試->測試->構建->發布
編程/重構
審查和靜態代碼分析
調試(傾倒和記錄)和測試
動態代碼分析/分析
軟件構建的狹義過程(Build):驗證->編譯->鏈接->測試->軟件包->安裝->部署
構建系統:組件和過程
構建變體并構建語言
構建工具:Make,Ant,Maven,Gradle,Eclipse
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71331.html
摘要:大綱什么是軟件復用如何衡量可復用性可復用組件的級別和形態源代碼級別復用模塊級別的復用類抽象類接口庫級別的復用包系統級別的復用框架對可復用性的外部觀察類型變化例行分組實施變更代表獨立分解常見行為總結什么是軟件復用軟件復用軟件復用是使用現有軟件 大綱 什么是軟件復用?如何衡量可復用性?可復用組件的級別和形態 源代碼級別復用 模塊級別的復用:類/抽象類/接口 庫級別的復用:API /包 系...
摘要:年,和前端開發者與應用程序前端開發者之間產生了巨大的分歧。開發最常見的解決方案有手機和平板的原生應用程序桌面應用程序桌面應用程序原生技術最后,前端開發者可以從瀏覽器開發中學習到,編寫代碼不需要考慮瀏覽器引擎的限制。 前端開發者手冊2019 Cody Lindley 編著 原文地址 本手冊由Frontend Masters贊助,通過深入現代化的前端工程課程來提高你的技能。 下載:PDF ...
摘要:年,和前端開發者與應用程序前端開發者之間產生了巨大的分歧。開發最常見的解決方案有手機和平板的原生應用程序桌面應用程序桌面應用程序原生技術最后,前端開發者可以從瀏覽器開發中學習到,編寫代碼不需要考慮瀏覽器引擎的限制。 前端開發者手冊2019 Cody Lindley 編著 原文地址 本手冊由Frontend Masters贊助,通過深入現代化的前端工程課程來提高你的技能。 下載:PDF ...
摘要:年,和前端開發者與應用程序前端開發者之間產生了巨大的分歧。開發最常見的解決方案有手機和平板的原生應用程序桌面應用程序桌面應用程序原生技術最后,前端開發者可以從瀏覽器開發中學習到,編寫代碼不需要考慮瀏覽器引擎的限制。 前端開發者手冊2019 Cody Lindley 編著 原文地址 本手冊由Frontend Masters贊助,通過深入現代化的前端工程課程來提高你的技能。 下載:PDF ...
閱讀 3264·2021-09-02 15:41
閱讀 2827·2021-09-02 09:48
閱讀 1368·2019-08-29 13:27
閱讀 1156·2019-08-26 13:37
閱讀 831·2019-08-26 11:56
閱讀 2477·2019-08-26 10:24
閱讀 1636·2019-08-23 18:07
閱讀 2614·2019-08-23 15:16