《代码质量与评审培训课件.pptx》由会员分享,可在线阅读,更多相关《代码质量与评审培训课件.pptx(140页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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); CopyCharWriterPr
4、tCharReadKbd重构的时机boolean ptFlag=false;boolean punchFlag=false;void copy()int c;while(c=(ptFlag?Rdpt():Rdkbd()!=EOF)punchFlag?wrtPunch():wrtPrt(c); 几个月后,老板来找你,说有时希望Copy程序能从手写板读入信息几个月后,老板又来找你,有时希望Copy程序可以输出到U盘上ReadWriterCopyKbdPtCharCharPrtPuh质量管理平台 Sonar Maven Jenkins 插件体系结构看得见的度量指标A&D重复代码单元测试复杂度潜在Bu
5、g编码规则注释代码代码重复代码单元测试复杂度 圈复杂度 度量代码分支情况 If for while case catch throw return & | ? 复杂性越高,测试成本越高复杂度编码规则检查注释架构依赖结构矩阵(DSM)设计度量指标NOC 派生类的数目DIT 继承树的深度RFC 类的外部响应LCOM4 方法的内聚LCOM4 Lack of cohesion of methods 说明类内部方法和变量之间的关系 指标 LCOM4=0/Bad LCOM4=1 /高 LCOM4=2/低 SRP原则RFC Response For Class 通过检查方法被调用的情况来反映一个类的复杂程度
6、 可以简单的理解为一个类所包含的方法多寡 复杂度从类的内部描述,RFC从类的外部来描述 RFC = M + R RFC = M + R M = number of methods in the class R = number of remote methods directly called by methods of the class R = number of remote methods called, recursively through the entire call tree设计设计高级度量Sonar插件附加维附加维度度治理治理可视化可视化集成集成IDE本地化本地化多语言多语
7、言http:/docs.codehaus.org/display/SONAR/Sonar+Plugin+Library/插件插件改进效果改进架构-模块划分原则 采用Maven多Project结构,先根据职能分Project,再根据功能模块分Package REP(重用发布等价原则) 重用的粒度就是发布的粒度 CCP(共同封闭原则) 包中所有类对于同一类性质的变化应该是共同封闭的 ADP(无环依赖原则) 在包的依赖关系图中不允许存在环设计-变化应对之道视角视角描述描述关注点关注点概念对象是一组责任软件要负责什么?规约对象是一组可以被其他对象或对象自己调用的方法(也称行为)怎么使用软件?实现对象是
8、代码和数据,以及它们之间的计算交互软件怎样履行自己的责任?Martin Fowler的建议:对象的三个视角设计-变化应对之道 在概念上层次上交流,在实现层次上执行,客户端无需准确知道具体操作细节,只需一般性(概念性)知道即可 只要概念不变,客户端就可以与实现细节的变化隔离开来 案例:下一节分享去哪里听设计-变化应对之道 Programming to an Interface, not an Implementation 客户对象和服务对象之间的职责分配 使用抽象类隐藏具体的实现 创建和使用分离 案例:评价、资料设计-变化应对之道 Favor object composition over cl
9、ass inheritance 但是设计模式中为什么继承无处不在? 不要按照传统的方式来使用继承 用新的行为来特化现有的具体对象 案例:讲师分类讲师讲师男男女女主题主题A男男主题主题B男男主题主题A女女主题主题B女女性别性别讲师讲师主题主题女女男男主题主题A主题主题B设计-变化应对之道 Designing for Change 在设计中思考什么应该变化,并封装会发生变化的概念 封装不只是隐藏数据,也可以是封装类型 变化不只是算法和行为,可以是任何事情 案例:委托评价讲师讲师听众听众公司公司A公司公司B主办方主办方usesusescreatecreate公司公司C设计-变化应对之道Single
10、Responsibility PrincipleOpen Closed PrincipleLiskov Substitution PrincipleInterface Segregation PrincipleDependency Inversion Principle注释 能用代码来阐述的,尽量不用注释 好的注释应该解释意图,而不是解释操作 什么也比不上放置良好的注释来得有用 什么也不会比陈旧、提供错误信息的注释更有破坏性目录(一) 除了编码,开发还可以做什么除了编码,开发还可以做什么 编码规范 单元测试 代码评审 静态检查 持续集成目录(二) 补充补充 动态检查 缺陷管理 性能测试 WEB
11、前端分析 自动化测试除了编码,开发还可以做什么 现状项目开发过程中,由于开发人员的经验、代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入和周期等问题。 措施 可以采用以下五个步骤来保证和提高整个项目的代码质量:统一编码规范、代码样式;静态代码分析(static code review);单元测试;持续集成;代码评审和重构(Review & Refactor)。下面将针对每个步骤和其所使用的工具、方法进行详细描述。编码规范规范统一的编码能提高项目代码的可读性和可维护性,编码规范主规范统一的编码能提高项目代码的可读性和可维护性,编码规范主
12、要应包含以下几个方面:要应包含以下几个方面: 一般规则和格式规范。例如代码缩进、程序块规范、每行最大代码长度等。 命名规则。例如包名、类名、变量、方法、接口、参数等命名规范 文档规范。例如类文件头声明、类注释、成员变量和方法注释等规范。 编程规范。例如异常、并发、多线程等方面的处理方式。 其他规范。例如日志格式、属性文件格式,返回值和消息格式。用eclipse控制代码样式(一)一旦编码规范确定,就可以利用一旦编码规范确定,就可以利用 Eclipse 来控制代码样式和格式。来控制代码样式和格式。点击 Eclipse 的 Windows - Preference 菜单项,在打开的Preferenc
13、es 对话框的左侧栏中找到 Java 节点下的子项 Code Style,该项和它的子项允许您对 Java 代码的样式进行控制:用eclipse控制代码样式(二)可以在 Eclipse 提供的默认代码格式配置的基础上建立自定义的格式。在 Formatter 面板中,点击 New,输入新的名字并选择一个默认的配置作为初始化格式,如图所示:用eclipse控制代码样式(三)设置风格如图所示:代码静态检查_CheckStyle CheckStyle用来检查代码格式、规范、风格用来检查代码格式、规范、风格。 检查并强制执行统一的代码风格;检查并强制执行统一的代码风格; 检查检查Javadoc; 检查类
14、、变量、方法的命名;检查类、变量、方法的命名; 检查类和方法的大小;检查类和方法的大小; 检查编码错误,例如检查编码错误,例如magic number; 代码常见问题举例:代码常见问题举例: 代码中的代码中的magic-number和和magic-string : String s = “0000” + Integer.toString(ch, 16); 0000、16的含义,作者几周后就忘记了。CheckStyle的安装配置(一) CheckStyle插件地址。插件地址。 自动安装地址:http:/eclipse- 下载地址: http:/ 安装后出现:安装后出现:CheckStyle的安装
15、配置(二) 配置项说明:配置项说明: CheckStyle的安装配置(三) CheckStyle检查结果:检查结果: 其它工具 用于用于javascript静态检查的工具:静态检查的工具:Jslint -The JavaScript Code Quality Tool 代码静态检查_FindBugs FindBugs是一个是一个java代码的静态代码分析工具,用来发代码的静态代码分析工具,用来发现那些潜在的、常见的、很难被发现的现那些潜在的、常见的、很难被发现的bug。与其他静态。与其他静态分析工具不同,分析工具不同,FindBugs 不注重样式或者格式,它试图不注重样式或者格式,它试图只寻找
16、真正的缺陷或者潜在的性能问题。如只寻找真正的缺陷或者潜在的性能问题。如NullPoint空空指针检查、没有合理管理资源等。指针检查、没有合理管理资源等。 Findbugs插件地址。插件地址。 自动安装地址:http:/findbugs.cs.umd.edu/eclipse 下载地址:http:/ 配置配置选项选项: Findbugs的使用运行,右键项目执行运行,右键项目执行“Find Bugs”操作:操作: 检查结果:检查结果: 单元测试单元测试单元测试单元测试是最小粒度的测试,以测试某个功能或代码块,一般由程序员来做。用例设计和评审用例设计和评审 设计阶段需要具体考虑要对哪些代码单元进行测试
17、,被测单元之间的关系,测试策略,以及单元测试用例设计等,并最终输出单元测试用例设计文档,用来指导具体的单元测试执行。 在用例设计完成之后,下一步的工作就是进行测试用例的评审。个人的理解和经验始终是有限的,用例评审可以借集体之力,对用例设计进入查漏补缺,进一步保证测试用例的有效性。 单元测试_JUnitJUnitJUnit 是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。它是用于单元测试框架体系xUnit的一个实例(用于java语言)。主要用于白盒测试,回归测试。下载地址下载地址 eclipse自带了JUnit,完整安装包的下载地址: http:/ Junit核心结构JunitJ
18、Unit测试开发(一)下面举例描述怎样对一个类编写单元测试代码,待测试的类: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上执行Junit(三)新建测试
19、类:在Eclipse上执行Junit(四)下一步选择要测试的方法:在Eclipse上执行Junit(五)完成HelloTest的Abs方法:在Eclipse上执行Junit(六)执行测试程序,右键,Run As-JUnit Test,就可以看到JUnit测试结果: 绿色表示测试通过,只要有1个测试未通过,就会显示红色并列出未通过测试的方法。单元测试_EasyMock模拟对象技术模拟对象技术在实际项目中,开发人员自己的代码往往需要和其他的代码模块或系统进行交互,但在测试的过程中,这些需要被调用的真实对象常常很难被实例化,利用一个模拟对象来模拟我们的代码所依赖的真实对象,来帮助完成测试,提高测试覆
20、盖率。常见的模拟技术常见的模拟技术 模拟技术有很多种,如 jMock,EasyMock,Mockito,PowerMock 等等,下面用EasyMock举例说明如何模拟对象。EasyMock(一)EasyMock(二) / 校验用户名和密码 if(admin.equals(username) & 123456.equals(password) ServletContext context = getServletContext(); RequestDispatcher dispatcher = context.getNamedDispatcher(dispatcher); dispatcher
21、.forward(request, response); else throw new RuntimeException(Login failed.); EasyMock(三)为测试doPost()方法,需要模拟HttpServletRequest等对象,以便脱离J2EE 容器来测试这个Servlet。建立TestCase,名为LoginServletTest: public class LoginServletTest extends TestCase 测试当用户名和口令验证失败的情形: public void testLoginFailed() throws Exception /创建mo
22、ck对象 MockControl mc = MockControl.createControl(HttpServletRequest.class); HttpServletRequest request =(HttpServletRequest)mc.getMock();EasyMock(四) /设置mock参数 request.getParameter(username); / 期望下面的测试将调用此 方法,参数为username mc.setReturnValue(admin, 1); / 期望返回值为admin,仅调用 1 次 request.getParameter(password)
23、; / 期望下面的测试将调用此方 法,参数为 password mc.setReturnValue(1234, 1); / 期望返回值为1234,仅调用1 次 / 表示录制完毕 mc.replay();EasyMock(五) try servlet.doPost(request, null); fail(Not caught exception!); catch(RuntimeException re) assertEquals(Login failed., re.getMessage(); / verify: mc.verify();运行JUnit,测试通过!表示我们的Mock 对象正确工作
24、了!单元测试_测试覆盖率分析 为了衡量单元测试的质量和覆盖的范围,需要对单元测试的代码进行测试覆盖分析。 具体采用哪些指标可以根据项目的实际情况来定,以避免因过高的指标增加了代码开发人员的工作量而影响了项目整体的进度。 。 业内比较常用的工具有: 1、 Cobertura,对应的eclipse插件: eCobertura。 2、 EclEmma是一款基于 EMMA 的 Eclipse 插件,方 便在 Eclipse IDE 中进行测试覆盖率分析。 插件下载地址:http:/update.eclemma.org/ Eclipse测试覆盖率分析(一)下面说怎样在eclipse上执行测试覆盖率分析:
25、 先安装插件EclEmma, 然后在测试用例写好后,可以在右键点击测试类,选择 Coverage As - JUnit Test.Eclipse测试覆盖率分析(二)单元测试执行完后,Coverage视图中会显示所选择的测试的覆盖率。双击打开某一具体的类后,可以看到高亮显示的覆盖分析结果,如图 所示。红色代表测试没有覆盖到该行,黄色表示部分覆盖,绿色的行表示该行在本次测试中被覆盖到。Eclipse测试覆盖率分析(三)在 Coverage 视图中可以通过点击鼠标右键将测试覆盖分析的结果导出成需要的格式,例如 HTML。单元测试-FIRST原则Fast(快速)Independent(独立)Repea
26、table(可重复)Self-Validating(自足验证)Timely(及时)持续集成 持续集成(Continuous Integration)是利用一系列的工具、方法和规则,做到快速的构建开发代码,自动的测试化,来提高开发代码的效率和质量 。 持续集成的提出 如果项目开发的规模比较小,比如一个人的项目,如果它对外部 系统的依赖很小,那么软件集成不是问题,但是随着软件项目复杂度的增加(即使增加一个人),就会对集成和确保软件组件能够在一 起工作提出了更多的要求-要早集成,常集成。早集成,频繁的集成 帮助项目在早期发现项目风险和质量问题,如果到后期才发现这 些问题,解决问题代价很大,很有可能导
27、致项目延期或者项目失败。持续集成 持续集成的常见做法是:持续集成框架持续集成的常见做法是:持续集成框架+ 版本管理器版本管理器+ 构建工具。构建工具。 1、持续集成框架常用的有:Jenkins、Continuum、 CruiseControl等。 2、版本管理器常用的有:ClearCase、Wincvs、SVN等。 3、构建工具常用的有:Ant、Maven。 后面主要以 SVN + Jenkins + Ant 实现方式举例说明。 持续集成_版本管理器持续集成_自动构建 Ant 在构建过程方面十分优秀,它是一个基于任务和依赖的构建工具。下载地址: http:/ant.apache.org/bin
28、download.cgiMaven不单是构建工具,也是个项目管理平台。下载地址: http:/maven.apache.org/download.html Maven与Ant对比,一些使用上的区别: 1、 Maven是基于中央仓库的编译,即把编译所需要的资源放在一个中央仓库里,如jar,tld等。当编译的时候,maven会自动在仓库中找到相应的包,而ant需要自己定义了。用maven编译的项目在发布的时候只需要发布源码,小得很,而反之,ant的发布则要把所有的包一起发布。 2、 Maven有大量的重用脚本可以利用,如生成网站,生成javadoc,sourcecode reference,等。而
29、ant都需要自己去写。 3、 Maven目前不足的地方就是没有象ant那样成熟的GUI界面。 持续集成_持续集成框架有了自动构建后,我们就可以通过Jenkins每天定时用Ant脚本或Maven,加上JUnit、Cobertura/EMMA等的ANT 脚本调用,每一次的构建都可以把这些检查工作自动的进行一遍测试。然后生成测试报告进行查阅。Jenkins(Jenkins的前身)可以说在安装和配置上最简单的CI产品。 Jenkins是基于java开发的,但它不仅限于构建基于Java的软件,还能构建.net、Python、Ruby等。 Jenkins提供了一组很明确和可扩展API的Jenkins组件。
30、这批组成一个大的类库的Jenkins组件反过来又丰富了Jenkins的功能;它们都是开源的,而且它们可以直接通过Jenkins的控制台来进行安装。 安装软件下载地址:http:/jenkins-ci.org/ Jenkins安装要点将jenkins.war拷贝到tomcat的webapps目录下;修改Tomcat-7.0.8confserver.xml文件,设置UTF-8编码:通过以下方式修改Jenkins_HOME的位置:在Jenkins的web.xml中找到Jenkins_HOME,默认value为空值,将其设置 为你希望的路径,然后重启。 Jenkins首页Jenkins管理界面Jenk
31、ins插件安装(一)Jenkins插件安装(二)Jenkins Job(一)Jenkins Job(二)Jenkins Job(三)Jenkins Job(四)Jenkins 质量度量(一)Jenkins 质量度量(二)openEAP应用的实践(一) 以下演示在实际的openEAP项目中,怎样自动化完成以上活动。 演示的是一个web项目,目录结构如下图所示: openEAP应用的实践(二) 因为相关依赖资源都已经在quality目录下了(运行只依赖数据库环境,没有对数据库操作进行模拟),所以可以直接通过ant执行quality目录下的build.xml,脚本执行完毕后,生成的报告在qualit
32、y目录下,如下图所示: openEAP应用的实践(三)也可以发布到Jenkins上执行构建: openEAP应用的实践(四)在Jenkins上查看报告: 代码评审 代码评审(Code Review)是 Java 项目开发过程中的一个重要步骤,代码评审可以帮助发现静态代码分析过程中无法发现的一些问题,例如代码在逻辑上或者功能上是否存在错误,代码在执行效率和性能上是否有需要改进的地方等。代码评审还可以帮助新进入项目组的成员快速学习和了解项目,促进经验分享。代码评审主要包括两种形式,同级评审(Peer Review)和小组评审(Group Review)。同级评审主要指项目成员间的互相评审,小组评审
33、是指通过召开评审会议,项目成员一起对项目代码进行评审。 为了提高代码评审的有效性和效率,可以借助一些外部工具,比较常用的代码评审工具有 Jupiter 和 Code Striker。Jupiter 是一款开源的 Eclipse 插件,允许成员将评审意见定位到真实代码的具体行,由于代码评审的结果以 XML 文件的形式保存。Jupiter使用Eclipse插件下载地址:http:/ review)分为4个流程 : 1.Configuration(配置):review发起者设置“Review ID”,指定要 评审的代码,参与代码评审的人员,要讨论的问题等等。 2.Individual review(
34、个人评审):每个人独自审查代码,把可能出现 问题的代码加入checklist。 3.Team review(团队评审):大家在一起讨论之前检查出的问题代 码,并决定如何处理。 4.Rework:开发人员根据之前评审的结果,对代码进行修复。 具体操作请参考Code Review工具Jupiter的使用.mht补充 除了以上提到的在开发过程中我们可以采取的措施外,我除了以上提到的在开发过程中我们可以采取的措施外,我们还可以通过其它手段从不同方面提升我们的系统质量。们还可以通过其它手段从不同方面提升我们的系统质量。 下面将简要介绍动态检查、下面将简要介绍动态检查、WEB前端分析、缺陷管理、前端分析、
35、缺陷管理、自动化测试、性能测试的操作和相关工具。自动化测试、性能测试的操作和相关工具。动态检查 动态检查是指当应用在运行时,检查当前应用的对象、对象引用、内存、CPU使用情况、线程、线程运行情况(阻塞、等待等),同时可以查找应用内存使用得热点,即:哪个对象占用的内存比较多;或者CPU热点,即:哪儿方法占用的较大得CPU资源。 常用的检测工具有:JProfiler、JConsole。 动态检查_JProfiler(一)动态检查_JProfiler(二)监控界面如下图所示: 动态检查_JConsole(一)JConsole是一个基于JMX的GUI工具,用于监控正在运行的JVM 。JConsole是
36、 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 其中708
37、0是Jconsole连接的端口。 动态检查_JConsole(二) 在本机运行jdkbinjconsole.exe,输入远端机器的IP、JMX端口就可以连接上去了。如下图所示: 动态检查_JConsole(三) 在本机运行jdkbinjconsole.exe,输入远端机器的IP、JMX端口就可以连接上去了。如下图所示:动态检查_JMX(一)JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等 。下面举例说明怎样通过JMX监控自己
38、的程序: 1、Hello是一个需要被管理的类: 动态检查_JMX(二)2、要管理Hello则必须创建一个相应Mbean: 说明:包含在MBean中方法都将是可以被管理的。MBean起名是有规范的,就是原类名后加上MBean字样。 动态检查_JMX(三)3、创建Agent类注册服务MBean: 动态检查_JMX(四)4、运行后通过JConsole监控的情况如下图: WEB前端分析(一)为什么关注前端性能分析?为什么关注前端性能分析? “系统响应时间”指应用系统从请求发出开始到客户端接收到所有数据所消耗的时间。这样,“系统响应时间”加上“呈现时间”,才是完整的用户感受到的响应时间。 响应时间 =
39、网络响应时间 + 应用程序响应时间 + 浏览器处理时间响应时间 = (N1+N2+N3+N4)+ (A1+A2+A3) + TbWEB前端分析(二)为什么关注前端性能分析?为什么关注前端性能分析? WEB前端分析(三)Yahoo!的的Exceptional Performance团队为改善团队为改善Web性能带来最佳性能带来最佳实践。他们为此进行了一系列的实验、开发了各种工具、写了大量的实践。他们为此进行了一系列的实验、开发了各种工具、写了大量的文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高网站性能。网站性能。 Exce
40、tional Performance团队总结出了一系列可以提高网站速度的团队总结出了一系列可以提高网站速度的方法。可以分为方法。可以分为7大类大类34条。包括内容、服务器、条。包括内容、服务器、 cookie、CSS、JavaScript、图片、移动应用等七部分。、图片、移动应用等七部分。 详情请参考附件:详情请参考附件:雅虎团队经验雅虎团队经验-网站页面性能优化的网站页面性能优化的34条黄金守条黄金守则则.pdf WEB前端分析(四)Yahoo!的的Exceptional Performance团队为改善团队为改善Web性能带来最佳性能带来最佳实践。他们为此进行了一系列的实验、开发了各种工具
41、、写了大量的实践。他们为此进行了一系列的实验、开发了各种工具、写了大量的文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高网站性能。网站性能。 Excetional Performance团队总结出了一系列可以提高网站速度的团队总结出了一系列可以提高网站速度的方法。可以分为方法。可以分为7大类大类34条。包括内容、服务器、条。包括内容、服务器、 cookie、CSS、JavaScript、图片、移动应用等七部分。、图片、移动应用等七部分。 详情请参考附件:详情请参考附件:雅虎团队经验雅虎团队经验-网站页面性能优化的网站页面性
42、能优化的34条黄金守条黄金守则则.pdf WEB前端分析(五)常用的前端性能分析工具有:常用的前端性能分析工具有: Fiddler IBM Page Detailer (商用)(商用) FireBug Yahoo YSlow HTTP Analyzer (商用)(商用) AOL PageTest 建议采用建议采用IBM Page Detailer、 Yahoo YSlow。 缺陷管理缺陷管理缺陷管理/软件缺陷管理(软件缺陷管理(Defect Management)是在软件生命周)是在软件生命周期中获取、管理、沟通任何变更请求的过程(从变更的建议到变更的期中获取、管理、沟通任何变更请求的过程(从
43、变更的建议到变更的解决)。可以确保你的问题如需求或者缺陷被跟踪管理而不丢失。解决)。可以确保你的问题如需求或者缺陷被跟踪管理而不丢失。业内在用的缺陷管理工具:业内在用的缺陷管理工具: 自动化测试_QTP(一)QTP是是Quicktest Professional的简称,是一种自动测试工具。使的简称,是一种自动测试工具。使用用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、
44、输入数据和期望的输出进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。数据等。以验证以验证eapmgr登录为例,简单演示登录为例,简单演示QTP的用法。的用法。 1、测试用例: 自动化测试_QTP(二)2、运行、运行QTP,在以下提示框中勾选,在以下提示框中勾选“Web” 自动化测试_QTP(三)3、在主界面上,点击“Record”,开始录制脚本: 输入测试URL后,点【确定】:自动化测试_QTP(三)在自动打开的eapmgr登录页面中,输入用户名:admin,密码:suntek:点【登录】按钮,系统弹出提示: 自动化测试_QTP(三)4、完成录制,点击【stop】: 自动录
45、制的脚本如下: 修改脚本,加上提示内容校验: 自动化测试_QTP(四) 完整脚本如下图所示: 5、执行脚本,让QTP自动验证结果: 自动化测试_QTP(五) 执行结束,返回结果报告: 性能测试_LR(一)LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,题,LoadRunner能够对整个企业架构进行测试。通过使用能够对整个企业架构进行测试。通过使用 LoadRunner,企业能最大限度地缩短测试时间,优化性
46、能和加速应,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。用系统的发布周期。 LoadRunner是一种适用于各种体系架构的自是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。动负载测试工具,它能预测系统行为并优化系统性能。 性能测试_LR(二)以对以对eapmgr登录性能测试为例,简单演示登录性能测试为例,简单演示LR的用法。的用法。 测试目标:测试测试目标:测试172.16.52.67上的上的eapmgr登录功能,在登录功能,在100并发并发下测试下测试5分钟的平均响应时间。分钟的平均响应时间。 1、新建脚本: 性能测试_LR(三) 2、录制脚本,点击【Start Record】按钮: 输入URL 在弹出页面中填写账号、密码后点【登录】按钮: 性能测试_LR(四) 完成录制: 3、启动场景测试,LR有两种测试场景: * Goal Oriented Scenario:面向目标场景 * Manual Scenario:手动场景 性能测试_LR(五) 4、设置目标和执行时间: 性能测试_LR(六) 性能测试_LR(七) 5、运行时参数设置: 性能测试_LR(八) 取消写日志: 忽略思考时间: 性能测试_LR(九) 6、启动测试: 性能测试_LR(十) 7、运行结果: 性能测试_LR(十一) 8、分析结果: