软件工程

您所在的位置:网站首页 srs软件工程 软件工程

软件工程

2024-03-06 11:20| 来源: 网络整理| 查看: 265

软件工程 一、绪论1.软件的定义2.软件技术面临的问题3.软件危机4.软件工程5.软件开发方法6.三种编程范式7.三代软件工程 二、软件生存周期与软件过程1.软件生存周期2.典型的软件生存周期3.软件过程(1) 传统的软件过程:瀑布模型、快速原型模型瀑布模型快速原型模型 (2) 软件演化模型(采用渐增式或迭代式的开发方法):增量模型、螺旋模型、构件集成模型增量模型螺旋模型构件集成模型 (3) 形式化方法模型(基于程序变换和验证技术的软件开发):转换模型,净室模型转换模型净室模型 (4) 软件过程模型的特点汇总(5) 统一过程和敏捷过程统一过程(RUP)敏捷过程极限过程 (6) 软件可行性研究(7) 软件风险分析 三、结构化分析与设计1. 结构化分析与设计2. SA与SD的流程3. 基本任务与指导思想4. SA模型的组成与描述数据流图(DFD)数据字典(DD)加工说明(PSPEC) 5. SD模型的组成与描述6. 结构化系统分析7. 结构化系统设计SD概述数据流图的类型——变换型、事务型 SD方法结构化软件设计方法——变换映射,事务映射 扇入扇出优化结构设计的指导原则 8. 模块设计 四、面向对象与UML1. 面向对象概述(1) 类和对象的关系(2) 面向对象的基本特征(3) 面向对象开发的优点 2. UML(统一建模语言)简介(1) UML的模型元素(2) UML的元模型结构(3) UML的组成①图②视图③模型元素④通用机制 (4) UML的特点(5) UML五类九种图的符号体系 3. UML主要内容(1) 静态建模1) 用例图与用例模型2) 类图Class Diagram关联关系(Association)聚集关系(Aggregation)组合关系(Composition)泛化关系(Generalization)实现关系依赖关系(Dependency) 3) 对象图Object Diagram (2) 动态建模(3) 物理架构建模 五、需求工程与需求分析1. 软件需求工程软件需求的定义软件需求的特性软件需求工程 2. 需求分析与建模3. 需求获取的常用方法4. 需求模型5. 软件需求描述6. 需求管理 六、 面向对象分析1. 软件分析概述2. 面向对象软件分析(1) OOA的主要任务(2) OOA的模型(3) OOA的优点(4) 分析模型的特点(5) OOA的共同特征(6) OOA的建模步骤 3. 面向对象分析建模(1) 识别与确定分析类(2) 建立对象-行为模型(3) 建立对象-关系模型 七、 面向对象设计1. 软件设计的目标2. 设计模型和分析模型3. 软件设计的概念及基本原则4. 软件设计的任务5. 模块化设计内聚耦合 6. 面向对象设计建模7. 子系统VS包 八、 编码与测试1、软件测试测试与纠错测试的特性测试的种类黑盒测试(功能测试)白盒测试 2、多模块程序的测试策略 九、软件维护

一、绪论 1.软件的定义

软件是计算机系统中与硬件相互依存的另一部分,它包括程序、数据及其相关文档的完整集合。软件=程序+文档+数据

程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构,具体来说包括使系统初始运行所必须的数据如数据库和表的结构及初始的数据,系统运行中所需要的各种代码表、各种标志等。文档是与程序开发,维护和使用有关的图文材料(是有关于管理、开发、用户、维护人员使用的文档) 2.软件技术面临的问题 规模,复杂性,生产率 3.软件危机

介绍:

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题;概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做软件危机

表现:

对软件开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意的现象经常发生;软件产品的质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

原因: 内在原因:复杂性

软件开发无计划性,项目没有被很好地理解;计划不周,最终导致进度拖延,经费预算上升。软件需求不充分,开发的软件不能满足用户的需求。软件开发过程无规范,没有充分的文档资料。软件可靠性缺少度量的标准,质量无法保证。软件难以维护,易升级。

解决方法:

组织管理——工程项目管理方法技术措施——软件开发技术与方法、软件工具按工程化的原理和方法组织软件开发是软件开发中的问题的一个主要出路。

在这里插入图片描述

4.软件工程

定义:

软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件和有关技术及管理方法。把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件。(IEEE定义)软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。

三要素:

方法、过程、工具

中心思想:

把软件当作一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。

基本原理:

确保软件产品质量和开发效率的原理的最小集合。 5.软件开发方法 个性化方法->结构化方法->面向对象方法->软件复用 6.三种编程范式 过程式编程范型:程序=数据结构+算法面向对象编程范型:程序=对象+消息基于构件技术的编程范型:程序=构件+架构 7.三代软件工程

传统软件工程

结构化分析->结构化设计->面向过程的编码->软件测试

面向对象软件工程

面向对象基本概念:对象+类+继承+消息通信OO分析与对象抽取->对象详细设计->面向对象的编码和测试

基于构件的软件工程

领域分析和测试计划定制->领域设计->建立可复用构件库->查找并集成构件 二、软件生存周期与软件过程 1.软件生存周期 一个软件项目从开始立项起,到废弃不用止,统称为软件的生存周期。软件生存周期被划分为计划、开发、运行三个时期。由于软件生存周期被划分为较小的阶段,使得因为软件规模增长而大大增加的软件复杂性变得较易控制和管理。 2.典型的软件生存周期

计划->需求分析->软件分析->软件设计->编码(测试)

->软件测试->运行维护

在这里插入图片描述 需求分析:(准确回答,系统必须做什么)

提交:软件需求说明书/系统功能说明书/初步的系统用户手册

软件设计:(回答怎么做的问题)概要设计、详细设计

提交:设计说明书(软件结构图)

程序编写:(具体实现)

提交:源程序清单

软件测试:(挑错)单元测试、组装测试 有效性测试

提交:测试报告文档(测试计划、测试用例、测试结果)

运行维护:改正性维护、适应性维护、完善性维护

3.软件过程

围绕软件开发所进行的一系列活动 软件生存周期中的阶段和软件过程中的活动是基本一致的。

(1) 传统的软件过程:瀑布模型、快速原型模型 瀑布模型 基于软件生存周期的线性开发模型

强调软件文档:

每一个阶段必须完成规定的文档每一个阶段都要复审完成的文档

特点:

阶段间的顺序性和依赖性、推迟实现的观点、质量保证的观点

顺序性:

前一阶段的工作完成后才能执行下一阶段的任务

依赖性:

前一阶段的输出文档是下一阶段的输入文档

存在问题:

不适合需求模糊的系统,开发初始阶段很难彻底弄清软件需求

需求定义与分析->总体设计->详细设计->编码->测试->使用维护

在这里插入图片描述

快速原型模型

特点:

“逼真”的原型可以使用户迅速作出反馈循环回溯和迭代:非线性模型使用快速开发工具

种类:

渐进型:对原型补充和修改获得最终系统抛弃型:原型废弃不用

应防止的倾向:

舍不得抛弃,从而影响软件质量 在这里插入图片描述 (2) 软件演化模型(采用渐增式或迭代式的开发方法):增量模型、螺旋模型、构件集成模型 增量模型

定义:

把软件看作一系列相互联系的增量,每次迭代完成一个增量。

增量:

小而可用的软件第一个增量通常是软件的核心

特点:

在前面增量的基础上开发后面的增量每个增量的开发可用瀑布或快速原型模型每个增量开发的顺序性和总体的迭代性相结合有利于控制技术风险 在这里插入图片描述 螺旋模型

特点:

瀑布模型(顺序性、边开发边复审)+快速原型(迭代性)风险分析->发现、控制风险

一个螺旋式周期:

计划:确定目标,选择方案,选定完成目标的策略风险分析:从风险角度分析该策略开发:启动一个开发活动评审:评价前一步的结果,计划下一轮的工作 在这里插入图片描述

迭代和瀑布的区别:

迭代和瀑布的最大的差别就在于风险的暴露时间上。瀑布模型的特点(文档是主体),很多问题再最后才会暴露出来。迭代模型的特点,根据风险列表选择要在迭代中开发新的增量内容,每次迭代完成时都会生成一个经过测试的可执行文件,可核实是否降低了目标风险。 构件集成模型

构件:

在某个领域中具有通用性,可以复用的软件部件将可以复用的构件存储起来,形成构件库

特点:

面向对象基于构件库融合螺旋模型特征支持软件开发的迭代方法软件复用 在这里插入图片描述 (3) 形式化方法模型(基于程序变换和验证技术的软件开发):转换模型,净室模型 转换模型

开发过程:

确定形式化需求规格说明书进行自动的程序变换针对形式化开发记录进行测试

特点:

形式化软件开发方法形式化需求规格说明变换技术程序自动生成技术确保正确 在这里插入图片描述 净室模型

净室思想:

在分析和设计阶段消除错误在“洁净”状态下实现软件制作

形式化:

盒结构表示分析和设计正确性验证

增量模型:

·把软件看成一系列的增量

