嵌入式软件的重构——总论.ppt_第1页
嵌入式软件的重构——总论.ppt_第2页
嵌入式软件的重构——总论.ppt_第3页
嵌入式软件的重构——总论.ppt_第4页
嵌入式软件的重构——总论.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1,轻松,自如的培训氛围 咖啡,泡茶时间:5分钟 “咖啡,茶,果珍”,2,嵌入式软件的重构系列培训 总论,李春生 2004年05月13日,3,通过本次课程,你想学到什么?,4,本次培训内容,重构的定义; 嵌入式软件的重构; 坏味道; 重构的实例(6个) ; 重构在现实开发中的推广和障碍; 成立重构研究小组;,5,什么是程序?什么是软件?,6,一、重构的定义,7,重构关于本次培训,培训取材:重构改善既有代码的设计 高度评价:和设计模式并列为“JAVA行业的圣经; GOF,四巨头的重视; 适用性 :面向对象的程序设计 重构功能:增加程序的可性,可维护性,可测试性, 模块化和单元测试的必然基础;,8,重构我的感受,改善软件质量: 可读性,可测试性,可维护性; 质量活动的开展:单元测试,同行评审,培训,模块化; 提高软件的开发能力:让重构成为程序员开发准则和习惯; 独特的特征 :和编程规范不同,是一种动态的行为; 软件工程 :真正摆脱作坊式的软件开发,走向正 规开发的必然之路;,9,重构的至理名言,任何一个傻瓜都能写出计算器可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员; 事不过三,三则重构; 当你接获bug提报,请先撰写一个单元测试来揭发这个bug; 当你感觉需要撰写注释,请先尝试重构,试着让所有的注释变得多余; 当你发现自己需要为程序增加一个特性,而代码结构使你无法方便的这样做,就先重构那个程序;,10,重构的至理名言,重构之前,必须建立一套可靠的测试机制; 写软件就像种树,优秀的程序员挖成小坑后随及填好,继续挖下一个,只会产生一系列小坑,不会有大坑, 菜鸟则不会意识到所挖的坑正在变大,还是不停的挖,直到自己掉进大坑,爬不出来,陷入无尽的痛苦深渊; 开发时间越长,越能体会垃圾代码的痛苦,却不知道如何改进; Kent Beck:我不是一个伟大的程序员,我只是个有着一些优秀习惯的好程序员而已;,11,重构的定义: 对软件内部结构的一种调整,目的是 在不改变软件之可察性前提下,提高其可理解性,降低其修改成本。,12,重构的作用,改进软件设计; 有使软件更易被理解; 帮助你找到BUG; 帮助你提高编程速度;,13,重构作用的高度总结,增加软件的可读性,可维护性,可测试性; 单元测试,同行评审,培训的完美组合; 模块化的必然之路; 软件开发的长远眼光,未来的受益者; 从编码层次上升的软件设计层次;,14,重构的起源?,我们或多或少都做过的事情; 更多的存在于专家领域; 优秀程序员的自觉行为与菜鸟的被迫行为; 没有总结,提炼成一种思想,一种标准来指导我们 ;,15,二、嵌入式软件的重构,16,嵌入式软件的重构,缺点 I. 面向对象的软件设计和结构化设计不一样; II. 侧重于软件的设计而不是具体的实现; III. 面向对象的核心继承和多态在结 构化设计中无法表达; IV. 嵌入式软件更多的和硬件打交道,更注重 软件的实现,面向对象的软件则重视软件 的设计和复用;,17,嵌入式软件的重构,优点 I. 软件的核心思想是一样的; II. 函数和数据都和面向对象基本一致,原有的 class可以转换成模块的思想,对象之间的重 构可以看作模块之间的重构。 III. 代码模块相当于面向对象的类; IV. 共同的软件质量属性可测试性,可读性, 可维护性; V. 嵌入式软件代码规模小,更适合重构,见效 更快;,18,三、坏味道,19,坏味道,改进软件,最重要的是要知道改进哪里,Kent给了我们很生动的描述“坏味道”。 当我们察看代码的时候,每个人的嗅觉是不一样的,嗅觉灵敏的一下子就可以察觉到那些坏味道的存在; 嗅觉能力是需要培养的,这就是资深工程师和入门者之间的差别。,20,坏味道举例,重复的代码: 如果你在一个以上的地点看到相同的程序结构,那么可以肯定:设法将它们合而为一,程序将变得更好。 过长函数: 程序愈长愈难理解。更应该积极的分解函数,需要注释的地方提炼出去。条件式和循环常常也是提炼的信号。 过小结构 : 过多单一全局变量,合并成结构进行统一管理。 数据泥团: 参数,变量数据,函数集中管理,修改成结构。,21,坏味道举例,过多参数列表 : 函数调用太多的参数。 模块信息的封装: 提供过多的接口,内部变量泄漏,没有实现信息的隐藏。 过大结构 : 按功能结构划分,裁减到舒服的使用。 过度耦合 : 模块之间关系不清晰,高内聚,低耦合 。,22,讨论,在你的代码里,有哪些坏味道? 你的嗅觉如何?,?,23,四、重构举例,24,一、重新组织你的函数,重构手法中,很大一部分是对函数进行整理。 处理过长代码,重复代码是最重要的功能之一。,25,重构方法提炼函数:,1)小结:有一段代码可以被组织在一起独立出来,将这段代码放进一个独立函数中,并让函数名称解释该函数的用途。 2)动机:对付过长的函数,对付重复代码; 3)好处:复用机会大,容易理解(代替注释),容易覆写; 4)问题:局部变量的处理。 5)实用性:非常大,最好的重构方法。,26,二、重新组织你的数据,主要是对数据的处理,封装,可理解性,常 数的替换,对象之间的关联 。,27,重构方法封装值域:,1)概括:直接访问一个值域,会增加与值域的耦合,为这个值域建立设值/取值函数,并且只以这些函数来访问值域。 2)动机:可以通过覆写一个函数改变获取数据的途径,支持更灵活的数据管理方式。 3)好处: 封装数据,模块化用,容易修改,减少耦合。 4)问题:函数增加,不必所有的值域都这样封装。 5)实用性:模块化对外不留接口,模块内部基本可以不用这种方式;,28,重构方法用结构代替数组 :,1)小结:数组的各个元素各自代表不同的东西,可以用结构来代替,结构的成员来描述数组的元素。 2)动机:数组描述了不同类型的成员,容易出错。 3)好处:管理方便,可读性强; 4)问题:; 5)实用性:碰到这种情况,一定要替换,用数组是入门练习的做法。,29,三、模块之间搬移特性,面向对象的类,我们可以相应的认为就 是文件,功能模块的一个体现。 适用在各个文件内的组织变量和函数的 位置,责任,解决软件的耦合性,如是驱动,还 是单板相关,还是cpu,操作系统相关。,30,重构方法搬移函数 :,1)概括:某个函数与另一个模块之间的关系更密切,调用后者,或者被后者调用,或者从逻辑关系,功能上讲,更适合另一个模块。 2)动机:模块的功能过大,耦合太多、; 3)好处:功能稳定,减少耦合; 4)问题:, 5)实用性:比较大,如获取单板硬件版本号算在哪个模块。,31,重构方法引入外加函数:,1)概括:一个已经提交或者没有源代码的模块,需要增加一个额外函数,建立一个新的函数,并且把相应模块的结构传递进来。 2)动机:增加模块的功能;已有稳定的模块或者库文件没有源代码,而需要增加新的功能 3)好处:不要破坏成熟的模块,或者无法获得源代码; 4)问题:效率,定义麻烦; 5)实用性:对于模块化的实施,或者对已有模块的扩展,这个函数放的位置不是很重要。,32,四、简化条件表达式,将复杂的条件逻辑分成若干小块。使得切换逻 辑和操作细节分开。,33,重构方法合并重复的条件片断 :,1)概括:在条件式的每个分支上有着相同的一段代码,将这段重复代码搬移到条件式之外。 2)动机:不同条件含有相同代码,可以清晰描述变化。 3)好处: 容易维护,不容易出错。 4)问题:注意代码出现的位置。 5)实用性:很重要,一定采纳;,34,五、简化函数调用,函数式代码最重要的组成单位,函数的信息隐藏, 参数个数,查询和修改分离,函数命名等 。,35,重构方法将查询函数和修改函数分离 :,1)概括:某个函数既返回对象状态值,又修改对象状态,建立两个不同的函数,一个负责查询,一个负责修改。 2)动机:注意函数调用的副作用,分离会让函数功能更明确,更容易维护; 3)好处:方便管理,不要手动保持同步; 4)问题: 5)实用性:结构化设,驱动设计等用的很多;,36,五、处理概括关系,主要用在各个模块之间的封装和函数调用关 系,注意这里和面向对象差别很大。,37,重构方法提炼模块 :,1)概括:将多个模块共有的属性提炼出来。作为单独模块; 2)动机:方便扩展。 3)好处:方便管理,例如uc/os-ii, vxWorks的信号量处理; 4)问题:。 5) 实用性:根据情况。,38,五、重构在现实开发中的推广和障碍,39,为什么开发者不愿意重构他们的程序?,新手不相信重构,老手不知道如何重构; 如果这些利益是长远才体现的,何必现在付出这些努力呢?说不定当项目收获这些利益时,你已经不在职位上了; 代码重构是一项额外工作,项目经理则是进度为第一驱动力; 重构可能破坏现有程序;,40,我想到的解决办法,重构系列培训,单板软件试点,组建重构小组; 重构同样可以短期受益,正如锻炼身体和饮食调控; 降低重构带来的额外开销,顶住项目压力,获

温馨提示

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

评论

0/150

提交评论