我的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

我的Java开发技术总结_第1张图片

这里面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一下,欢迎拍砖!

你可能感兴趣的:(Java)