第六章_软件演化技术

合集下载

《软件工程》教学教案

《软件工程》教学教案

《软件工程》教学教案一、第一章:软件工程概述1. 教学目标了解软件工程的定义、目的和重要性,掌握软件开发的基本过程和原则。

2. 教学内容软件工程的定义和重要性;软件开发的基本过程;软件工程的原则和方法。

3. 教学方法采用讲授法,结合案例分析,让学生了解和掌握软件工程的基本概念和原则。

4. 教学资源教材、课件、案例分析。

5. 教学评价通过课堂提问和案例分析,评估学生对软件工程的理解和应用能力。

二、第二章:软件需求分析1. 教学目标掌握软件需求分析的基本概念、方法和过程,能够运用需求分析工具进行需求收集和分析。

2. 教学内容软件需求分析的基本概念;需求分析的方法和过程;需求分析工具的使用。

3. 教学方法采用讲授法和实例分析,让学生了解和掌握需求分析的方法和过程。

4. 教学资源教材、课件、实例分析。

5. 教学评价通过课堂提问和实例分析,评估学生对需求分析的理解和应用能力。

三、第三章:软件设计1. 教学目标掌握软件设计的基本概念、方法和过程,能够运用设计工具进行软件架构和详细设计。

2. 教学内容软件设计的基本概念;设计方法和过程;设计工具的使用。

3. 教学方法采用讲授法和实例分析,让学生了解和掌握软件设计的方法和过程。

4. 教学资源教材、课件、实例分析。

5. 教学评价通过课堂提问和实例分析,评估学生对软件设计的理解和应用能力。

四、第四章:软件实现1. 教学目标掌握软件实现的基本概念、方法和过程,能够运用编程语言进行软件编码和测试。

2. 教学内容软件实现的基本概念;实现方法和过程;编程语言和测试工具的使用。

3. 教学方法采用讲授法和编程实践,让学生了解和掌握软件实现的方法和过程。

4. 教学资源教材、课件、编程环境和测试工具。

5. 教学评价通过编程实践和测试结果,评估学生对软件实现的理解和应用能力。

五、第五章:软件维护1. 教学目标掌握软件维护的基本概念、方法和过程,能够进行软件维护和优化。

2. 教学内容软件维护的基本概念;维护方法和过程;软件优化技巧。

【软件构造】第六章第一节可维护性的度量与构造原则

【软件构造】第六章第一节可维护性的度量与构造原则

【软件构造】第六章第⼀节可维护性的度量与构造原则第六章第⼀节可维护性的度量与构造原则本章⾯向另⼀个质量指标:可维护性——软件发⽣变化时,是否可以以很⼩的代价适应变化?本节是宏观介绍:(1)什么是软件维护;(2)可维护性如何度量;(3)实现⾼可维护性的设计原则——很抽象。

Outline软件的维护和演化可维护性的常见度量指标聚合度与耦合度⾯向对象五⼤原则SOLID单⼀职责原则SRP(Single Responsibility Principle)开放封闭原则OCP(Open-Close Principle)⾥式替换原则LSP(the Liskov Substitution Principle LSP)依赖倒置原则DIP(the Dependency Inversion Principle DIP)接⼝分离原则ISP(the Interface Segregation Principle ISP)Notes## 软件的维护和演化定义:软件可维护性是指软件产品被修改的能⼒,修改包括纠正、改进或软件对环境、需求和功能规格说明变化的适应。

简⽽⾔之,软件维护:修复错误、改善性能。

类型:纠错性(25%)、适应性(25%)、完善性(50%)、预防性(4%)演化:软件演化是⼀个程序不断调节以满⾜新的软件需求过程。

演化的规律:软件质量下降,延续软件⽣命软件维护和演化的⽬标:提⾼软件的适应性,延续软件⽣命。

意义:软件维护不仅仅是运维⼯程师的⼯作,⽽是从设计和开发阶段就开始了。

在设计与开发阶段就要考虑将来的可维护性,设计⽅案需要“easy to change”基于可维护性建设的例⼦:模块化OO设计原则OO设计模式基于状态的构造技术表驱动的构造技术基于语法的构造技术## 可维护性的常见度量指标可维护性:可轻松修改软件系统或组件,以纠正故障,提⾼性能或其他属性,或适应变化的环境。

除此之外,可维护性还有其他许多别名:可扩展性(Extensibility)、灵活性(Flexibility)、可适应性(Adaptability)、可管理性(Manageability)、⽀持性(Supportability)。