在这里插入图片描述

(4) 软件过程模型的特点汇总

瀑布模型:

线性模型,每一阶段必须完成规定的文档,适合需求明确的中小型软件开发

快速原型:

用户介入早,通过迭代完善用户需求,原型废弃不用,适合需求模糊的小型软件开发

增量模型:

每次迭代完成一个增量,可用于OO开发。适合容易分块的大型软件开发

螺旋模型:

典型迭代模型,重视风险分析,可用于OO开发。适合具有不确定性大型软件开发

构件集成模型:

软件开发与构件开发平行进行,适用于领域工程、行业的中型软件开发

转换模型:

形式化的规格说明,自动的程序变换系统。属于理想化模型,尚无成熟工具支持

净室模型:

形式化的增量模型,在洁净状态下实现软件制作。适合开发团队熟悉形式化方法,中小型软件开发。 (5) 统一过程和敏捷过程 统一过程(RUP) 描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么要做,描述了一组以某种顺序完成的活动。基本特征是“用例驱动、以架构为中心的和受控的迭代式增量开发”

RUP将软件开发分为四个阶段:

初始阶段:该阶段的主要任务包括确定项目范围和边界,识别系统的关键用例,展示系统的候选架构,估计项目费用和时间,评估项目风险。其意图是建立项目的范围和版本,确定业务实现的可能性和项目目标的稳定性。提交结果包括原始的项目需求和业务用例。

制品:构想文档、有关用例模型的调查、初始的业务用例、早期风险评估、显示阶段和迭代的项目计划等制品;

细化阶段:该阶段的主要任务包括分析系统问题领域,建立软件架构基础,淘汰最高风险元素。其意图是对问题域进行分析,建立系统的需求和架构,确定技术实现的可行性和系统架构的稳定性。提交结果包括系统架构及其相关文档、领域模型、修改后的业务用例和整个项目的开发计划。

制品:补充需求分析、软件架构描述、可执行的架构原型

构建阶段:该阶段相对简单一些,其主要任务包括资源管理、控制和流程优化,开发剩余的构件,然后进行构件组装和测试等。其主要意图是增量式开发一个可以交付用户的软件产品。

制品:准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述。

提交(迁移)阶段:该阶段的主要任务包括进行β测试,制作发布版本,用户文档定稿,确认新系统,获取用户反馈,培训、调整产品使最终用户可以使用产品。其主要意图是将软件产品提交用户。

每个阶段又分为若干次迭代,每次迭代有一个核心工作流,都会经历需求、分析、设计、实现和测试等活动。

在这里插入图片描述

9个核心工作流,分为6个核心过程工作流和3个核心支持流。核心过程工作流:商业建模、需求、分析和设计、实现、测试、部署核心支持流:配置和变更管理、项目管理、环境 敏捷过程 一种以人为核心、迭代、循序渐进的开发方法,其软件开发过程称为“敏捷过程”

敏捷过程价值观:

个人和交互胜过过程和工具可以运行的软件胜过面面俱到的文档客户合作胜过合同谈判响应变化胜过遵循计划 极限过程 一种轻量级的、敏捷的软件开发方法4个价值观:交流、简单、反馈、勇气4个方面改善:加强交流、从简单做起、寻求反馈、用于实事求是12个核心实践:完整团队、计划对策、测试、简单设计、结对编程、小软件版本、设计改进、持续集成、代码共有、编码标准、系统比喻、可持续的速度 (6) 软件可行性研究

目的:

研究项目是否可能实现和值得进行回答Why to do

研究的内容:

经济可行性运行可行性技术可行性法律可行性

可行性研究的步骤:

对当前系统进行调查和研究弄清当前系统导出新系统逻辑模型导出新系统的解决方案设计不同的解决方案提出推荐的方案本项目的开发价值推荐这个方案的理由编写可行性认证报告系统概述可行性分析结论意见 (7) 软件风险分析

风险识别:

项目风险技术风险商业风险

风险预测:

风险发生的可能性风险发生后的后果风险的驾驭和监控 三、结构化分析与设计 1. 结构化分析与设计 SP(结构化程序设计)->SD(结构化设计)->SA(结构化分析)讨论传统软件工程的系统开发技术,重点放在基于瀑布模型的结构化分析与设计和模块设计上,但不涉及同为传统软件工程的快速原型开发等内容。 2. SA与SD的流程 结构化分析(工具:DFD数据流图、PSPEC加工策略) –>分析模型(分层DFD图)+SRS软件需求规格说明书)结构化设计(工具:SC图)映射–>初始设计模型(初始SC图)初始设计模型(初始SC图)优化–>最终设计模型(最终SC图) 3. 基本任务与指导思想

