做好这几件事,代码质量可以提升一个档次

来源:http://www.chinese-glasses.com 作者:Web前端 人气:88 发布时间:2020-04-15
摘要:时间: 2019-09-30阅读: 77标签: 质量 本文转自: http://dev.yesky.com/103/11164603.shtml 这篇文章又是关于代码质量的,有些同学可能觉得我比较啰嗦。不过我就是想用这种方式让大家重视起来。其

时间: 2019-09-30阅读: 77标签: 质量

本文转自:http://dev.yesky.com/103/11164603.shtml

这篇文章又是关于代码质量的,有些同学可能觉得我比较啰嗦。不过我就是想用这种方式让大家重视起来。其实说来说去就那么几种方法,但是实际执行起来真是难于登天。

 

低质量的代码真的是一种灾难。当你的代码变得越来越混乱,维护起来就会花费大量的时间。在最坏的情况下,代码将变得不可维护,并且项目会慢慢终止。

敏捷开发的理念已经流行了很长的时间,在敏捷开发中的开发迭代阶段中,我们可以通过五个步骤,来有效的提高整个项目的代码质量。

为了避免这种情况,你需要注意你的代码质量。尝试在代码质量上花费一些时间,长久来看,这将对你有很大的好处。

  Java项目开发过程中,由于开发人员的经验、Java代码编写习惯,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维 护,需要较大的测试投入和周期等问题。这些问题在一个项目组初建、需求和设计均具有不完全可预期性和完备性的全新项目中将尤为突出。

无论你是管理者,测试人员或者是开发者都应该去自觉维护代码质量,因为在整个开发流程中,大家的目标都是交付可用的、高质量的代码。

  如图1所示,敏捷开发过程经历需求调研,用例分析和用例分解,进入开发迭代阶段。在每个迭代过程中,可以采用以下步骤来保证和提高整个项目的代 码质量:统一编码规范、代码样式;静态代码分析(staticcodereview);单元测试;持续集成;代码评审和重构 (Review&Refactor)。下文将针对每个步骤和其所使用的工具、方法进行详细描述。

要想提高代码质量,需要做到以下六件事,其中一些是一个人可以完成的,而有些则必须要团队配合。

  图片 1

  1. 四眼原则

  图1.敏捷开发中的Java代码质量保证步骤

四眼原则是易于理解和执行的。它的意思是必须要有至少两个人(包括作者)检查过代码,目前最流行的方法是Pull request。

  步骤一:统一编码规范、代码样式

Pull request是让你告诉别人你已经在GitHub上向分支push了一些代码改动。在开启Pull request之后,你就可以和协作者讨论潜在的问题,并且可以在你的代码被merge之前继续对它进行修改。——Github.com

  规范统一的编码会增加项目代码的可读性和可维护性,但实际情况往往是项目组内的Java代码开发人员的编码风格常常各不相同,这可能是由于不同 的经验习惯或者缺乏编码规范方面的学习造成的。这样一来,其他项目成员或者维护人员在阅读项目代码时就需要花费更多的时间来理解代码作者的意图,所以制定 并采取统一的编码规范就显得很重要。编码规范主要应包含以下几个方面:

在代码审查期间,有几件事需要考虑。其中之一是检查代码是否违反了约定的代码规则。这一过程可以通过在管道中使用linter来实现自动化,但有时也需要手动执行。

  ◆一般规则和格式规范。例如代码缩进、程序块规范、每行最大代码长度等。

另外一个需要检查的是代码的可维护性和错误处理。这件事还没办法自动化。最后,需要检查的是代码的完整性。这一修改是否完成了需要完成的全部功能?

  ◆命名规则。例如包名、类名、变量、方法、接口、参数等命名规范

  1. 持续集成

  ◆文档规范。例如类文件头声明、类注释、成员变量和方法注释等规范。

“开发环境是好的。”这是某些开发人员常说的,还有就是:“在我电脑上没问题”。

  ◆编程规范。例如异常、并发、多线程等方面的处理方式。

如果希望避免这种问题的争论。持续集成可以给你提供很大的帮助。

  ◆其他规范。例如日志格式、属性文件格式,返回值和消息格式。

持续集成是一种软件开发实践,团队的开发人员经常集成他们的工作,通常每人至少每天集成一次——这使得每天需要集成很多次。每次集成都应该由自动构建(包括测试)尽快确认是否存在集成错误。—— Martin Fowler

  项目的编码规范可以参考已有的一些Java编程规范书籍和其他相关资料并结合项目的本身来制定,可供参考的书籍有《Java编程风格》(英文书 名为:TheElementsofJavaStyle)。编码规范要形成文档,而且要简洁明了,并组织项目成员一起学习,确保所有成员正确理解所有条目。

持续集成的意义在于,它可以快速的向开发者提供结果反馈。

  一旦编码规范确定,就可以利用Eclipse自身提供的功能来控制代码样式和格式。具体做法是,点击Eclipse的 Windows->Preference菜单项,在打开的Preferences对话框的左侧栏中找到Java节点下的子项CodeStyle(如图2),该项 和它的子项允许您对Java代码的样式进行控制。

持续集成的两个基本作用是:

  图片 2

保持快速构建,没什么比一次耗时一小时的构建更让人沮丧的了。

  图2.Eclipse代码样式设置窗口

快速修复损坏的构建。持续集成会让你始终在一个稳定的版本的基础上进行开发。

  例如,为了使用自动格式化工具,可以在Eclipse提供的默认代码格式配置的基础上建立自定义的格式。在Formatter面板中,点击 New,输入新的名字并选择一个默认的配置作为初始化格式,如图3所示。

持续集成通过快速向开发者提供反馈来帮助提高代码质量。如果测试不通过,那么构建就会失败,此时开发者就会注意到。此外,最好在构建脚本中添加linter来检查是否符合编码规范。毫无疑问,这也是用于提高代码质量的。

  图片 3

  1. 编码规范

  图3.创建新的代码格式配置

拥有一系列的代码规约是非常重要的。但是在你开始制定代码规约之前,团队的每个人都应该参与。因为这期间可能存在大量的关于最优约定的讨论。

  单击OK后就可以在新打开的窗口中进行修改定制自己需要的格式。如图4所示。

编码规范中应该包括怎样声明和命名一个变量等等。规则的数量是没有限制的,并且以后可以继续调整,前提是这些规则对你和你的团队有帮助。

  图片 4

当编码规范制定好以后,请务必遵守。就像我前面提到的,最好的检查办法是在管道中增加linter,这样就不需要人工干预了。如果不这样做,也可以选择在本地安装linter。但要保证在每次提交之前规范使用linter。这样你的团队的代码风格将非常统一,有利于提升代码的可读性和可维护性。

  图4.创建新的代码格式配置

高质量的代码可以加快软件开发的速度,因为它可以被复用,并且开发人员不必花费大量时间修改bug和完善代码。同时新人加入项目也会更快适应。

  修改完成后点击Apply保存所作修改。同时可以点击Export将当前的格式定义导出成一个XML文件,这样项目组的其他成员就可以很方便通 过点击图3中的Import按钮来导入该XML文件来使用同一个代码格式定义。

  1. 测试,测试,测试

  这样每次在提交代码到版本控制服务器前就可以通过Eclipse界面里的Source->Format菜单来对代码进行格式化,从而 使整个项目的代码具有相同的格式。同样可以通过对CodeStyle下的其他项目进行设置来帮助对Java代码的样式进行控制。将所有这些样式文件导出成 XML文件后,同编码规范一起归档,供所有项目成员使用。

代码质量越高,bug就越少。我们通常通过测试过滤出严重的bug,确保代码按照预期执行。

  步骤二:静态代码分析

制定清晰的测试策略对于提高代码质量至关重要。至少要保证你的代码可以通过单元测试。如果你以其他方式进行测试就更好了,例如集成测试或回归测试。

  在完成源代码的开发以后,下面要进行的工作就是审视和测试代码。除了通过运行测试代码来检查功能之外,还能利用一些静态分析工具来快速、直接地 提高代码质量。静态代码分析工具并不需要运行代码,可以直接对Java文件和Class文件进行分析,通过一些检查条件的设置,快速找到代码中的错误和潜 在缺陷。现在的静态分析工具很多,有FindBugs、PMD、IBMRationalTool,等等。在这里,选择FindBugs作为静态代码分析工 具。FindBugs可以和日常开发工具Eclipse进行集成,在开发过程中,就可以方便的开始静态代码的检查。通过检查Class文件或者JAR文 件,将字节码和一组缺陷模式进行对比,来发现可能存在的代码问题。在Eclipse的开发环境中,用插件安装的方式安装了Findbugs后,在 Eclipse的配置选项中就会多出来FindBugs的配置选项。可以对自己的项目进行配置,选择需要的Detector检查代码。

根据测试金字塔,项目中数量最多的测试应该是单元测试,因为它们既简单又快速。有很多工具可以帮助你创建单元测试并生成代码覆盖率报告。

  图片 5

跑单元测试和生成代码覆盖率报告可以通过持续集成自动进行。当代码覆盖率达不到要求时,持续集成也会构建失败。

  图5.FindBugs的配置选项

  1. 分析bug

  设置好自己的规则后,在需要检查的代码文件夹上点击右键,就可以启动FindBugs检查。代码可以是一个项目,也可以只是几个文件。

代码中有bug是必然的事情,如何处理这些bug才是关键。如果你想要提升自己,学会从错误中学习至关重要。这也是为什么你要分析bug。

  图片 6

发现bug后,先分析bug的影响。是一个低优先级的还是高优先级的?如果是高优先级的,就需要尽快解决。

  图6.运行FindBugs