计算机软件技术基础教程(第二版)习题及答案

计算机软件技术基础教程(第二版)习题及答案

第1章习题部分答案1. 操作系统的发展分为那几个阶段?解:操作系统的发展经历了三个阶段:操作系统的酝酿阶段、操作系统的形成阶段、操作系统的理论化和标准化阶段。

2. 计算机软件技术开发系统包括那几个阶段?解:计算机软件开发系统的发展经历了四个阶段:机器语言阶段、汇编语言阶段、高级语言阶段、面向对象语言和可视化语言阶段。

3. 计算机软件技术的主要范畴是什么?解:计算机软件技术的主要范畴包括软件工程技术、程序设计技术、软件工具环境技术、系统软件技术、数据库技术、实时软件技术、网络软件技术、与实际工作相关的软件技术等八个领域的内容。

4. 从软件技术的发展现状来看有哪些值得我们注意的问题?解:从软件技术的发展现状来看有以下几个值得我们注意的问题:1)软件危机2)软件技术标准,软件版权和软件价值评估3)软件技术的基础研究。

1第2章习题部分答案1. 什么是软件危机?软件危机的表现有哪些?解:软件开发技术的进步为能满足发展的要求,在软件开发中遇到的问题找不到解决的方法,问题积累起来形成了尖锐的矛盾,导致了软件危机。

2. 软件危机产生的原因是什么?解:造成软件危机的原因是由于软件产品本身的特点以及开发软件的方式、方法、技术和人员引起的。

1)软件规模越来越大,结构越来越复杂。

2)软件开发管理困难而复杂。

3)软件开发费用不断增加。

4)软件开发技术落后。

5)生产方式落后。

6)开发工具落后,生产率提高缓慢。

3. 常见的软件过程模型有哪些?解:常见的软件过程模型有瀑布模型、增量模型、演化过程模型、敏捷开发4. 如何对软件质量进行评价?解:软件质量的评价主要围绕可维护性、可靠性、可理解性和效率这几个方面进行。

2第3章习题部分答案1. 软件可行性研究的目的是什么?软件可行性研究的任务又是什么?解:软件可行性研究的目的就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。

可行性研究的任务首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,把他们清楚地列举出来。

软件工程-课程目录-大纲视图(全国高等教育自学考试指定教材-计算机网络专业-独立本科)

软件工程-课程目录-大纲视图(全国高等教育自学考试指定教材-计算机网络专业-独立本科)

