当前位置: 查字典论文网 >> 敏捷开发下的重构技术

敏捷开发下的重构技术

格式:DOC 上传日期:2015-08-19 17:11:25
敏捷开发下的重构技术
时间:2015-08-19 17:11:25     小编:

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

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

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].杨光译.人发邮电出版社.

全文阅读已结束,如果需要下载本文请点击

下载此文档

相关推荐 更多