zoukankan      html  css  js  c++  java
  • 软件工程——第七章 软件维护【转】

    第七章软件维护

    主要内容:

    软件维护的概念

    软件维护活动

    程序修改的步骤及修改的副作用

    可维护性

    提高可维护性的方法

    软件维护的概念

    软件维护的定义

    影响维护工作量的因素

    软件维护的策略

    维护成本

    软件维护的定义:在软件运行/维护阶段对软件产品进行的修改就是所谓的维护。

    维护的类型有三种:

    改正性维护

    适应性维护

    完善性维护

    影响维护工作量的因素:

    在软件的维护过程中,需要花费大量的工作量,从而直接影响了软件维护的成本。

    维护的问题

    1、    理解别人写的程序困难,困难程度随软件配置成分减少而迅速增加

    2、    要维护的软件往往没有合适的文档或资料不全

    3、    绝大多数软件设计时没有考虑将来的修改

    4、    软件维护不是一项吸引人的工作

    5、    软件人员经常流动,维护不能依靠原开发人员

    6、    追踪软件的建立过程非常困难,或根本做不到

    软件维护的策略

    1、改正性维护(目的是改正在开发周期间未能发现的遗留错误,并加以改正,大约占总维护量的20%

    2、适应性维护(指软件适应运行环境的改变而进行的一类维护,包括:因硬件或支持软件改变引起的变化;将软件移植到新机器上;软件使用对象的较少改变。)

    3、完善性维护(指提高软件性能和软件可维护性而对软件修改的过程,是软件维护中最主要部分,约占50%。)

    4、预防性维护(是J.Miuer首先提出的,为了给未来的改变奠定更好的基础而修改软件的维护活动,这项维护相对来说少些。)

    维护成本

    有形的软件维护成本是花费了多少钱,无形的维护成本有更大的影响。

    维护工作量的模型

    M=p+Kec-d

    M是维护中消耗的总工作量

    P是上面描述的生产性工作量

    C是因缺乏好的设计和文档而导致复杂性的度量

    d是对软件熟悉程序的度量。

    软件维护活动

    为了有效地进行软件维护,应事先就开始做组织工作。

    维护机构

    除了较大的软件公司外,通常在软件维护工作方面,并不保持一个正式的组织结构。

    软件维护申请报告

    维护申请报告或称软件问题报告,由申请维护的用户填写。

    如果申请的是适应性维护或完善性维护,用户必须提出一份修改说明书,列出所有希望的修改。

    面向对象技术

    本章要点:

    1、面向对象的概念、范性。

    2、对象的分类。

    3、面向对象方法构造软件的开发过程。

    4、面向对象分析方法。

    5、面向对象设计方法。

    6、了解有影响的coad方法、booch方法和omt方法的基本思想。

    面向对象技术

    主要内容:

    面向对象的概念

    面向对象的开发过程

    面向对象分析与模型化

    面向对象设计

    面向对象程序的实现与测试

    面向对象的概念

    CoadYourdon给出了一个定义:“面向对象=对象++继承+通信”

    如果一个软件系统是使用这样4个概念设计和实现的,则我们认为这个软件系统是面向对象的。

    对象(object

    对象是面向对象开发模式的基本成分。

    每个对象可用它本身的一组属性和它可以执行的一组操作来定义。

    属性一般只能通过执行对象的操作来改变。

    操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。

    消息(Message消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。

    类(Class

    类是一组具有相同数据结构和相同操作的对象的集合。

    类的定义包括一组数据属性和在数据上的一组合法操作。

    继承(Inheritance

    继承是使用已存在的定义作为基础建立新定义的技术。

    新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。

    在类的继承层次中,Quadrilateral的实际参数可以替换Polygon的形式参数。

    Quadrilateral的界面与类Polygon的界面是相容的。

    Quadrilateral的界面可响应Polygon界面的所有消息。

    面向对象方法的开发过程

    面向对象方法改进了在生存期各个阶段之间的接口,因为在生存期各个阶段所开发出来的“部件”都是类。

    在面向对象生存期的各个阶段对各个类的信息进行细化,类成为分析、设计和实现的基本单元。

    论域分析

    论域分析开发问题论域的模型

    考察问题论域内的一个较宽的范围,分析覆盖的范围应比直接要解决的问题更多。

    建立大致的系统实现环境。

    应用分析

    应用分析则根据特定应用的需求进行论域分析。

    应用(或系统)分析细化在论域分析阶段所开发出来的信息,把注意力集中于当前要解决的问题。

    类的定义

    一旦标识了一个类,就给出了它的规格说明,其中包括类的实例可执行的操作和它们的数据表示。

    对每一个,无论是在哪一个阶段标识的类都是如此。

    类的规格说明定义了施加于对象的数据存储上的一组操作。

    类的实现

    通过变量的声明、操作界面的实现及支持界面操作的函数的实现,可实现一个雷的语气行为和状态。

    实现是与语言有关的。一个号的面向对象语言应当分离共有界面与其内部实现。

    类的测试

    如果类的定义提供的界面比较狭窄,那么穷举测试就是有可能实现。

    类的测试在最抽象的层次开始,沿继承关系继承向下进行。

    已经测试过的部分不需要从新测试。

    求精和维护

    这是一个在软件生存期中最花费时间的部分。

    传统的维护活动是针对应用的,而求精过称是针对类的,针对把类集成在一起的结构。

    我们可以标识抽象的抽象,使得继承结构通过一般化增加新的层次,即在既存的根类之上增加新的层次。

    对象模型化技术OMT

    对象模型化技术把分析时收集的信息构造在三类模型中,即对象模型、功能模型和动态模型。

    聚合,代表整体与部分的关系,这是一种特殊形式的关联。

    限定,用以对关联的含义做某种约束。

    角色,用来说明关联的一端。由于多数关联具有两个断点,因而涉及到两个角色。

    对象模型:是三个模型中最关键的一个模型,它的作用是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,及它们之间的关系。

    OMT中,类和类之间的关系叫做关联。

    动态模型:

    动态模型着重于系统的控制逻辑。

    它包括两个图,一是状态图,一是事件追踪图。

    状态图

    状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。

    在状态图中,状态是对某一时刻中属性特性特征的概括。而状态迁移表示这一类对象在何时对系统内外发生的哪些事件做出何种响应。

    操作是一个伴随状态迁移的瞬时发生的行为,与触发事件一起表示在有关的状态迁移之上。

    动态模型由多个状态图组成。

    各个状态图并发地执行,并可以独立地改变状态。

    事件

    1、    一个事件发生在某一时刻

    2、    每个事件都是单独发生的

    3、    我们建立事件类,并给每个事件一个名字,以指明共同结构和行为。

    4、    事件从一个对象向另一个对象传递信息。

    事件追踪图

    事件追踪图侧重于说明发生于系统执行过程中的而一个特定“场景”。

    场景也叫脚本,是完成系统某个功能的一个事件序列。

    状态图与事件追踪图的关系

    状态图叙述一个对象的个体行为,事件追踪图则给出多个对象所表现出来的集体行为。

    功能模型

    功能模型表明,通过计算,从输入数据能得到什么样的额输出数据,不考虑参加计算的数据按什么时序执行。

    功能模型由多个数据流图组成,它们指明从外部输入,通过操作和内部存储,知道外部输出,这整个的数据流情况。

    功能模型中所有的数据流图往往形成一个层次结构。

    在这个层次结构中,一个数据流图中的过程可以由下一层的数据流图做进一步的说明。

    数据流图中允许加入控制流,但这样做将与动态模型重复,不提倡夹带控制流。

    基于三个模型的分析过程

    功能模型着重于系统内股数据的传送和处理。

    功能模型定义“做什么”

    动态模型定义“何时做”

    对象模型定义“对谁做”

    构造OOA概念模型的层次

    构造和评审OOA概念模型的顺序和由五个层次组成。

    这五个层次是分析过程中的层次。

    每个层次的工作都为系统的规格说明增加了一个组成部分。

    这五个层次是:类与对象、属性、服务、结构和主题。

    对象—类层

    1、    对象—类层,表示待开发系统的基本构造块。这一层是整个OOA模型的基础。问题在于如何建立“现实世界中事物”的抽象表示,也就是如何建立基本块。

    2、    信息建模,就是指从现实世界中捕捉并抽象出应用论域的基本结构的过程。这是OOA过程中最基本和最关键的活动之一。

    3、    应用论域是非常重要的,同一概念在不同论域中抽象出来的基本构造块是不同的。

    属性层

    对象的属性和实例连接共同组成了OOA建模的属性层。

    服务层

    对象的服务,加上对象实例之间的消息通信,共同组成了OOA模型的服务层,消息连接用有向箭头表示。

    结构层

    该层负责捕捉特定应用论域中的结构关系。

    1、             结构层的一种类型,描绘出了该系统的整体结构。

    2、             结构层的另一种类型称为一般—特殊结构或泛化—特化结构,泛化—特化结构表明了类的继承性。

    主题层

    OOA模型的结构庞大而复杂,可以将对象归类到各个主题中,把有关的对象用一个主题边框框起来。

    识别类和对象

    面向对象分析的第一个层次主要是识别类和对象。

    类和对象是对与应用有关的概念的抽象。

    这一层工作时整个分析模型的基础。

    选择类和对象的原则:

    目标系统必须记住类和对象的某些事情

    类和对象应当提供某些服务或处理。

    多属性。

    所有属性对于类中所有实例都应有意义。

    标识结构:

    面向对象分析的下一步工作时标识结构。典型的结构有两种:一般化—特殊化结构(Gen-Spec结构),整体—部分结构(Whole-Part结构)

    以特殊化的视点来看,一个Gen-Spec结构可以看作是“is a”或“is a kind of”结构。

    Gen-Spec结构中,使用继承将较一般化的属性和服务放在一般化的类和对象中。

    从整体的视点来看,一个Whole-Part结构可看作一个“has a”或“is a part of”结构。

    标识Gen-spec结构的方法和策略

    对于每一个类和对象,将它看作是一个一般化的类,对它的所有特殊情况,考虑以下问题:

    它是否在问题论域中?

    它是否在系统的职责内?

    继承性是否存在?

    它是否能够符合选择类和对象的标准?

    标识Whole-part结构的方法和策略

    应当寻找什么

    总体-部分(Assembly-parts)关联。

    包容-内含(Container-Content)关联,如飞机—飞行员之间的关系。

    收集-成员(Collection-Members)关联,如机构—职员之间的关系。

    标识属性

    下一个层次称为属性层,对前面已识别的类和对象做进一步的说明。

    在这里,对象所保存的信息称为它的属性。

    类的属性所描述的是状态信息,每个实例的属性值表达了该实例的状态值。

    标识属性的方法和策略

    找出属性

    将属性安防到适当的位置

    找出实例连接

    检查特殊情况

    描述属性

    考虑取值范围、极限值、缺省值、建立和存取权限、精确度、是否会受到其他属性值等。

    定义服务的方法和策略:

    找出每一个对象的所有状态,在各种状态需要做的工作,利用状态迁移图:

    找出必要的操作。

    建立消息连接。

    描述服务:利用状态转化图、脚本和事件追踪图,描述服务的功能。

    消息连接的标志:

    两个对象之间可能存在着由于通信需要而形成的关系,这称为消息连接。

    消息连接表示从一个对象发送消息到另个一对象,由哪个对象完成某些处理。

    找出消息连接的方法及策略

    对于每一个对象,执行:

    查询该对象需要哪些对象的服务

    查询哪个对象需要该对象的服务。

    识别主题

    主题可以看成是高层的模块或子系统。

    对于面向对象分析模型,主题表示此模块的整体框架。

    面向对象设计(OOD

    面向对象设计继续做面向对象分析阶段的工作,建立软件的结构。

    主要工作分为两个阶段:高层设计,类设计

    高层设计:

    高层设计阶段开发系统的结构,即构造应用软件的总体模型。

    高层设计阶段标识在计算机环境中进行问题解决工作所需要的概念,并增加了一批需要的类。

    高层设计的特点

    高层设计可以表征为标识和定义模块的过程。

    模块可以是一个单个的类,也可以是由一些类组合成的子系统。

    定义过程是职责驱动的。

    高层设计应遵循的原则

    应使得在子系统的各个高层部件之间的通信量达到最小;

    子系统应当把那些成组的类打包,形成高度的内聚。

    逻辑功能分组,提供一个一个单元,识别并定位问题事件。

    CoadYourdon在设计阶段中继续采用分析阶段中提到的五个层次。

    在设计阶段中,这五个层次用于建立系统的四个组成成分。

    问题论域部分,人际交互部分,任务管理部分,数据管理部分。

    问题论域部分是指那些执行基本应用功能的对象,可以将OOA模型当做问题论域部分的初始版本,逐步地细化这个初始版本,使其最终能解决实现限制、特性要求、性能缺陷等方面的问题。

    人机交互部分指定了用于系统的某个特定实现的界面技术。

    任务管理部分则指定了那些创建系统时必须建立的操作系统部分。

    数据管理部分定义了那些与所有数据库技术接口的对象。

    问题论域部分

    问题论域部分包括与应用问题直接有关的所有类和对象。

    识别和定义这些类和对象的工作在OOA中已经开始,在OOA阶段得到的有关应用的概念模型描述了我们要解决的问题。

    问题论域部分的设计

    OOA阶段得到的概念模型描述了要解决的问题;在OOD阶段,继续OOA阶段的工作对在OOA中得到的结果进行改进和增补。

    OOA模型中的某些类与对象、结构、属性、操作进行组合与分解。

    3、             设计命令层

    研究现行的人机交互活动的内容和准则;建立一个初始的命令层;细化命令层。

    4、             设计详细的交互

    用户界面设计有若干原则,包括:

    一致性:采用一致的术语、一致的步骤和一致的活动;操作步骤少;不要“哑播放”。

    5、             继续做原型

    用户界面原型是用户界面设计的重要工作。

    使用快速原型工具做出原型让用户使用,通过用户反馈、修改、演示的迭代,是界面越来越有效。

    6、             设计HIC(人机交互)类

    窗口需要进一步细化;设计HIC类,首先从组织窗口和部件的用户界面的设计开始。

    用户界面部分的设计

    OOA阶段给出了所需的属性和操作,再设计阶段必须根据需求把交互细节加入所必需的实际显示和输入。

    用户界面部分设计主要由以下几个方面组成。

    1、用户分类

    按技能层次分类:

    按组织层次分类:

    按职能分类:

    2、描述人及其任务的脚本

    对以上定义的每一类用户,列出对以下问题做出的考虑:什么人、目的、特点、成功的关键因素、熟练程度以及任务脚本。

    7、             设计命令层

    研究现行的人机交互活动的内容和准则;建立一个初始的命令层;细化命令层。

    CoadYourdon面向对象分析

    OOA有两个任务

    形成地说明我们所面对的应用问题,最终成为软件系统基本构成的对象,还有系统所必须遵从的,由应用环境所决定的规则和约束。

    明确的规定构成系统的对象如何协同合作,完成指定的功能。

    识别类和对象

    面向对象分析的第一个层次主要是识别类和对象。

    类和对象是对与应用有关的概念的抽象。

    这一层工作是整个分析模型的基础。

    选择类和对象的原则:

    目标系统必须记住类和对象的某些事情;

    类和对象应当提供某些服务或处理;多属性;

    所有属性对于类中所有实例都应有意义。

    定义服务的方法和策略

    找出每一个对象的所有状态,在各种状态需要做的工作。利用状态迁移图;找出必须的操作;建立消息连接;描述服务:利用状态转移图、脚本和事件追踪图,描述服务的功能。

    消息连接的标识

    两个对象之间可能存在着由于通信需要而形成的关系,这称为消息连接。

    消息连接表示从一个对象发送消息到另一个对象,由那个对象完成某些处理。

    找出消息连接的方法及策略

    对于每一个对象,执行:

    查询该对象需要哪些对象的服务;

    查询哪个对象需要该对象的服务。

    高层设计

    高层设计阶段开发系统的结构,即构造应用软件的总体模型。

    高层设计阶段标识在计算机环境中进行问题解决工作做血药的概念,并增加了一些需要的类。

    高层设计的特点

    高层设计可以表征为标识和定义模块的过程。

    模块可以是一个单个的类,也可以是有一些类组合成的子系统。

    定义过程是职责驱动的。

    高层设计应遵循的原则

    应使得在子系统的各个高层部件之间的通信量达到最小;子系统应当把那些成组的类打包形成高度的内聚;逻辑功能分组,提供一个一个单元,识别并定位问题事件。

    CoadYourdon高层设计方法

    CoadYourdon在设计阶段中继续采用分析阶段中提到的五个层次用于建立系统的四个组成成分:问题论域部分、人机交互部分、任务管理部分、数据管理部分。

    任务管理部分的设计

    任务,是进程的别称,是执行一系列活动的一段程序。

    任务管理主要包括任务的选择和调整。

    定义各个任务

    定义任务的工作主要包括:他是什么任务、如何协调工作及如何通信。

    (1)           它是什么任务

    (2)           如何协调工作

    (3)           如何通信、

    (4)           一个模板

    任务的定义如下:

    Name(任务名)

    Description(描述)

    Priority(优先级)

    Servicesincluded(包含的操作)

    Communication(经由谁通信)

    数据管理部分的设计

    数据管理部分提供了在数据管理系统中存储和检索的基本结构,包括对永久性数据的访问和管理。

    它分离了数据管理机构所关系的事项,包括文件、关系型DBMS或面向对象DBMS等。

    数据管理方法

    数据管理方法主要有3种:文件管理、关系数据库管理和面向对象库数据管理。

    面向对象软件的实现与测试

    在开发过程中,类的实现是核心问题。在只用面向对象风格所写的系统中,所有的数据都被封装在类的实例中而整个应用则被封装在一个更高级的类中。

    面向对象环境下的测试策略

    单元测试(类测试)

    在面向对象环境下,最小的可测试的单元是封装了的类或对象,而不是程序模块。

    面向对象软件的类测试等价于传统软件开发方法中的单元测试。

    完全孤立的测试类的各个操作是不行的。

    组装测试

    因为面向对象软件没有一个层次的控制结构,所以传统的自顶向下和自底向下的组装策略意义不大。

    对于面向对象系统的组装测试,存在两种不同的测试策略。

    基于线索测试(Thread-based Test

    它把为响应某一系统输入或事件所需的一组类组装在一起。每一条线索将分别测试和组装。

    基于应用的测试(Use-based Test

    它着眼于系统结构,首先测试独立类,这些类只使用很少的服务器类。再测试那些使用了独立类的相关类。

    确认测试

    在进行确认测试和系统测试时,不关心类之间连接的细节。着眼于用户的要求和用户能够认可的系统输出。

    确认测试:

    在进行确认测试和系统测试时,不关心类之间连接的细节。着眼于用户的要求和用户能够认可的系统输出。

    可以利用黑盒测试的方法来驱动确认测试。

    类的测试用例组

    一个类的测试用例组由满足测试需求的用例组成。

    每个测试用例是一系列输入值,它们将在要求的处理中执行,以满足测试需求。

    类测试

    类,作为在语法上独立地部件,应当允许用在许多不同的应用中。

    每个类都应是可靠的,并且不需要了解任何实现的细节就能复用。

    因此,类应尽可能孤立地进行测试。

    测试类操作的测试用例组

    首先定义测试类的各个操作的测试用例组。

    然后再把测试用例组扩充,针对被测操作调用类中其它操作的情况,进行组装测试。

    类测试的种类

    基于定义的测试

    把类当做一个黑盒对待,确认类的实现是否遵照它的定义。

    基于程序的测试

    考虑类的实现,确定代码编写得是否正确。

    组装测试

    类组装

    测试一个新类时,需要先测试在定义中所涉及的类,在考虑这些类的组装。

    总体组装

    把所有组成完整软件的各个部分集合在一起。

    这种测试所选择的测试用例应当瞄准待开发软件的目标,并且应当提供数据给测试者,以确定软件开发是否与它的目标相吻合。

    ***********************************************************************************************
    *【Author】:missysm586
    *【Date】:2013年08月10日
    *【URL】:http://blog.csdn.net/missysm586/article/details/5889271
    *【Notice】:
    *1、本文为原创技术文章,首发博客园个人站点。
    *2、转载和引用请注明作者及出处。
    *3、本文必须全文转载和引用,任何组织和个人未授权不能修改任何内容,并且未授权不可用于商业。
    *4、本声明为文章一部分,转载和引用必须包括在原文中。
    ***********************************************************************************************

  • 相关阅读:
    三角形的最大周长
    Java 虚拟机运行时数据区详解
    四数相加 II
    Java 注解详解
    四因数
    【论文笔记+复现踩坑】End-to-end Recovery of Human Shape and Pose(CVPR 2018)
    假如 Web 当初不支持动态化
    保姆级干货分享
    C# ±180的值转成0-360
    C# 校验算法小结
  • 原文地址:https://www.cnblogs.com/armyant/p/3249515.html
Copyright © 2011-2022 走看看