敏捷开发中高质量Java代码开发实践

上传人:无*** 文档编号:132766435 上传时间:2022-08-09 格式:DOC 页数:22 大小:1.45MB
收藏 版权申诉 举报 下载
敏捷开发中高质量Java代码开发实践_第1页
第1页 / 共22页
敏捷开发中高质量Java代码开发实践_第2页
第2页 / 共22页
敏捷开发中高质量Java代码开发实践_第3页
第3页 / 共22页
资源描述:

《敏捷开发中高质量Java代码开发实践》由会员分享,可在线阅读,更多相关《敏捷开发中高质量Java代码开发实践(22页珍藏版)》请在装配图网上搜索。

1、本文将介绍在敏捷开发过程中如何通过采取一系列的步骤来保证和提高整个项目的代码质量,阐述了每一步可以利用的工具和最佳实践,从而使开发过程更加规范化,成就高质量的代码。概述项目开发过程中,由于开发人员的经验、代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入和周期等问题。这些问题在一个项目组初建、需求和设计均具有不完全可预期性和完备性的全新项目中将尤为突出。本文将结合敏捷开发周期短,变化快等特点,介绍如何通过在开发过程中采取一系列步骤来保证和提高整个开发团队的代码质量,并阐述了每一步可以利用的工具和最佳实践,从而使开发过程更加规范化,成就高

2、质量的代码,减少测试的投入,并促进整个团队的技能提咼,最终提咼开发效率和质量。如图1所示,敏捷开发过程经历需求调研,用例分析和用例分解,进入开发迭代阶段。在每个迭代过程中,可以采用以下五个步骤来保证和提咼整个项目的代码质量:统一编码规范代码样式;静态代码分析();单元测试;持续集成;代码评审和重构()R下文将针对每个步骤和其所使用的工具、方法进行详细描述。图敏捷开发中的代码质量保证步骤代码质量保证步骤5.代码评审和重构UserStoryBacklogCase/TaskBacklog用户需求UserStories步骤一:统一编码规范、代码样式规范统一的编码会增加项目代码的可读性和可维护性,但实际

3、情况往往是项目组内的Ja代码开发人员的编码风格常常各不相同,这可能是由于不同的经验习惯或者缺乏编码规范方面的学习造成的。这样一来,其他项目成员或者维护人员在阅读项目代码时就需要花费更多的时间来理解代码作者的意图,所以制定并采取统一的编码规范就显得很重要。编码规范主要应包含以下几个方面:一般规则和格式规范。例如代码缩进、程序块规范、每行最大代码长度等。命名规则。例如包名、类名、变量、方法、接口、参数等命名规范文档规范。例如类文件头声明、类注释、成员变量和方法注释等规范。编程规范。例如异常、并发、多线程等方面的处理方式。其他规范。例如日志格式、属性文件格式,返回值和消息格式。项目的编码规范可以参考

