提高代码质量Java篇_第1页
提高代码质量Java篇_第2页
提高代码质量Java篇_第3页
提高代码质量Java篇_第4页
提高代码质量Java篇_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

提高代码质量Java篇目录(一)除了编码,开发还可以做什么

编码规范单元测试

代码评审静态检查

持续集成目录(二)补充

动态检查缺陷管理

性能测试

WEB前端分析

自动化测试除了编码,开发还可以做什么

现状

项目开发过程中,由于开发人员的经验、代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入和周期等问题。

措施可以采用以下五个步骤来保证和提高整个项目的代码质量:统一编码规范、代码样式;静态代码分析(staticcodereview);单元测试;持续集成;代码评审和重构(Review&Refactor)。下面将针对每个步骤和其所使用的工具、方法进行详细描述。代码质量保证步骤ContentTitle编码规范规范统一的编码能提高项目代码的可读性和可维护性,编码规范主要应包含以下几个方面:一般规则和格式规范。例如代码缩进、程序块规范、每行最大代码长度等。命名规则。例如包名、类名、变量、方法、接口、参数等命名规范文档规范。例如类文件头声明、类注释、成员变量和方法注释等规范。编程规范。例如异常、并发、多线程等方面的处理方式。其他规范。例如日志格式、属性文件格式,返回值和消息格式。用eclipse控制代码样式(一)一旦编码规范确定,就可以利用Eclipse来控制代码样式和格式。点击Eclipse的Windows->Preference菜单项,在打开的Preferences对话框的左侧栏中找到Java节点下的子项CodeStyle,该项和它的子项允许您对Java代码的样式进行控制:用eclipse控制代码样式(二)可以在Eclipse提供的默认代码格式配置的基础上建立自定义的格式。在Formatter面板中,点击New,输入新的名字并选择一个默认的配置作为初始化格式,如图所示:用eclipse控制代码样式(三)设置风格如图所示:代码静态态检查_CheckStyleCheckStyle用来检查查代码格格式、规规范、风风格。检查并强强制执行行统一的的代码风风格;检查Javadoc;检查类、、变量、、方法的的命名;;检查类和和方法的的大小;;检查编码码错误,,例如magicnumber;……代码常见见问题举举例:代码中的的magic-number和magic-string:Strings=“0000”+Integer.toString(ch,16);0000、16的含义,,作者几几周后就就忘记了了。CheckStyle的安装配配置(一一)CheckStyle插件地址址。自动安装装地址::/update下载地址址:/projects/eclipse-cs/develop安装后出出现:CheckStyle的安装配配置(二二)配置项说说明:CheckStyle的安装配配置(三三)CheckStyle检查结果果:其它工具具用于javascript静态检查查的工具具:Jslint-TheJavaScriptCodeQualityTool代码静态态检查_FindBugsFindBugs是一个java代码的静静态代码码分析工工具,用用来发现现那些潜潜在的、、常见的的、很难难被发现现的bug。与其他他静态分分析工具具不同,,FindBugs不注重样样式或者者格式,,它试图图只寻找找真正的的缺陷或或者潜在在的性能能问题。。如NullPoint空指针检检查、没没有合理理管理资资源等。。Findbugs插件地址址。自动安装装地址::/eclipse下载地址:/downloads.html?0?2Findbugs的使用配置选项:Findbugs的使用运行,右键项项目执行“FindBugs”操作:检查结果:单元测试单元测试单元测试是最最小粒度的测测试,以测试试某个功能或或代码块,一一般由程序员员来做。用例设设计和和评审审设计阶阶段需需要具具体考考虑要要对哪哪些代代码单单元进进行测测试,,被测测单元元之间间的关关系,,测试试策略略,以以及单单元测测试用用例设设计等等,并并最终终输出出《单元测测试用用例设设计》文档,,用来来指导导具体体的单单元测测试执执行。。在用例例设计计完成成之后后,下下一步步的工工作就就是进进行测测试用用例的的评审审。个个人的的理解解和经经验始始终是是有限限的,,用例例评审审可以以借集集体之之力,,对用用例设设计进进入查查漏补补缺,,进一一步保保证测测试用用例的的有效效性。。单元测测试_JUnitJUnitJUnit是一个个开发发源代代码的的Java测试框框架,,用于于编写写和运运行可可重复复的测测试。。它是是用于于单元元测试试框架架体系系xUnit的一个个实例例(用用于java语言))。主主要用用于白白盒测测试,,回归归测试试。下载地地址eclipse自带了了JUnit,完整整安装装包的的下载载地址址:/projects/junit/files/junit/4.0/Junit核心结结构JunitJUnit测试开开发((一))下面举举例描描述怎怎样对对一个个类编编写单单元测测试代代码,,待测测试的的类::JUnit测试开开发((二))JUnit3.8测试类类:JUnit测试开开发((三))JUnit4.0测试类类:JUnit测试开开发((四))setUp和tearDown方法:Junit断言((一))断言Assert方法:Junit断言((二))断言Assert方法:在Eclipse上执行行Junit(一))下面说说明怎怎样在在eclipse上执行行Junit单元测测试添加一一个需需要测测试的的类Hello:在Eclipse上执行行Junit(二))选中需需要测测试的的类,,右键键点击击,选选择New->JUnitTestCase,如图图:在Eclipse上执行行Junit(三))新建测测试类类:在Eclipse上执行行Junit(四))下一步步选择择要测测试的的方法法:在Eclipse上执行行Junit(五))完成HelloTest的Abs方法::在Eclipse上执行行Junit(六))执行测测试程程序,,右键键,RunAs->JUnitTest,就可可以看看到JUnit测试结结果::绿色表表示测测试通通过,,只要要有1个测试试未通通过,,就会会显示示红色色并列列出未未通过过测试试的方方法。。单元测测试_EasyMock模拟对对象技技术在实际际项目目中,,开发发人员员自己己的代代码往往往需需要和和其他他的代代码模模块或或系统统进行行交互互,但但在测测试的的过程程中,,这些些需要要被调调用的的真实实对象象常常常很难难被实实例化化,利利用一一个模模拟对对象来来模拟拟我们们的代代码所所依赖赖的真真实对对象,,来帮帮助完完成测测试,,提高高测试试覆盖盖率。。常见的的模拟拟技术术模拟技术术有很多多种,如如jMock,EasyMock,Mockito,PowerMock等等,下下面用EasyMock举例说明明如何模模拟对象象。EasyMock(一)EasyMock(二)//校验用户户名和密密码if("admin".equals(username)&&"123456".equals(password)){ServletContextcontext=getServletContext();RequestDispatcherdispatcher=context.getNamedDispatcher("dispatcher");dispatcher.forward(request,response);}else{thrownewRuntimeException("Loginfailed.");}}}EasyMock(三)为测试doPost()方法,需需要模拟拟HttpServletRequest等对象,,以便脱脱离J2EE容器来测测试这个个Servlet。建立TestCase,名为LoginServletTest:publicclassLoginServletTestextendsTestCase{}测试当用用户名和和口令验验证失败败的情形形:publicvoidtestLoginFailed()throwsException{//创建mock对象MockControlmc=MockControl.createControl(HttpServletRequest.class);HttpServletRequestrequest=(HttpServletRequest)mc.getMock();EasyMock(四)//设置mock参数request.getParameter("username");//期望下面的测测试将调用此此方法,参数为为"username"mc.setReturnValue("admin",1);//期望返回值为为"admin",仅调用1次request.getParameter("password");//期望下面的测测试将调用此此方法,参数为"password"mc.setReturnValue("1234",1);//期望返回值为为"1234",仅调用1次//表示录制完毕毕mc.replay();EasyMock(五)try{servlet.doPost(request,null);fail("Notcaughtexception!");}catch(RuntimeExceptionre){assertEquals("Loginfailed.",re.getMessage());}//verify:mc.verify();}运行JUnit,测试通过!!表示我们的的Mock对象正确工作作了!单元测试_测试覆盖率分分析为了衡量单元元测试的质量量和覆盖的范范围,需要对对单元测试的的代码进行测测试覆盖分析析。具体采用哪些些指标可以根根据项目的实实际情况来定定,以避免因因过高的指标标增加了代码码开发人员的的工作量而影影响了项目整整体的进度。。。业内比较常用用的工具有::1、Cobertura,对应的eclipse插件:eCobertura。2、EclEmma是一款基于EMMA的Eclipse插件,方便在EclipseIDE中进行测试覆覆盖率分析。。插件下载地址址:/Eclipse测试覆盖率分分析(一)下面说怎样在在eclipse上执行测试覆覆盖率分析::先安装插件EclEmma,然后在测试用用例写好后,,可以在右键键点击测试类,选择择CoverageAs->JUnitTest.Eclipse测试覆盖率分分析(二)单元测试执行行完后,Coverage视图中会显示示所选择的测测试的覆盖率率。双击打开开某一具体的的类后,可以以看到高亮显显示的覆盖分分析结果,如如图所示。。红色代表测测试没有覆盖盖到该行,黄黄色表示部分分覆盖,绿色色的行表示该该行在本次测测试中被覆盖盖到。Eclipse测试覆盖率分分析(三)在Coverage视图中可以通通过点击鼠标标右键将测试试覆盖分析的的结果导出成成需要的格式式,例如HTML。持续集成持续集成(ContinuousIntegration)是利用一系系列的工具、、方法和规则则,做到快速速的构建开发发代码,自动动的测试化,,来提高开发发代码的效率率和质量。。持续集成的提提出如果项目开发发的规模比较较小,比如一一个人的项目目,如果它对对外部系统的依赖很很小,那么软软件集成不是是问题,但是是随着软件项项目复杂度的增加(即即使增加一个个人),就会会对集成和确确保软件组件件能够在一起工作提出了了更多的要求求-要早集成,常常集成。早集集成,频繁的的集成帮助项目在早早期发现项目目风险和质量量问题,如果果到后期才发发现这些问题,解决决问题代价很很大,很有可可能导致项目目延期或者项项目失败。持续集成持续集成的常常见做法是::持续集成框框架+版本管理器+构建工具。1、持续集成框框架常用的有有:Hudson(jenkins)、Continuum、CruiseControl等。2、版本管理器器常用的有::ClearCase、Wincvs、SVN等。3、构建工具具常用的有有:Ant、Maven。后面主要以以SVN+Hudson+Ant实现方式举举例说明。。持续集成_版本管理器器持续集成_自动构建Ant在构建过程程方面十分分优秀,它它是一个基基于任务和和依赖的构构建工具。。下载地址址:/bindownload.cgiMaven不单是构建建工具,也也是个项目目管理平台台。下载地地址:/download.htmlMaven与Ant对比,一些些使用上的的区别:1、Maven是基于中央央仓库的编编译,即把把编译所需需要的资源源放在一个个中央仓库库里,如jar,tld等。当编译译的时候,,maven会自动在仓仓库中找到到相应的包包,而ant需要自己定定义了。用用maven编译的项目目在发布的的时候只需需要发布源源码,小得得很,而反反之,ant的发布则要要把所有的的包一起发发布。2、Maven有大量的重重用脚本可可以利用,,如生成网网站,生成成javadoc,sourcecodereference,等。而ant都需要自己己去写。3、Maven目前不足的的地方就是是没有象ant那样成熟的的GUI界面。持续集成_持续集成框框架有了自动构构建后,我我们就可以以通过Hudson每天定时用用Ant脚本或Maven,加上JUnit、Cobertura/EMMA等的ANT脚本调用,,每一次的构建都可可以把这些些检查工作作自动的进进行一遍测测试。然后后生成测试试报告进行查阅阅。Hudson(Jenkins的前身)可可以说在安安装和配置置上最简单单的CI产品。Hudson是基于java开发的,但但它不仅限限于构建基基于Java的软件,还还能构建.net、Python、Ruby等。Hudson提供了一组组很明确和和可扩展API的Hudson组件。这批批组成一个个大的类库库的Hudson组件反过来来又丰富了了Hudson的功能;它它们都是开开源的,而而且它们可可以直接通通过Hudson的控制台来来进行安装装。安装软件下下载地址::/downloads/subversionHudson安装要点将jenkins.war拷贝到tomcat的webapps目录下;修改Tomcat-7.0.8\conf\server.xml文件,设置置UTF-8编码:通过以下方方式修改HUDSON_HOME的位置:在在hudson的web.xml中找到HUDSON_HOME,默认value为空值,将将其设置为你希望的的路径,然然后重启。。Hudson首页Hudson管理界面Hudson插件安装((一)Hudson插件件安安装装((二二))HudsonJob(一一))HudsonJob(二)HudsonJob(三)HudsonJob(四)Hudson质量度量量(一))Hudson质量度量量(二))openEAP应用的实实践(一一)以下演示示在实际际的openEAP项目中,,怎样自自动化完完成以上上活动。。演示的是是一个web项目,目目录结构构如下图图所示::openEAP应用的实实践(二二)因为相关关依赖资资源都已已经在quality目录下了了(运行行只依赖赖数据库库环境,,没有对对数据库库操作进进行模拟拟),所所以可以以直接通通过ant执行quality目录下的的build.xml,脚本执执行完毕毕后,生生成的报报告在quality目录下,,如下图图所示::openEAP应用的实实践(三三)也可以发发布到Hudson上执行构构建:openEAP应用的实实践(四四)在Hudson上查看报报告:代码评审审代码评审审(CodeReview)是Java项目开发发过程中中的一个个重要步步骤,代代码评审审可以帮帮助发现现静态代代码分析析过程中中无法发发现的一一些问题题,例如如代码在在逻辑上上或者功功能上是是否存在在错误,,代码在在执行效效率和性性能上是是否有需需要改进进的地方方等。代代码评审审还可以以帮助新新进入项项目组的的成员快快速学习习和了解解项目,,促进经经验分享享。代码码评审主主要包括括两种形形式,同同级评审审(PeerReview)和小小组评评审((GroupReview)。同同级评评审主主要指指项目目成员员间的的互相相评审审,小小组评评审是是指通通过召召开评评审会会议,,项目目成员员一起起对项项目代代码进进行评评审。。为了提提高代代码评评审的的有效效性和和效率率,可可以借借助一一些外外部工工具,,比较较常用用的代代码评评审工工具有有Jupiter和CodeStriker。Jupiter是一款款开源源的Eclipse插件,,允许许成员员将评评审意意见定定位到到真实实代码码的具具体行行,由由于代代码评评审的的结果果以XML文件的的形式式保存存。Jupiter使用Eclipse插件下载地地址:/p/jupiter-eclipse-plugin/Jupiter里,代码码评审(codereview)分为4个流程::1.Configuration(配置):review发起者设设置“ReviewID””,指定要要评审的代代码,参参与代码码评审的的人员,,要讨论论的问题题等等。。2.Individualreview(个人评审审):每个人人独自审审查代码码,把可可能出现现问题的代代码加入入checklist。3.Teamreview(团队评审审):大家在在一起讨讨论之前前检查出出的问题题代码,并决决定如何何处理。。4.Rework:开发人人员根据据之前评评审的结结果,对对代码进进行修复复。具体操作作请参考考《CodeReview工具Jupiter的使用.mht》补充除了以上上提到的的在开发发过程中中我们可可以采取取的措施施外,我我们还可可以通过过其它手手段从不不同方面面提升我我们的系系统质量量。下面将简简要介绍绍动态检检查、WEB前端分析析、缺陷陷管理、、自动化化测试、、性能测测试的操操作和相相关工具具。动态检查查动态检查查是指当当应用在在运行时时,检查查当前应应用的对对象、对对象引用用、内存存、CPU使用情况况、线程程、线程程运行情情况(阻阻塞、等等待等)),同时时可以查查找应用用内存使使用得热热点,即即:哪个个对象占占用的内内存比较较多;或或者CPU热点,即即:哪儿儿方法占占用的较较大得CPU资源。常用的检检测工具具有:JProfiler、JConsole。动态检查查_JProfiler(一)动态检查查_JProfiler(二)监控界面面如下图图所示::动态检查查_JConsole(一)JConsole是一个基基于JMX的GUI工具,用用于监控控正在运运行的JVM。JConsole是jdk5.0自带的工具,,所以如果安安装的的jdk5以上版本,那么就不用去去另外安装。。JConsole毕竟是JDK自带的东西,,功能虽然没没有一些商业业软件那么强大,但是是稳定性好,,在大压力情情况下也不会会发生什么问问题。而且,提供了了相对全面的的系统监控功功能。在待监控的JVM启动命令上增增加以下参数数,JConsole就可以远程连连接并监控了了。-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.port=7080其中7080是Jconsole连接的的端口口。动态检检查_JConsole(二))在本机机运行行jdk\bin\jconsole.exe,输入入远端端机器器的IP、JMX端口就就可以以连接接上去去了。。如下下图所所示::动态检检查_JConsole(三))在本机机运行行jdk\bin\jconsole.exe,输入入远端端机器器的IP、JMX端口就就可以以连接接上去去了。。如下下图所所示::动态检检查_JMX(一))JMX(JavaManagementExtensions,即Java管理扩扩展))是一一个为为应用用程序序、设设备、、系统统等植植入管管理功功能的的框架架。通通常使使用JMX来监控控系统统的运运行状状态或或管理理系统统的某某些方方面,,比如如清空空缓存存、重重新加加载配配置文文件等等。。下面举举例说说明怎怎样通通过JMX监控自自己的的程序序:1、Hello是一个个需要要被管管理的的类::动态检检查_JMX(二))2、要管管理Hello则必须须创建建一个个相应应Mbean:说明::包含含在MBean中方法法都将将是可可以被被管理理的。。MBean起名是是有规范的的,就就是原原类名名后加加上MBean字样。。动态检检查_JMX(三))3、创建建Agent类注册册服务务MBean:动态检检查_JMX(四))4、运行行后通通过JConsole监控的的情况况如下下图::WEB前端分分析((一))为什么么关注注前端端性能能分析析?“系统统响应应时间间”指指应用用系统统从请请求发发出开开始到到客户户端接接收到到所有有数据所所消耗耗的时时间。。这样样,““系统统响应应时间间”加加上““呈现现时间间”,,才是完整整的用用户感感受到到的响响应时时间。。响应时时间=网络响响应时时间+应用程程序响响应时时间+浏览器器处理理时间间响应时时间=(N1+N2+N3+N4)+(A1+A2+A3)+TbWEB前端分分析((二))为什么么关注注前端端性能能分析析?WEB前端分分析((三))Yahoo!的ExceptionalPerformance团队为为改善善Web性能带带来最最佳实实践。。他们们为此此进行行了一一系列列的实实验、、开发发了各各种工工具、、写了了大量量的文文章和和博客客并在在各种种会议议上参参与探探讨。。最佳佳实践践的核核心就就是旨旨在提提高网网站性性能。。ExcetionalPerformance团队总结出出了一系列列可以提高高网站速度度的方法。。可以分为为7大类34条。包括内内容、服务务器、cookie、CSS、JavaScript、图片、移移动应用等等七部分。。详情请参考考附件:《雅虎团队经经验-网站页面性性能优化的的34条黄金守则则.pdf》》WEB前端分析((四)Yahoo!的ExceptionalPerformance团队为改善善Web性能带来最最佳实践。。他们为此此进行了一一系列的实实验、开发发了各种工工具、写了了大量的文文章和博客客并在各种种会议上参参与探讨。。最佳实践践的核心就就是旨在提提高网站性性能。ExcetionalPerformance团队总结出出了一系列列可以提高高网站速度度的方法。。可以分为为7大类34条。包括内内容、服务务器、cookie、CSS、JavaScript、图片、移移动应用等等七部分。。详情请参考考附件:《雅虎团队经经验-网站页面性性能优化的的34条黄金守则则.pdf》》WEB前端分析((五)常用的前端端性能分析析工具有::FiddlerIBMPageDetailer(商用)FireBugYahooYSlowHTTPAnalyzer(商用)AOLPageTest建议采用IBMPageDetailer、YahooYSlow。缺陷管理缺陷管理/软件缺陷管管理(DefectManagement)是在软件件生命周期期中获取、、管理、沟沟通任何变变更请求的的过程(从从变更的建建议到变更更的解决))。可以确确保你的问问题如需求求或者缺陷陷被跟踪管管理而不丢丢失。业内在用的的缺陷管理理工具:自动化测试试_QTP(一)QTP是QuicktestProfessional的简称,是是一种自动动测试工具具。使用QTP的目的是想想用它来执执行重复的的手动测试试,主要是是用于回归归测试和测测试同一软软件的新版版本。因此此你在测试试前要考虑虑好如何对对应用程序序进行测试试,例如要要测试那些些功能、操操作步骤、、

温馨提示

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

评论

0/150

提交评论