软件构造教程(预习或复习自取六)

 

第一章:软件开发概述

第二章:模块化软件构造

第三章:面向对象的软件构造

第四章:数据处理的软件构造

第五章:用户交互的软件构造

第六章:软件重构与交付

时序图是UML的一种动态交互图。
主要成分是用方框表示的对象,在对象名称下加下画线
对象具有生存周期,用从对象图标向下延伸的一条虚线表示对象存在的时间。
对象之间的交互用消息发送表示,它是一个从请求对象向服务
对象标记发送消息名称的有向连线,对象也可以向自己发送消息。
自上而下的消息连线表示消息发送的时间顺序。控制焦点是顺序图中表示时间段的符号,在这个时间段内对象将执行相应的操作,用小矩形表示。

软件重构

1.重构大函数

  • 1)运用重构“提炼方法”(Extract Method )。
  • 2)运用“移除临时变量”。
  • 3)运用重构“以查询取代临时变量”。
  • 4)可以用“函数移动”的策略。

1)运用重构“提炼方法”
  • 如果一个方法的代码太长或者代码需要很多注释才能理解其意图,可用一个能说明其意图的方法替换那些代码。运用“提炼方法”抽取代码时,要使用良好的编码风格设计方法名和参数,允许读者在较高的函数级别理解程序,提高程序的阅读性。

“提炼方法”的步骤如下:

  • (1)设计一个新方法,并按照提炼代码的意图给方法命名
  • (2)把原来方法中要提炼出的代码直接复制到新的方法中(目标方法)。
  • (3)检查目标方法中的局部变量、引用变量和临时变量,做出相应修改,有时要运用“移除临时变量”或“分解临时变量”的策略。
  • (4)在源方法中调用目标方法,取代提炼的代码。
  • (5)通过编译和测试。
2)运用“移除临时变量”
3)运用重构“以查询取代临时变量”

4)运用“函数移动

“函数移动”的基本步骤

  • (1)检查被源方法使用的、在源类中定义的所有的特性,考虑是否要移动。
  • ( 2)检查源类的子类和超类是否声明了要移动的方法。如果有其他的方法申明,则不能移动,
  • (3)选择一个更合适的方法名,在目标类中定义。同时,把源方法的代码复制到目标方法中,然后适当调整代码。如果移动的方法要使用原来的资源,要考虑如何从目标方法中引用源对象。
  • (4)决定如何从源代码中正确引用目标对象。
  • (5)把源方法改成派遣方法。例子中就是把
  • (6)决定是否删除源方法或者把它留作派遣方法。如果移除源方法,则要把它的所有引用都替换成引用目标方法。
  • (7)通过编译并测试。​​​​​​​
2.用多态替换分支语句
  • 改造最为复杂、庞大的代码calculateFineAndBonus()中的分支语句。
  • 分支语句的形成是因为罚金和奖励积分的计算与书籍借阅的天数、书籍价格、特别是书籍种类等多个条件有关。

有3中基本技术:

  • 1)用类替换类型码。
  • 2)用子类取代类型码。
  • 3)用多态取代类型码。
    ​​​​​​​
1)用类替换类型码
  • 使用符号名称或枚举类型表示不同的书错种类,进⑾头现个同的计算操作,这是过程式语言(如C语言)最基本的特性,也是分支语句的典型应用场景,它提高了代码的可读性。
  • 但是,编译程序在分析程序、检查类型到分支语句的条件时,检查的是符号名称后面隐含的数值,而不是符号名称。任何一个类型码作为参数的函数期待的是数值,没有任何机制强迫使用符号名称,所以,符号名称可能成为错误源。
     
2)用子类取代类型码
  • 如果类型码不影响程序的行为,则在面向对象中使用“用类替换类型码”的策略。但是,如果类型码影响程序行为,最好使用多态来处理多变的行为。程序中有分支条件语句就表明这种情形的出现。
  • 优点是,把变化行为的知识从类的使用者搬迁到了类本身。要是增加新的变化,只需增加子类。
  • 若编程语言没有多态机制,就只能检查所有条件、改变检测的条件,所以,这个重构特别适合代码扩展,支持变化。​​​​​​​
3)用多态取代类型码
  • 如果类型码影响程序行为,最好史用多心术北专北十W后个基本思路是把原先的方法设计成抽象方法,在子类中重载每个分支条件。如果不同对象的行为根据条件发生变化,多态就可以避免编写这些条件。
  • 优点是,避免在程序中多处出现一组相同的条件。设计新的子类来提供合适的方法,而类的使用者无须知道子类的存在,减少了程序的耦合性,便于更新和扩展。​​​​​​​
重构后的优点:
  • 原先复杂的功能划分到若干相互交互的、短小的方法中。程序具有面向对象的特点:
  • 庞大复杂的功能分解到类,通过对象之间的协作完成;
  • 功能单一的代码容易复用;
  • 松散耦合的类容易扩展和维护。 

重构的基础:

  • 在极限编程或其他敏捷方法学中,重构常常是软件开发循环的一部分:开发者轮流增加新的测试和功能,重构代码来增进内部的清晰性和一致性。
  • 重构既不修正错误,也不增加新的功能,主要用于提高代码的可读性或改变代码内部结构与设计,使其更容易维护;
  • 重构代码可以是结构层或语意层,不同的重构手段可能是结构的调整或语意的转换,但前提是不影响代码在转换前后的行为。​​​​​​​
