第五章 √ 系统开发基础 11
1,软件开发模型
- 瀑布模型——需求明确
- V模型——重视测试
- 喷泉模型——面向对象的开发模型——迭代
- 原型化模型——用户的需求模糊
- 演化模型
- 螺旋模型:中和了瀑布模型和原型化模型的优点,强调的是有风险分析。适合开发高风险的项目。成本高
- 统一过程:用例驱动,以架构为中心,迭代和增量
- 敏捷方法:
- 极限编程(XP):对费用严格控制的公司使用。
- Cockburn的水晶系列方法:用最少纪律约束而仍能成功的党发。
- 开放式源码:程序开发人员在地域上分布很广。
- SCRUM(并列争球法):明确定义了的可重复的方法过程。
- ASD方法:猜测,合作和学习。
2,软件开发方法
- 结构化方法
- 用户至上
- 严格区分工作阶段,每阶段有任务和结果
- 强调系统开发过程中的整体性和全局性
- 系统开发过程工程化,文档资料标准化
- 自项向下,逐步分解(求精)
- 不适用于开发复杂的大型的项目
- 原型法
- 面向对象方法——喷泉模型
- 更好的复用性
- 关键在于建立一个全国、合理、统一的模型
- 分析设计实现三个阶段,界限不明确
- 面向服务的方法——SOA
3,真题知识点
数据流图主要由实体、数据存储、处理过程和数据流四部分组成。在顶层数据流图中,将系统描述成一个处理过程,而其它的是与该处理过程相关的输入输出流,因此顶层数据流图描述了系统的输入与输出。
数据流图是结构化分析方法的重要模型。数据流图摆脱系统的物理内容,在逻辑上用于描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。
- 在绘制数据流图中,每条数据流的起点或者终点必须是加工,即至少有一端是加工。
- 在分层数据流图中,必须要保持父图与子图平衡。
- 每个加工必须既有输入数据流又有输出数据流。必须要保持数据守恒。也就是说,一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工能产生的数据
数据流图中有四个要素:
- 外部实体,也称为数据源或数据汇点,表示要处理的数据的输入来源或处理结果要送往何处,不属于目标系统的一部分,通常为组织、部门、人、相关的软件系统或者硬件设备;
- 数据流表示数据沿箭头方向的流动;
- 加工是对数据对象的处理或变换;
- 数据存储在数据流中起到保存数据的作用,可以是数据库文件或者任何形式的数据组织。根据上述定义和题干说明,患者是外部实体。实体联系图也是一个常用的数据模型,用于描述数据对象及数据对象之间的关系。
- 实体联系图有三个要素:
- 实体是目标系统所需要的复合信息的表示,也称为数据对象;
- 属性定义数据对象的特征;
- 联系是不同数据对象之间的关系。在该系统中患者是一个数据对象,即实体,具有多种属性。
数据流图是结构化分析的工具,结构化方法就是采用自顶向下逐层分解的思想进行分析建模的。随着分解层次的增加,抽象的级别也越来越低,即越来越接近问题的解。数据流图建模应遵循:自顶向下、从抽象到具体的原则。
对基本加工的说明有三种描述方式:结构化语言、判断表(决策表)、判断树(决策树)。
基本加工逻辑描述的基本原则为:
- 对数据流图的每一个基本加工,必须有一个基本加工逻辑说明。
- 基本加工逻辑说明必须描述基本加工如何把输入数据流变换为输出数据流的加工规则。
- 加工逻辑说明必须描述实现加工的策略而不是实现加工的细节。
- 加工逻辑说明中包含的信息应是充足的,完备的,有用的,无冗余的。
结构化开发方法由结构化分析、结构化设计和结构化程序设计构成,是一种面向数据流的开发方法。结构化方法总的指导思想是自顶向下、逐层分解,基本原则是功能的分解与抽象。它是软件工程中最早出现的开发方法,特别适合于数据处理领域的问题,但是不适合解决大规模的、特别复杂的项目,而且难以适应需求的变化。
结构化设计方法是一种面向数据流的设计方法,与结构化分析方法衔接。在需求分析阶段,结构化分析方法产生了数据流图,而在设计阶段,结构化设计方法将数据流映射为软件系统的模块结构。数据流图中从系统的输入数据流到系统的输出数据流的一连串变换形成了一条信息流。其中的信息流一般情况下包括变换流型和事物流型不同类型的数据流到程序模块的映射方法不同。一个软件系统往往不仅仅有一种数据流类型。
结构化设计主要包括:
- 体系结构设计:定义软件的主要结构元素及其关系。
- 数据设计:基于实体联系图确定软件涉及的文件系统的结构及数据库的表结构。
- 接口设计:描述用户界面,软件和其他硬件设备、其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口。 接口设计是描述软件与外部环境之间的交互关系,软件内模块之间的交互关系,而这些关系的依据主要是分析阶段的数据流图
- 过程设计:确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法。
结构化方法的分析结果由以下几部分组成:一套分层的数据流图、一本数据词典、一组小说明(也称加工逻辑说明)、补充材料
数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。其条目有数据流、数据项、数据存储、基本加工等。
对于软件设计过程中,需要遵循高内聚、低耦合,模块大小适中。
模块独立性是创建良好设计的一个重要原则,一般采用模块间的耦合和模块的内聚两个准则来进行度量。
耦合是模块之间的相对独立性的度量,模块之间的连接越紧密, 联系越多,耦合性就越高,而其模块独立性就越弱。
一般来说,模块之间的耦合有7种类型,根据耦合性从低到高为非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。
- 如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合;
- 如果一组模块通过数据结构本身传递,则称这种耦合为标记耦合;
- 若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合;
- 若一个模块直接访问另一个模块的内部数据、一个模块不通过正常入口转到另一个模块内部、两个模块有一部分程序代码重叠或者一个模块有多个入口,上述几个情形之一发生则说明两个模块之间就发生了内容耦合。
- 偶然 ( 巧合 ) 内聚:指一个模块内的各个处理元素之间没有任何联系。
- 逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
- 时间内聚:把需要同时执行的动作组合在一起形成的模块。
- 通信内聚:指模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。
- 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行, 前一个功能元素的输出就是下一个功能元素的输入。
- 功能内聚:是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。
系统结构图(SC)又称为模块结构图,它是软件概要设计阶段的工具,反映系统的功能实现和模块之间的联系与通信,包括各模块之间的层次结构,即反映了系统的总体结构。SC包括模块、模块之间的调用关系、模块之间的通信和辅助控制符号等4个部分。
白盒测试也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的执行路径和过程进行测试,检查是否满足设计的需要。白盒测试常用的技术涉及不同覆盖标准,在测试时需根据指定的覆盖标准确定测试数据。
黑盒测试也称为功能测试,在完全不考虑软件的内部结构和特性的情况下来测试软件的外部特性。常用的黑盒测试技术包括等价类划分、边界值分析、错误猜测和因果图的报告。
模块的作用范围定义为受该模块内一个判定影响的模块集合,模块的控制范围为模块本身以及所有直接或间接从属于该模块的模块集合。其作用范围应该在控制范围之内。
MVC是分层架构风格的一种,采用关注点分离的方针,将可视化界面呈现(View)、UI处理逻辑(Controller)和业务逻辑(Model)三者分离出来,并且利用合理的交互方针将它们之间的依赖降至最低。解耦之后,有利于代码重用、提高系统的可维护性,也可提高系统的开发效率,但是由于分层之后,调用也需要分层调用,所以不能提高系统的运行效率。
第六章 √ 面向对象技术 12分+30分
1,面向对象的基本概念
- 对象:属性(数据)+方法(操作)+对象ID
- 特性:1,清晰的边界;2,良好定义的行为;3,可扩展性。
- 聚合对象指的是一个对象包含其他对象。
- 类(实体类/控制类/边界类)
- 实体类主要负责数据和业务逻辑;
- 边界类(接口类)负责和用户进行交互,即用户界面;
- 控制类则负责实体类和界面类的交互。
- 继承与泛化:复用机制
- 继承是父类和子类之间共享数据和方法的机制。
- 覆盖是子类的方法覆盖了基类的方法,以实现不同的功能,或者对父类的功能进行扩充。
- 封装:隐藏对象的属性和实现细节,仅对外公开接口
- 多态:不同对象收到同样的消息产生不同的结果
- 多态有参数多态、包含多态、过载多态和强制多态四类。
- 参数多态是应用比较广泛的多态,被称为最纯的多态,
- 包含多态在许多语言中都存在,最常见的例子就是子类型化,即一个类型是另一个类型的子类型。
- 过载多态是同一个名字在不同的上下文中所代表的含义不同。
- 接口:一种特殊的类,他只有方法定义没有实现
- 重载:一个类可以有多个同名而参数类型不同的方法
- 模板类
- 消息:消息是异步通信的。消息是对象发出的服务请求。
- 消息通信
面向对象设计7大原则
- 单一职责原则:设计目的单一的类
- 开放-封闭原则:对扩展开放,对修改封闭。
- 里氏(Liskov)替换原则:子类可以替换父类
- 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,而不是实现编程
- 接口编程接口隔离原则:使用多个专门的接口比使用单一的总接口要好
- 组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
- 迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象尽可能少的了解
2,UML
UML的四种事务
- 结构事物
- 类,组件,接口,协作,用例,节点,主动类
- 行为事物
- 交互(interaction)
对象都不是孤立存在的,它们之间通过传递消息进行交互。在图形上,交互的消息通常用带箭头的直线表示。 - 状态机(state machine)
一个状态机是一个行为,它说明对象在它的生命周期中响应时间所经历的状态序列以及它们对那些事件的响应。状态是指在对象的生命周期中满足某些条件、执行某些活动或等待某些事件时的一个条件或状况。一个事件的到来,能够触发一个状态的转换。
- 交互(interaction)
- 分组事务
- 分组事物是UML模型中负责分组的部分,可以把它看作一个一个的盒子,每个盒子里面的对象关系相对复杂,而盒子与盒子之间的关系相对简单。最主要的分组事物是包。
- 注释事物
- 注释事物是UML模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。有一种主要的注释事物,称为注解(note)。在图形上,注解用一个右上角是折角的矩形表示 。
UML2.0中提供了多种图形,从静态和动态两个方面表现系统视图。
-
类图(classdiagram)展现了一组对象、接口、协作和它们之间的关系,在开发软件系统时,类图用于对系统的静态设计视图建模。
-
对象图展现了一组对象以及其之间的关系,描述了在类图中所建立的事物的实例的静态快照。
-
组件图(component diagram)展现了一组组件之间的组织和依赖,专注于系统的静态实现视图,与类图相关,通常把组件映射为一个或多个类、接口或协作。
-
-
部署图(deployment diagram)展现了运行处理节点以及其中构件的配置,描述代码的物理模块,用于描述系统在不同计算机系统的物理分布。部署图给出了体系结构的静态实施视图。它与构件图相关,通常一个节点包含一个或多个构件。
-
序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。
-
通信图和序列图同构,强调收发消息的对象的结构组织。强调参加交互的对象的组织。
-
状态图展现了一个状态机,由状态、转换、事件和活动组成, 它关注系统的动态视图,强调对象行为的事件顺序。
-
活动图是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程,它专注于系统的动态视图。
-
用例图(Use Case Diagram)展现了一组用例、参与者(Actor)以及它们之间的关系。这个视图主要支持系统的行为,即该系统在它的周边环境的语境中所提供的外部可见服务。用例图用于对一个系统的需求进行建模,包括说明这个系统应该做什么(从系统外部的一个视点出发), 而不考虑系统应该怎样做。
-
交互图用于对系统的动态方面进行建模。一张交互图表现的是一个交互,由一组对象和它们之间的关系组成,包含它们之间可能传递的消息。交互图表现为序列图、通信图、交互概览图和时序图,每种针对不同的目的,能适用于不同的情况。
- 序列图是强调消息时间顺序的交互图;
- 通信图是强调接收和发送消息的对象的结构组织的交互图;
- 交互概览图强调控制流的交互图。时序图(Timing Diagram)关注沿着线性时间轴、生命线内部和生命线之间的条件改变。
结构图 | 行为图 |
---|---|
{ ∗ 类 图 ∗ 对 象 图 包 图 ∗ 组 合 结 构 图 ∗ 构 件 图 − 部 署 图 : 软 硬 件 之 间 的 映 射 制 品 图 \begin{cases}*类图*\\对象图\\包图\\*组合结构图*\\构件图\\- 部署图:软硬件之间的映射\\制品图\end{cases} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧∗类图∗对象图包图∗组合结构图∗构件图−部署图:软硬件之间的映射制品图 | { − ∗ 用 例 图 ∗ : 系 统 与 外 部 参 与 者 的 交 互 − 顺 序 图 : 强 调 按 时 间 顺 序 − 通 信 图 ( 协 作 图 ) ∗ 定 时 图 ∗ 状 态 图 活 动 图 : 类 似 程 序 流 程 图 , 并 行 行 为 − 交 互 概 览 图 \begin{cases}- *用例图*:系统与外部参与者的交互\\- 顺序图:强调按时间顺序\\- 通信图(协作图)\\*定时图*\\状态图\\活动图:类似程序流程图,并行行为\\- 交互概览图\end{cases} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧−∗用例图∗:系统与外部参与者的交互−顺序图:强调按时间顺序−通信图(协作图)∗定时图∗状态图活动图:类似程序流程图,并行行为−交互概览图 |
类图
- 依赖关系: 一个事物发生变化影响另一个事物。
- 表示方法:依赖关系用虚线箭头表示
- 泛化关系: 特殊/一般关系(父子继承关系)
- 继承介绍: 继承表示是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。
表示方法: 继承使用空心三角形+实线表示。
- 继承介绍: 继承表示是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。
- 关联关系: 描述了一组链,链是对象之间的连接。
表示方法:关联关系用实线箭头表示。- 聚合关系: 整体与部分生命周期不同。【人没了头发还能活下去,这就是聚合关系】
- 表示方法:聚合关系用空心的菱形+实线箭头表示。
- 组合关系: 整体与部分生命周期相同。【人没了心脏就不活不下去,这就是组合关系】
- 表示方法:组合关系用实心的菱形+实线箭头表示
- 聚合关系: 整体与部分生命周期不同。【人没了头发还能活下去,这就是聚合关系】
- 实现关系:接口与类之间的关系
- 实现表示一个class类实现interface接口(可以是多个)的功能。
- 表示方法:1)矩形表示法:使用空心三角形+虚线表示 2)棒棒糖表示法:使用实线表示
创建型模式
序列图
UML序列图(Sequence Diagram)以二维图的形式显示对象之间交互的图,纵轴自上而下表示时间,横轴表示要交互的对象,主要体现对象间消息传递的时间顺序,强调参与交互的对象及其间消息交互的时序。
序列图中包括的建模元素主要有:活动者(Actor)、对象(Object)、生命线(Lifeline)、控制焦点(Focus of control)和消息(Message) 等。
- 对象名标有下划线;
- 生命线表示为虚线,沿竖线向下延伸;
- 控制焦点由薄矩形表示。
- 消息在序列图中标记为箭头;
- 消息是从一个对象的生命线到了一个对象生命线的箭头,用从上而下的时间顺序来安排。一般分为同步消息(→),异步消息(—◤)和返回消息(◀- - - -)。
- 同步消息指进行阻塞调用,调用者中止执行,等待控制权返回,需要等待返回消息;
- 而异步消息的调用者发出消息后继续执行,不引起调用者阻塞, 也不等待返回消息。
用例图
UML用例图展现了一组用例、参与者(Actor)以及它们之间的关系。用于对系统的静态用例视图进行建模。这个视图主要支持以下系统的行为,即该系统在它的周边环境的语境中所提供的外部可见服务。用例图说明参与者及其扮演的角色,可以是人、硬件或者其他系统可以扮演的角色,而非个人用户。
3,设计模式
创建者模式 | 结构型模式 | 行为型模式 |
---|---|---|
工厂方法(factory method)模式 抽象工厂( abstract factory)模式 原型( prototype)模式 单例( singleton)模式 构建器(builder)模式 创建型与对象的创建有关 | 活配器( adapter)模式 桥接( bridge )模式 组合( composite)模式 装饰( decorator)模式 外观(facade)模式 享元( flyweight)模式 代理( proxy)模式 结构型处理类或对象的组合 | 职责链( chain of responsibility)模式 命令(command)模式 解释器(interpreter)模式 迭代器(iterator )模式 中介者( mediator)模式 备忘录(memento)模式 观察者(observer)模式 状态( state)模式 策略(strategy )模式 檀板方法( template method)模式 访问者(visitor )模式 行为型模式对类或对象怎样交互或怎样分配职责 |
设计模式名称 | 简要说明 | 速记关键词 |
---|---|---|
抽象工厂模式 | 提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定他们具体的类 | 产生成系列对象 |
构建器模式 | 将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示 | 复杂对象构造 |
工厂方法模式 | 定义一个创建对此昂的接口,但由子类决定需要实例化哪一个类, 工厂方法使得子类实例化过程推迟 | 动态产生对象 |
原型模式 | 用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象 | 克隆对象 |
单例模式 | 保证一个类只有一个实例,并提供一个访问他的全局访问点 | 单实例 |
适配器模式 | 将一个类的接口转换成用户希望得到的另一种接口。它使原本不相容的接口得以协同工作 | 转换接口 |
桥接模式 | 将类的抽象部分和它的实现部分分离开来,使它们可以独立地变化 | 继承树拆分 |
组合模式 | 将对象组合成树形结构以表示"整体-部分"的层次结构, 使得用户对单个对象和组合对象的使用具有一致性 | 树型目录结构 |
装饰模式 | 动态地给一个对象添加一些额外的职责。它提供了用子类扩展功能的一个灵活的替代, 比派生一个子类更加灵活 | 附加职责 |
外观模式 | 定义一个高层接口,为子系统的一组接口提供一个一致的外观,从而简化了该子系统的使用 | 对外统一接口 |
享元模式 | 提供支持大量细粒度对象共享的有效方法 | 文章共享文字对象 |
代理模式 | 为其他对象提供与对象相同的接口来控制这个对象的访问 | |
职责链模式 | 通过给多个对象处理请求的机会,减少请求的发送者与接受者之间的耦合。将接受对象 链接起来,在链中传递请求,直到有一个对象处理这个请求 | 传递职责 |
命令模式 | 将一个请求封装为一个对象,从而可用不同请求对客户进行参数化,将请求排队或记录 请求日志,支持可撤销操作 | 日志记录,可撤销 |
解释器模式 | 给定一种语言,定义他的文法表示,并定义一个解释器,该解释器用来根据文法表示, 来解释语言中的句子 | 虚拟机的机制 |
迭代器模式 | 提供一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示 | 数据库数据集 |
中介者模式 | 用一个中介对象来邓庄一系列的对象交互。它使各对象不需要显式地相互调用,从而达到 低耦合,还可以独立地改变对象间的交互 | 不直接引用 |
备忘录模式 | 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态, 从而可以在以后将该对象恢复到原先保存的状态 | |
观察者模式 | 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于 它的对象都得到通知并自动更新。特征:使 所要交互的对象尽量松耦合。 | 联动 |
状态模式 | 允许一个对象在其内部状态改变时改变它的行为 | 状态变成类 |
策略模式 | 定义一系列算法,把他们一个个封装起来,并且使他们之间可互相替换,从而让算法 可以独立于使用它的用户而变化 | 多方案切换 |
模板方法模式 | 定义一个操作中的算法骨架,而将一些步骤延迟到之类中,使得子类可以不改变一个 算法的结构,即可重新定义算法的某些特定步骤 | |
访问者模式 | 表示一个作用于某个对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义 作用于这些元素的新操作 |
创建者模式 结构型模式 行为型模式
4,真题
- 在采用面向对象技术开发系统时,主要步骤有面向对象分析、面向对象设计、面向对象程序设计和面向对象测试。
- 面向对象分析主要包括:认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息。主要强调理解问题是什么,不考虑问题的解决方案
- 面向对象设计是设计分析模型和实现相应源代码。侧重问题的解决方案,并且需要考虑实现细节问题
- 面向对象程序设计选择合适的面向对象程序设计语言,将程序组织为相互协作的对象集合,每个对象表示某个类的实例,类通过继承等关系进行组织。
- 面向对象测试是尽可能早的开始进行系统测试,以发现系统中可能存在的错误并进行修复,进而保证系统质量。
采用面向对象方法进行软件开发,在分析阶段,架构师主要关注系统的技术。
好的面向对象程序设计语言一般应该支持被封装的对象、类与实例的概念、支持继承和多态等面向对象技术中的概念。
在面向对象分析过程中,选择名词短语来识别对象,动词短语识别对象的操作。
面向对象开发方法中,静态成员的含义是所修饰的成员是属于类的,而不是属于某对象的。静态数据成员对该类只有一份,该类的所有对象共享静态数据成员,可被该类的所有方法访问,其值可以修改,但是不论是通过对象还是类对静态数据成员值的修改, 都会反应到整个类。类的静态方法只能访问该类的静态数据成员。
事件触发一个没有特定监护条件的迁移,对象不一定离开当前状态。
设计模式的核心在于提供了相关问题的解决方案。面向对象软件开发过程中,采用设计模式的主要目的就是复用成功的设计。
UML2.0提供多种视图,只有部署图描述系统的物理视图。部署图通常在实施阶段使用,以说明哪些组件或子系统部署于哪些结点。
在软件开发完成交付用户使用后,就进入软件运行/维护阶段。软件维护活动根据其内容可以分为4种类型
- 正确性维护。为了识别和纠正软件错误,改正软件性能上的缺陷,排除实施的误使用,应进行的诊断和改正错误的过程。
- 适应性维护。由于信息技术飞速发展,软件运行的外部环境或数据环境可能发生变化,为了使软件适应这种变化而修改软件的过程。
- 完善性维护。在软件使用过程中,用户往往会对软件提出新的功能与性能要求, 为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性而进行的维护活动。
- 预防性维护。为了提高软件的可维护性和可靠性等,为以后进一步改进软件打下良好基础而进行的维护工作。