下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 持续集成在Flex项目中的应用

持续集成在Flex项目中的应用.pdf

持续集成在Flex项目中的应用

376765750
2011-07-12 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《持续集成在Flex项目中的应用pdf》,可适用于IT/计算机领域

持续集成在Flex项目中的应用王政平年月AdobeFlashPlatformSummitChina内容安排介绍持续集成的概念动因为什么要采用持续集成的方法在Flex项目中实践持续集成•编译FlexAntTask•单元测试FlexUnit,MockAS•代码覆盖率FlexCoverage•代码质量分析FlexPMD•持续集成服务器HudsonAdobeFlashPlatformSummitChina概念介绍什么是持续集成?持续集成(continuousintegration)是软件开发实践中使用的一种工作方法少而频繁地提交改动源码管理SCM持续集成服务器CIAdobeFlashPlatformSummitChina概念介绍特点一旦构建失败要立刻修复让所有参与者能够很容易的拿到最终的可执行版本在和产品环境一样的环境中做测试自动化的安装部署保持自动构建系统足够快自动产生统计数据和报表AdobeFlashPlatformSummitChina下一部分介绍持续集成的概念动因为什么要采用持续集成的方法在Flex项目中实践持续集成•编译FlexAntTask•单元测试FlexUnit,MockAS•代码覆盖率FlexCoverage•代码质量分析FlexPMD•持续集成服务器HudsonAdobeFlashPlatformSummitChina动因为什么要使用持续集成的方法?减少风险提高质量提高工作效率AdobeFlashPlatformSummitChina动因如何降低风险需求设计分块开发集成测试AdobeFlashPlatformSummitChina动因如何提高质量和效率维护一个自动化的测试系统保证添加新功能或者重构代码时不会破环现有的功能代码分析工具帮助开发者提高代码的质量分析代码风格分析包依赖关系分析重复代码减少简单重复劳动自动生成统计数据AdobeFlashPlatformSummitChina下一部分介绍持续集成的概念动因为什么要采用持续集成的方法在Flex项目中实践持续集成•编译FlexAntTask•单元测试FlexUnit,MockAS•代码覆盖率FlexCoverage•代码质量分析FlexPMD•持续集成服务器HudsonAdobeFlashPlatformSummitChina实践FlexTimer一个例子项目一个简单的秒表软件支持网页和桌面运行(AIR)http:flextimersourceforgenetAdobeFlashPlatformSummitChina实践使用ANT脚本编译Flex项目FlexSDK提供了几个ANT任务Compc调用组件编译命令用来编译库(SWC)Mxmlc调用应用编译命令用来编译(SWF)打包AIR可以直接使用ANT的java任务调用SDK提供的adtjarAdobeFlashPlatformSummitChina实践编译Flex项目<macrodefname="flexcompc"><attributename="srcdir"><attributename="output"><elementname="options"implicit="yes"><sequential><pathconvertproperty="classes"pathsep=""><filesetdir="{srcdir}"><includename="***as"><includename="***mxml"><fileset><compositemapper><packagemapperfrom="{srcdir}*as"to="*"><packagemapperfrom="{srcdir}*mxml"to="*"><packagemapperfrom="{srcdir}*as"to="*"><packagemapperfrom="{srcdir}*mxml"to="*"><compositemapper><pathconvert><compcoutput="{output}“includeclasses="${classes}“><sourcepathpathelement="{srcdir}"><options><compc><sequential><macrodef>AdobeFlashPlatformSummitChina实践编译共享组件库项目<targetname="buildFlexTimerCommon"><propertyname="commonsrc"location="${homedir}srcFlexTimerCommonsrc"><flexcompcsrcdir="${commonsrc}"output="${stagelibdir}FlexTimerCommonswc"><compilerlibrarypathdir="${stagelibdir}"append="true"><includename="*swc"><compilerlibrarypath><flexcompc><target>AdobeFlashPlatformSummitChina实践编译一个网页应用项目<targetname="buildFlexTimerWeb"><mxmlcfile="${homedir}srcFlexTimerWebsrcFlexTimerWebmxml"output="${stagewebdir}FlexTimerWebswf"incremental="true“locale="enUS"><sourcepathpathelement="${srcdir}FlexTimerWebsrc"><compilerlibrarypathdir="${stagelibdir}"append="true"><includename="*swc"><compilerlibrarypath><loadconfigfilename="${FLEXHOME}frameworksflexconfigxml"><mxmlc><target>AdobeFlashPlatformSummitChina实践打包一个AIR桌面应用项目<targetname="buildFlexTimerDesktop"><mxmlcfile="${srcdir}FlexTimerDesktopsrcFlexTimerDesktopmxml"output="${stageairdir}FlexTimerDesktopswf"incremental="true“locale="enUS"><sourcepathpathelement="${srcdir}FlexTimerDesktopsrc"><compilerlibrarypathdir="${stagelibdir}"append="true"><includename="*swc"><compilerlibrarypath><loadconfigfilename="${FLEXHOME}frameworksairconfigxml"><mxmlc><javajar="${ADTJAR}"fork="true"failonerror="true"dir="${stageairdir}"><argvalue="package"><argvalue="storetype"><argvalue="pkcs"><argvalue="keystore"><argvalue="${srcdir}FlexTimerDesktoptestp"><argvalue="storepass"><argvalue="test"><argvalue="FlexTimerDesktopair"><argvalue="${srcdir}FlexTimerDesktopsrcFlexTimerDesktopappxml"><argvalue="FlexTimerDesktopswf"><java><target>AdobeFlashPlatformSummitChina实践使用FlexUnit编写测试用例开放源码的测试框架http:flexunitorg能够很容易的整合到ANT脚本中新的FlexUnit版本使用标注(annotation)的方式让测试代码更加简洁。AdobeFlashPlatformSummitChina实践使用FlexUnit编写测试用例publicclassTestSimpleDummy{Before(order=)publicfunctionrunBeforeEveryTest():void{}AfterpublicfunctionrunAfterEveryTest():void{}Test(expects="Error")publicfunctiontestThrowError():void{thrownewError()}Ignore("NotReadytoRun")TestpublicfunctionnotReady():void{AssertassertEquals(,)}}Test(expects="Error")AdobeFlashPlatformSummitChina实践编写异步测试代码Test(async)publicfunctiontestTimerCoundDown():void{timerlength=timeraddEventListener(FlexTimerEventCHANGECOUNTDOWNEVENT,AsyncasyncHandler(this,handleTimerCountDownComplete,,,handleTimeout),false,,true)timerstart()}protectedfunctionhandleTimerCountDownComplete(event:FlexTimerEvent,passThroughData:Object):void{}protectedfunctionhandleTimeout(passThroughData:Object):void{Assertfail("Timeoutreachedbeforeevent")}AsyncasyncHandlerAdobeFlashPlatformSummitChina实践结合MockAS编写测试代码TestpublicfunctiontestGlobalWithMock():void{varmock:MockMainClock=newMockMainClock()mockexpects("go")with(Globalinstance){commonInit(mock)mockdispatchEvent(newTimerUIEvent(TimerUIEventSTARTEVENT))}AssertassertTrue(mockerrorMessage(),mocksuccess())}mockexpects("go")AdobeFlashPlatformSummitChina实践结合MockAS编写异步测试代码Test(async)publicfunctiontestGlobalWithMockAsync():void{varmock:MockMainClock=newMockMainClock()mockexpects("go")mockexpects("shake")mockexpects("stop")mockaddEventListener(FlexTimerEventCOMPLETECOUNTDOWNEVENT,AsyncasyncHandler(this,handleTimerCountDownComplete,,mock,handleTimeout),false,,true)with(Globalinstance){commonInit(mock)countDownLength=mockdispatchEvent(newTimerUIEvent(TimerUIEventSTARTEVENT))}}protectedfunctionhandleTimerCountDownComplete(event:FlexTimerEvent,passThroughData:Object):void{varmock:MockMainClock=passThroughDataasMockMainClockAssertassertTrue(mockerrorMessage(),mocksuccess())}protectedfunctionhandleTimeout(passThroughData:Object):void{Assertfail("Timeoutreachedbeforeevent")}mockexpects("go")AsyncasyncHandlerAdobeFlashPlatformSummitChina实践把FlexUnit测试用例组织到一个项目中<xmlversion=""encoding=""><mx:WindowedApplicationxmlns:mx="http:wwwadobecommxml"layout="absolute"creationComplete="runMe()“xmlns:flexUnitUIRunner="http:wwwadobecomflexUnitUIRunner"><mx:Script><!CDATAimportorgflexunitlistenersAirCIListenerimportFlexTimertestTestSuiteimportorgflexunitlistenersUIListenerimportorgflexunitrunnerFlexUnitCoreprivatevarcore:FlexUnitCorepublicfunctionrunMe():void{core=newFlexUnitCore()coreaddListener(newUIListener(uiListener))coreaddListener(newAirCIListener())corerun(TestSuite)}><mx:Script><flexUnitUIRunner:TestRunnerBaseid="uiListener"width=""height=""><mx:WindowedApplication>coreaddListener(newUIListener(uiListener))coreaddListener(newAirCIListener())corerun(TestSuite)AdobeFlashPlatformSummitChina实践把测试项目整合到ANT脚本中<targetname="runUnitTest"depends="init,buildUnitTest"><flexunitplayer="air"swf="${stagetestdir}FlexTimerTestRunnerswf"toDir="${stagetestreportdir}"haltonfailure="false"verbose="true"localTrusted="true"><target>AdobeFlashPlatformSummitChina实践使用FlexCover分析测试覆盖率FlexCover是一个开源的代码覆盖率统计工具http:codegooglecompflexcover目前的版本只能支持FlexSDKx以下的版本具体步骤:先将FlexSDK复制一份然后把FlexCover中提供的SDK修改文件拷贝到FlexSDK相应的目录覆盖。再使用修改过的FlexSDK编译应用程序。然后安装运行CoverageViewerair载入编译产生的CVM文件(和SWCSWF文件在一起)运行单元测试项目AdobeFlashPlatformSummitChina实践查看代码覆盖率AdobeFlashPlatformSummitChina实践可能遇到的一些问题如果编译失败错误Error:orgwccsssacCondition把FlexSDK的lib目录下的batikallflexjar文件改名成batikextjar暂时没有简单的方法把CoverageViewer集成到ANT脚本中。网上已经有一些文章介绍整合FlexCover到ANT脚本中的文章http:wwweyefoddercomblogcodecoveragewithflexaheadshtml#moreAdobeFlashPlatformSummitChina实践使用FlexPMD工具分析代码质量FlexPMD是开放源码的代码分析工具源自java版的PMD用来帮助提高代码质量发现没有使用的代码发现不够有效的代码发现过于复杂的代码发现过长的代码。。它的工作基于可订制的规则配置文件。能够很容易的集成到ANT脚本中输出结果可以被支持PMD的报告工具处理AdobeFlashPlatformSummitChina实践使用基于Web的规则配置工具http:opensourceadobecomsvnopensourceflexpmdbinflexpmdrulesetcreatorhtmlAdobeFlashPlatformSummitChina实践FlexCPD和FlexMetricsFlexCPD是用来发现重复代码的工具在Hudson持续集成服务其中可以用DRY插件查看输出结果FlexMetrics是用来统计代码行数注释行数的工具在Hudson持续集成服务其中可以使用JavaNCSS插件查看输出结果AdobeFlashPlatformSummitChina实践使用Hudson持续集成服务器实现自动构建比较知名的持续集成服务器还有CruiseControlAdobeFlashPlatformSummitChina实践安装配置Hudson持续集成服务器https:hudsondevjavanet使用命令行参数:java–jarhudsonwar–httpPort=使用环境变量改变根目录:setHUDSONHOME=MyRoothome安装插件(Mercurial,PMD,CPD,JavaNCSS),重起。新建一个任务配置SCM触发指定ANT调用设定各种报告插件设定邮件通知AdobeFlashPlatformSummitChina总结在Flex项目开发中基本上已经具备搭建完整的自动化构建系统的工具集合持续集成结合其他的一些方法能够取得更好的效果测试驱动开发架构演进代码重构不仅是单元测试系统测试也可以整合到自动构建系统中来AdobeFlashPlatformSummitChina总结–需要注意的一些可能的不良影响统计数据是一把双刃剑善用统计数据能预测某些趋势提高软件质量滥用统计数据降低工作效率降低士气降低软件质量推荐阅读AntiPatternsIdentification,Refactoring,andManagement反模式鉴定重构与管理TheDangersofUsingSoftwareMetricsto(Mis)ManageITProfessionalVolume,issue(March)AdobeFlashPlatformSummitChina总结–个人体会人脑的特点灵活随机应变创造力不精确厌倦简单重复劳动电脑的特点精确对重复劳动毫不厌烦缺少创造力,按照指令工作在软件开发中开发人员做自己擅长的部分剩下不擅长的部分交给电脑帮我们自动完成。让人脑和电脑的优势互补协同工作。而不是把人变成机器。AdobeFlashPlatformSummitChinaAdobeFlashPlatformSummitChina演讲者介绍王政平邮箱zhengpinadobecomAdobe公司软件研发工程师AdobeConfigurator开发者从年开始从事软件开发工作,对各种技术方法有广泛的兴趣。个人博客http:herosysnet欢迎交流批评指正AdobeFlashPlatformSummitChina持续集成在Flex项目中的应用�内容安排SlideNumber概念介绍特点下一部分动因为什么要使用持续集成的方法?动因如何降低风险动因如何提高质量和效率下一部分实践FlexTimer一个例子项目实践使用ANT脚本编译Flex项目实践编译Flex项目实践编译共享组件库项目实践编译一个网页应用项目实践打包一个AIR桌面应用项目实践使用FlexUnit编写测试用例实践使用FlexUnit编写测试用例实践编写异步测试代码实践结合MockAS编写测试代码实践结合MockAS编写异步测试代码实践把FlexUnit测试用例组织到一个项目中实践把测试项目整合到ANT脚本中实践使用FlexCover分析测试覆盖率实践查看代码覆盖率实践可能遇到的一些问题实践使用FlexPMD工具分析代码质量实践使用基于Web的规则配置工具实践FlexCPD和FlexMetrics实践使用Hudson持续集成服务器实现自动构建实践安装配置Hudson持续集成服务器总结总结–需要注意的一些可能的不良影响总结–个人体会SlideNumber演讲者介绍SlideNumber

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/36

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利