第一章绪论1.1 软件工程概念的提出与发展1.2 软件开发的本质1.3 本章小结第二章软件需求与软件需求规约2.1 需求与需求获取2.1.1需求定义2.1.2 需求分类2.1.3 需求发现技术2.2 需求规约2.2.1 需求规约定义2.2.2 需求规约(草案)格式2.2.3 需求规约(规格说明书)的表达2.2.4 需求规约的作用2.3 本章小结第三章结构化方法3.1 结构化需求分析3.1.1 基本术语1.数据流2.数据存储3.数据源和数据谭3.1.2 系统功能模型表示数据流图(Dataflow Diagram)3.1.3 建模过程1.建立系统环境图, 确定系统语境2.自顶向下, 逐步求精, 建立系统的层次数据流图3.定义数据字典数据流条目给出所有数据流的结构定义数据存储条目给出所有数据存储的结构定义数据项条目给出所有数据项的类型定义4.描述加工(1)结构化自然语言(2)判定表(3)判定树3.1.4 应用中注意的问题(1)模型平衡问题(2)信息复杂性控制问题3.1.5 需求验证3.2 结构化设计3.2.1 总体设计1.总体设计的目标及其表示(1)Yourdon提出的模块结构图(2)层次图(3)HIPO图2.总体设计步骤(1)变换型数据流图——变换设计(2)事物型数据流图——事物设计3.模块化及启发式规则(1)模块化1)耦合①内容耦合②公共耦合③控制耦合④标记耦合⑤数据耦合2)内聚①偶然内聚②逻辑内聚③时间内聚④过程内聚⑤通信内聚⑥顺序内聚⑦功能内聚(2)启发式规则1)改进软件结构, 提高模块独立性2)力求模块规模适中3)力求深度、宽度、扇出和扇入适中4)尽力使模块的作用域在其控制域之内5)尽力降低模块接口的复杂度6)力求模块功能可以预测3.2.2 详细设计1.结构化程序设计2.详细设计工具(1)程序流程图(2)盒图(N-S图)(3)PAD图(Problem Analysis Diagram)(4)类程序设计语言IPO图、判定树和判定表等也可以作为详细设计工具3.3 本章小结第四章面向对象方法——UML 4.1 UML术语表4.1.1 表达客观事物的术语1.类与对象1)类的属性(Attribute)2)类的操作3)关于类语义的进一步表达①详细叙述类的职责(Responsibility)②通过类的注解和/或操作的注解, 以结构化文本的形式和/编程语言, 详述注释整个类的语义和/或各个方法③通过类的注解或操作的注解, 以结构化文本形式, 详述注释各个操作的前置条件和后置条件, 甚至注释整个类的不变式④详述类的状态机⑤详述类的内部结构⑥类与其他类的协作4)类在建模中的主要用途①模型化问题域中的概念(词汇)②建立系统的职责分布模型③模型化建模中使用的基本类型2.接口(Interface)(1)采用具有分栏和关键字《interface》的矩形符号来表示(2)采用小圆圈和半圆圈来表示3.协作(Collaboration)4.用况(Use Case)5.主动类(Action Class)6.构件(Component)7.制品(Artifact)8.节点(Node)4.1.2 表达关系的术语1.关联(Association)(1)关联名(Name)(2)导航(3)角色(Role)(4)可见性(5)多重性(Multiplicity)(6)限定符(Qualifier)(7)聚合(Aggregation)(8)组合(Composition)(9)关联类(10)约束①有序(ordered)②无重复对象(set)③有重复对象(bag)④列表(list)或序列(sequence)⑤只读(readonly)2.泛化(Generalization)①完整(Complete)②不完整(Incomplete)③互斥(Disjoint)④重叠(Overlapping)3.细化(Realization)4.依赖①绑定(Bind)②导出(Derive)③允许(Permit)④实例(InstanceOf)⑤实例化(Instantiate)⑥幂类型(Powertype)⑦精化(Refine)⑧使用(Use)可模型化以下各种关系(1)结构关系1)以数据驱动2)以行为驱动(2)继承关系(3)精化关系(4)依赖关系4.1.3 表达组合信息的术语——包1)访问(Access)2)引入(Import)4.2 UML模型表达格式1.类图(Class Diagram)(1)模型化待建系统的概念(词汇), 形成类图的基本元素(2)模型化待建系统的各种关系, 形成该系统的初始类图(3)模型化系统中的协作, 给出该系统的最终类图(4)模型化逻辑数据库模式2.用况图(Use Case Diagram)所包含的内容(1)主题(Subject)(2)用况(Use Case)(3)参与者(Actor)(4)关联、泛化与依赖模型化工作1)关于系统/业务语境的模型化①系统边界的确定②参与者与用况的交互③参与者的语义表达④参与者的结构化处理2)关于系统/业务需求的模型化①确定系统/业务的基本用况②用况的结构化处理③用况的语义表达3.状态图(1)状态1)名字2)进入/退出效应(Effect)①entry②exit③状态内部转移3)do动作或活动4)被延迟的事件(2)事件1)信号(Signal)事件2)调用(Call)事件3)时间事件4)变化事件(3)状态转移①源状态②转移触发器③监护(guard)条件④效应(effect)⑤目标状态实际应用中, 使用状态图的作用①创建一个系统的动态模型②创建一个场景的模型4.顺序图(1)术语解析1)消息2)对象生命线3)聚焦控制(the Focus of Control)(2)控制操作子1)选择执行操作子(Operator for Optional Execution)2)条件执行操作子(Operator for Conditional Execution)3)并发执行操作子(Operator for Parallel Execution)4)迭代执行操作子(Operator for Iterative Execution)4.3 本章小结第五章面向对象方法——RUP5.1 RUP特点1.以用况为驱动2.以体系结构为中心3.迭代增量式开发5.2 核心工作流5.2.1 需求获取1.列出候选需求2.理解系统语境(1)业务用况模型(2)业务对象模型3.捕获系统功能需求(1)活动1: 发现并描述参与者(2)活动2: 发现并描述用况(3)活动3: 确定用况的优先级(Priority)(4)活动4: 精化用况(5)活动5: 构造用户界面原型1)用户界面的逻辑设计2)物理用户界面的设计3)开发用户界面原型并演示为了执行该用况, 用户怎样使用该系统(6)活动6: 用况模型的结构化5.2.2 需求分析1.基本术语(1)分析类(Analysis Class)1)边界类(Boundary Classes)2)实体类(Entity Classes)3)控制类(Control Classes)(2)用况细化(Use Case Realization)(3)分析包(Analysis Package)2.分析模型的表达3.分析的主要活动(1)活动1: 体系结构分析(Architectural Analysis)1)任务1: 标识分析包2)任务2: 处理分析包之间的共性3)任务3: 标识服务包4)任务4: 定义分析包的依赖5)任务5: 标识重要的实体类6)任务6: 标识分析包和重要实体类的公共特性需求(2)活动2: 用况分析1)任务1: 标识分析类①标识实体类②标识边界类③标识控制类2)任务2: 描述分析(类)对象之间的交互(3)活动3: 类的分析1)任务1: 标识责任2)任务2: 标识属性①关于实体类属性的标识②关于边界类属性的标识③关于控制类属性的标识3)任务3: 标识关联和聚合①关于关联的标识②关于聚合的标识③关于泛化的标识(4)活动4: 包的分析4.小结(1)关于分析模型1)分析包2)分析类3)用况细化(2)关于分析模型视角下的体系结构描述(3)用况模型和分析模型比较(4)分析模型对以后工作的影响1)对设计中子系统的影响2)对设计类的影响3)对用况细化[设计]的影响5.2.3 设计1.设计层的术语(1)设计类(Design Class)(2)用况细化[设计](3)设计子系统(4)接口(Interface)2.设计模型、部署模型以及相关视角下的体系结构描述(1)设计模型及其视角下的体系结构描述1)子系统结构2)对体系结构有意义的设计类3)对体系结构有意义的用况细化[设计](2)部署模型及该模型视角下的体系结构描述3设计的主要活动(1)活动1: 体系结构的设计1)任务1: 标识节点和它们的网络配置2)任务2: 标识子系统和它们的接口①标识应用子系统②标识中间件和系统软件子系统③定义子系统依赖④标识子系统接口3)任务3: 标识在体系结构方面有意义的设计类和它们的接口4)任务4: 标识一般性的设计机制①标识处理透明对象分布的设计机制②标识事务管理的设计机制(2)活动2: 用况的设计1)标识参与用况细化的设计类2)标识参与用况细化的子系统和接口(3)活动3: 类的设计1)任务1: 概括描述设计类2)任务2: 标识操作3)任务3: 标识属性4)任务4: 标识关联和聚合5)任务5: 标识泛化6)任务6: 描述方法7)任务7: 描述状态(4)活动4: 子系统的设计1)任务1: 维护子系统依赖2)任务2: 维护子系统所提供的接口3)任务3: 维护子系统内容4.RUP设计小结1)RUP设计的突出特点2)关于RUP的设计方法①给出用于表达设计模型中基本成分的4个术语, 包括子系统, 设计类, 接口, 用况细化[设计]②规约了设计模型的语法, 指导模型的表达③给出了创建设计模型的过程以及相应的指导3)RUP的设计模型①设计子系统和服务子系统②设计类(其中包括一些主动类), 以及他们具有的操作、属性、关系及其实现需求。

