Java 项目开发过程中,由于开发人员的经验、代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入 和周期等问题。这些问题在一个项目组初建、需求和设计均具有不完全可预期性和完备性的全新项目中将尤为突出。本文将结合敏捷开发周期短,变化快等特点,介 绍如何通过在开发过程中采取一系列步骤来保证和提高整个开发团队的代码质量,并阐述了每一步可以利用的工具和最佳实践,从而使开发过程更加规范化,成就高 质量的代码,减少测试的投入,并促进整个团队的技能提高,最终提高开发效率和质量。
如图 1 所示,敏捷开发过程经历需求调研,用例分析和用例分解,进入开发迭代阶段。在每个迭代过程中,可以采用以下五个步骤来保证和提高整个项目的代码质量:统一 编码规范、代码样式;静态代码分析(static code review);单元测试;持续集成;代码评审和重构(Review & Refactor)。下文将针对每个步骤和其所使用的工具、方法进行详细描述。
图 1. 敏捷开发中的 Java 代码质量保证步骤
步骤一:统一编码规范、代码样式
规范统一的编码会增加项目代码的可读性和可维护性,但实际情况往往是项目组内的 Java 代码开发人员的编码风格常常各不相同,这可能是由于不同的经验习惯或者缺乏编码规范方面的学习造成的。这样一来,其他项目成员或者维护人员在阅读项目代码 时就需要花费更多的时间来理解代码作者的意图,所以制定并采取统一的编码规范就显得很重要。编码规范主要应包含以下几个方面:
- 一般规则和格式规范。例如代码缩进、程序块规范、每行最大代码长度等。
- 命名规则。例如包名、类名、变量、方法、接口、参数等命名规范
- 文档规范。例如类文件头声明、类注释、成员变量和方法注释等规范。
- 编程规范。例如异常、并发、多线程等方面的处理方式。
- 其他规范。例如日志格式、属性文件格式,返回值和消息格式。
项目的编码规范可以参考已有的一些 Java 编程规范书籍和其他相关资料并结合项目的本身来制定,可供参考的书籍有《 Java 编程风格》(英文书名为:The Elements of Java Style)。编码规范要形成文档,而且要简洁明了,并组织项目成员一起学习,确保所有成员正确理解所有条目。
一旦编码规范确定,就可以利用 Eclipse 自身提供的功能来控制代码样式和格式。具体做法是,点击 Eclipse 的 Windows -> Preference 菜单项,在打开的 Preferences 对话框的左侧栏中找到 Java 节点下的子项 Code Style(如图 2),该项和它的子项允许您对 Java 代码的样式进行控制。
图 2. Eclipse 代码样式设置窗口
例如,为了使用自动格式化工具,可以在 Eclipse 提供的默认代码格式配置的基础上建立自定义的格式。在 Formatter 面板中,点击 New,输入新的名字并选择一个默认的配置作为初始化格式,如图 3 所示。
修改完成后点击 Apply 保存所作修改。同时可以点击 Export 将当前的格式定义导出成一个 XML 文件,这样项目组的其他成员就可以很方便通过点击图 3 中的 Import 按钮来导入该 XML 文件来使用同一个代码格式定义。
这样每次在提交代码到版本控制服务器前就可以通过 Eclipse 界面里的 Source->Format 菜单来对代码进行格式化,从而使整个项目的代码具有相同的格式。同样可以通过对 Code Style 下的其他项目进行设置来帮助对 Java 代码的样式进行控制。将所有这些样式文件导出成 XML 文件后,同编码规范一起归档,供所有项目成员使用。
步骤二:静态代码分析
在完成源代码的开发以后,下面要进行的工作就是审视和测试代码。除了通过运行测试代码来检查功能之外,还能利用一些静态分析工具来快速、直接 地提高代码质量。静态代码分析工具并不需要运行代码,可以直接对 Java 文件和 Class 文件进行分析,通过一些检查条件的设置,快速找到代码中的错误和潜在缺陷。现在的静态分析工具很多,有 FindBugs、PMD、IBM Rational Tool,等等。在这里,选择 FindBugs 作为静态代码分析工具。FindBugs 可以和日常开发工具 Eclipse 进行集成,在开发过程中,就可以方便的开始静态代码的检查。通过检查 Class 文件或者 JAR 文件,将字节码和一组缺陷模式进行对比,来发现可能存在的代码问题。在 Eclipse 的开发环境中,用插件安装的方式安装了 Findbugs 后,在 Eclipse 的配置选项中就会多出来 FindBugs 的配置选项。可以对自己的项目进行配置,选择需要的 Detector 检查代码。
本文作者:网友 来源: http://www.oschina.net/docs/article/11661
CIO之家 www.ciozj.com 微信公众号:imciow