代码重构主要有三个时机:
  • 给程序增量地添加功能的时候
  • 定位错误的时候
  • 评审代码的时候
造成重构的主要原因是∶
  • 改进软件设计
  • 使软件更容易理解
  • 有助于查找错误
2.再识重构

重构代码把常见的、证明切实有效的重构模式—重构的目标和重构的步骤——进行归档分类,形成了软件开发最佳实践。 


重构代码时要记住以下三点:
  • ( 1)不要为了重构而重构。
  • (2)为理解而做简略重构。
  • ( 3)不要顾虑复查或测试对代码的改动。

软件交付
 

软件开发和软件维护这两个阶段之间的开发活动统称为软件交付。
其作用是让最终用户使用开发的软件。
软件交付的基本活动包括构建、打包、发布、安装和部署。
 

构建与打包

1.开发环境和运行环境

  • 软件交付的核心是把程序从开发者的机器上迁移到用户的机器上。
  • 应用程序是在包含计算机操作系统、应用程序、配置文件等的软件环境上运行。
  • 软件环境可以分为开发环境、运行环境、测试环境等。
     
 2.虚拟机
  • 大多数现代编程语言能在不同的计算机、工业控制机、平板设备、手机、嵌入式设备等上运行,尽可能地独立于计算机及其操作系统(平台或环境)。
  • 虚拟技术为每个应用创建一个运行的容器,把应用程序与计算平台隔离,从而实现了应用的跨平台运行。例如,Web 服务器,Java 虚拟机(JVM ) ,AndroidDalvik VM虚拟机,CLR ( Common LanguageRuntime )。
3.构建和打包
  • 软件交付前的活动是编译和连接然后把应用代码构建
  • (build )成可运行的程序(如C程序)。
  • 软件交付的首要工作是把构造的程序从开发环境中分离出来并打包。
  • 程序打包就是创建计算机程序的安装,即把各种编译好的文件、依赖的资源、数据和配置文件等组装成一个可以自行解压的压缩文件,允许软件文件在多个计算机上安装运行。
4.安装活动
  • 确保满足必要的系统需求;检查软件的版本;
  • 创建或更新程序文件和目录;
  • 增加配置数据,如配置文件、Windows注册项或环境变量;
  • 使用户能访问软件,如链接、快捷键或书签;配置自动运行的组件,如Windows服务﹔激活产品,更新软件版本。
     
复杂的软件则需要系统地部署和实施

软件部署包含三个任务:

  • (1)配置并管理应用软件要运行的环境(硬件配置、系统软件、外部服务);
  • (2)安装应用程序的正确版本;
  • (3)配置应用,包括数据或需要的状态。应用软件的实施,包括客户化开发(对软件产品按照客户要求更改)、应用部署、应用初始化(设置用户角色和权限、录入基本数据等)、人员培训等活动。
     
测试层次

(1)单元测试
  • 对程序基本单元(函数、方法、类或对象及构件或服务)进行的测试。
  • 关注程序单元的基本功能、算法实现、数据结构等内部组织结构。
     
(2)集成测试
  • 对两个及以上相互关联的程序单元测试。
  • 具有调用关系的函数、具有继承或聚合关系的类,以及具有合作关系的子系统、软件使用或依赖独立的外部系统,甚至是软硬件的交互。
  • 集成测试的重点是检测程序模块的接口、模块之间的交互及开发的软件与外部系统的交互。
(3)系统测试
  • 对整个软件的测试称为系统(级)测试。
  • 重点是检测软件是否满足了用户需求、完成既定的功能和任务。
  • 同时,还要检测运行速度、存储占用、事务处理、数据量及是否稳定、可靠、安全、易用、易维护等非功能需求。
(4)验收测试
  • 确保软件准备就绪,最终用户可以在用户环境执行软件的既定功能和任务。
  • 验收测试是在产品发布之前进行的测试活动,也称交付测试。

测试驱动开发TDD

“测试驱动开发”(Test-Driven Development,TDD)或“测试先行开发”,是一种不同于传统软件开发流程的新型的开发方法。
它要求在编写某个功能的代码前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个软件的开发。
1有助于编写简洁可用和高质量的代码,并加速开发过程。
 

测试驱动开发的基本过程如下:
  • (1)编写一个测试,检测待测程序是否满足一个(新增)功能。(2)运行测试——由于还没有代码,甚至可能都不能通过编译(3)编写待测程序足够的代码,并通过编译。
  • (4)编写待测程序满足测试,直至测试通过。(5)必要的话重构代码,用测试验证。
  • (6)重复上述步骤,直到更多的需求都编码实现并通过测试。
     
理解TDD
  • TDD的原理是在开发功能代码前,先编写单元测试代码,确定需要编写什么产品代码。
  • TDD整合了需求分析、设计、重构和质量控制,通过测试推动整个开发进程。
  • TDD的目标不是测试软件。
  • TDD考虑的是用户需求(对象、功能、过程、接口等),通过测试用例框架帮助设计和编码实现需求,实现持续的验证。
TDD具有如下特点。
  • (1)只开发满足需求的软件。
  • (2)促使实现松耦合的设计。
  • (3)尽早地避免、发现和修改错误。(4)与软件同步的文档.
  • (5)提供了快乐工作的基础。

第七章:GUI软件构造

第八章:应用数据库

第九章:基于复用的软件构造

  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值