计算机软件动态演化技术概述

计算机软件动态演化技术概述

计算机软件动态演化技术概述摘要:本文阐述了软件动态演化技术的现状,研究意义和发展前景。

关键词:动态演化;语言层面;体系结构模型中图分类号:tp311.521 软件动态演化的定义计算机软件技术的发展,令人们的社会生活变得丰富有趣,然而随着计算机硬件技术和网络技术的快速发展,各种各样的计算硬件平台充斥到计算机网络应用的方方面面,许多软件已经因为不能适应物理环境的改变失去了生存空间,人们期望能够有一种新的软件技术来代替原有的软件开发技术,使得开发出的软件能够适应物理环境的改变,延长软件的生命周期,降低软件的开发成本。

针对这个问题,国内外专家学者都提出了自己的解决方案,如网构软件、自治计算和普适计算机模式等。

透过现象看本质,产生这个问题的原因是变化,网络环境的改变,硬件环境的改变和人们对软件功能的需求改变。

为了解决这个问题,软件动态演化技术应运而生。

软件动态演化技术就是期待所开发出来的软件能够在运行中,根据环境地变化而主动修改执行以呈现不同的功能行为的技术。

演化主要由满足设计期间需求的预设演化和满足运行期间需求的非预设演化构成。

目前,软件动态演化已经成为软件工程中一个新的但是很热门的研究领域。

2 软件动态演化的意义传统软件常常期望能够尽可能多的满足用户的需求,也就是传统软件演化主要是预设演化,但由于用户需求、网络环境介质,拓扑结构,计算平台等软件应用环境的改变以及软件开发周期的限制,要在软件开发的设计初期考虑所有潜在和未知的需求几乎是不可能的。

因此为了延长软件的生存周期,使有限的资源发挥最大的功效,提升软件的适应能力,软件需要具有动态演化的能力。

另外,互联网经济体已经成为世界上最重要的经济体之一,互联网经济体对软件的需求是不间断运行,这也是互联网经济体的特点之一,在这种情况下,那怕是因为正常的软件升级和优化造成的短暂停止都会带来巨大的损失,这是用户所不能忍受的。

所以支持动态演化是软件维护过程中的有力保证。

软件工程导论第6章(第4版)

软件工程导论第6章(第4版)

二. 人机界面设计
人机界面设计是接口设计的一个重要的组成部 分。对于交互式系统来说,人机界面设计和数据设 计、体系结构设计及过程设计一样重要。
1.指导规则
T.Mandel在《用户界面设计要素》中,提出了3 条指导规则: 让用户驾驭软件,不是软件驾驭用户 减少用户的记忆 保持界面的一致性
2. 应该考虑的设计问题
4. 人机界面设计指南
(3) 数据输入指南 尽量减少用户的输入动作。 保持信息显示和数据输入之间的一致性。 允许用户自定义输入。 交互应该是灵活的,可调整成用户喜欢的输入方式。 使在当前动作语境中不适用的命令不起作用。 让用户控制交互流。 对所有输入动作都提供帮助。 消除冗余的输入。
三. 过程设计
1.过程设计的目的与任务 目的 确定模块采用的算法和块内数据结构,用某种 选定的表达工具给出清晰的描述。 任务:编写软件的“过程设计说明书” 为每个模块确定采用的算法 (模块的详细过程性 描述) 确定每一模块使用的数据结构 确定模块接口的细节 (包括对系统外部的接口和 用户界面,对系统内部其他模块的接口,以及关 于模块输入数据、输出数据及局部数据的全部细 节)
三. 过程设计
2.过程设计的原则与方法
清晰第一的设计风格 结构化的控制结构 结构程序设计的经典定义为: “如果一个程序的代码块仅仅通过顺序、选择和循环这3 种基本控制结构进行连接,并且每个代码块只有一个入口和 一个出口,则称这个程序是结构化的。” 结构程序设计技术是一种实现在逻辑上正确描述每个模 块的功能,并且使设计出的处理过程尽可能简明易懂的关键 技术,是过程设计的逻辑基础。 逐步细化的实现方法 例:在一组数中找出其中的最大数
(4) 命令交互 命令行现在仍然是许多高级用户偏爱的交互方式。在 多数情况下,用户既可以从菜单中选择软件功能,也可以 通过键盘命令序列调用软件功能。 在提供命令交互方式时,必须考虑下列设计问题: 是否每个菜单选项都有对应的命令? 采用何种命令形式?有3种选择:控制序列(例如Ctrl+P), 功能键和键入命令。 学习和记忆命令的难度有多大?忘记了命令怎么办? 用户是否可以定制或缩写命令? 在理想的情况下,所有应用软件都有一致的命令使用 方法。

软件工程中的设计模式与反模式

软件工程中的设计模式与反模式
至关重要的作用。
软件设计原则
SOLID原则
面向对象设计的五 个基本原则,包括 单一职责原则、开 闭原则、里氏替换 原则、接口隔离原 则和依赖倒置原则。
KISS原则
保持设计简单,即 “保持简单原则”。
DRY原则
不要重复自己,即 避免重复的代码。
设计模式概述
什么是设计模式
设计模式是在软件设计过 程中针对特定问题的解决 方案,是经过反复验证的 最佳实践。
重要性
能力提升
灵活性
谢谢您的观看指导
策略模式是一种行为设计模式,它定义了一 系列算法,并将每个算法封装起来,以使它 们可以互相替换。在策略模式中,算法的选 择由客户端决定,从而可以灵活地改变不同
算法的行为。
策略模式
定义
策略模式定义及其 优势
实例
策略模式的实际应 用示例
结构
策略模式的结构组 成
观察者模式
观察者模式是一种行为设计模式,它定义了 一种一对多的依赖关系,使得当一个对象状 态发生变化时,所有依赖于它的对象都会收 到通知并自动更新。这种模式的一个典型例
软件工程中的设计模式与反模式
制作人: 时间:2024年X月
目录
CONTENTS
第1章 软件工程概述与设计原则 第2章 创建性模式 第3章 结构性模式 第4章 行为性模式 第5章 设计模式的应用
第6章 总结与展望
●01
LOGO 第1章 软件工程概述与设计原则
软件工程概述
软件工程是一门研究和应用如何以系统化、 规范化、可度量化、可重复使用的方法开发 和维护软件的学科。它是现代信息技术发展 的产物,对提高软件开发的质量和效率起着
迭代器模式
定义
迭代器模式的基本 概念

软件工程中的软件维护与演化技术

软件工程中的软件维护与演化技术

软件工程中的软件维护与演化技术随着科技的发展和社会的进步,软件在我们的生活中扮演着越来越重要的角色。

然而,软件的开发并不是一次性的任务,而是一个持续的过程。

软件维护与演化技术在软件工程中起着至关重要的作用,它们帮助我们保持软件的可靠性和可用性,同时也使软件能够适应不断变化的需求。

软件维护是指对已经投入使用的软件进行修改、改进和优化的过程。

在软件的使用过程中,难免会发现一些问题或者用户会提出新的需求。

软件维护就是为了解决这些问题和满足这些需求而进行的活动。

软件维护分为四个不同的阶段:纠错维护、适应性维护、完善性维护和预防性维护。

纠错维护是最常见的维护类型,它的目的是修复软件中的错误和缺陷。

当用户报告软件中的bug时,开发人员会对软件进行调试和修复。

适应性维护是为了使软件适应环境的变化而进行的维护活动。

例如,当操作系统升级或者硬件设备更换时,软件可能需要进行相应的修改。

完善性维护是为了改进软件的性能和可用性而进行的维护活动。

预防性维护是为了防止软件出现问题而进行的维护活动,例如对软件进行定期的检查和优化。

与软件维护相对应的是软件演化。

软件演化是指对软件进行持续的改进和发展的过程。

随着业务需求的变化和技术的进步,软件需要不断地进行更新和扩展。

软件演化的目标是使软件能够适应新的需求,并且保持其可靠性和可维护性。

软件演化可以分为两种不同的类型:增量式演化和迭代式演化。

增量式演化是指将软件的功能和特性逐步添加到现有的软件中。

这种演化方式可以减少对现有软件的影响,同时也可以快速地响应用户的需求。

迭代式演化是指通过多次迭代的方式对软件进行改进和扩展。

每一次迭代都会增加软件的功能和性能,同时也会修复一些已知的问题。

迭代式演化可以确保软件的稳定性和可靠性。

为了支持软件维护和演化,软件工程中涌现了许多相关的技术和方法。

其中,重构是一种常用的技术,它可以改善软件的设计和结构,同时保持软件的功能不变。

