您好,欢迎访问三七文档
北美专业培训机构艾威(中国)培训学院AVTECH简介AVTECH总部设在美国NEWJERSEY,是北美排行第一的专业培训机构,设有4大分校,数十个培训点遍布北美、西欧和东亚;;2000年进入中国,以培养国际化的中高端信息人才为己任,专注于国际前沿的新技术研发与信息科技新兴行业的开拓教育。AVTECH进入中国13年,属同行中历史最久。AVTECH是国内最大的国际认证考试中心,提供上千门国际认证考试。AVTECH的师资来自全球,在国内培训机构中独一无二的。学院开设课程超过500门,学习培训内容涵盖IT技术及使用IT技术的医学、生物、财会、管理等相关行业所有高、中、低级知识和技能。其中一些技术课程来自于如下厂家:微软、IBM、Oracle、Cisco、SAS、ISTQB、SAP、PMI、EXIN、IIBA、OpenGroup、APMG、ISACA、Vmware、EXIN、Peoplecart、EPI、BRMI、IAOP、ScrumAlliance等艾威最新推荐:ITIL、ITILExpert、CISSP、PMP、CISA、COBIT、Prince2、MSP、SCM、CSD、CBAP、TOGAF、CRISC、CGEIT、CISM、PGMP、PFMP、BRMP、CDCP、SGF、NPDP等认证培训代码质量与评审内容•质量管理的必要性•质量管理实践•看得见的改进•总结互联网开发特点•市场竞争激烈,需求变化快•开发周期长时间/迭代代码质量的影响成本生产率质量管理实践代码质量封装内聚耦合冗余可读性可测试性角度:演化、维护高内聚、低耦合是有限度的目标群体:开发人员代码质量保障步骤代码评审持续集成对待变化的态度不只是拥抱变化,更要利用变化时间/迭代质量重构的时机•某周一早上,你的老板要求编写一个小程序,从键盘读入字符,然后输出到打印机上–voidCopy(){–intc;–while((c=Rdkbd())!=EOF)–wrtPrt(c);–}CopyCharWriterPrtCharReadKbd重构的时机booleanptFlag=false;booleanpunchFlag=false;voidcopy(){intc;while((c=(ptFlag?Rdpt():Rdkbd())!=EOF)punchFlag?wrtPunch():wrtPrt(c);}•几个月后,老板来找你,说有时希望Copy程序能从手写板读入信息几个月后,老板又来找你,有时希望Copy程序可以输出到U盘上ReadWriterCopyKbdPtCharCharPrtPuh质量管理平台•Sonar•Maven•Jenkins•插件体系结构看得见的度量指标A&D重复代码单元测试复杂度潜在Bug编码规则注释重复代码单元测试复杂度•圈复杂度•度量代码分支情况–Ifforwhilecasecatchthrowreturn&&||?•复杂性越高,测试成本越高复杂度编码规则检查注释架构依赖结构矩阵(DSM)设计度量指标NOC•派生类的数目DIT•继承树的深度RFC•类的外部响应LCOM4•方法的内聚LCOM4•Lackofcohesionofmethods•说明类内部方法和变量之间的关系•指标–LCOM4=0/Bad–LCOM4=1/高–LCOM4=2/低•SRP原则RFC•ResponseForClass•通过检查方法被调用的情况来反映一个类的复杂程度•可以简单的理解为一个类所包含的方法多寡•复杂度从类的内部描述,RFC从类的外部来描述•RFC=M+R•RFC’=M+R’–M=numberofmethodsintheclass–R=numberofremotemethodsdirectlycalledbymethodsoftheclass–R’=numberofremotemethodscalled,recursivelythroughtheentirecalltree设计设计高级度量Sonar插件附加维度治理可视化集成IDE本地化多语言改进效果改进架构-模块划分原则•采用Maven多Project结构,先根据职能分Project,再根据功能模块分Package•REP(重用发布等价原则)–重用的粒度就是发布的粒度•CCP(共同封闭原则)–包中所有类对于同一类性质的变化应该是共同封闭的•ADP(无环依赖原则)–在包的依赖关系图中不允许存在环设计-变化应对之道视角描述关注点概念对象是一组责任软件要负责什么?规约对象是一组可以被其他对象或对象自己调用的方法(也称行为)怎么使用软件?实现对象是代码和数据,以及它们之间的计算交互软件怎样履行自己的责任?MartinFowler的建议:对象的三个视角设计-变化应对之道•在概念上层次上交流,在实现层次上执行,客户端无需准确知道具体操作细节,只需一般性(概念性)知道即可•只要概念不变,客户端就可以与实现细节的变化隔离开来•案例:下一节分享去哪里听设计-变化应对之道•ProgrammingtoanInterface,notanImplementation–客户对象和服务对象之间的职责分配–使用抽象类隐藏具体的实现–创建和使用分离–案例:评价、资料设计-变化应对之道•Favorobjectcompositionoverclassinheritance–但是设计模式中为什么继承无处不在?–不要按照传统的方式来使用继承–用新的行为来特化现有的具体对象–案例:讲师分类讲师男女主题A男主题B男主题A女主题B女性别讲师主题女男主题A主题B设计-变化应对之道•DesigningforChange–在设计中思考什么应该变化,并封装会发生变化的概念–封装不只是隐藏数据,也可以是封装类型–变化不只是算法和行为,可以是任何事情–案例:委托评价讲师听众公司A公司B主办方usesusescreatecreate公司C设计-变化应对之道SingleResponsibilityPrincipleOpenClosedPrincipleLiskovSubstitutionPrincipleInterfaceSegregationPrincipleDependencyInversionPrinciple注释•能用代码来阐述的,尽量不用注释•好的注释应该解释意图,而不是解释操作•什么也比不上放置良好的注释来得有用•什么也不会比陈旧、提供错误信息的注释更有破坏性目录(一)除了编码,开发还可以做什么编码规范单元测试代码评审静态检查持续集成目录(二)补充动态检查缺陷管理性能测试WEB前端分析自动化测试除了编码,开发还可以做什么•现状项目开发过程中,由于开发人员的经验、代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入和周期等问题。•措施•可以采用以下五个步骤来保证和提高整个项目的代码质量:统一编码规范、代码样式;静态代码分析(staticcodereview);单元测试;持续集成;代码评审和重构(Review&Refactor)。下面将针对每个步骤和其所使用的工具、方法进行详细描述。编码规范规范统一的编码能提高项目代码的可读性和可维护性,编码规范主要应包含以下几个方面:•一般规则和格式规范。例如代码缩进、程序块规范、每行最大代码长度等。•命名规则。例如包名、类名、变量、方法、接口、参数等命名规范•文档规范。例如类文件头声明、类注释、成员变量和方法注释等规范。•编程规范。例如异常、并发、多线程等方面的处理方式。•其他规范。例如日志格式、属性文件格式,返回值和消息格式。用eclipse控制代码样式(一)一旦编码规范确定,就可以利用Eclipse来控制代码样式和格式。点击Eclipse的Windows-Preference菜单项,在打开的Preferences对话框的左侧栏中找到Java节点下的子项CodeStyle,该项和它的子项允许您对Java代码的样式进行控制:用eclipse控制代码样式(二)可以在Eclipse提供的默认代码格式配置的基础上建立自定义的格式。在Formatter面板中,点击New,输入新的名字并选择一个默认的配置作为初始化格式,如图所示:用eclipse控制代码样式(三)设置风格如图所示:代码静态检查_CheckStyle•CheckStyle用来检查代码格式、规范、风格。•检查并强制执行统一的代码风格;•检查Javadoc;•检查类、变量、方法的命名;•检查类和方法的大小;•检查编码错误,例如magicnumber;•……•代码常见问题举例:•代码中的magic-number和magic-string:Strings=“0000”+Integer.toString(ch,16);0000、16的含义,作者几周后就忘记了。CheckStyle的安装配置(一)CheckStyle插件地址。自动安装地址:下载地址:安装后出现:CheckStyle的安装配置(二)配置项说明:CheckStyle的安装配置(三)CheckStyle检查结果:其它工具•用于javascript静态检查的工具:Jslint-TheJavaScriptCodeQualityTool代码静态检查_FindBugs•FindBugs是一个java代码的静态代码分析工具,用来发现那些潜在的、常见的、很难被发现的bug。与其他静态分析工具不同,FindBugs不注重样式或者格式,它试图只寻找真正的缺陷或者潜在的性能问题。如NullPoint空指针检查、没有合理管理资源等。•Findbugs插件地址。自动安装地址:下载地址:的使用配置选项:Findbugs的使用运行,右键项目执行“FindBugs”操作:检查结果:单元测试单元测试单元测试是最小粒度的测试,以测试某个功能或代码块,一般由程序员来做。用例设计和评审设计阶段需要具体考虑要对哪些代码单元进行测试,被测单元之间的关系,测试策略,以及单元测试用例设计等,并最终输出《单元测试用例设计》文档,用来指导具体的单元测试执行。在用例设计完成之后,下一步的工作就是进行测试用例的评审。个人的理解和经验始终是有限的,用例评审可以借集体之力,对用例设计进入查漏补缺,进一步保证测试用例的有效性。单元测试_JUnitJUnitJUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。它是用于单元测试框架体系xUnit的一个实例(用于java语言)。主要用于白盒测试,回归测试。下载地址eclipse自带了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(四)下一步选择要
本文标题:代码质量与评审
链接地址:https://www.777doc.com/doc-430523 .html