软件工程
概述——软件工程是指导计算机软件开发和维护的学科
软件工程的产生
软件工程的发展史
软件危机产生并越来越严重,因为逐步形成了研究如何消除软件危机,以及如何合理的开发和维护软件的学科——软件工程学
软件危机
软件危机是指在计算机软件开发和维护时所遇到的一系列问题。
1、 软件危机产生的原因
软件危机的产生的原因与软件的特点有关,也与软件开发的方式、方法、技术和软件开发人员本身的素质有关。具体来说,有以下几点:
1> 软件是计算机系统中的逻辑部件,软件产品往往规模庞大,给软件的开发和维护带来客观的困难。
2> 软件一般要使用5-10年,在这段时间里,很可能出现开发时没有预料到的问题。例如,当系统运行的硬件、软件环境发生变化时,系统需求发生了变化时,需要及时地维护软件,使软件可以继续使用。
3> 软件开发技术落后,生产方式和开发工具落后。
4> 软件开发人员忽视软件需求分析的重要性,对软件可维护性不重视,也是造成软件危机的原因之一。
2、 软件危机的主要表现形式
1> 软件的发展速度跟不上硬件的发展和用户的需求。
2> 软件的成本和开发进度不能预先估计,用户不满意。
3> 软件产品质量差,可靠性不能保证。
4> 软件产品可维护性差。
5> 软件没有合适的文档资料
3、 解决软件危机的途径
现代计算机普遍采用的是冯诺依曼计算机系结构,硬件的基本解功能只是做简单的运算与逻辑判断,主要还是适用于数值计算。随着计算机应用的日益广泛,许多企事业单位的计算机,80%以上用于管理方面。管理方面大多为非数值计算问题,需要设计计算机软件来进行处理,因而可能会使软件变得复杂、庞大,从而导致软件危机的产生。
要解决软件危机问题,需要采用以下措施:
1> 使用好的软件开发技术和方法
2> 使用好的软件开发工具,提高软件生产率
3> 开发软件时有良好的组织、严密的管理,各方面人员相互配合共同完成任务
为了解决软件危机,既要有技术措施(好的工具和方法),也要有组织管理措施。软件工程正是从技术和管理两个方面来研究如何更好地开发和维护计算机软件的。
软件工程学
什么是软件
软件是计算机程序及其有关的数据和文档的完整集合。
计算机程序是能够完成预定功能可执行的指令序列;数据是程序能适当处理的信息,具有适当的数据结构,并且可以可以储存;软件文档(Software Documentation)是开发、使用和维护程序所需要的图文资料。
什么是软件工程
软件工程是指导计算机软件开发和维护的工程学科,它采用工程的概念、原理、技术和方法来开发与维护软件。
软件工程的目标是实现软件的优质高产。
软件工程学的内容
软件工农程雪的主要内容是软件开发技术和软件工程管理。其中,软件开发技术包括软件工程方法学、软件工具和软件开发环境;软件工程管理包括软件工程经济学和软件管理学。
软件工程方法学的3要素,分别为方法、工具和过程。
方法:完成软件开发任务的技术方法
工具:为方法的运用提供自动或半自动的软件支撑环境
过程:规定完成任务的工作阶段、工作内容、产品、验收的步骤和完成准则
目前使用最广泛的软件工程方法学可以分为传统方法学和面向对象方法学:
1> 传统方法学
2> 面向对象方法学
面向对象方法学是多次反复、迭代开发的过程。
软件生存周期
软件生存周期(Software Life Cycle)是从设计软件产品开始到产品不能使用为止的时间周期。让通常包括需求设计、设计阶段、实现阶段、测试阶段、安装和验收阶段、操作和维护阶段,有时还包括退役阶段。
软件生存周期一般由软件计划、软件开发和软件运行维护3个时期组成
软件计划期分为问题定义、可行性研究和需求分析3个阶段
软件开发时期可分为软件设计、软件实现、单元测试和综合测试阶段。其中,软件设计阶段可分为概要设计和软件详细设计阶段;软件实现阶段进行程序设计和软件单元测试;软件开发的最后阶段是进行综合测试等。
软件交付使用后,在软件运行过程中,需要不断地进行维护,才能使软件持久地满足用户的需要。(维护时期费用最高、时间最长——完善型维护)
软件开发模型
1> 瀑布模型:瀑布模型的特点是由文档驱动(规范的、文档驱动的方法。开发阶段按顺序进行,适合于需求分析较明确、开发技术叫成熟的情况)
2> 快速原型模型:(构建原型系统让用户试用并收集用户意见,获取用户真实需求)
3> 增量模型:增量模型是对瀑布模型的改进,他使开发过程具有一定的灵活性和可修改性(优点是能在早期向用户提交部分产品且易于维护,缺点是软件的体系结构必须是开放的)
4> 迭代模型
5> 喷泉模型(Fountain Model)是典型的面向对象软件开发模型(适用于面向对象方法)
6> 螺旋模型:螺旋模型要求在软件开发的初期就完全确定软件的需求,这在很多情况下往往是做不到的。螺旋模型试图克服瀑布模型的这一不足之处。(适用于大规模内部开发项目,分析风险和排除风险)
7> 统一过程(Rational Unified Process ,RUP)使用统一建模语言(Unified MOdelingLanguage,UML),采取用例(Use case)驱动和架构优先的策略,采用迭代增量建造方法。
通常结构化方法可使用瀑布模型、增量模型和螺旋模型进行开发;而面向对象方法可采用快速原型模型、增量模型、喷泉模型和统一过程进行开发
- 系统的运行环境要求
系统的运行环境要求包括硬件环境要求和软件环境要求两方面。
系统运行时的硬件环境要求,是指对外存储器种类(硬盘、 络数据库等)、数据输入方式(移动设备输入、屏幕上点击选择、键盘输入等)、数据通信接口等的要求。
系统运行时的软件环境要求,是指对操作系统、 络软件、数据库管理系统、中间件、多媒体信息处理软件等的要求。 - 系统的性能要求
是指系统所需的存储容量、安全性、可靠性、期望的响应时间等 - 系统功能
确定目标系统必须具备的所有功能,系统功能的限制条件和设计约束 - 接口需求
描述系统与其环境的通信格式。常见的接口需求有用户接口需求、硬件接口需求、软件接口需求、通信接口需求等。例如,嵌入式系统与仪器、仪表、传感器等的接口需求。
需求分析步骤
1> 建立系统模型
数据模型用实体-关系图来描述实体之间的关系,用层次图、Warnier图描述数据结构。功能模型用书流图、IPO图来描述。行为模型用状态转换图来描述绘。数据字典用来描述软件使用或产生的所有实体。
建模的基本目标为: - 描述用户需求
- 为软件的设计奠定基础
- 定义一组需求、用以验收软件产品
为达到上述目标,可以用3种不同的图形以及数据字典进行描述。数据字典用来描述软件使用或产生的所有实体 - 数据模型用实体—关系图来描述实体之间的关系
- 功能模型用数据流图来描述,其作用为:描述数据在系统中移动时如何变换;描绘变换数据流的功能和子功能。
- 行为模型可以用状态转换图来描绘系统的各种行为模式(状态)和不同状态间的转换
2> 写出需求规格说明
需求分析阶段除了建立模型之外,还应写出软件需求规格说明、系统测试计划、修订系统开发计划,有时附上可执行的原型及初步的用户手册。
软件需求规格说明的内容为:软件的目标,系统的数据描述、功能描述和行为描述,软件确认标准,资料目录、附录等。
3> 修正开发计划
4> 修订初步的测试计划
5> 编写初步的用户手册
6> 编写数据要求规格说明书
7> 复审
复审是指需求分析的结果要经过系统分析员和用户严格的审查。
需求分析图形工具
银行储蓄
仓库管理
顾客购买
1>实体关系图(Entity-Relationship Diagram,简称E-R图),E-R图3要素:
实体:用矩形框表示
关系:及实体之间的关系,用菱形框表示
属性:即实体(或关系)的属性,用椭圆或圆角矩形来表示
2> 数据流图(Data Flow Diagram,DFD)是一种用来描绘软件系统逻辑模型的图形工具,用于描绘信息在系统中流动和处理的情况。
数据流图的4中基本符
正方形或立方体表示数据的源点或终点;
圆角矩形或圆形代表数据处理;
两端用同向圆弧封闭的平行横线或开口矩形代表数据存储;
箭头表示数据流,即数据的流动方向。
数据流图的3种附加符
*表示数据流之间是“与”关系(同时存在)
+表示数据流之间是“或”关系(可以单独存在,也可以同时存在)
⊕表示只能从几个数据流中选一个(互斥关系)
3> 状态转换图
4> 层次图
5> Warnier图
6> IPO图
数据字典
数据字典(Data Dictionary ,DD)是对数据流图中出现的所有数据元素、数据流、文件、处理的定义的集合。数据字典的作用是在软件分析和设计过程中提供数据描述,是数据流图必不可少的辅助资料。只有将数据流图和对数据流图中每个元素的确切定义合起来才能构成完整的系统规格说明。
数据字典通常由数据元素、数据流、数据存储和数据处理4类条目组成
数据字典使用的符 :
=表示“等价于”或“定义为”
+表示“和”,链接两个数据元素
[ ]表示“或”,对[ ]中列举的个数据元素,用“|”分隔,表示可任选其中某一项。
{ }表示“重复”,对{ }中的内容可重复使用
( )表示“可选”,对( )中的内容可选、可不选,各选项之间用“,”分隔开。
如果要对{ }表示的重复次数加以限制,可将重复次数的下限和上限写在花括 的左右(或在花括 左边分别用下角标和上角标表明)1{A}表示A的内容至少要出现一次;{B}表示B的内容允许重复出现零次至任意次。
结构化设计——传统的软件工程方法学采用结构化设计(Structured Design,SD)技术完成软件设计工作。结构化设计通常把软件设计工作分为概要设计和详细设计阶段,其基本要点为:软件系统由层次结构的模块组成;模块是单入口、单出口的;模块构造和联结的基本准则是模块独立;软件系统结构用图来描述。(自顶向下模块化程序设计思想——自顶向下、逐步求精、模块化)
软件设计步骤
软件设计是一个把需求分析变换成软件表示的过程,他分为概要设计和详细设计两个阶段。
1>概要设计的任务是确定设计方案和进行软件结构设计,与此同时要进行数据库设计和制定测试计划;
概要设计的设计供选择方案:需求分析阶段得出的数据流图是总体设计的出发点。把数据流图中的某些处理逻辑地进行组合,不同的组合可能就是不同的实现方案。通过分析,首先抛弃行不通的方案,然后提供各个合理方案的一下几方面的资料。
数据流图、IPO图等
组成系统的元素清单。数据字典
成本效益分析
开发该系统的进度计划
2>详细设计的任务是进行软件过程设计、系统接口设计和数据设计。
- 过程设计是指设计每个模块的实现算法。传统软件工程方法在进行过程设计是,只用顺序结构、条件选择结构和循环结构这3中基本控制结构,用并且仅用这3种结构就可以组成任何一个复杂的程序。
过程设计可以采取数据流的设计方法,也可以采用面向数据结构的设计方法。
在进行过程设计时要描述程序的处理过程,可采用图形、表格或语言类工具。
过程设计可用流程图、盒图(N-S图)、问题分析图(PAD图)、判定表、判定树、过程设计语言(PDL)等进行描述。 - 接口设计包括软件模块间的接口设计、模块与外部实体的接口设计和用户界面设计
- 数据设计包括数据库设计、数据代码设计、数据输入和输出设计。如果在计算机软件系统中要处理的数据量很大,需要对这些数据进行代码设计,其目的是将自然语言转换成便于计算及处理的形态,从而提高计算机的处理效率和操作性能。
详细设计阶段使用的工具有:流程图、盒图(N-S图)、问题分析图(PAD)、判定树、判定表、过程设计语言(PDL)等
软件结构设计
软件结构设计的基本原理
软件结构化设计的基本要点为:软件系统由层次结构模块构成;模块是单入口、单出口的;模块构造和联结的基本准则是模块独立;软件系统结构用途来描述。
软件结构设计的基本原理为:软件的模块化,模块独立性,抽象和逐步求精,信息隐蔽和局部化等。
- 模块
模块化是把系统分割成能完成独立功能的模块;模块独立性要求模块之间低耦合、模块内部高内聚。 - 抽象和逐步求精
- 信息隐蔽和局部化
模块化
木块化是指吧系统分割成能完成独立功能的模块,明确规定各模块及其输入输出规格,是模块的界面不会产生任何混乱。
模块独立性
评价模块分割好坏的标准主要有4个方面:模块的大小;模块之间的联系程度——耦合,尽量使用数据耦合,少用控制耦合和特征耦合,不采用内容耦合,控制公共环境耦合;模块内元素的联系程度——内聚,内聚按紧密程度从高到低排列,次序为功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚;模块信息的隐蔽程度。
软件系统模块化是,最重要的原理是模块独立性。评价模块分割好坏的标准,主要有以下4个方面。
1> 模块大小:模块大小和问题的复杂程度相关,模块的大小以模块的功能意义、复杂程度、易于理解、便于控制为标准。
2> 耦合(Coupling):模块之间的联系程度
软件之间互相依赖的程度用耦合来度量。
模块之间传递的信息有以下3种:
- 数据信息:记录某种事实,一般用名词表示,如考生成绩
- 描述标志信息:描述数据状态或性质,如已录用、未被录用
- 控制标志信息:要求执行非正常的动作或某个功能,如显示“准考证 超范围,重新输入”
3> 内聚(Cohesion):模块内的软件元素的联系程度
一个模块各个元素彼此结合的紧密程度用内聚来度量。模块设计的目标之一是力求做到高内聚。
4> 信息隐蔽:模块信息的隐蔽程度
衡量模块独立程度的两个定性度量标准是耦合和内聚。
模块设计启发规则
模块启发式规则为:经理提高模块独立性;注意模块的可靠性、通用性、可维护性、简单性;模块应大小适中;模块的深度、宽度、扇出、扇入要适当。通常顶层扇出比较大,中间扇出比较小,下层调用公共模块。
1> 尽量提高模块独立性
2> 注意模块的可靠性、通用性、可维护性和简单性
- 可靠性:模块运行应无差错,才能把它整体组装到系统中去。在设计时应先对模块做测试,使差错尽可能少。
- 通用性:在设计模块时尽可能使其通用化,以扩大其应用性
- 可维护性:设计完善的模块应易于修改
- 简单性:减少复杂性,有利于人们理解,使模块易于设计和使用
3> 模块应大小适中
4> 模块的深度、宽度、扇出和扇入要适当 - 深度是指软件结构中模块的层数。
- 宽度是指软件结构内同一层次上的米快数的最大值
- 扇出是指一个模块所调用的模块数
- 扇入是指有多少上级模块调用它
设计得很好的软件结构通常顶层扇出比较大,中间扇出较小,下层调用公共模块
5> 模块接口要简单和清晰
软件结构设计的图形工具
进行软件系统结构设计需买哦胡系统模块的层次结构,可采用层次图、HIPO图和结构图。
1> 层次图和HIPO图
层次图适合于描绘软件的层次结构,特别适合于在自顶向下设计时使用。在层次图(H图)里,一个矩形框代表一个模块,方框间的连线表示调用关系。
在层次图里,如果除了最顶层的方框之外,每个方框里都加了编 ,则称这种带编 的层次图为HIPO图(Hierarchy Plus Input-Process-Output,层次图加输入/处理/输出)
编 规则:每个处理的下层处理的编 在其上层编 后加‘.’ 及序 ,序 可以用数字或英文字母。
2> 结构图
结构图(Structure Chart,SC)是进行软件结构设计的另一种重要图形工具,用于表达系统内部各分量之间的逻辑结构和相互关系。
结构图符 :
- 方框代表模块,框内注明模块的名字或主要功能。
- 方框之间的大箭头或直线表示模块之间的调用关系
- 带注释的小箭头表示模块调用时传递的信息及其传递方向。其中,尾部加空心圆的小箭头表示传递数据信息;尾部加实行圆的小箭头表示传递控制信息
- 选择结构:模块H中条件符合时嗲用模块A,不符合时调用模块B
- 循环结构:模块H循环调用模块A、B、C。
面向数据流的设计方法
面向数据流的设计方法的步骤如下:
1> 对数据流进行复审,必要时修改或细化
2> 根据数据流图确定软件结构属于变换型还是事务型,然后分别处理
3> 把数据流图映射成结构图
4> 改进结构图,使设计更完善
把数据流图映射成结构图的方法,要先区分数据流图的类型是变换型还是事务型,这是两种类型的系统在进行过程设计时是有区别的
过程设计工具
1> 流程图
2> 盒图(Nassi-Shneiderman)
3> 问题分析图(PAD图)
4> 判定表
5> 判定树
6> 过程设计语言(Process Design Language,PDL,也成伪码)
面向数据结构的设计方法
面向数据结构的设计方法,是按输入、输出以及计算机内部存储信息的数据结构进行软件结构设计的,把数据结构的描述变换为对软件结构的描述。
面向数据结构的设计方法有两种:Jackson方法和Warnier方法,这两种方法只是图形工具的不同。
软件编码和软件测试
软件测试目标
软件测试(Software Testing)是由人工或计算机来执行或评价软件的过程,以验证软件是否满足规定的需求或识别期望的结果和实际结果之间有无差别。
总之软件测试是指通过人工或计算机执行程序,来有意识地发现程序设计中的错误和编码错误的过程。
软件测试方法
1> 静态分析与动态测试
2> 黑盒法和白盒法
- 黑盒法(Black-Box Testing,又称功能测试)其测试实例完全是根据程序的功能说明来设计的。
- 白盒法(White-Box Testing,又称结构测试),其测试用例是根据程序内部的逻辑结构和执行路径来设计的。
软件测试步骤
1> 模块测试
也称单元测试,其目的是集中检验软件设计的最小单元——模块,检查模块是否能独立;正确地运行。
2> 集成测试
子系统的组装成为集成化。集成测试分为子系统测试和系统测试两种。
子系统测试是把经过模块测试、运行正确的模块放在一起形成子系统后在测试。
系统测试是把经过测试、运行正确的子系统组装成完整的系统后在进行测试。
- 自顶向下集成
- 自底向上集成
3> 程序审查会和人工运行
4> 确认测试
确认测试的目的是验证所有的软件需求是否均被正确地实现。
5> 平行运行
此时新开发的系统与原先的老系统(或手工操作)同时运行,这称为平行运行
在设计应用软件时,应优先选用高级程序设计语言,只有3种情况选用汇编语言。
结构化程序设计将顺序、选择和循环三种基本控制结构进行组合和嵌套,以容易理解的形式和避免使用GOTO语句等原则,进行程序设计。
结构化程序设计使软件易于理解,易于修改,便于重复使用。
软件设计风格直接影响软件的质量,影像软件的可维护性和可移植性。
软件编码阶段应对源程序进行静态分析和模块测试,以保证程序的正确性。
软件测试是由人工或计算机来执行或评价系统的过程,以验证它是够满足规定的需求。
测试的根本任务是发现软件中的错误。测试过程的早期使用白盒法,后期使用黑盒法。设计测试方案的基本目标是选用尽可能少的高效测试数据,从而尽可能多的发现软件中的错误。
使用边界值分析方法,既测试输入数据的边界情况又检查输出数据的边界情况。
用等价类划分法补充测试方案。
必要时用错误推断法补充测试方案。
用逻辑覆盖法检查现有测试方案,若没有达到逻辑覆盖标准,应再补充一些测试方案。
软件调试是查找、分析和纠正程序中的错误的过程。调试不仅修改软件产品,还应该进软件过程,避免今后程序中可能出现的错误。
软件测试和软件调试常常交替进行。
软件确认是指在软件开发过程结束时,对所开发的软件进行评价,以确定它是否和软件需求相一致的过程。
软件维护和软件重用——软件维护(Software Maintenance)就是在软件产品交付之后对其进行修改,以排除故障,或改进性能和其他属性,或使产品适应改变了的环境。软件的可维护性是指软件被理解、改正、调整和改进的难易程度,他是指导软件工程各阶段工作的一条基本原则。软件重用是指在软件开发、维护过程中不做修改或稍加修改就可以重复使用相同或相似的软件元素的过程。
软件维护
软件维护可分为以下4种:
1> 改正性维护(Corrective Maintenance 20%)
2> 适应性维护(Adaptive Maintenance 25%)
3> 完善性维护(Perfective Maintenance 50%)
软件交给用户使用后,用户往往会因为工作流程、应用环境的变化,要求增加新的功能和完善性能等。
4> 预防性维护(Preventive Maintenance 5%)
软件维护的特点:
1> 结构化维护和非结构化维护差别巨大
2> 维护的代价高昂(时间最长、代价高昂)
3> 维护的问题很多
软件维护过程
1> 维护组织
2> 维护文件
3> 软件工作流程
- 用户提出维护申请
- 维护组织审查申请 告并安排维护工作
- 进行维护并做详细的维护记录。
4> 对维护的评价
5> 软件维护的副作用 - 编码副作用
实用程序设计语言修改源程序时可能引入错误。 - 数据副作用
修改数据结构时可能造成软件设计与数据结构不匹配,从而导致软件错误。 - 文档副作用
对数据流、软件结构、模块逻辑或任何其他特性进行修改时,必须对相关的文档进行相应的修改,否则可能会导致文档与程序功能不匹配、文档不能反映软件当前状态。
软件重用和再工程
软件重用(Software Reuse)是指在软件开发、维护过程中不做修改或稍加修改就可以重复使用相同或相似的软件元素的过程。这些软件元素成为软件构件(存储在构件库里)。
软件维护就是在软件产品交付付之后对其进行修改,以排除故障,或改进性能和其他属性,或使产品适应改变了的环境。
软件维护分为4中,即改正性维护、适应性维护、完善性维护、预防性维护。
软件可维护性是指软件功能本理解、改正、适应和增强的难易程度,是维护人员对软件进行维护的难易程度。
可维护性是指导软件工程各阶段的一条基本原则,提高可维护性是软件工程追求的目标之一。
在软件开发时明确质量目标、考虑软件的维护问题是必需的、重要的。在软件开发阶段提供完整的、一致的文档,采用先进的软件开发方法和软件开发工具是提高软件可维护性的关键。
在软件维护是,目前常采用软件重用技术、逆向工程和再工程。
面向对象方法学——是统一建模语言(Unified Modeling Language,UML),是一种直观的、通用的、可视化建模语言。
面向对象方法的要素和优点
面向对象方法有4个要素:对象、类、继承和用消息通信。
1> 对象
2> 类
3> 继承
4> 用消息通信
OO=Objects+Classes+Inheritance+Communication with Messages
(面向对象=对象+类+继承+用消息通信)
面向对象方法的主要优点
区别于传统的开发方法,反复迭代的过程
1> 与人类习惯的思维方法一致
2> 稳定性好
3> 可重用性好
4> 较易开发大型软件产品
5> 可维护性好
面向对象方法的概念
面向对象方法的主要有以下概念:对象、类和实例、消息、封装、继承、多态性和重载。
1> 对象(Object)
- 对象的定义
对象是封装了数据结构及可施加在这些数据结构上的操作的封装体,它有唯一的标识符,向外界提供一组服务(操作) - 属性(Atttribute)
- 方法(Method)
- 对象的特点
以数据为核心
主动性
实现了数据封装
本质上具有并行性
模块独立性好:要求模块内聚性高,耦合性弱(高内聚、低耦合)
2> 类(Class)和实例(Instance) - 类
类是对具有相同数据和相同操作的一组相似对象的定义。 - 实例
实例是由某个特定的类所描述的一个具体对象。
3> 消息(Message)
消息就是想对象发出的服务请求,是要求某个对象执行它所属的类中所定义的某个操作的规格说明。
4> 封装(Encapsulation)
封装就是把对象的属性和方法(服务)结合成一个独立的单位,尽可能隐蔽对象的内部细节。
5> 继承(Inheritance)
特殊类的对象拥有其一般类的全部属性与服务,称为特殊类对一般类的继承。
继承有两类:单继承和多重继承 - 单继承:一个类只允许有一个父类,即类等级为树形结构时,类的继承是单继承。例如,学生类分为专科生、本科生、研究生3个子类,就是单继承。
- 多重继承:当一个父类,即类等级为 状结构是,类的继承是多重继承。例如,冷藏车继承了汽车类和冷藏设备类两个类的属性和服务
6> 多态性(Polymorphism)
多态性是指允许属于不同类的对象对同一消息作出响应。
7> 重载(Overloading)
重载有两种:函数重载和运算符重载。 - 函数重载
在同一作用域内的若干参数特征不同的函数,可以使用相同的函数名。 - 运算符重载
用同一运算符可以施加于不同类型的操作数上面。
UML概述
UML的发展
模型是为了理解事物而对事物做出的一种抽象,是对事务的一种书面描述。
UML的内容
1> UML语义
2> 图(Diagram)
UML的模型是用图来表示,共有5类9种图
- 静态图:包括类图、对象图及包,表示系统静态结构。
- 行为图:包括状态图,活动图,用于描述系统的动态行为和对象之间的交互关系。
- 交互图:包括顺序图和协作图,用于描述系统的对象之间的动态合作关系。
- 实现图:包括构建图和配置图,用于描述系统的物理实现。
3> 视图(View)
4> 模型元素(Model Element)
5> 通用机制
6> 扩展机制
7> UML建模
- 用例
用例用椭圆表示 - 执行者
执行者也称角色,用一个人形图案表示 - 通信联系
执行者和用例之间要交换信息,称为消息通信。 - 脚本(典型交互)
脚本是用例的实例。脚本是系统的一次具体执行过程。用例图中应尽可能包含所有脚本,才是较完整地从用户使用的角度来描述系统的。
2> 类图和包
类图(Class Diagram)描述类与类之间的静态关系。
3> 对象图
4> 状态图(初始状态只有一个)
状态转换是指两个状态之间的关系
5> 顺序图
6> 活动图
7> 协作图
8> 构件图
构件图(Component Diagram)描述软件构件之间的相互依赖关系 - 构件的类型(构件时存放在构件库中的)
源构件:实现类的源代码文件
二进制构件:一个对象代码文件、一个静态库文件或一个动态库文件
可执行构件:一个可执行的程序文件,是链接所有二进制构件所得到的结果。 - 构件的表示符
9> 部署图
部署图(Deployment Diagram)描述计算机系统硬件的物理拓扑结构及在此结构上执行的软件。 - 节点和连接
- 构件和接口
- 对象
UML的扩展机制
- 标签值
- 约束
- 版型
UML的应用领域
UML是一种建模语言,是一种标准的表示方法。
UML的目标是,用面向对象的图形方式来描述任何系统,因此具有很宽的应用领域。
UML适用于系统开发的全过程,应用于需求分析、设计、编码和测试的所有阶段。
- 需求分析:通过建立用例模型,描述用户对系统功能要求。用逻辑视图和动态视图来识别和描述类以及类之间的相互关系。用类图描述系统的静态结构,协作图、顺序图、活动图和状态图描述系统动态行为。此时只建立模型,并不涉及软件系统的解决问题的细节。
- 设计:在分析结果的基础上,定义软件系统技术方案的细节。
- 编码:把设计阶段得到的类转换成某种面向对象程序设计语言的代码。
- 测试:不同软件测试阶段可以用不同的UML图作为测试的依据。例如,单元测试可以使用类图和类的规格说明;集成测试使用构件图和协作图;系统测试使用用例图;验收测试由用户使用用例图。
面向对象方法是一种将数据和处理相结合的方法,它不强调分析与设计之间的严格区分。从面向对象分析(OOA)到面向对象设计(OOD),是一个反复迭代的过程。
面向对象方法使用对象、类和继承机制,对象之间仅能通过传递消息实现彼此通信。可以用下列方程来概括:
面向对象=对象+类+继承+用消息通信
UML是面向对象方法使用的一种标准建模语言。
常用UML图有9种:用例图、类图、对象图、状态图、顺序图、活动图、协作图、构件图、部署图。
包由类图或另一个包构成,表示包与包之间的依赖、细化和泛化等关系。包括常用于对模型的管理,可把包成为子系统。
UML是一种有力的软件开发工具,它不仅可以用来在软件开发过程中对系统的各种方面进行建模,还可以用在许多工程领域。
面向对象方法在开发过程中会产生几种主要模型:用例模型、静态模型、动态模型和实现模型。
UML常用的视图有5种:用例视图、逻辑视图、并发视图、构建视图、部署视图。
开发者应根据实际需要选择使用合适的UML图和模型。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!