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

下载本文档

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

文档简介

佳都新太提高代码质量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”操作:

检查结果:

单元测试单元测试

单元测试是最小粒度的测试,以测试某个功能或代码块,一般由程序员来做。用例设计和评审

设计阶段需要具体考虑要对哪些代码单元进行测试,被测单元之间的关系,测试策略,以及单元测试用例设计等,并最终输出《单元测试用例设计》文档,用来指导具体的单元测试执行。在用例设计完成之后,下一步的工作就是进行测试用例的评审。个人的理解和经验始终是有限的,用例评审可以借集体之力,对用例设计进入查漏补缺,进一步保证测试用例的有效性。

单元测试_JUnitJUnit

JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。它是用于单元测试框架体系xUnit的一个实例(用于java语言)。主要用于白盒测试,回归测试。下载地址

eclipse自带了JUnit,完整安装包的下载地址:/projects/junit/files/junit/4.0/

Junit核心结构Junit

JUnit测试开发(一)下面举例描述怎样对一个类编写单元测试代码,待测试的类:

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.html

Maven与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的控制台来进行安装。安装软件下载地址:/

Hudson安装要点将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插件安装(二)Hudson

Job(一)Hudson

Job(二)Hudson

Job(三)Hudson

Job(四)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的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。以验证eapmgr登录为例,简单演示QTP的用法。1、测试用例:

自动化测试_QTP(二)2、运行QTP,在以下提示框中勾选“Web”

自动化测试_QTP(三)3、在主界面上,点击“Record”,开始录制脚本:

输入测试URL后,点【确定】:自动化测试_QTP(三)在自动打开的eapmgr登录页面中,输入用户名:admin,密码:suntek:点【登录】按钮,系统弹出提示:

自动化测试_QTP(三)4、完成录制,点击【stop】:

自动录制的脚本如下:

修改脚本,加上提示内容校验:

温馨提示

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

评论

0/150

提交评论