结构化分析:

建立分析模型编写需求说明

结构化设计:

软件设计=总体设计+详细设计SC图需要分两步完成:初始SC图、最终SC图

细化与分解:

逐步细化,细化的本质就是分解 4. SA模型的组成与描述

SA模型的描述工具:

DFD、PSPEC,这是早期SA模型的基本组成部分;CFD、CSPEC和STD是早期SA模型的扩展成分,适应实时软件的建模需要;ER图,适用于描述具有复杂数据结构的软件数据模型。 在这里插入图片描述 备注:DFD数据流图、PSPEC加工规格说明/加工策略、STD状态转换图、DD数据字典、CSPEC控制规格说明 数据流图(DFD) 数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换,描述对数据流进行变换的功能和子功能 在这里插入图片描述

组成符号:

圆框代表加工箭头代表数据的流向,数据名称总是标在箭头的边上方框表示数据的源点和终点双杠(或单杠)表示数据文件或数据库文件与加工之间用带箭头的直线连接,单向表示只读或只写,双向表示又读又写 数据字典(DD) 数据字典的任务:对于数据流图中出现的所有被命名的图形元素在字典中作为一个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。对软件中的每个数据规定一个定义条目

①数据流:

数据流名: 发票 别 名: 购书发票 组 成: 学号+姓名+{书号+单价+数量+总价} +书费合计 备 注:

②数据文件 ③数据项

数据流图与数据字典共同构成系统的逻辑模型

加工说明(PSPEC) 对数据流图中出现的每个加工/处理的功能描述主要工具:结构化语言,判定树或判定表 在这里插入图片描述 5. SD模型的组成与描述 包含数据设计、接口设计、过程设计、体系结构设计体系结构设计是用来确定软件结构的,其描述工具是结构图,简称SC图过程设计主要指模块内部的详细设计 在这里插入图片描述

SC图组成符号和模块调用关系的标识:

矩形框表示模块,带箭头的连线表示模块间的调用,并在调用线的两旁标出传入和传出模块的数据流 简单调用、选择调用、循环调用: 在这里插入图片描述 例:在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B,当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。 在这里插入图片描述程序的系统结构图 在这里插入图片描述 6. 结构化系统分析

结构化分析的基本步骤:

自顶向下对系统进行功能分解,画出分层DFD图由后向前定义系统的数据和加工,编制DD和PSPEC最终写出SRS

(1)画分层数据流图:(自顶向下,逐步细化)

好处:便于实现,便于使用

通常把整个系统当作一个大的加工标明系统的输入与输出,以及数据的源点与终点(统称为“外部项”)

顶层DFD: 在这里插入图片描述

第二层DFD: 在这里插入图片描述

第三层DFD: 在这里插入图片描述

采购子系统: 在这里插入图片描述

(2)确定数据定义与加工策略(从数据的终点开始)

数据定义DD加工策略PSPEC需求规格说明书SRS

(3)需求分析的复审

7. 结构化系统设计 SD概述

面向数据流设计和面向数据设计

面向数据流:数据流是考虑一切问题的出发点面向数据:以数据结构作为分析与设计的基础

结构化设计的描述工具:SC图

从分析模型导出设计模型 在这里插入图片描述

分析模型:数据对象描述、数据流图DFD、数据字典DD、实体联系图ER图、加工规格说明书PSPEC、状态转换图STD、控制规格说明CSPEC

设计模型:过程设计、接口设计、体系设计、数据设计 由分析模型导出设计模型: 过程设计可以由PSPEC,CSPEC、STD导出;

接口设计可以由DFD导出; 体系结构设计可以由DFD导出; 数据设计可以由E-R、DD导出。

数据流图的类型——变换型、事务型

变换(transform)型结构:

传入路径变换中心传出路径 在这里插入图片描述

事务(transaction)型结构:

一条接受路径一个事务中心若干条动作路径 在这里插入图片描述

同时存在变换型结构和事务型结构: 在这里插入图片描述

SD方法

在这里插入图片描述

结构化软件设计方法——变换映射,事务映射 变换映射是软件系统结构设计的主要方法。一般一个大型的软件系统是变换型结构和事务型结构的混合结构。所以,我们通常利用以变换映射为主,事务映射为辅的方式进行软件结构设计。

变换映射:

划分DFD图的边界;建立初始SC图的框架;分解SC图的各个分支 在这里插入图片描述 在这里插入图片描述在这里插入图片描述 在这里插入图片描述 在这里插入图片描述深度:5层;宽度(广度):7层;注意:必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计;在设计下层模块时,应考虑模块的耦合和内聚问题;使用“黑箱”技术,先把这个模块的所有下层模块定义成“黑箱”,不考虑其内部结构和实现;一个模块的直接下属模块一般在五个左右,如果直接下属模块超过10个,可设立中间层次。

事务映射:

在DFD图上确定事务中心、接受部分(包括接受路径)和发送部分(包括全部动作路径)画出SC图框架,把DFD图的3个部分分别映射为事务控制模块、接受模块和动作发送模块分解和细化接受分支和发送分支,完成初始的SC图 在这里插入图片描述 在这里插入图片描述 扇入扇出

在这里插入图片描述

煎饼型不可取,应增加中间层减少扇出,实现塔型结构设计良好的软件通常具有瓮型结构,两头小,中间打,在低层模块使用了较多高扇入的共享模块 优化结构设计的指导原则

对模块划分的指导原则

提高内聚,降低耦合简化模块接口少用全局性数据和控制型信息

保持高扇入/低扇出的原则

扇入高则上级模块多,能够增加模块的利用率扇出低则表示下级模块少,可以减少模块调用和控制的复杂度 8. 模块设计 模块设计是传统软件工程的重要组成部分,其性质属于详细设计。

目的:

为SC图中的每个模块确定算法和数据结构,用选定的表达工具给出清晰的描述

主要任务:

编写软件的“模块设计说明书”

原则与方法:

清晰第一的设计风格结构化的控制结构仅用这三种控制结构(顺序、选择、循环)来构成程序每个控制结构只应有一个入口和一个出口逐步细化的实现方法

详细设计中常用的表达工具

流程图、N-S图、伪代码、PDL语言 在这里插入图片描述 四、面向对象与UML 1. 面向对象概述 (1) 类和对象的关系

对象:代表客观世界中实际或抽象的事物

客观世界是由各种对象组成的数据以及在其上的操作的封装体

类:一组相似的对象的共性抽象

类是一组客观对象的抽象实现抽象数据类型的工具

类与对象的关系

抽象与具体的关系组成类的每个对象都是该类的实例实例是类的具体事物类是各个实例的综合抽象 (2) 面向对象的基本特征 抽象、封装、继承、多态 (3) 面向对象开发的优点 可复用性、可扩展性、可维护性 2. UML(统一建模语言)简介 通用的可视化的建模语言目前在软件工程里主要用于系统分析与系统设计软件生存周期:RUP(统一过程)软件建模方式:可视化的语言软件文档规范:文档由UML建模工具自动产生软件人员分工:岗位界面逐渐趋向模糊

静态图:

类图:类以及类之间的相互关系对象图:对象以及对象之间相互关系

实现图:

构件图:构件及其相互依赖关系部署图:构件在各节点上的部署

交互图:

时序图:强调时间顺序的交互图协作图:强调对象协作的交互图

行为图:

状态图:类所经历的各种状态活动图:对工作流建模

用例图:

用例图:需求捕获,测试依据 (1) UML的模型元素

表示模型中的某个概念

类、对象、构件、用例、结点、接口、包、注释

表示模型元素之间的关系

关联、泛化、依赖、实现、聚集、组合

在这里插入图片描述

(2) UML的元模型结构 元元模型层、元模型层、模型层、用户模型层 在这里插入图片描述 (3) UML的组成 ①图

静态图

用例图静态图:类图、对象图实现图:构件图、部署图

动态图

行为图:状态图、活动图交互图:时序图、协作图 ②视图 用例视图(用例图 [活动图] ) 从用户角度看到的系统应有的外部功能逻辑视图(静态:类图,对象图;动态:状态图,时序图,协作图,活动图) 描述系统的静态结构和对象间的动态协作关系进程视图(状态图、时序图、协作图、活动图、构件图、部署图) 展示系统的动态行为及其并发性构件视图(构件图) 展示系统实现的结构和行为特征部署视图(部署图) 显示系统的实现环境和构件被部署到物理结构中的映射 ③模型元素 ④通用机制 (4) UML的特点 统一标准面向对象表达功能强大、可视化独立于过程易掌握、易用 (5) UML五类九种图的符号体系

在这里插入图片描述在这里插入图片描述在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

3. UML主要内容 静态建模机制、动态建模机制 (1) 静态建模

静态建模包括

用例图、类图、对象图

用例模型

使用用例图表示从最终用户的角度描述系统功能

类和对象模型

类图和对象图表示 1) 用例图与用例模型

用例图的组成符号 在这里插入图片描述