分析bug时,你需要问自己一些问题。是什么导致了错误?为什么没有测出来?其他地方也有可能发生吗?以及我们应该怎样避免类似的bug产生?

  检查完毕后,会出现FindBugs视图,把所有检查的结果根据错误分组展示。点击结果里面的每一个错误,会自动打开对应的代码。当根据规则改 正了所有的错误,或者说潜在错误,这些代码也就通过了静态代码检查。FindBugs的检查结果可以是XML文件,也可以是文本文件,便于项目的集成管理 和检查保存。

当然,我们也要学会使用工具追踪bug。目前市面上有许多可用的bug追踪工具,你可以根据需要选择适合自己的工具。

  图片 7

  1. 开始量化

  图7.FindBugs检查结果

在开始量化时,可以用几个指标来衡量代码的质量。

  步骤三:单元测试

缺陷指标

  单元测试用例设计和评审

缺陷的数量和缺陷的严重程度是衡量代码质量的重要指标。如果你想追踪bug,可以使用bug燃尽图。bug燃尽图和软件敏捷开发中的正常燃尽图一样。唯一不同的是bug燃尽图包含未修复的bug,而不是事故点。

  单元测试是软件开发过程中重要的质量保证环节,在此环节中,设计和评审对于保证整个单元测试过程的完整性和有效性来说十分重要。设计阶段需要具 体考虑要对哪些代码单元进行测试,被测单元之间的关系,测试策略,以及单元测试用例设计等,并最终输出《单元测试用例设计》文档,用来指导具体的单元测试 执行。在用例设计中,通过对代码单元输入和期待输出的定义来保证该单元的功能正确性,边界值的测试和异常测试非常重要。同时也配合测试用例和功能块的匹配 方法来衡量用例设计的完整性。

复杂度指标

  在用例设计完成之后,下一步的工作就是进行测试用例的评审。个人的理解和经验始终是有限的,用例评审可以借集体之力,对用例设计进入查漏补缺, 进一步保证测试用例的有效性。由于单元测试属于白盒测试范畴,它主要通过对代码的逻辑结构进行分析来设计测试用例,因此,评审员的选择最好以理解代码逻辑 结构为前提,如果评审员来自相关模块,还能够有效的发现模块相关性和依赖性所带来的问题。

复杂度通常由圈复杂度衡量,它是程序的源代码线性独立路径数量的一个衡量。

  模拟对象技术

圈复杂度数和缺陷频率之间存在一定的相关性:

  在实际项目中,开发人员自己的代码往往需要和其他的代码模块或系统进行交互,但在测试的过程中,这些需要被调用的真实对象常常很难被实例化,或 者这些对象在某些情况下无法被用来测试,例如,真实对象的行为无法预测,真实对象的行为难以触发,或者真实对象的运行速度很慢。这时候,就需要使用模拟对 象技术(Mock),利用一个模拟对象来模拟我们的代码所依赖的真实对象,来帮助完成测试,提高测试覆盖率,从而提高代码质量。模拟对象技术利用了在面向 接口的编程中,由于代码直接对接口进行调用,所以代码并不知道引用的是真实对象还是模拟对象,这样就可以顺利的完成对代码的测试,模拟技术有很多种,如 jMock,EasyMock,Mockito,PowerMock等等。其中Mockito消除了对期望行为的需求,避免了这些代码的大量初始化。

许多研究调查了函数或方法中圈复杂度数和缺陷频率数之间的相关性。有些研究发现了圈复杂度和缺陷数的正相关性:函数和方法越复杂,缺陷也就会越多。然而,圈复杂度和程序大小之间的相关性已被多次证明。

  图片 8

从理论上来讲,降低代码的复杂度会使缺陷更少。

  图8.Mockito示例

原文地址:-programming/things-that-you-can-do-to-improve-code-quality-c746c30e7521

  在模拟对象过程中,先模拟一个需要调用的List对象LinkedList,再设定这个对象的行为,当调用get(0)的时候,返 回”first”。这样,测试代码就可以利用这个对象来测试我们的功能代码,需要调用和返回值的时候,可以顺利的得到模拟对象的返回值。也需要对模拟对象 进行错误情况的模拟,保证代码对错误的处理的正确性。

  测试覆盖率分析

  为了衡量单元测试的质量和覆盖的范围,需要对单元测试的代码进行测试覆盖分析。常用的衡量测试覆盖率的指标主要有语句覆盖率、分支覆盖率、路径 覆盖率、条件覆盖率和方法覆盖率等。具体采用哪些指标可以根据项目的实际情况来定,以避免因过高的指标增加了代码开发人员的工作量而影响了项目整体的进 度。

本文由10bet发布于Web前端,转载请注明出处:做好这几件事,代码质量可以提升一个档次

关键词:

最火资讯