代码质量与评审.ppt_第1页
代码质量与评审.ppt_第2页
代码质量与评审.ppt_第3页
代码质量与评审.ppt_第4页
代码质量与评审.ppt_第5页
已阅读5页,还剩135页未读, 继续免费阅读

下载本文档

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

文档简介

1、北美专业培训机构,AVTECH 简介,AVTECH总部设在美国NEW JERSEY,是北美排行第一的专业培训机构,设有4大分校,数十个培训点遍布北美、西欧和东亚;;2000年进入中国,以培养国际化的中高端信息人才为己任,专注于国际前沿的新技术研发与信息科技新兴行业的开拓教育。 AVTECH进入中国13年,属同行中历史最久。 AVTECH是国内最大的国际认证考试中心,提供上千门国际认证考试。 AVTECH的师资来自全球,在国内培训机构中独一无二的。 学院开设课程超过500门,学习培训内容涵盖,IT技术及使用IT技术的医学、生物、财会、管理等相关行业所有高、中、低级知识和技能。其中一些技术课程来自

2、于如下厂家:,微软、IBM、Oracle、Cisco、SAS、ISTQB、SAP、 PMI、EXIN、IIBA、Open Group、APMG、ISACA、Vmware、EXIN、Peoplecart、EPI、BRMI、IAOP、ScrumAlliance等,艾威最新推荐: ITIL、ITIL Expert、CISSP、PMP、CISA、COBIT、Prince2、MSP、SCM、CSD、CBAP、TOGAF、CRISC、CGEIT、CISM、PGMP、PFMP、BRMP、CDCP、SGF、NPDP等认证培训,代码质量与评审,内容,质量管理的必要性 质量管理实践 看得见的改进 总结,互联网开发

3、特点,市场竞争激烈,需求变化快 开发周期长,隐性成本,时间/迭代,代码质量的影响,成本,生产率,质量管理实践,代码质量,质量,角度:演化、维护,高内聚、低耦合是有限度的,目标群体:开发人员,代码质量保障步骤,代码评审,持续集成,对待变化的态度,不只是拥抱变化,更要利用变化,时间/迭代,质量,拒绝退化,重构的时机,某周一早上,你的老板要求编写一个小程序,从键盘读入字符,然后输出到打印机上 void Copy() int c; while (c=Rdkbd()!= EOF) wrtPrt(c); ,Copy,Char,Writer Prt,Char,Read Kbd,重构的时机,boolean p