用例之间的关系 ①扩展关系

根据指定的条件,一个用例中有可能加入另一个用例的动作; 如果一个用例明显地混合了两种或者两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样可能会使描述更加清晰。扩展用例为基用例添加新的行为,可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。 是扩展关系的构造型,箭头指向基本用例。 在这里插入图片描述 在这里插入图片描述在这里插入图片描述 在这里插入图片描述

②包含关系

一个用例的行为包含另一个用例的行为 当可以从两个或两个以上的用例中提取公共行为时,应该使用包含的关系来表示它们。其中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例或基础用例。 是包含关系的构造型,箭头指向抽象用例。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

包含关系和扩展关系的联系和区别:

联系:都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通过不同的方法来重用这个公共的用例,以减少模型维护的工作量。区别:扩展关系中基本用例的基本流执行时,扩展用例不一定执行,即扩展用例只有在基本用例满足某种条件的时候才会执行。 包含关系中基本用例的基本流执行时,包含用例一定会执行。

例: 现有一医院病房监护系统,病症监视器安置在每个病房,将病人的病症信号实时传送到中央监视系统进行分析处理。在中心值班室里,值班护士使用中央监视系统对病员的情况进行监控,根据医生的要求随时打印病人的病情报告,定期更新病历,当病症出现异常时,系统会立即自动报警, 并实时打印病人的病情报告,立及更新病历。 要求根据现场情景,对医院病房监护系统进行需求分析, 建立系统的用例模型。

简单的需求分析说明 系统名称:医院病房监护系统 根据分析系统主要实现以下功能:   1、病症监视器可以将采集到的病症信号(组合),格式化后实时的传送到中央监护系统。   2、中央监护系统将病人的病症信号开解后与标准的病症信号库里的病症信号的正常值进行比较,当病症出现异常时系统自动报警。   3、当病症信号异常时,系统自动更新病历并打印病情报告。   4、值班护士可以查看病情报告并进行打印。   5、医生可以查看病情报告,要求打印病情报告,也可以查看或要求打印病历。   6、系统定期自动更新病历。

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

2) 类图Class Diagram

在这里插入图片描述

类图表示类间关系:

关联关系(Association) 类之间存在的语义上的关系普通关联、递归关联、多重关联等 在这里插入图片描述

二元关联:

表示为在两个类之间用一条直线连接,直线上可写上关联名 在这里插入图片描述关联的两端可加上重数,表示该类有多少个对象可与对方的一个对象关联 在这里插入图片描述允许一个类与自身关联 在这里插入图片描述

多元关联:

三个或三个以上的类之间可以互相关联 在这里插入图片描述 在这里插入图片描述

受限关联:

用于一对多或多对多的关联,限定符用来区分关联”多”端的对象集合,它指明了在关联“多”端的某个特殊对象 在这里插入图片描述 聚集关系(Aggregation) 特殊的关联:表示类之间具有整体与部分的关系特征是“部分”对象可以是多个任意“整体”对象的一部分,“部分”可以参与到多个“整体”中,部分可以脱离整体。

在这里插入图片描述

组合关系(Composition) 特殊的聚集:整体强烈拥有部分在组合中,“整体”强烈拥有“部分”,“部分”与“整体”共存。如果“整体”不存在了,“部分”也会随之消失。“整体”的重数必须是0或1,“部分”的重数可以是任意的。 在这里插入图片描述 泛化关系(Generalization) 又称继承普通泛化,限制泛化

此处的一般元素可视作父类,特殊元素视作子类。

一般元素所具有的关联、属性和操作,特殊元素也都隐含性地拥有;特殊元素应包含额外信息;允许使用特殊元素实例的地方,也应能使用一般元素。 在这里插入图片描述 实现关系 实现关系将一个模型元素(如类)连接到另一个模型元素(如接口),后者是行为的规约,而不是结构,前者必须至少支持(通过集成或直接声明)后者的所有操作,可以认为前者是后者的实现。 在这里插入图片描述 依赖关系(Dependency) 对一个类/对象的修改会影响另一个类/对象

例如,某个类中使用另一个类的对象作为操作中的参数,一个类存取作为全局对象的另一个类的对象,或一个类的对象是另一个类的类操作中的局部变量等,都表示这两个类之间有依赖关系。 class Boss{ void do(Staff s){ s.do(); } } 在这里插入图片描述 约束与派生:

约束与派生机制能应用于任何模型元素用花括号括起放在模型元素旁边典型的属性约束是该属性的取值范围派生属性可由其它属性通过某种方式计算得到,通常在派生属性前面加一个“/”表示关联关系可以被约束,也可以被派生 在这里插入图片描述

