版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章
软件重构与交付第6章软件重构与交付通过例子学习改善代码质量的重构技术和方法,学习软件打包和交付一个完整的软件,以及自动化软件构建的技术。作为提升,通过例子学习一种新型的软件开发方式——测试驱动开发,并了解软件交付的其他方式与基本活动。2016秋数据科学与软件工程学院2第6章软件重构与交付故事7应用软件的安装问题,即要将开发的程序的各个模块文件连同数据文件、使用的外部包等组装起来,成为一个完整的、在任何机器上都可运行的软件。若是Java应用程序,则还需要在用户的机器上安装Java运行时环境等。定位和修改程序错误或者在合适的位置给程序添加功能就变得越发困难、费时。而且,修改代码后的回归测试有不少重复工作,手工编写和执行测试也很耗费。他们需要采用更好的技术和工具。2016秋数据科学与软件工程学院3第6章软件重构与交付6.1代码重构6.2软件交付6.3案例分析与实践6.4讨论与提高6.5思考与练习题2016秋数据科学与软件工程学院46.1代码重构代码重构是增量迭代开发不可或缺的技术,已经成为现代软件开发的基本技术,并在很多常用的IDE中成为标准模块。代码重构就是在不改变软件外部行为的前提下改善它的内部结构。6.1.1代码重构的案例研究6.1.2代码重构概述2016秋数据科学与软件工程学院56.1.1代码重构的案例研究【例6.1】2016秋数据科学与软件工程学院66.1.1代码重构的案例研究时序图是UML的一种动态交互图。主要成分是用方框表示的对象,在对象名称下加下画线。对象具有生存周期,用从对象图标向下延伸的一条虚线表示对象存在的时间。对象之间的交互用消息发送表示,它是一个从请求对象向服务对象标记发送消息名称的有向连线,对象也可以向自己发送消息。自上而下的消息连线表示消息发送的时间顺序。控制焦点是顺序图中表示时间段的符号,在这个时间段内对象将执行相应的操作,用小矩形表示。2016秋数据科学与软件工程学院76.1.1代码重构的案例研究1.重构大函数1)运用重构“提炼方法”(ExtractMethod)。2)运用“移除临时变量”。3)运用重构“以查询取代临时变量”。4)可以用“函数移动”的策略。2016秋数据科学与软件工程学院86.1.1代码重构的案例研究“提炼方法”的步骤如下。(1)设计一个新方法,并按照提炼代码的意图给方法命名。(2)把原来方法中要提炼出的代码直接复制到新的方法中(目标方法)。(3)检查目标方法中的局部变量、引用变量和临时变量,做出相应修改,有时要运用“移除临时变量”或“分解临时变量”的策略。(4)在源方法中调用目标方法,取代提炼的代码。(5)通过编译和测试。2016秋数据科学与软件工程学院96.1.1代码重构的案例研究“函数移动”的基本步骤如下。(1)检查被源方法使用的、在源类中定义的所有的特性,考虑是否要移动。(2)检查源类的子类和超类是否声明了要移动的方法。如果有其他的方法申明,则不能移动,(3)选择一个更合适的方法名,在目标类中定义。同时,把源方法的代码复制到目标方法中,然后适当调整代码。如果移动的方法要使用原来的资源,要考虑如何从目标方法中引用源对象。2016秋数据科学与软件工程学院106.1.1代码重构的案例研究“函数移动”的基本步骤如下。(4)决定如何从源代码中正确引用目标对象。(5)把源方法改成派遣方法。例子中就是把calculateFineAndBonus(aRental)中的参数作为发送消息的(派遣)对象,即改为aRental.calculateFineAndBonus()。(6)决定是否删除源方法或者把它留作派遣方法。如果移除源方法,则要把它的所有引用都替换成引用目标方法。(7)通过编译并测试。2016秋数据科学与软件工程学院116.1.1代码重构的案例研究2.用多态替换分支语句1)用类替换类型码。2)用子类取代类型码。3)用多态取代类型码。2016秋数据科学与软件工程学院126.1.2代码重构概述1.重构的基础重构既不修正错误,也不增加新的功能,主要用于提高代码的可读性或改变代码内部结构与设计,使其更容易维护。重构代码可以是结构层或语意层,不同的重构手段可能是结构的调整或语意的转换,但前提是不影响代码在转换前后的行为。2016秋数据科学与软件工程学院136.1.2代码重构概述代码重构主要有三个时机:给程序增量地添加功能的时候定位错误的时候评审代码的时候造成重构的主要原因是:改进软件设计使软件更容易理解有助于查找错误2016秋数据科学与软件工程学院146.1.2代码重构概述2.再识重构重构代码把常见的、证明切实有效的重构模式——重构的目标和重构的步骤——进行归档分类,形成了软件开发最佳实践。重构代码时要记住以下三点。(1)不要为了重构而重构。(2)为理解而做简略重构。(3)不要顾虑复查或测试对代码的改动。2016秋数据科学与软件工程学院156.2软件交付6.2.1构建与打包6.2.2实现构建自动化的工具6.2.3Java程序的打包与交付2016秋数据科学与软件工程学院166.2.1构建与打包软件开发和软件维护这两个阶段之间的开发活动统称为软件交付。其作用是让最终用户使用开发的软件。软件交付的基本活动包括构建、打包、发布、安装和部署。2016秋数据科学与软件工程学院176.2.1构建与打包1.开发环境和运行环境软件交付的核心是把程序从开发者的机器上迁移到用户的机器上。应用程序是在包含计算机操作系统、应用程序、配置文件等的软件环境上运行。软件环境可以分为开发环境、运行环境、测试环境等。2016秋数据科学与软件工程学院186.2.1构建与打包2.虚拟机大多数现代编程语言能在不同的计算机、工业控制机、平板设备、手机、嵌入式设备等上运行,尽可能地独立于计算机及其操作系统(平台或环境)。虚拟技术为每个应用创建一个运行的容器,把应用程序与计算平台隔离,从而实现了应用的跨平台运行。例如,Web服务器,Java虚拟机(JVM),AndroidDalvikVM虚拟机,CLR(CommonLanguageRuntime)。2016秋数据科学与软件工程学院196.2.1构建与打包3.构建和打包最简单的软件交付活动是编译(compile)和连接(link),然后把应用代码构建(build)成可运行的程序(如C程序)。软件交付的首要工作是把构造的程序从开发环境中分离出来并打包。程序打包就是创建计算机程序的安装,即把各种编译好的文件、依赖的资源、数据和配置文件等组装成一个可以自行解压的压缩文件,允许软件文件在多个计算机上安装运行。2016秋数据科学与软件工程学院206.2.1构建与打包4.安装活动确保满足必要的系统需求;检查软件的版本;创建或更新程序文件和目录;增加配置数据,如配置文件、Windows注册项或环境变量;使用户能访问软件,如链接、快捷键或书签;配置自动运行的组件,如Windows服务;激活产品;更新软件版本。2016秋数据科学与软件工程学院216.2.2实现构建自动化的工具现代的IDE如Eclipse、NetBeans、VisualStudio都包含了build操作,利用目录结构管理开发的代码、利用各种配置指定需要资源的信息等,容易完成项目代码的编译和连接。IDE通过可视化完成资源配置、路径设置、外部库引入等代码的管理,简化了构建活动。2016秋数据科学与软件工程学院226.2.2实现构建自动化的工具使用Ant、make等独立的构建工具可以得到与操作系统或IDE无关的代码。更有意义的是,通过编写脚本或批处理文件能使程序的构建工作自动化。1.经典构造工具make2.Java的构建工具AntAnt(Anotherneattool)是一个跨平台的Java库和命令行工具,用编写的脚本执行编译、汇编、测试和运行等构建任务。2016秋数据科学与软件工程学院236.2.2实现构建自动化的工具Ant具有如下特点:(1)Ant是用Java编写的,而且它的构建规则用扩展性标识语言XML(ExtensibleMarkupLanguage)描述,具有跨平台性;(2)Ant由一系列任务组成,这些任务是用XML文件描述的脚本,结构清晰,容易书写和维护;(3)由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境和技术中,包括持续构建技术、Android开发环境。2016秋数据科学与软件工程学院246.2.2实现构建自动化的工具下载安装Ant后,设置环境变量ANT_HOME和Path。Ant将项目的构建任务分解为工程、目标和任务三个层次。工程用来描述处于项目层次的内容。目标由用户来编写,不同的目标对应用户使用的一个操作任务单元。操作包括编译、测试、打包及操作系统的命令,如创建子目录等。Ant中的所有设定要素都是遵守XML规范的,并存储在默认的build.xml文件中。2016秋数据科学与软件工程学院256.2.3Java程序的打包与交付开发的Java程序有两种基本的应用方式:供其他开发者复用的代码,独立于开发环境的可运行程序。无论哪种形式,都要将Java程序(类)打包成jar文件(JavaArchiveFile,Java档案文件)。jar文件是一种压缩文件,可以用WinRAR、WinZip等打开。jar与ZIP的区别是:jar中包含一个META-INF/MANIFEST.MF的清单文件,作用类似Makefile,是用XML格式描述的。2016秋数据科学与软件工程学院266.2.3Java程序的打包与交付1.复用Java代码的打包2.可运行Java程序的打包3.在Windows上直接运行Java程序的制作2016秋数据科学与软件工程学院276.3案例分析与实践6.3.1代码重构的案例分析6.3.2代码重构实践6.3.3提交案例程序2016秋数据科学与软件工程学院286.3.1代码重构的案例分析以数据类取代记录。按照记录的结构设计类,然后把成员变量和成员函数搬到类中。在“面向对象构造”中采取了这种重构方法,把结构体的算式改造成为算式类。当要长期存储算式对象时,首先要将具有结构的算式转换为字符序列,然后存入文本文件。当在程序中需要结构化的算式时,通过算式类的构造函数把字符序列组成的算式恢复成算式对象。2016秋数据科学与软件工程学院296.3.1代码重构的案例分析封装集合。集合指的是Array、List、Set等容器型数据结构。集合中读取值方法的返回值应当保护对集合的操作,隐藏不必要的结构细节。最好不提供直接设置集合值的方法,而是提供增加元素、删除元素的操作。这样,拥有集合的对象就能控制如何增加或删除其集合元素。有了这样的接口就能封装集合,降低集合的拥有者和使用者的联系。2016秋数据科学与软件工程学院306.3.1代码重构的案例分析对程序进行的任何变更,都可以称为“重构”。大型重构和常规重构的区别是:前者是重写一个系统,后者是重写一段代码。在实际工作中大型重构,首先,要分析软件及其重构工作,识别出重构部分,制定工作计划;然后,为大规模的改造设计重构策略,逐步实施重构;最后,评估重构结果的正确性和有效性,即重构前后程序行为一致,重构改善了程序质量。2016秋数据科学与软件工程学院316.3.1代码重构的案例分析通常有两个途径保证正确性。一是小步重构,它不仅降低移入错误的可能性,也降低定位和排错的成本。二是持续的构建和测试,它们可以及时检查重构是否改变了系统的行为。对每次重构,建议遵循以下三步。分析:定义重构预期结果和到达目的的方法。实现:应用重构技术改变代码,并确保重构后代码正确。稳定:应用方法,确保实现的结果是持久的。2016秋数据科学与软件工程学院326.3.2代码重构实践2016秋数据科学与软件工程学院336.3.3提交案例程序2016秋数据科学与软件工程学院346.4讨论与提高6.4.1测试层次6.4.2测试驱动开发6.4.3软件交付及其发展2016秋数据科学与软件工程学院356.4.1测试层次为了能系统、全面地测试软件,测试可以先从程序的基本单元开始,然后按照一定方式——如软件集成的顺序,逐步测试集成后的程序,直至测试完成整个软件。按照软件的构成,测试可以划分为4个阶段或层次:单元测试、集成测试、系统测试和验收测试。2016秋数据科学与软件工程学院366.4.1测试层次(1)单元测试对程序基本单元(函数、方法、类或对象及构件或服务)进行的测试。关注程序单元的基本功能、算法实现、数据结构等内部组织结构。(2)集成测试对两个及以上相互关联的程序单元测试。具有调用关系的函数、具有继承或聚合关系的类,以及具有合作关系的子系统、软件使用或依赖独立的外部系统,甚至是软硬件的交互。集成测试的重点是检测程序模块的接口、模块之间的交互及开发的软件与外部系统的交互。2016秋数据科学与软件工程学院376.4.1测试层次(3)系统测试对整个软件的测试称为系统(级)测试。重点是检测软件是否满足了用户需求、完成既定的功能和任务。同时,还要检测运行速度、存储占用、事务处理、数据量及是否稳定、可靠、安全、易用、易维护等非功能需求。(4)验收测试确保软件准备就绪,最终用户可以在用户环境执行软件的既定功能和任务。验收测试是在产品发布之前进行的测试活动,也称交付测试。2016秋数据科学与软件工程学院386.4.2测试驱动开发“测试驱动开发”(Test-DrivenDevelopment,TDD)或“测试先行开发”,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个软件的开发。这有助于编写简洁可用和高质量的代码,并加速开发过程。2016秋数据科学与软件工程学院396.4.2测试驱动开发测试驱动开发的基本过程如下。(1)编写一个测试,检测待测程序是否满足一个(新增)的功能。(2)运行测试——由于还没有代码,甚至可能都不能通过编译!(3)编写待测程序足够的代码,并通过编译。(4)编写待测程序满足测试,直至测试通过。(5)必要的话重构代码,用测试验证。(6)重复上述步骤,直到更多的需求都编码实现并通过测试。2016秋数据科学与软件工程学院406.4.2测试驱动开发1.TD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南科技大学《日语高级听力》2021-2022学年第一学期期末试卷
- 《社保补缴业务流程》课件
- 生物医学健康医疗
- 幼儿园公开课大班数学课件教案《智力闯关》
- 煤矿安全培训课件
- 钢管架施工工程款项结算合同2篇
- 2024年度土地使用权转让合同交易见证方3篇
- 老舍母鸡课件
- 2024年度软件开发合同标的及开发周期2篇
- 基于2024年度的网络安全防护技术服务合同
- 2023年国航股份商务委员会高校毕业生校园招聘考试真题
- 非标融资审计问题研究报告
- 超星尔雅学习通《中国近现代史纲要(首都师范大学)》2024章节测试答案
- 机电综合实训报告
- 油库设计与管理(山东联盟)智慧树知到期末考试答案2024年
- 建筑装饰工程设计与施工合同
- 小学科普教育现状调查分析
- 核化学与放射化学智慧树知到期末考试答案2024年
- 煤矿复工复产培训课件
- 飞飞自动打怪脚本
- 火电电力职业技能鉴定考试-发电厂燃料管理笔试(2018-2023年)真题摘选含答案
评论
0/150
提交评论