4、已有的一些编程规范书籍和其他相关资料并结合项目的本身来制定,可供参考的书籍有编程风格(英文书名为:)。编码规范要形成文档,而且要简洁明了,并组织项目成员一起学习,确保所有成员正确理解所有条目。一旦编码规范确定,就可以利用自身提供的功能来控制代码样式和格式。具体做法是,点击的菜单项,在打开的对话框的左侧栏中找到节点下的子项(如图2该项和它的子项允许您对代码的样式进行控制。代码样式设置窗口例如,为了使用自动格式化工具,可以在提供的默认代码格式配置的基础上建立自定义的格式。在面板中,点击,输入新的名字并选择一个默认的配置作为初始化格式,如图所示。图创建新的代码格式配置单击后就可以在新打开的窗口中进行

5、修改定制自己需要的格式。如图所示。图创建新的代码格式配置修改完成后点击保存所作修改。同时可以点击将当前的格式定义导出成一个文件,这样项目组的其他成员就可以很方便通过点击图中的按钮来导入该文件来使用同一个代码格式定义。这样每次在提交代码到版本控制服务器前就可以通过界面里的菜单来对代码进行格式化,从而使整个项目的代码具有相同的格式。同样可以通过对下的其他项目进行设置来帮助对代码的样式进行控制。将所有这些样式文件导出成文件后,同编码规范一起归档,供所有项目成员使用。步骤二:静态代码分析在完成源代码的开发以后,下面要进行的工作就是审视和测试代码。除了通过运行测试代码来检查功能之外,还能利用一些静态分析

6、工具来快速、直接地提高代码质量。静态代码分析工具并不需要运行代码,可以直接对文件和文件进行分析,通过一些检查条件的设置,快速找到代码中的错误和潜在缺陷。现在的静态分析工具很多,有ma等等。在这里,选择作为静态代码分析工具。可以和日常开发工具进行集成,在开发过程中,就可以方便的开始静态代码的检查。通过检查文件或者文件,将字节码和一组缺陷模式进行对比,来发现可能存在的代码问题。在的开发环境中,用插件安装的方式安装了后,在的配置选项中就会多出来的配置选项。可以对自己的项目进行配置,选择需要的检查代码。图的配置选项设置好自己的规则后,在需要检查的代码文件夹上点击右键,就可以启动检查。代码可以是一个项目

7、,也可以只是几个文件。图6.运行FindBugsFindBugsRefreshAssigrLWorkingSets其Cle:=Lt_BugM:=Lfkei_sTp7com.Iom.E+p?com.ibm.5I”Eicom.ibm.弓检查完毕后,会出现视图,把所有检查的结果根据错误分组展示。点击结果里面的每一个错误,会自动打开对应的代码。当根据规则改正了所有的错误,或者说潜在错误,这些代码也就通过了静态代码检查。的检查结果可以是文件,也可以是文本文件,便于项目的集成管理和检查保存。检查结果图步骤三:单元测试单元测试用例设计和评审,单元测试是软件开发过程中重要的质量保证环节,在此环节中,设计和评审

8、对于保证整个单元测试过程的完整性和有效性来说十分重要。设计阶段需要具体考虑要对哪些代码单元进行测试,被测单元之间的关系,测试策略,以及单元测试用例设计等,并最终输出单元测试用例设计文档,用来指导具体的单元测试执行。在用例设计中,通过对代码单元输入和期待输出的定义来保证该单元的功能正确性,边界值的测试和异常测试非常重要。同时也配合测试用例和功能块的匹配方法来衡量用例设计的完整性。,在用例设计完成之后,下一步的工作就是进行测试用例的评审。个人的理解和经验始终是有限的,用例评审可以借集体之力,对用例设计进入查漏补缺,进一步保证测试用例的有效性。由于单元测试属于白盒测试范畴,它主要通过对代码的逻辑结构

9、进行分析来设计测试用例,因此,评审员的选择最好以理解代码逻辑结构为前提,如果评审员来自相关模块,还能够有效的发现模块相关性和依赖性所带来的问题。,模拟对象技术,在实际项目中,开发人员自己的代码往往需要和其他的代码模块或系统进行交互,但在测试的过程中,这些需要被调用的真实对象常常很难被实例化,或者这些对象在某些情况下无法被用来测试,例如,真实对象的行为无法预测,真实对象的行为难以触发,或者真实对象的运行速度很慢。这时候,就需要使用模拟对象技术(),利用一个模拟对象来模拟我们的代码所依赖的真实对象,来帮助完成测试,提高测试覆盖率,从而提高代码质量。模拟对象技术利用了在面向接口的编程中,由于代码直接

10、对接口进行调用,所以代码并不知道引用的是真实对象还是模拟对象,这样就可以顺利的完成对代码的测试。模拟技术有很多种,如,sM,itr等等。其中消除了对期望行为的需求,避免了这些代码的大量初始化。图示例it/Youcanrnockconcreteclasses,notonlyinterfacesLinkeclList.irnjckPLiList.=mock(LinkeciList.丄/stulzitoing一已foreexecutionwhen(rriijckeclList.些已匸i:匚i:i:i匸henRet.urn(prfir5t.pr);/followingprintsp|lfirstprS

11、yst.enicutprint.In(iciuckedList.get(U:i:i;/folloiijingprintsrrnullpp匕已causeget.(999)wasnotstutDbedSyst.ernoutp匸in匸丄ni:n:QC!kE!dLi已匸叨已匸1:999:1:i;在模拟对象过程中,先模拟一个需要调用的is对象i,再设定这个对象的行为,当调用t的时候,返回”first”。这样,测试代码就可以利用这个对象来测试我们的功能代码,需要调用和返回值的时候,可以顺利的得到模拟对象的返回值。也需要对模拟对象进行错误情况的模拟,保证代码对错误的处理的正确性。测试覆盖率分析为了衡量单元测

12、试的质量和覆盖的范围,需要对单元测试的代码进行测试覆盖分析。常用的衡量测试覆盖率的指标主要有语句覆盖率、分支覆盖率、路径覆盖率、条件覆盖率和方法覆盖率等。具体采用哪些指标可以根据项目的实际情况来定,以避免因过高的指标增加了代码开发人员的工作量而影响了项目整体的进度。是一款比较流行的开源测试覆盖率分析工具,支持类、方法、代码行、基本代码块等多种类型的测试覆盖率分析,支持将覆盖率分析结果导出为多种格式的报告,并采用多种颜色来高亮显示不同的覆盖率状态。是一款基于的i插件,方便在is中进行测试覆盖率分析。如图,在测试用例写好后,可以在右键点击测试类,选择rsitst图9.运行测试覆盖分析ElProje

13、dDebugAsProfileAsCoverageAsValidateJIJUnitTestCoverageConfigurations.4sampleTeamCompareWithReplaceWithRestorefromLocalHistory.WebServicesPropertiesAltHnterr斗AddReviewIssue.AllTests.javaIiiTestCommandExecuto71TestFileUtil.java单元测试跑完后,视图中会显示所选择的测试的覆盖率。双击打开某一具体的类后,可以看到高亮显示的覆盖分析结果,如图所示。红色代表测试没有覆盖到该行,黄色表

14、示部分覆盖,绿色的行表示该行在本次测试中被覆盖到。图查看测试覆盖分析结果T|CommonUtils.java国FileUtiLjava凉publicclassFileUtil卜iipublicstaticbooleanch皂日上皂Dir(Stringpathbooleanresult=false;Filedir=newFile(path;if(dir.exists()result=(dirzisDziHEUtciry(=true?true:faJelse工皂suit=dirmkdirs(;1=1returnresult;ElementQVz7sample&src1$-ffiiji-:com.i

15、bm.sample.cmdcom.ibm.sample.utilsICommo仃UtikJ已甘已|ConstaT|FileUtiLjavaCoverage|CoveredInstruction呂|TotalInstru匚tion呂书.8%35571.344.5%28564071.2%12617734.3%1594639.5%1010524.9%4819350.0%3366v|视图中可以通过点击鼠标右键将测试覆盖分析的结果导出成需要的格式,例如图导出测试覆盖分析结果图显示了导出的图测试覆盖分析报告为了保证单元测试的有效性和质量,可以规定一个测试覆盖率的下限,例如所有的包和类的覆盖率必须达到80以

16、%上。不过值得注意的是,不要单纯追求高覆盖率,要同时注意测试用例的质量,如果测试用例本身就写的有错误,那么即使测试覆盖率很高也没有意义。步骤四:持续集成持续集成()是利用一系列的工具,方法和规则,做到快速的构建开发代码,自动的测试化,来提高开发代码的效率和质量。利用自动构建工具,随时都能把提交的代码构建出来,提供一个可以测试使用的版本,让用户和开发人员同时看到相同的功能,尽早的发现问题和错误,也可以尽快的得到测试人员和用户的反馈。要做到持续集成,就要利用一系列工具,把开发过程中的重复工作自动化。搭建自动的构建服务器,自动的进行单元测试和发布新版本,一个集成的服务器可以提供构建过程的结果报告,自

17、动通知开发人员构建结果,并且保存历史数据。可以提供工作任务的管理,项目计划的安排,代码版本管理控制,自动构建可用版本,生成构建结果报告。这些过程构成了项目的持续集成过程,其中,版本的自动构建和代码的自动单元测试是持续集成的关键过程,在这些过程上提供了有力的支持。自动构建提供了来负责构建,首选,启动,并和服务器建立了连接。再创建项目的定义。在这个定义中,需要设定编译哪些模块的代码,需要跳动哪个文件来启动编译,和一些编译过程中的参数的设定。当这些都准备好了,编译对于项目而言,就变成一个简单的事情。可以看到,通过在定义上,点击请求构建,就可以触发一次构建过程。选择需要的构建参数,这个过程就会在后台运

18、行。每一个开发人员,做了稍许的代码改变和提交,都可以触发新的构建过程,来保证我们代码的有效性。申请一个新的构建的过程如图这1、3图这1所示。这申.请这一个新的构建图14构.建申请界面当构建结束后。服务器会提供构建结果报告。开发人员可以查询到这次构建的详细信息。图构建结果整个开发过程中,构建版本的过程应该是无数次的,通过每次构建,都可以得到当时代码的编译情况,并且可以得到一个可运行的软件版本。在构建定义上,支持设置构建计划。定时自动的触发一次构建。图16构.建定义CSTLLocalftpBuild口BuildDefinition禅孙臥亡ID:CSTLLo匚alftpBuildProjectorT

19、eamArea:SampleProject1.0TeamBrowse.ScheduleScheduleforautomaticallyrunningthisbuild.叼乍胆匪d;BuildTmeBuildDaysMondayTuesdayWednesdayThursdayFridaySaturdaySundayOverviewSchedulePropertiesJazzSourceControlAnt自动单元测试构建可以自动了,重点提高代码质量的单元测试呢?如果每一天的代码,每一个版本的代码都已经通过了我们的单元测试,这样我们就能对代码的质量有了基本的保证。在构建脚本的自动调用过程中,通过的

20、脚本,可以加上,的脚本调用,每一次的构建,都可以把这些检查工作自动的进行一遍测试。这些测试都要生成测试结果报告,不能提供这些报告的展示,就可以利用这个开源工具,集成测试报告来方便查阅。自.动测试报告ProjectSamplePraject步骤五:代码评审和重构代码评审()是项目开发过程中的一个重要步骤,代码评审可以帮助发现静态代码分析过程中无法发现的一些问题,例如代码的编写是否符合编码规范,代码在逻辑上或者功能上是否存在错误,代码在执行效率和性能上是否有需要改进的地方,代码的注释是否完整正确,代码是否存在冗余和重复。代码评审还可以帮助新进入项目组的成员快速学习和了解项目,促进经验分享,同时也能

21、保证项目成员的良好沟通。代码评审主要包括两种形式,同级评审()和小组评审()。同级评审主要指项目成员间的互相评审,小组评审是指通过召开评审会议,项目成员一起对项目代码进行评审。为了提高代码评审的有效性和效率,可以借助一些外部工具,比较常用的代码评审工具有和i是一款开源的插件,允许成员将评审意见定位到真实代码的具体行,由于代码评审的结果以文件的形式保存,所以可以把结果提交到版本管理服务器进行共享。图显示了使用进行代码评审的界面。代码评审界面在代码评审任务创建后,将代码评审分成三个阶段,个人评审阶段、团队评审阶段()和问题修复阶段()S在个人评审阶段,评审成员将发现的代码问题或者缺陷记录下来,每个

22、问题都会作为一个记录保存在评审表格中。在团队评审阶段,团队的全部或者部分成员会一起对个人评审阶段发现的问题进行定性,如果问题确实存在,就将该问题分配给某个成员去解决,并在中将该问题设置成相应的状态。在问题修复阶段,团队成员会修复属于自己的问题,并将相应的记录设置成已解决等正确的状态。是一款基于的常用代码评审工具,对代码的评审可以针对某一具体行,也可以针对整个代码文件,评审意见会被保存在数据库中。评审人员可以同时看到其他人的评论,代码作者也可以针对某一具体的评论回复。支持邮件通知,还可以同版本控制服务器进行集成,以跟踪和显示文件内容的改变。图显示了的界面。报告界面在实践中对所有代码进行小组评审会

23、比较费时,所以可以根据实际情况来挑选一些核心代码进行小组评审,或者在项目的前期安排较多的小组评审,等项目组的成员对代码评审的标准和要求有较好的理解,进行代码评审的经验提高后,就可以逐渐减少小组评审的次数,从而达到大部分代码即使只进行同级评审也能保证很好的质量。通过代码评审发现的问题要通过代码重构及时解决掉,较小的不涉及多人代码的重构可以由项目成员自己借助的重构功能完成,不同项目成员写的实现相同功能的不同代码要通过讨论整合成公共的类或者方法。比较复杂的或者比较高层次的重构工作,例如整个项目层面的代码组织形式的改变需要由整个项目组共同讨论完成。结论软件开发没有一成不变、万能通用的流程和方法,希望大家能从本文得到启发和收益,结合您的实际项目特点,实践以上步骤和方法,并加以完善和改进,共同打造高效高质量的Ja代码,为您的项目成功奠定坚实的基础。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!