包图

描述系统的分层结构 在这里插入图片描述 3) 对象图Object Diagram 对象图是类图的实例。

在这里插入图片描述

(2) 动态建模 消息 在这里插入图片描述状态图 状态图描述对象的所有可能状态及事件发生时状态的转移条件 在这里插入图片描述状态图之间发送消息 在这里插入图片描述时序图(元素:对象、对象生命线、消息) 时序图用来描述对象之间的动态交互,着重体现对象间消息传递的时间顺序。它以垂直轴表示时间,水平轴表示不同的对象。对象用一个带有垂直虚线的矩形框表示,并标有对象名和类名。垂直虚线是对象的生命线,用于表示在某段时间内对象是存在的。对象间的通信在对象的生命线间通过消息符号来表示,消息的箭头指明消息的类型。 在这里插入图片描述在这里插入图片描述协作图(元素有对象、链接和消息流) 协作图描述了对象间的动态协作关系,但它强调消息发生和接收的对象的结构组织(及连接关系)(协作对象之间的交互和链接) 在这里插入图片描述 在这里插入图片描述 (3) 物理架构建模 逻辑架构和物理架构构件图:显示软件构件直接的依赖关系。一般来说,软件构件就是一个实际文件,可以是源代码文件、二进制代码文件和可执行文件。构件图可以用来表现编译、链接或执行时构件之间的依赖关系。 在这里插入图片描述部署图:描述系统硬件的物理拓扑结构以及在此结构上执行的软件。部署图可以显示计算节点的拓扑结构和通信路径、结点上运行的软件构件、软件构件包含对的逻辑单元(对象、类)等。 在这里插入图片描述 五、需求工程与需求分析 1. 软件需求工程 软件需求的定义

一个软件系统必须遵循的条件或具备的能力

系统的外部行为——解决用户的问题系统的内部特性——满足了文档的要求

软件需求三个层次

业务需求——从业务的角度评估用户需求——从用户使用的角度描述软件必须完成的任务功能需求——开发人员必须实现的功能 软件需求的特性

软件质量准则“FURPS”

功能性可用性(易用性)可靠性(平均无故障时间、精确度等)性能(响应时间、吞吐量等)可支持性(与系统相关的特性要求)设计约束 软件需求工程 一门应用有效的技术和方法、合适的工具和符号,来确定、管理和描述目标系统及其外部行为特征的学科。 2. 需求分析与建模

需求分析的步骤(迭代):

需求获取、需求建模、需求描述(编写SRS)、需求验证需求获取的目的是让开发人员通过各种方式充分和用户交流,全面、准确地了解系统需求;建立需求模型是需求分析的核心,它通过各种图形及符合,可视化地从各个侧面描述系统需求;(结构化方法(包括数据流、数据字典、加工规格说明)和面向对象方法(面向对象方法包括用例模型、补充规约和术语表))需求描述即编写需求规格说明书,它以各方共同认可的文档形式表述,是软件设计和系统验收的可靠依据;需求验证用来检验以上各步的工作成果。

需求分析是一个迭代的过程

3. 需求获取的常用方法

常规的需求获取方法:

联合分析小组用户代表、领域专家和系统分析员客户访谈充分准备,寻找共同语言循序渐进、逐步逼近问题分析与确认多个来回

用快速原型法获取需求

利用各种分析技术和方法,生成一个简化的需求规格说明;对需求规格说明进行必要的检查和修改后,确定原型的软件结构、用户界面和数据结构等;在现有的工具和环境的帮助下快速生成可运行的软件原型并进行测试、改进;将原型提交给用户评估并征求用户的修改意见;重复上述过程,直到原型得到用户的认可。 4. 需求模型

需求模型概述

结构化需求模型面向对象需求模型

面向对象的需求建模

画用例图

写用例规约

描述补充规约

编写术语表

结构化需求模型 在这里插入图片描述

该模型主要由3部分组成,即:包括数据流图和加工规格说明的功能模型;主要由数据字典和E-R图等组成的数据模型;由状态转换图、控制流图和控制规格说明等组成的行为模型。

面向对象需求模型 在这里插入图片描述

面向对象需求模型由3个部分组成:用例模型、补充规约和术语表,其中用例模型又包括用例图和用例规约

用例建模

确定参与者

存在与系统外部、与系统交互的人、硬件、其他系统

确定用例

考察每个参与者与系统的交互和需要系统提供的服务

绘制和检查用例图

按UML标准画用例图检查用例图

细化每个用例的用例规约

内容包括:

简要说明:简要介绍该用例的作用和目的

