前言
Java 项目开发过程中,由于开发人员的经验、代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入和周期等问题。这些问题在一个项目组初建、需求和设计均具有不完全可预期性和完备性的全新项目中将尤为突出。本文将结合敏捷开发周期短,变化快等特点,介绍如何通过在开发过程中采取一系列步骤来保证和提高整个开发团队的代码质量,并阐述了每一步可以利用的工具和最佳实践,从而使开发过程更加规范化,成就高质量的代码,减少测试的投入,并促进整个团队的技能提高,最终提高开发效率和质量。(来源于网络)
Java 代码质量保证步骤
敏捷开发过程经历需求调研,用例分析和用例分解,进入开发迭代阶段。在每个迭代过程中,可以采用以下五个步骤来保证和提高整个项目的代码质量:统一编码规范、代码样式;静态代码分析(static code review);单元测试;持续集成;代码评审和重构(Review & Refactor)。下文将针对每个步骤和其所使用的工具、方法进行详细描述。(来源于网络)
开发中的 Java 代码质量保证步骤:
代码质量保证步骤.png
步骤一:统一编码规范、代码样式
编码规范主要应包含以下几个方面:
- 一般规则和格式规范。例如代码缩进、程序块规范、每行最大代码长度等。
- 命名规则。例如包名、类名、变量、方法、接口、参数等命名规范
- 文档规范。例如类文件头声明、类注释、成员变量和方法注释等规范。
- 编程规范。例如异常、并发、多线程等方面的处理方式。
- 其他规范。例如日志格式、属性文件格式,返回值和消息格式。
Java编程风格使用谷歌代码规范:http://www.hawstein.com/posts/google-java-style.html
补充
日志格式:建议采用:命名空间(类全路径):业务keyword(如发送短信:sendSms):必要程序上下文关键信息(以短信为例:短信接收者手机号以及短信模板Id)。
属性文件格式:属性文件建议采用全小写多个单词用点隔开例如:dev.db.url=jdbc:mysql://192.168.188.43:13306/Trade
返回值和消息格式:均使用标准的json格式
编码规范确定后,就可以利用 IDEA 自身提供的功能来控制代码样式和格式,具体步骤如下:
1.下载Google Code Style配置文件:\\192.168.188.22\互联网金融事业部\信息技术部\soft\cofig\ide-code-stype\intellij-java-google-style.xml
2.在C:\Users\用户名.IntelliJIdea2016.2(根据你安装的版本不同文件名可能不同)\config下创建codestyles文件夹
3.复制文件intellij-java-google-style.xml到codestyles目录下并重启IDEA
4.选择Java的默认代码样式和格式为GoogleStyle并点击Apply应用
选择代码样式.png
步骤二:静态代码分析
在完成源代码的开发以后,下面要进行的工作就是审视和测试代码。除了通过运行测试代码来检查功能之外,还能利用一些静态分析工具来快速、直接地提高代码质量。静态代码分析工具并不需要运行代码,可以直接对 Java 文件和 Class 文件进行分析,通过一些检查条件的设置,快速找到代码中的错误和潜在缺陷。现在的静态分析工具很多,有 FindBugs、PMD、IBM Rational Tool,等等。在这里,选择 FindBugs 作为静态代码分析工具。FindBugs 可以和日常开发工具 IDEA进行集成,在开发过程中,就可以方便的开始静态代码的检查。通过检查 Class 文件或者 JAR 文件,将字节码和一组缺陷模式进行对比,来发现可能存在的代码问题。在 IDEA的开发环境中,用插件安装的方式安装了 Findbugs 后,在 IDEA的配置选项中就会多出来 FindBugs 的配置选项。(来源于网络)
1.安装FindBugs插件:
Paste_Image.png
如果没有vpn会有点慢,建议大家买一个vpn,再有就是本地安装插件。
地址:\\192.168.188.22\互联网金融事业部\信息技术部\soft\ide-plugins\FindBugs-IDEA-1.0.1.zip
2.FindBugs基本使用和配置
安装完插件并重启idea后可以在左下角看到findbugs的视图,如果没有可以在View->Tool Windows中调出该视图。
点击运行即可开始分析(代码需要编译),运行完成后可以看到几个分类的结果。
run findbugs
findbugs可以找出的问题分类
1.Security 关于代码安全性防护,如创建数据库连接时没有使用密码
2.Experimental 使用试验性的技术
3.Bad practice 代码实现中的一些坏习惯
4.Correctness 关于代码正确性相关方面的问题
5.Performance 关于代码性能相关方面的问题
6.Internationalization 关于代码国际化相关方面的问题
7.Multithreaded correctness关于代码多线程正确性相关方面的问题
8.Malicious codevulnerability 关于恶意破坏代码相关方面的问题
9.Dodgy 关于代码运行期安全方面的
更多的bug详细描述可以查看:http://findbugs.sourceforge.net/bugDescriptions.html
中文参考:http://blog.csdn.net/u011251014/article/details/49764937
3.查看bug相关的详情已经相关的代码
bug.png
步骤三:单元测试
单元测试用例设计和评审
单元测试是软件开发过程中重要的质量保证环节,在此环节中,设计和评审对于保证整个单元测试过程的完整性和有效性来说十分重要。设计阶段需要具体考虑要对哪些代码单元进行测试,被测单元之间的关系,测试策略,以及单元测试用例设计等,并最终输出《单元测试用例设计》文档,用来指导具体的单元测试执行。在用例设计中,通过对代码单元输入和期待输出的定义来保证该单元的功能正确性,边界值的测试和异常测试非常重要。同时也配合测试用例和功能块的匹配方法来衡量用例设计的完整性。
在用例设计完成之后,下一步的工作就是进行测试用例的评审。个人的理解和经验始终是有限的,用例评审可以借集体之力,对用例设计进入查漏补缺,进一步保证测试用例的有效性。由于单元测试属于白盒测试范畴,它主要通过对代码的逻辑结构进行分析来设计测试用例,因此,评审员的选择最好以理解代码逻辑结构为前提,如果评审员来自相关模块,还能够有效的发现模块相关性和依赖性所带来的问题。
模拟对象技术
在实际项目中,开发人员自己的代码往往需要和其他的代码模块或系统进行交互,但在测试的过程中,这些需要被调用的真实对象常常很难被实例化,或者这些对象在某些情况下无法被用来测试,例如,真实对象的行为无法预测,真实对象的行为难以触发,或者真实对象的运行速度很慢。这时候,就需要使用模拟对象技术(Mock),利用一个模拟对象来模拟我们的代码所依赖的真实对象,来帮助完成测试,提高测试覆盖率,从而提高代码质量。模拟对象技术利用了在面向接口的编程中,由于代码直接对接口进行调用,所以代码并不知道引用的是真实对象还是模拟对象,这样就可以顺利的完成对代码的测试。
模拟技术有很多种,如 jMock,EasyMock,Mockito,PowerMock 等等。其中 Mockito 消除了对期望行为的需求,避免了这些代码的大量初始化。(来源于网络)
1.Juint使用
更新中。。。
2.EasyMock使用
更新中。。。
步骤四:持续集成
使用Jenkins持续集成
更新中。。。
步骤五:代码评审和重构
代码评审(Code Review)是 Java 项目开发过程中的一个重要步骤,代码评审可以帮助发现静态代码分析过程中无法发现的一些问题,例如代码的编写是否符合编码规范,代码在逻辑上或者功能上是否存在错误,代码在执行效率和性能上是否有需要改进的地方,代码的注释是否完整正确,代码是否存在冗余和重复。代码评审还可以帮助新进入项目组的成员快速学习和了解项目,促进经验分享,同时也能保证项目成员的良好沟通。代码评审主要包括两种形式,同级评审(Peer Review)和小组评审(Group Review)。同级评审主要指项目成员间的互相评审,小组评审是指通过召开评审会议,项目成员一起对项目代码进行评审。(来源于网络)
代码评审工具:upsource
更新中。。。
网友评论