教育资源为主的文档平台

当前位置: 查字典文档网> 所有文档分类> 论文> 其他论文> 敏捷开发下的重构技术

敏捷开发下的重构技术

上传者:网友
|
翻新时间:2015-08-19

敏捷开发下的重构技术

摘要:软件需求在整个软件开发生命周期中具有重要的地位,随着开发不断向纵深方向发展,无论是用户的需求,还是开发人员对需求的理解都发生变化。本文通过对传统开发流程和敏捷开发流程进行分析, 运用面向对象的设计原则和架构, 阐述进行敏捷开发流程下重构技术,分别从代码重构、设计重构、架构重构和业务重构四个方面阐述了敏捷开发模式中重构技术要点。

关键词:敏捷开发 面向对象 重构 设计原则

1 概述

软件开发流程是指将在开发、运营、维护软件的过程中很多技术、做法、习惯和思想统一到一个体系中。从而能提高软件开发、运营和维护的效率,以及提升用户满意度、软件的可靠性和可维护性。

经过这些年的积累,软件开发模型从最早最简单的

瀑布模型开始发展出了包括原型法、演化原型法、增量开发、螺旋模型、V 模型、混沌模型和近年流行的敏捷开发模式。

2 敏捷开发特点

敏捷开发是一种采取迭代开发方式,以人作为驱动核心的一种软件开发流程。团队成员无缝的交流,如每天短时间的站立会议。拒绝使用一切形式化的东西,使用简单易用的工具开始工作。在需求变化越来越不确定和产品原型周期要求越来越短的今天,敏捷开发模式被越来越多的开发团队所接受。

理论上看敏捷方法论无比完美:

图1 敏捷流程图

第一步:找出完成项目需要做的事情。图中Product Backlog,是指“积压的任务”或“待解决的问题”。Backlog的管理工作主要由Scrum Master来主导。

第二步:当前的冲刺主要需要解决的事情 Sprint Backlog任务被进一步细化为小的Task。如果一个任务的估计时间太长,那么它就应该被进一步分解。

第三步:冲刺(Sprint)。在冲刺阶段,一切对交流只能通过Scrum Master来完成。冲刺期间 ,每天要开一个每日 “站会”,大家依次报告各自每天的进度情况。平且有任何需求的改变都留待冲刺结束后再讨论。

在完成项目之前,通常使用燃尽图来对需要完成的工作的一种可视化表示(图2)。

在燃尽图中,纵轴、横轴分别代表工作和时间。在理想情况下,燃尽图应是一个向下的曲线,直到完成剩余的工作,“烧尽”至零。

3 敏捷开发中的重构

所谓重构(Refactoring)就是对软件现有的功能进行充分的利用,通过对程序代码进行调整,进一步提高软件的质量,丰富软件的性能,在一定程度上使程序的设计模式和架构趋于合理化,从而提高软件的可扩展性和可维护性。从本质上说,重构就是调整软件的内部结构,其目的主要是在现有软件功能的基础上,降低软件的修改成本,同时提高软件的可理解性。对于重构的方式,通常情况下可以分为代码重构、设计重构、架构重构和业务重构。

3.1 代码重构

代码重构是指在编码规范层面上对细粒度代码实行规范化的过程。代码重构由于其是处在方法级别重构技术,所以无论是在传统开发流程还在敏捷开发模式中都适应。下面是一些常用代码重构方法:

①封装成员变量:将仅限于本类使用的变量重写成私有成员变量,并提供访问方法。这种重构方式可以将与外部调用者无关的变量隐藏起来,减少代码的耦合性,并减少意外出错的概率。

②提取方法:将大段代码中的一部分提取后,构成一个新方法。这种重构可以使整段程序的结构变得更清晰,从而增加可读性。这也对函数通用。

③一般化类型:将多个类/函数共用的类型抽象出可以公用的基类,然后利用多态性追加每个类/函数需要的特殊函数。这种重构可以让结构更加清晰,同时可以增加代码的可维护性。

④函数归父:也叫函数上移,是指将子类方法上移到父类。避免行为的重复性。虽然重复的两个函数可以各自工作,但是,对自身进行重复,会成引发错误。无论在任何情况下,系统内部只要出现重复,同时只能修改其中的一个。

⑤函数归子:也叫函数下移,是指将父类的方法下移到子类。函数归子恰恰相反于函数归父。在必要的情况下,将某些行为从父类移至特定的子类时,这时就可以使用函数归子,它通常也只在这种时候有用。

⑥方法更名:将方法名称以更好的表达它的用途。方法更名说的简单点就是把方法启一个与它功能相对应的名称,当你的方法是求和操作时,你的方法名应该是Sum(int param),而不要写成a(int param)。

3.2 软件设计重构

设计重构是在代码重构之上更高级别重构技术,通常(面向对象语言中)采取面向对象的分析和设计原则,选择合适的设计原则和设计模式来构建类之间依赖关系。在敏捷开发中通常采取如下设计重构方法:

①单一职责原则:对于一个类来说,引起它变化的原因应该仅有一个。简单地说,就是一个类只具有一个功能,这是因为,如果一个类能够实现两个功能,必然造成一个功能的变动会污染另外一个功能的代码。

②开放-封闭原则:类、模块、函数等软件实体,通常情况下都是可以扩展的,但是不可对其进行修改。简单地说,该原则的极限情况是,如果完成一个软件实体,那么这个软件实体以后不允许改动,而且,当添加新功能时,在不修改原来的代码的基础上可以继续书写代码。在社会实践中,虽然达不到这种理想情况,但是可以接近,通常情况下,这种接近的状态就是一种比较完美的状态。

