我的Java開發技術總結
做了Java已經多年,深深感覺軟體開發這門工程學發展迅速,各種技術層出不窮,現在Java系統開發比起10多年前容易不少。有太多太多的各種工具來幫助保證質量,幫助快速開發部署。程式設計師可以更多的關注在業務邏輯的程式碼開發,而不是構建,部署。在不同的工作環境和工作經歷中,我深深感覺到技術,流程對開發的巨大影響。工欲善其事,必先利其器這句話對軟體開發也是非常適用的。
最近公司招人,面試了不少人,發現很多人所在的公司對專案的開發還是停留在作坊式,並沒有花時間去建立好的開發流程,好好的利用各種工具。在我看來,雖然建立好的開發流程需要花費不少時間去研究和整合各種工具,但是可以說是有百利無一害的好事情。在大開發方向上,完全可以在不同專案之間重用,只有細節環節上需要各個專案提供自己的特殊實現。接下來分享下我自己工作經驗中Java專案開發使用的技術和工具,和大家交流交流。
首先需要source control工具來儲存統一原始碼,方便版本控制。這個基本上每個公司都會有,免費的一般有git和svn,很顯然git比svn好太多。SVN建立/checkout一個branch總是要等半天。
接下來需要好的IDE來幫助開發,在Java裡面Eclipse和Intellij可以算是通用主流工具了。
開發的程式碼需要打包成執行的產品,可以是包含執行環境的zip,也可以是單個或者多個war,ear包。Maven或者Gradle是好幫手。
產品也需要版本控制,maven nexus可以用來儲存和管理產品包,方便維護。
產品需要部署到測試,生產環境中,如何自動化部署是一個非常重要的課題,在這一步上,好的工具都是要錢的,大部分的時候還是要根據執行環境使用指令碼來執行。
部署之後的系統需要7*24小時實時監控,除去公共監控屬性,例如:CPU,Memory,IO,network之外,系統特別需要設計好自己要監控的Metrics Data,資料可以在nagious和Graphite中展示。另外大的系統還可能需要日誌分析工具Logstach和electricsearch。
當然開發的程式碼自然需要保證程式碼質量,這個時候Junit和Mock進行單元測試,外接Mock Service進行功能和整合測試,Jmeter等工具進行壓力和效能測試,Sonar可用於檢查程式碼規範和測試覆蓋。如果有需要,也可以使用code review工具比如:gerrit。
最後這些工具需要一個統一的環境來達到自動觸發測試,構建(例如:每次程式碼提交或者每天),這個時候我們可以使用Jenkins來達到這個目的。
列出清單如下:
1. Source code Control: Git
2. Project Develop IDE: Eclipse
3. Code Review:gerrit
4. Code Quality Control: JUnit/FT/IT/Sonar
5. Project management and comprehension tool: maven
6. Deployment: scripts
7. Continues Integration & Auto deploy: Jenkins
8. Application Monitor: nagious
9. Log Analysis:Logstash & electric search
10. Performance testing: jmeter
這裡面Git, Eclipse, Gerrit, Sonar, Maven, Jenkins, nagioius都是可以可重用的工具,而單元測試,整合測試,效能壓力測試,自動化部署,系統內部指標監控就必須每個系統各自弄各自的一份。
工具是死的,人是活的。如果能夠用好這些工具,那麼敏捷,devops就近在眼前,開發可以變的更簡單。如果對工具的使用不定義好相關的規則,只是胡亂使用,比如提交程式碼不加入相應的bug id,feature id,無法追查程式碼提交緣由,單元測試只是呼叫被測試程式碼,不檢查測試結果,再好的工具也是枉然。
注1:這裡面只是列了我在工作環境中使用過的能夠有效幫助系統開發的工具,其中有一部分我只是有使用經驗,並沒有安裝和troubleshooting的經驗。歡迎大家一起來討論如何有效使用工具幫助優化開發。
注2:這裡不涉及開發流程中的功能和bug管理系統的討論,因為公司用的都是要錢的Jira。Eclipse自帶的mylyn不知道怎麼樣,大家可以參考https://eclipse.org/mylyn/new/ http://www.tasktop.com/resources/videos/git-gerrit-hudson-one-mylyn 自己整合看看,有其他好用的,也希望大家可以推薦有免費,謝謝。
注3:有空會慢慢把自己用過的安裝過的東西拿出來和大家share一下,歡迎拍磚!