重构可以帮助开发人员降低维护成本,提高软件的可读性和可维护性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在系统运行时,允许进行重新配臵
6.3.2 面向对象的软件演化
动态调整不涉及实现代码,可直接在运行实例中 修改应用系统 使用反射、元数据及元对象协议来实现对象的动 态更新 参照透明,即被替换的对象无需告诉它的使用者, 在客户机-服务器(Client-Server)模式中,服务 器Server的更新对客户机Client保持透明 状态迁移,在对象动态演化中,被替换对象的相 关状态信息,例如:属性和当前运行状态,应该 迁移到新对象上
例如:当对航班调度系统和某些实时监控系统进 行演化时,不能进行停机更新,而必须切换到备 用系统上,以确保相关服务仍旧可用
条件发生改变时,移动计算系统需要调整对 应的计算构件,以适应外界环境的变化
6.3 软件演化的分类
诸如:交通控制软件、电信交换软件、 Internet服务应用软件以及高可用性的公共信 息软件
6.2 软件需求演化
软件演化是不断调节应用系统以满足用户需 求的过程,是对已有系统不断进行修改、补 充和完善,以适应外界环境变化的过程 随着新需求和新技术的不断涌现,几乎所有 的系统都要不断地进行升级和更新,这种变 化的起因更多地归结为软件需求的演化 在软件生命周期的各个阶段,软件需求都可 能发生改变
6.3.3 基于构件的软件演化
接口演化则是要对构件的接口进行修改,包括: 增加、减少和替换原构件的接口
反射式中间件(Reflective Middleware)是 一种通过开放内部实现细节以获取更高灵活 性的中间件 通过引入反射技术,以一种受限的方式来操 纵中间件运行时的内部状态和行为,使系统 具有反射性
6.2 软件需求演化
系统需求主要包括非功能性需求和功能需求 两部分,非功能性需求往往具有全局性,在 框架结构级别上,比较容易体现出来 软件体系结构、非功能性需求和功能需求之 间的关系
非功能性需求 功能需求
软件体系结构 股 体现 约束
6.2 软件需求演化
首先,必须在功能需求中体现非功能性需求,在 软件体系结构中体现功能需求和非功能性需求 其次,非功能性需求对软件体系结构和功能需求 具有约束 此外,软件体系结构也进一步约束了功能需求
软件的开发、发布和维护是一个渐进变化并 要达到预期目标的过程,是一种演化过程 在软件系统开发完毕正式投入使用之后,用 户需求发生了改变,或者要将该系统移植到 另一个运行环境中,或者在新环境中需求发 生变化,都需要对软件系统进行修改和完善 软件系统进行渐进完善并达到所希望的目标 的过程就是软件演化(Software Evolution)
6.1 软件演化概述
软件演化过程是由一系列复杂的变化活动组 成的,控制系统按照预期目标进行变化是开 发者所追求的目标
规约演化 确认 抽象 确认 现实世界 模拟 软件系统演化 确认 外部变化 实现
6.1 软件演化概述
软件演化是指在软件生命周期内进行系统维 护和系统更新的动态行为 软件演化的核心问题是:如何使软件系统适 应外界的改变,软件演化过程是软件演化和 软件过程的统一 软件演化过程应该具有以下几个特征:
加载时的隐含调用由编译系统来完成对DLL的加 载和卸载工作,属于软件静态演化 运行时的显式调用则是由编程者使用API函数来 加载DLL和卸载DLL,以实现调用DLL的目的
6.3.1 基于过程和函数的软件演化
Mark给出了一个名为PODUS(ProcedureOriented Dynamic Updating System) 的原型系统
6.3.2 面向对象的软件演化
相互引用问题,对象之间往往存在着某种相互依 赖的关系
在面向对象技术中,类层次的动态演化是最 具代表性的方法,其原理是:在代理机制下, 实现类的动态替换 Java语言使用了动态类的概念,并通过修改 标准Java虚拟机,增加相应动态类载入器, 在升级前先检查类型的正确性
静态演化是指系统在停机状态下所进行的修改 动态演化则是指软件在运行期间所进行的更新
在静态演化中,先对需求变化进行分析,锁 定软件更பைடு நூலகம்的范围,然后实施系统升级
在停机状态下,系统的维护和二次开发就是一种 典型的软件静态演化
6.3 软件演化的分类
对于执行关键任务的一些软件系统而言,通 过停止、更新和重启来实现维护演化任务将 会导致不可接受的延迟、代价和危险
需求分析往往具有无法避免的不彻底性和不 完备性,一些无法预料的外部条件变化也总 是在所难免的 软件需求演化主要分为以下三类:
6.2 软件需求演化
需求增加:软件工程师检查用户提出的新需求是 否与原有功能冲突,如果产生冲突则向开发小组 报告,否则将新需求加入到系统需求规格说明中, 启动软件演化过程 需求删除:在开发和运行阶段,系统往往存在着 某些不必要的或重复功能,必须删除这些功能所 对应的需求描述 需求改写:经过与客户的商讨之后,软件工程师 对功能定义、数据定义和实现方法进行修改,然 后通知相关人员按照新需求重新启动软件演化过 程
6.3.3 基于构件的软件演化
工作在基层中的实体执行系统正常的业务功能, 而工作在元层中的实体负责建立和维护系统的自 我描述
软件构件之间的交互是通过连接件中相关信 息的变化来实现的,同时,这种信息的变化 可以触发和驱动系统自身的调整 演化平台可以截获构件之间的调用请求和构 件状态
6.3.3 基于构件的软件演化
第六章 软件演化技术
本章内容
6.1 软件演化概述 6.2 软件需求演化 6.3 软件演化的分类
6.3.1 6.3.2 6.3.3 6.3.4 基于过程和函数的软件演化 面向对象的软件演化 基于构件的软件演化 基于体系结构的软件演化
6.4 软件静态演化技术
本章内容
6.5 软件动态演化技术
6.3.4 基于体系结构的软件演化
运行时刻的体系结构演化,在系统运行过程中, 框架演化通常与构件演化密切相关
软件体系结构对于系统演化的意义主要表现 在以下几个方面:
从实现方式和粒度上看,演化主要包括:基 于过程和函数的软件演化、面向对象的软件 演化、基于构件的软件演化和基于体系结构 的软件演化
6.3.1 基于过程和函数的软件演化
早期的动态链接库DLL的动态加载就是以 DLL为基础的函数层的软件演化 DLL的调用方式可以分为加载时刻的隐含调 用和运行时刻的显式调用
程序的更新是通过载入新版本的程序,用过程的 新版本来替换旧版本,同时,在运行时将当前的 捆绑改为新版本的捆绑来实现的
6.3.2 面向对象的软件演化
在面向对象语言出现之后,许多研究者开始 考虑利用面向对象技术来提高软件系统的演 化能力 利用对象和类的相关特性,在软件升级时, 可以将系统修改局限于某个或某几个类中, 以提高演化的效率 可动态演化的对象应该具备以下几个特征:
6.2 软件需求演化
在软件需求演化过程中,应该注意以下几个 问题:
如何预先推导变更的结果和影响的范围 在更替软件元素时,需要保证替换前后元素的外 部行为是一致的 在软件需求演化过程中,应该具备控制变更过程 的手段,以保持其完整性
6.3 软件演化的分类
软件演化指的是系统进行变化并达到预期目 标的过程,可以分为静态演化和动态演化两 种类型
6.3.4 基于体系结构的软件演化
软件体系结构动态演化
在软件体系结构的动态演化中,要求框架结构模 型不仅具有刻画静态结构特性的能力,而且还应 该具有描述构件状态变化和构件之间通过连接件 的相互作用等动态特性的能力 需要将构件之间的相互作用与约束细化为构件与 连接件之间的相互作用与约束 从不动点转移的角度来看,软件体系结构静态演 化实质上是动态演化的一个子过程
当接收到演化命令时,演化平台将调用请求阻塞, 根据体系结构配臵信息对构件进行重新组装和部 署 完成连接件的重定向并释放构件的调用请求
基于构件的演化与面向对象的演化既有一定 的区别,又有一定的联系
软件构件的实例是一种更为复杂的对象,在更新 时仍然需要借助面向对象的演化方法
6.3.4 基于体系结构的软件演化
从宏观的角度来刻画软件演化问题,一种行 之有效的手段就是从软件体系结构出发,来 把握整个系统的更新问题 由于系统需求、技术、环境和分布等因素的 变化,最终将导致系统框架按照一定的方式 来变动,这就是软件体系结构演化 如果单纯从系统是否运行的角度出发,软件 体系结构演化包括:静态演化和动态演化
6.3.4 基于体系结构的软件演化
软件体系结构演化可以分为以下四个阶段:
设计时的体系结构演化,随着对系统理解的不断 深入,系统的整体框架会越来越清晰,这本身就 是一个体系结构设计方案不断完善的过程 运行前的体系结构演化,此时,框架各部分所对 应的代码已经被编译到软件系统中,但系统还没 有开始运行 安全运行模式下的体系结构演化,这种演化方式 又称受限运行演化,系统运行在安全模式下,即 系统的运行要受到一定条件的约束和限制
6.3.4 基于体系结构的软件演化
在非运行时刻,系统框架结构的修改和变更被称 为软件体系结构的静态演化 在运行时刻,系统框架结构的变更被称为软件体 系结构的动态演化
软件体系结构静态演化
在停止运行的状态下,体系结构演化的基本活动 包括:删除构件、增加构件、修改构件、合并构 件和分解构件
6.3.3 基于构件的软件演化
系统的反射性是指系统能够提供对自身状态 和行为的自我描述,并且系统的实际状态和 行为始终与自我描述保持一致 自我描述的改变能够立即反映到系统的实际 状态和行为中,而系统的实际状态和行为改 变也能够立即在自我描述中得到反映 反射系统定义了一个层次化的反射体系,包 括一个基层和一个或多个元层
6.3.4 基于体系结构的软件演化
在体系结构的静态演化中,表面上看是对构件进 行增加、替换和删除操作,但是,实质上这种变 化蕴涵着一系列的连带和波及效应,更多的表现 为变化的构件和连接件与其它相关联的构件和连 接件的重新组合与调整 在静态演化阶段,对软件的任何扩充和修改都需 要在体系结构的指导下来完成,以维持整体设计 的合理性和性能的可分析性,为维护的复杂性和 代价分析提供依据
相关文档
最新文档