③Liskov替换原则:子类型必须能对它们的基类型进行替换。简单的说,该原则就,如果不是基于“is-a”的原则进行继承,这种情况下比较危险,这是因为,由于时间、开发者之间存在差异,在一定程度上可能导致子类型替换父类型。

④依赖倒置原则:对于高层模块来说,不能对低层模块形成依赖,二者之间应该依赖于抽象。简单的说,因为软件的策略部分和业务模型主要集中在高层模块,这是软件的主要特征。另外,在实际编程过程中,高层模块是应用最多的,在很多库的支持下,细节模块不再那么重要。在这种情况下,可以说,高层不依赖于低层。 ⑤接口隔离原则:在实际使用过程中,防止客户依赖它们不用的方法。简单地说,就是将接口进行内聚处理,如果接口缺乏相应的内聚性,在这种情况下,就会出现接口中的某些方法会被污染。这是因为,当一个客户使用的接口中包含他不需要的方法时,这时改动客户不需要的方法,就会对客户的接口造成污染,进而在一定程度上污染了客户的代码。

3.3 系统架构重构

对于传统的架构设计,通常情况下主要包括两个方面,分别为架构和设计。其中,设计包含详细设计(详细的类图,顺序图等UML图)、详细的API设计以及接口描述,存储层数据库表字段设计等。当前,随着社会节奏的不断加快,进一步使得业务需求、技术等都在快速地变化着,在进行架构设计时,前期花费的时间约占30%。在进行需求分析时,如果分析不彻底,就会导致开发出的软件不符合市场需求,甚至需求发生变动,就会改动成本。如图3所示,描述了敏捷开发前和后架构方式:

图3 敏捷开发前后架构设计方式

3.4 业务流程重构

业务流程重构即BPR,BPR的思想是指精简企业机构设置,简化企业业务沉程,以降低经营运行成本,提高企业经济效益,大限度地减少或精简不必要的业务流程。随着大数据、云计算、移动设备、社交商务等IT趋势的发展,新业务形态对IT基础架构带来了新的挑战。

4 结束语

对于代码来说,需要明确它要做的内容,对于如何做的问题,需要通过重构来解决。重构的目的就是通过对程序代码进行调整,进而在一定程度上提高软件的质量,丰富软件的性能,使得程序的设计模式、架构趋于合理,同时提高软件的可扩展性和可维护性。对于软件产品来说,最初制造出来,通常情况下需要经过精心设计,并且具备良好的架构。但是,随着时间的延长,用户的需求发生了变化,在这种情况下需要对原有的功能进行修改,或者添加新的功能。在这一过程中,需要对软件存在的缺陷进行修改和完善。为了不断满足用户的需求,违反最初设计架构的行为不可避免。当难以实现用户的新需求时,对于新的需求,软件的架构逐渐丧失支撑能力,最终成为约束。

综上所述,敏捷开发作为一种开发软件的思想,这种思想渗透到各种软件开发工具中。在开发软件的过程中,重构作为敏捷开发的重要环节,凭借该思想,可以帮助开发人员提高开发软件的效率。

参考文献:

[2]贝克(Beck,K.).解析极限编程:拥抱变化[M].2版.北京:电子工业出版社,2006.5.

[3]邹欣.构建之法:现代软件工程[M].北京:人民邮电出版社,2014.9.

[4]范钢.大话重构[M].北京:人民邮电出版社,2014.5.1.

[5]Alistair Cockburn著.Agile Software Development[M].苏敬凯译.机械工业出版社,2008.

[6]张询.论银弹的存在[J].计算机教育,2004.7:35-37.

[7]黄敏.用极限编程解决软件开发项目中的常见问题[J].电子科技,2004.3:43-45.

[9]Martin Fowler.《重构:改善既有代码的设计(中文版)》[M].候捷译.中国电力出版社.

[10](美)Joshua Kerievsky.《重构与模式》[M].杨光译.人发邮电出版社.

下载文档

版权声明:此文档由查字典文档网用户提供,如用于商业用途请与作者联系,查字典文档网保持最终解释权!

网友最新关注

快乐是一种美德
过年
我拥有我快乐
感悟生命
倒霉的日子
迷失
我在童话中成长
军训
一顿饺子
My family(我的家庭)
童话
发生在我身边的一件事
论西部地区高校教师办社工机构的困境与出路
教育游戏在小学低年级课堂教学中的应用研究
大学生宿舍人际关系中存在的心理问题及其对策研究
文化多样性背景下民族院校心理健康教育刍议
强化机关效能建设提升学籍服务水平
从协商民主视角管窥高校院系党与非党行政负责人合作共事
成功行业特色高职院校协同创新改革经验分析
浅析社会体育专业本科毕业牛专项因素对就业的影响
以人文关怀为导向的大学体育教育研究
以人为本指导大学生就业的创新思考
名言警句在高校学生素质教育中的作用
独立学院学生国际交流现状与对策研究
高职院校思想政治课教学的现状与对策研究
新时期高校德育工作的创新
论新形势下健全促进大学牛就业创业体制机制的思考
《少年闰土》教学设计
《我的伯父鲁迅先生》教学设计三
《我的伯父鲁迅先生》教学设计二
《我的伯父鲁迅先生》教学设计一
《有的人》教学设计一
综合性学习:遨游汉字王国──有趣的汉字
《一面》教学设计三
《有趣的汉字》教学设计一
《综合性学习“我爱你,汉字”》教学设计一
《少年闰土》教学设计
《一面》教学设计二
《遨游汉字王国》教学设计
《一面》教学设计一
《猜灯谜》教案
《综合性学习:“我爱你,汉字”》教学设计二