4、tFlag=false; boolean punchFlag=false; void copy() int c; while(c=(ptFlag?Rdpt():Rdkbd()!=EOF) punchFlag?wrtPunch():wrtPrt(c);,几个月后,老板来找你,说有时希望Copy程序能从手写板读入信息几个月后,老板又来找你,有时希望Copy程序可以输出到U盘上,Read,Writer,Copy,Kbd,Pt,Char,Char,Prt,Puh,质量管理平台,Sonar Maven Jenkins 插件体系结构,看得见的度量指标,代码,重复代码,单元测试,复杂度,圈复杂度 度量代码分

5、支情况 If for while case catch throw return 0000、16的含义,作者几周后就忘记了。,CheckStyle的安装配置(一),CheckStyle插件地址。 自动安装地址:http:/eclipse- 下载地址: 安装后出现:,CheckStyle的安装配置(二),配置项说明:,CheckStyle的安装配置(三),CheckStyle检查结果:,其它工具,用于javascript静态检查的工具:Jslint -The JavaScript Code Quality Tool,代码静态检查_FindBugs,FindBugs是一个java代码的静态代码分析

6、工具,用来发现那些潜在的、常见的、很难被发现的bug。与其他静态分析工具不同,FindBugs 不注重样式或者格式,它试图只寻找真正的缺陷或者潜在的性能问题。如NullPoint空指针检查、没有合理管理资源等。 Findbugs插件地址。 自动安装地址:/eclipse 下载地址:,Findbugs的使用,配置选项:,Findbugs的使用,运行,右键项目执行“Find Bugs”操作: 检查结果:,单元测试,单元测试单元测试是最小粒度的测试,以测试某个功能或代码块,一般由程序员来做。 用例设计和评审 设计阶段需要具体考虑要对哪些代码单元进行测

7、试,被测单元之间的关系,测试策略,以及单元测试用例设计等,并最终输出单元测试用例设计文档,用来指导具体的单元测试执行。 在用例设计完成之后,下一步的工作就是进行测试用例的评审。个人的理解和经验始终是有限的,用例评审可以借集体之力,对用例设计进入查漏补缺,进一步保证测试用例的有效性。,单元测试_JUnit,JUnitJUnit 是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。它是用于单元测试框架体系xUnit的一个实例(用于java语言)。主要用于白盒测试,回归测试。 下载地址 eclipse自带了JUnit,完整安装包的下载地址: ,Junit核心结构,Junit,JUnit测

8、试开发(一),下面举例描述怎样对一个类编写单元测试代码,待测试的类:,JUnit测试开发(二),JUnit3.8测试类:,JUnit测试开发(三),JUnit4.0测试类:,JUnit测试开发(四),setUp和tearDown方法:,Junit断言(一),断言Assert方法:,Junit断言(二),断言Assert方法:,在Eclipse上执行Junit(一),下面说明怎样在eclipse上执行Junit单元测试 添加一个需要测试的类Hello:,在Eclipse上执行Junit(二),选中需要测试的类,右键点击,选择New-JUnit Test Case,如图:,在Eclipse上执行J

9、unit(三),新建测试类:,在Eclipse上执行Junit(四),下一步选择要测试的方法:,在Eclipse上执行Junit(五),完成HelloTest的Abs方法:,在Eclipse上执行Junit(六),执行测试程序,右键,Run As-JUnit Test,就可以看到JUnit测试结果: 绿色表示测试通过,只要有1个测试未通过,就会显示红色并列出未通过测试的方法。,单元测试_EasyMock,模拟对象技术在实际项目中,开发人员自己的代码往往需要和其他的代码模块或系统进行交互,但在测试的过程中,这些需要被调用的真实对象常常很难被实例化,利用一个模拟对象来模拟我们的代码所依赖的真实对象

10、,来帮助完成测试,提高测试覆盖率。 常见的模拟技术 模拟技术有很多种,如 jMock,EasyMock,Mockito,PowerMock 等等,下面用EasyMock举例说明如何模拟对象。,EasyMock(一),下载地址:/ 使用样例: 看一个用户验证的servlet: public class LoginServlet extends HttpServlet protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletE

11、xception, IOException String username = request.getParameter(username); String password = request.getParameter(password);,EasyMock(二),/ 校验用户名和密码 if(admin.equals(username) ,EasyMock(三),为测试doPost()方法,需要模拟HttpServletRequest等对象,以便脱 离J2EE 容器来测试这个Servlet。 建立TestCase,名为LoginServletTest: public class LoginS

12、ervletTest extends TestCase 测试当用户名和口令验证失败的情形: public void testLoginFailed() throws Exception /创建mock对象 MockControl mc = MockControl.createControl(HttpServletRequest.class); HttpServletRequest request =(HttpServletRequest)mc.getMock();,EasyMock(四),/设置mock参数 request.getParameter(username); / 期望下面的测试将调

13、用此 方法,参数为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(Not caught exception!); catch(RuntimeException

14、re) assertEquals(Login failed., re.getMessage(); / verify: mc.verify(); 运行JUnit,测试通过!表示我们的Mock 对象正确工作了!,单元测试_测试覆盖率分析,为了衡量单元测试的质量和覆盖的范围,需要对单元测试的代码进行测试覆盖分析。 具体采用哪些指标可以根据项目的实际情况来定,以避免因过高的指标增加了代码开发人员的工作量而影响了项目整体的进度。 。 业内比较常用的工具有: 1、 Cobertura,对应的eclipse插件: eCobertura。 2、 EclEmma是一款基于 EMMA 的 Eclipse 插件,方

15、 便在 Eclipse IDE 中进行测试覆盖率分析。 插件下载地址:/,Eclipse测试覆盖率分析(一),下面说怎样在eclipse上执行测试覆盖率分析: 先安装插件EclEmma, 然后在测试用例写好后,可以在右键点击 测试类,选择 Coverage As - JUnit Test.,Eclipse测试覆盖率分析(二),单元测试执行完后,Coverage视图中会显示所选择的测试的覆盖率。双击打开某一具体的类后,可以看到高亮显示的覆盖分析结果,如图 所示。红色代表测试没有覆盖到该行,黄色表示部分覆盖,绿色的行表示该行在本次测试中被覆盖到。,E

16、clipse测试覆盖率分析(三),在 Coverage 视图中可以通过点击鼠标右键将测试覆盖分析的结果导出成需要的格式,例如 HTML。,单元测试-FIRST原则,Fast(快速) Independent(独立) Repeatable(可重复) Self-Validating(自足验证) Timely(及时),持续集成,持续集成(Continuous Integration)是利用一系列的工具、方法和规则,做到快速的构建开发代码,自动的测试化,来提高开发代码的效率和质量 。 持续集成的提出 如果项目开发的规模比较小,比如一个人的项目,如果它对外部 系统的依赖很小,那么软件集成不是问题,但是随着

17、软件项目复杂 度的增加(即使增加一个人),就会对集成和确保软件组件能够在一 起工作提出了更多的要求-要早集成,常集成。早集成,频繁的集成 帮助项目在早期发现项目风险和质量问题,如果到后期才发现这 些问题,解决问题代价很大,很有可能导致项目延期或者项目失败。,持续集成,持续集成的常见做法是:持续集成框架+ 版本管理器+ 构建工具。 1、持续集成框架常用的有:Jenkins、Continuum、 CruiseControl等。 2、版本管理器常用的有:ClearCase、Wincvs、SVN等。 3、构建工具常用的有:Ant、Maven。 后面主要以 SVN + Jenkins + Ant 实现方

18、式举例说明。,持续集成_版本管理器,SVN(subversion)是近年来崛起的版本管理工具,是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。 服务端下载地址: 客户端下载地址: 服务端安装运行后如图:,持续集成_自动构建,Ant 在构建过程方面十分优秀,它是一个基于任务和依赖的构建工具。下载地址: /bindownload.cgi Maven不单是构建工具,也是个项目管理平台。下载地址: /download.html Maven与Ant对比,一些使用上的区别: 1、 Maven是基于

19、中央仓库的编译,即把编译所需要的资源放在一个中央仓库里,如jar,tld等。当编译的时候,maven会自动在仓库中找到相应的包,而ant需要自己定义了。用maven编译的项目在发布的时候只需要发布源码,小得很,而反之,ant的发布则要把所有的包一起发布。 2、 Maven有大量的重用脚本可以利用,如生成网站,生成javadoc,sourcecode reference,等。而ant都需要自己去写。 3、 Maven目前不足的地方就是没有象ant那样成熟的GUI界面。,持续集成_持续集成框架,有了自动构建后,我们就可以通过Jenkins每天定时用Ant脚本或 Maven,加上JUnit、Cobe

20、rtura/EMMA等的ANT 脚本调用,每一次 的构建都可以把这些检查工作自动的进行一遍测试。然后生成测试报 告进行查阅。 Jenkins(Jenkins的前身)可以说在安装和配置上最简单的CI产品。 Jenkins是基于java开发的,但它不仅限于构建基于Java的软件,还能构建.net、Python、Ruby等。 Jenkins提供了一组很明确和可扩展API的Jenkins组件。这批组成一个大的类库的Jenkins组件反过来又丰富了Jenkins的功能;它们都是开源的,而且它们可以直接通过Jenkins的控制台来进行安装。 安装软件下载地址:/,J

21、enkins安装要点,将jenkins.war拷贝到tomcat的webapps目录下; 修改Tomcat-7.0.8confserver.xml文件,设置UTF-8编码: 通过以下方式修改Jenkins_HOME的位置:在Jenkins的web.xml中找到Jenkins_HOME,默认value为空值,将其设置 为你希望的路径,然后重启。,Jenkins首页,Jenkins管理界面,Jenkins插件安装(一),Jenkins插件安装(二),Jenkins Job(一),Jenkins Job(二),Jenkins Job(三),Jenkins Job(四),Jenkins 质量度量(一)

22、,Jenkins 质量度量(二),openEAP应用的实践(一),以下演示在实际的openEAP项目中,怎样自动化完成以上活动。 演示的是一个web项目,目录结构如下图所示:,openEAP应用的实践(二),因为相关依赖资源都已经在quality目录下了(运行只依赖数据库环境,没有对数据库操作进行模拟),所以可以直接通过ant执行quality目录下的build.xml,脚本执行完毕后,生成的报告在quality目录下,如下图所示:,openEAP应用的实践(三),也可以发布到Jenkins上执行构建:,openEAP应用的实践(四),在Jenkins上查看报告:,代码评审,代码评审(Code

23、 Review)是 Java 项目开发过程中的一个重要步骤,代码评审可以帮助发现静态代码分析过程中无法发现的一些问题,例如代码在逻辑上或者功能上是否存在错误,代码在执行效率和性能上是否有需要改进的地方等。代码评审还可以帮助新进入项目组的成员快速学习和了解项目,促进经验分享。代码评审主要包括两种形式,同级评审(Peer Review)和小组评审(Group Review)。同级评审主要指项目成员间的互相评审,小组评审是指通过召开评审会议,项目成员一起对项目代码进行评审。 为了提高代码评审的有效性和效率,可以借助一些外部工具,比较常用的代码评审工具有 Jupiter 和 Code Striker。

24、Jupiter 是一款开源的 Eclipse 插件,允许成员将评审意见定位到真实代码的具体行,由于代码评审的结果以 XML 文件的形式保存。,Jupiter使用,Eclipse插件下载地址: Jupiter里,代码评审(code review)分为4个流程 : 1.Configuration(配置):review发起者设置“Review ID”,指定要 评审的代码,参与代码评审的人员,要讨论的问题等等。 2.Individual review(个人评审):每个人独自审查代码,把可能出现 问题的代码加入checklist。 3.Team review(团队评审):大家在一起讨论之前检查出的问题代

25、 码,并决定如何处理。 4.Rework:开发人员根据之前评审的结果,对代码进行修复。 具体操作请参考Code Review工具Jupiter的使用.mht,补充,除了以上提到的在开发过程中我们可以采取的措施外,我们还可以通过其它手段从不同方面提升我们的系统质量。 下面将简要介绍动态检查、WEB前端分析、缺陷管理、自动化测试、性能测试的操作和相关工具。,动态检查,动态检查是指当应用在运行时,检查当前应用的对象、对象引用、内存、CPU使用情况、线程、线程运行情况(阻塞、等待等),同时可以查找应用内存使用得热点,即:哪个对象占用的内存比较多;或者CPU热点,即:哪儿方法占用的较大得CPU资源。 常

26、用的检测工具有:JProfiler、JConsole。,动态检查_JProfiler(一),Jprofiler功能强大,是款付费软件,官方网站:http:/www.ej- 。 JProfiler监控比较消耗系统资源的,所以性能测试的一般情况下不要运行。 如果要用于相对大压力情况下,可以有选择的打开监控项,不用所有都打开。主要有两个,一个是内存监控,打开的情况下可以查找内存分配热点。一个是CPU监控,打开的情况下可以查看CPU使用热点 。,动态检查_JProfiler(二),监控界面如下图所示:,动态检查_JConsole(一),JConsole是一个基于JMX的GUI工具,用于监控正在运行的J

27、VM 。JConsole是 jdk5.0自带的工具,所以如果安装的的jdk5以上版本,那么就不用去另外安装。 JConsole 毕竟是JDK 自带的东西,功能虽然没有一些商业软件那么强大,但是稳定性好,在大压力情况下也不会发生什么问题。而且,提供了相对全面的系统监控功能。 在待监控的JVM启动命令上增加以下参数,JConsole就可以远程连接并监控了。 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.

28、port=7080 其中7080是Jconsole连接的端口。,动态检查_JConsole(二),在本机运行jdkbinjconsole.exe,输入远端机器的IP、JMX端口就可以连接上去了。如下图所示:,动态检查_JConsole(三),在本机运行jdkbinjconsole.exe,输入远端机器的IP、JMX端口就可以连接上去了。如下图所示:,动态检查_JMX(一),JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等 。

29、 下面举例说明怎样通过JMX监控自己的程序: 1、Hello是一个需要被管理的类:,动态检查_JMX(二),2、要管理Hello则必须创建一个相应Mbean: 说明:包含在MBean中方法都将是可以被管理的。MBean起名是有 规范的,就是原类名后加上MBean字样。,动态检查_JMX(三),3、创建Agent类注册服务MBean:,动态检查_JMX(四),4、运行后通过JConsole监控的情况如下图:,WEB前端分析(一),为什么关注前端性能分析? “系统响应时间”指应用系统从请求发出开始到客户端接收到所有 数据所消耗的时间。这样,“系统响应时间”加上“呈现时间”,才 是完整的用户感受到的

30、响应时间。 响应时间 = 网络响应时间 + 应用程序响应时间 + 浏览器处理时间 响应时间 = (N1+N2+N3+N4)+ (A1+A2+A3) + Tb,WEB前端分析(二),为什么关注前端性能分析?,WEB前端分析(三),Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践。他们为此进行了一系列的实验、开发了各种工具、写了大量的文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高网站性能。 Excetional Performance团队总结出了一系列可以提高网站速度的方法。可以分为7大类34条。包括内容、服务器、 cookie、CSS、J

31、avaScript、图片、移动应用等七部分。 详情请参考附件:雅虎团队经验-网站页面性能优化的34条黄金守则.pdf ,WEB前端分析(四),Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践。他们为此进行了一系列的实验、开发了各种工具、写了大量的文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高网站性能。 Excetional Performance团队总结出了一系列可以提高网站速度的方法。可以分为7大类34条。包括内容、服务器、 cookie、CSS、JavaScript、图片、移动应用等七部分。 详情请参考附件:雅虎团队经验-网站页面性能优化的34条黄金守则.pdf ,WEB前端分析(五),常用的前端性能分析工具有: Fiddler IBM Page Detailer (商用) FireBug Yahoo YSlow HTTP Analyzer (商用) AOL PageTest 建议采用IBM Page Detailer、 Yahoo YSlow。,缺陷管理,缺陷管理/软件缺陷管理(Defect Management)是在软件生命周期中获取、管理、沟通任何变更请求的过程(从变更的建议到变更的解决)。可以确保你的问题如需求或者缺陷被跟踪管理而不丢失。 业内在用的缺陷管理工具:,自动化测试_Q

温馨提示

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

最新文档

评论

0/150

提交评论