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