程式專案建構工具以及測試相關資料整理

Apache Ant

用XML標籤去定義專案內要提供哪些”目標”,哪些”任務”需要被執行。描述自動化編譯的事項,含有XML、DataType、Properties、Task等。早前的自動化編譯工具為Ant與Maven。Gradle 是後起之秀,已經越來越多 Open Source 專案由Maven轉向Gradle(更早之前是由 Ant 轉向 Maven)。

參考資料來源:

http://www.codedata.com.tw/java/understanding-gradle-1-ant/

https://ant.apache.org/

Apache Maven

為Java自動化專案建構工具,自動管理相依性功能帶來極大的便利,也支援C#、Ruby、Scala。被創造的動機有二個原因:Java 專案的標準化、Java 專案函式庫管理的問題。提供專案『樣版』的機制,它會建立好專案目錄結構、範例檔與 Maven 設定檔 pom.xml。super-pom.xml 和pom.xml決定了該專案的設定、編譯行為。Convention Over Configuration觀念。函式庫會由 Maven 透過 repostiory server 下載,並 cache 在使用者目錄下的 .m2 目錄。

參考資料來源:

http://www.codedata.com.tw/java/understanding-gradle-2-maven/

https://zh.wikipedia.org/wiki/Apache_Maven

Gradle

以Apache Ant和Apache Maven概念的專案自動化建構工具,具有自動管理相依性、編譯、測試、檢查程式碼、產生文件、清理或壓縮、上傳、發佈、重新啟動伺服器到送出電子郵件。使用Groovy的特定領域語言(script)設定專案,Maven Repositories,而不是XML格式。目前支援Java、Groovy、Scala。為Android Studio 內建的封裝布署工具。

參考資料來源:

https://zh.wikipedia.org/wiki/Gradle

https://ithelp.ithome.com.tw/articles/10129873

Nexus Repository

作為maven倉庫的私有服務器,有以下三項特點:
1.第三方Jar包可以放在nexus上,項目可以直接通過Url和路徑配置直接引用.方便進行統一管理。

2.同時有多個項目在開發的時候,一些共用基礎模塊可以單獨抽取到nexus上,需要用的項目直接從nexus上拉取就行(基礎模塊的實現,維護和部署可以交給專門的人員,其他項目不用關心代碼實現,這樣也可以達到保證核心代碼不洩露)。

3.一些封閉開發的過程中開發機是不能上公網的,所以連接central repository和下載jar就比較麻煩,這時就可以用nexus搭建起來一個介於公網和局域網之間的橋樑。

參考資料來源:

https://www.sonatype.com/nexus-repository-sonatype

https://blog.csdn.net/l2show/article/details/48653949

http://www.open-open.com/lib/view/open1452002317558.html

https://read01.com/ADG36o.html

https://jimwayne.blogspot.tw/2016/01/maven-repository-servernexus.html

Sbt