事件流:包括基本流和备选流,表示出所有可能的活动及流程 基本流:指该用例最正常的一种场景 备选流:用于描述用例执行过程中的异常或偶尔发生的情况。 它和基本流合起来,能够覆盖该用例所有可能发生的场景。 包含元素: 1、起点:该备选流从事件流的那一步开始 2、条件:在什么条件下会触发该备选流 3、动作:系统在该备选流下会采取哪些动作 4、恢复:该备选流结束之后,该用例应如何继续执行

特殊需求: 描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统和开发工具等)

前置条件和后置条件 前置条件是执行用例之前必须存在的系统状态,后置条件是用例执行完毕后系统可能处于的一组状态。

用例模型的检查

功能需求的完备性模型是否易于理解是否存在不一致性避免二义性语义 5. 软件需求描述

软件需求规格说明书

引言信息描述功能描述行为描述质量保证接口描述其他 6. 需求管理

需求管理的流程

需求确认

需求评审需求承诺

需求跟踪

需求变更控制

需求变更利弊需求变更流程

在这里插入图片描述

六、 面向对象分析 1. 软件分析概述

软件需求和软件分析

软件需求:用户角度,注重软件外在表现软件分析:开发者角度,注重软件内部逻辑结构 2. 面向对象软件分析 (1) OOA的主要任务 理解用户需求进行分析,提取类和对象,并结合分析进行建模。其基本步骤是:标识类,定义属性和方法;刻画类的层次;表示对象以及对象与对象之间的关系;为对象的行为建模。这些步骤反复进行,直至完成建模。 (2) OOA的模型 处于OOA模型核心的是以用例模型为主体的需求模型,抽取和定义OOA模型的3种子模型:类/对象模型,描述系统所涉及的全部类和对象,每一类/对象都可通过属性、操作和协作者来进一步描述;对象-关系模型,描述对象之间的静态关系,同时定义了系统中对象间所有重要的信息路径,也可以具体到对象的属性、操作和协作者;对象-行为模型,描述了系统的动态行为,即在特定的状态下对象间如何协作来响应外界的事件。 在这里插入图片描述 (3) OOA的优点 ①同时加强了对问题域和软件系统的理解②改进包括用户在内的与软件分析有关的各类人员之间的交流③对需求的变化具有较强的适应性④很好地支持软件复用⑤确保从需求模型到设计模型的一致性 (4) 分析模型的特点 全面覆盖软件的功能需求分析模型与软件的实现无关分析模型的表述方法与所采用的分析技术有关 (5) OOA的共同特征

共同特征

类和类层次的表示建立对象-关系模型建立对象-行为模型 (6) OOA的建模步骤 需求理解定义类和对象标识对象的属性和操作标识类的结构和层次建立对象-关系模型建立对象-行为模型评审OOA模型 在这里插入图片描述

面向对象开发的全过程是OOA,OOD,OOP和OOT的迭代过程。

面向对象分析(OOA)是一种从问题空间中提取类和对象来进行分析的方法,用于建立一个与具体实现无关的面向对象分析模型;面向对象设计(OOD)则从问题空间转移到解空间,在分析模型的基础上考虑实现细节,形成面向对象的设计模型;面向对象编程(OOP)则用于将设计模型转换成实现模型,可获得源代码和相应的可执行代码;面向对象测试(OOT)则通过运行可执行代码来检测程序存在的问题。 3. 面向对象分析建模 (1) 识别与确定分析类

边界类

用户界面系统接口硬件接口负责和用户进行交互的界面即用户界面

控制类

封装用例所特有的控制行为负责实体类和边界类之间的交互

实体类

系统存储的信息及其相关行为主要负责数据和业务逻辑 在这里插入图片描述 为每对参与者/用例确定一个边界类 在这里插入图片描述 为每个用例设置一个控制类 在这里插入图片描述 确定相关的各个实体(包括属性与方法) 在这里插入图片描述 (2) 建立对象-行为模型

时序图(以选课用例中创建课表事件流的时序图) 在这里插入图片描述 协作图(以选课用例为例创建课表事件流的协作图) 在这里插入图片描述

(3) 建立对象-关系模型

分析类的属性:

分析类本身具有的信息

分析类的关联:

通过关联可以找到其他分析类,链与关联的对应关系

分析类图:表现分析类及其关系

描述用例的分析类图称为参与类图(VOPC)每个用例可对应一张完整的参与类图,参与类图可以显示类的实例之间的数量关系。 在这里插入图片描述100个用例->100个VOPC类图(每个类图有3个类)->全类图(


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3