Simple Build Tool的簡稱,類似於Maven,是Scala界的Maven,支援scala與java語言的專案管理,支持增量編譯,內置scala console。

  1. 使用Scala作為DSL來定義build文件(one language rules them all)
  2. 通過觸發執行(trigger execution)特性支持持續的編譯與測試
  3. 增量編譯;^[SBT的增量編譯支持因為如此優秀,已經剝離為Zinc,可被Eclipse, Maven,Gradle等使用
  4. 可以混合構建Java和Scala項目
  5. 並行的任務執行
  6. 可以重用Maven或者ivy的repository進行依賴管理

參考資料來源:

https://github.com/CSUG/real_world_scala/blob/master/02_sbt.markdown

https://www.scala-sbt.org/index.html

scons

python語言編寫的下一代的程序建造工具。功能上類似於make、autoconf與automake工具。具有以下優點:

  1. 使用Python 腳本做為配置文件
  2. 對於C,C++ 和Fortran, 內建支持可靠自動依賴分析. 不用像make 工具那樣需要執行"make depends"和"make clean"就可以獲得所有的依賴關係。
  3. 內建支持C, C++, D, Java, Fortran, Yacc, Lex, Qt,SWIG 以及Tex/Latex。用戶還可以根據自己的需要進行擴展以獲得對需要編程語言的支持。
  4. 支持make -j 風格的並行建造。相比make -j, SCons 可以同時運行N 個工作,而不用擔心代碼的層次結構。
  5. 使用Autoconf 風格查找頭文件,函數庫,函數和類型定義。
  6. 良好的誇平台性。SCons 可以運行在Linux, AIX, BSD, HP/UX, IRIX, Solaris, Windows, Mac OS X 和OS/2 上

參考資料來源:

https://www.ibm.com/developerworks/cn/linux/l-cn-scons/index.html

https://scons.org/

Cmake

CMake是個一個開源的跨平台自動化建構系統,用來管理軟體建置的程式,並不相依於某特定編譯器。並可支援多層目錄、多個應用程式與多個函式庫。 它用組態檔控制建構過程(build process)的方式和Unix的make相似,只是CMake的組態檔取名為CMakeLists.txt。CMake並不直接建構出最終的軟體,而是產生標準的建構檔(如Unix的Makefile或Windows Visual C++的projects/workspaces),然後再依一般的建構方式使用。這使得熟悉某個整合開發環境(IDE)的開發者可以用標準的方式建構他的軟體,這種可以使用各平台的原生建構系統的能力是CMake和SCons等其他類似系統的區別之處。 CMake設定檔(CMakeLists.txt)可設定原始碼或目標程式庫的路徑、產生適配器(wrapper)、還可以用任意的順序建構執行檔。CMake支援in-place建構(二進檔和原始碼在同一個目錄樹中)和out-of-place建構(二進檔在別的目錄裡),因此可以很容易從同一個原始碼目錄樹中建構出多個二進檔。CMake也支援靜態與動態程式庫的建構。

參考資料來源:

https://zh.wikipedia.org/wiki/CMake

https://cmake.org/

Grunt

它是以 Node.js 為基礎所開發的命令列工具,在經過適當的設定之後,可以幫助程式開發者將一些重複性的工作自動化,減輕開發者與開發團隊的負擔。

Grunt可以處理的事情很多,例如精簡 CSS 程式或網頁的大小、編譯 CoffeeScript、unit test、linting 等,舉凡一般性的重複動作多半都可以使用這個工具來處理。

Grunt 背後有一個很大的生態系統(ecosystem),包含了大量的 plugins,使用者可以藉由這些 plugins 將自己的工作自動化,而使用者也可以很容易的把自己開發的 plugin 上傳到 npm 上面分享給其他人使用。

參考資料來源:

https://blog.gtwang.org/web-development/grunt-javascript-task-runner/

https://gruntjs.com/

Spock

應用於java或groovy的單元測試框架。測試代碼使用以groovy語言擴展而成的規範說明語言(specification language)。透過junit runner調用測試,兼容絕大部分junit的運行場景(ide,構建工具,持續整合等)。框架的設計思路參考了JUnit,jMock,RSpec,Groovy,Scala,Vulcans

參考資料來源:

http://spockframework.org/

https://read01.com/0enao.html

單元測試Unit Testing

單元測試(又稱模塊測試, Unit Testing)是針對程序模塊(軟體設計的最小單位)來進行正確性檢驗的測試工作。程序單元是應用的最小可測試部件。在過程化編程中,一個單元就是單個程序、函數、過程等;對於面向對象編程,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。

單元測試的幾個典型場景:

  1. 開發前寫單元測試,通過測試描述需求,由測試驅動開發。
  2. 在開發過程中及時得到反饋,提前發現問題。
  3. 應用於自動化構建或持續集成流程,對每次代碼修改做回歸測試。
  4. 作為重構的基礎,驗證重構是否可靠。

無論是哪種單元測試框架,最後的單元測試代碼量也比業務代碼只多不少,若要維持比較高的單元測試覆蓋率,要有三倍於業務代碼的單元測試代碼。造成單測代碼難以閱讀、維護不易。寫單元測試的難易程度跟代碼的質量關係最大,並且是決定性的。項目里無論用了哪個測試框架都不能解決代碼本身難以測試的問題。

參考資料來源:

https://read01.com/0enao.html

BDD

行為驅動開發是一種敏捷軟體開發的技術,它鼓勵軟體項目中的開發者、QA和非技術人員或商業參與者之間的協作。BDD最初是由Dan North在2003年命名,它包括驗收測試和客戶測試驅動等的極限編程的實踐,作為對測試驅動開發的回應。

https://read01.com/0enao.html

Groovy

這門動態語言擁有類似Python、Ruby和Smalltalk中的一些特性,可以作為Java平台的腳本語言使用。Groovy的語法與Java非常相似,以至於多數的Java代碼也是正確的Groovy代碼。Groovy代碼動態的被編譯器轉換成Java字節碼。由於其運行在JVM上的特性,Groovy可以使用其他Java語言編寫的庫。groovy是一門比較輕量,學習門檻也比較低的語言。

specification language

如果接觸過不同語言類型的開源項目的話,就會發現有些項目中找不到測試目錄(test),取而代之的是一個叫「spec」的目錄,比如用ruby寫的項目gitlab。這裡的spec實際是specification的縮寫,它的背後是一種近些年來開始流行起來的編程思想:BDD(Behavior-driven development)。

參考資料來源:

https://read01.com/0enao.html

Harry

顛覆資訊提供大家網路資訊技術、投資領域分享、生活趣事旅遊的空間,站長Harry會傾全力將所知道的技術、知識、優惠好康都和各位分享,如果你覺得喜歡的話,請將文章連結分享給更多好朋友,讓更多人獲得實用的幫助,將世界變成一個更美好的天地。 同時在YouTube也有影片分享,不定時更新影片,歡迎各位收看精彩內容。 在Facebook也同步分享部落格的最新內容,請一定要鎖定喔!!

您可能也會喜歡…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *