软件工程 |
您所在的位置:网站首页 › srs软件工程 › 软件工程 |
软件工程
一、绪论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.软件危机介绍: 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题;概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做软件危机表现: 对软件开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意的现象经常发生;软件产品的质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。原因: 内在原因:复杂性 软件开发无计划性,项目没有被很好地理解;计划不周,最终导致进度拖延,经费预算上升。软件需求不充分,开发的软件不能满足用户的需求。软件开发过程无规范,没有充分的文档资料。软件可靠性缺少度量的标准,质量无法保证。软件难以维护,易升级。解决方法: 组织管理——工程项目管理方法技术措施——软件开发技术与方法、软件工具按工程化的原理和方法组织软件开发是软件开发中的问题的一个主要出路。定义: 软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件和有关技术及管理方法。把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件。(IEEE定义)软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。三要素: 方法、过程、工具中心思想: 把软件当作一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。基本原理: 确保软件产品质量和开发效率的原理的最小集合。 5.软件开发方法 个性化方法->结构化方法->面向对象方法->软件复用 6.三种编程范式 过程式编程范型:程序=数据结构+算法面向对象编程范型:程序=对象+消息基于构件技术的编程范型:程序=构件+架构 7.三代软件工程传统软件工程 结构化分析->结构化设计->面向过程的编码->软件测试面向对象软件工程 面向对象基本概念:对象+类+继承+消息通信OO分析与对象抽取->对象详细设计->面向对象的编码和测试基于构件的软件工程 领域分析和测试计划定制->领域设计->建立可复用构件库->查找并集成构件 二、软件生存周期与软件过程 1.软件生存周期 一个软件项目从开始立项起,到废弃不用止,统称为软件的生存周期。软件生存周期被划分为计划、开发、运行三个时期。由于软件生存周期被划分为较小的阶段,使得因为软件规模增长而大大增加的软件复杂性变得较易控制和管理。 2.典型的软件生存周期计划->需求分析->软件分析->软件设计->编码(测试) ->软件测试->运行维护
软件设计:(回答怎么做的问题)概要设计、详细设计 提交:设计说明书(软件结构图)程序编写:(具体实现) 提交:源程序清单软件测试:(挑错)单元测试、组装测试 有效性测试 提交:测试报告文档(测试计划、测试用例、测试结果)运行维护:改正性维护、适应性维护、完善性维护 3.软件过程围绕软件开发所进行的一系列活动 软件生存周期中的阶段和软件过程中的活动是基本一致的。 (1) 传统的软件过程:瀑布模型、快速原型模型 瀑布模型 基于软件生存周期的线性开发模型强调软件文档: 每一个阶段必须完成规定的文档每一个阶段都要复审完成的文档特点: 阶段间的顺序性和依赖性、推迟实现的观点、质量保证的观点顺序性: 前一阶段的工作完成后才能执行下一阶段的任务依赖性: 前一阶段的输出文档是下一阶段的输入文档存在问题: 不适合需求模糊的系统,开发初始阶段很难彻底弄清软件需求需求定义与分析->总体设计->详细设计->编码->测试->使用维护 特点: “逼真”的原型可以使用户迅速作出反馈循环回溯和迭代:非线性模型使用快速开发工具种类: 渐进型:对原型补充和修改获得最终系统抛弃型:原型废弃不用应防止的倾向: 舍不得抛弃,从而影响软件质量![]() 定义: 把软件看作一系列相互联系的增量,每次迭代完成一个增量。增量: 小而可用的软件第一个增量通常是软件的核心特点: 在前面增量的基础上开发后面的增量每个增量的开发可用瀑布或快速原型模型每个增量开发的顺序性和总体的迭代性相结合有利于控制技术风险![]() 特点: 瀑布模型(顺序性、边开发边复审)+快速原型(迭代性)风险分析->发现、控制风险一个螺旋式周期: 计划:确定目标,选择方案,选定完成目标的策略风险分析:从风险角度分析该策略开发:启动一个开发活动评审:评价前一步的结果,计划下一轮的工作![]() 迭代和瀑布的区别: 迭代和瀑布的最大的差别就在于风险的暴露时间上。瀑布模型的特点(文档是主体),很多问题再最后才会暴露出来。迭代模型的特点,根据风险列表选择要在迭代中开发新的增量内容,每次迭代完成时都会生成一个经过测试的可执行文件,可核实是否降低了目标风险。 构件集成模型构件: 在某个领域中具有通用性,可以复用的软件部件将可以复用的构件存储起来,形成构件库特点: 面向对象基于构件库融合螺旋模型特征支持软件开发的迭代方法软件复用![]() 开发过程: 确定形式化需求规格说明书进行自动的程序变换针对形式化开发记录进行测试特点: 形式化软件开发方法形式化需求规格说明变换技术程序自动生成技术确保正确![]() 净室思想: 在分析和设计阶段消除错误在“洁净”状态下实现软件制作形式化: 盒结构表示分析和设计正确性验证增量模型: ·把软件看成一系列的增量瀑布模型: 线性模型,每一阶段必须完成规定的文档,适合需求明确的中小型软件开发快速原型: 用户介入早,通过迭代完善用户需求,原型废弃不用,适合需求模糊的小型软件开发增量模型: 每次迭代完成一个增量,可用于OO开发。适合容易分块的大型软件开发螺旋模型: 典型迭代模型,重视风险分析,可用于OO开发。适合具有不确定性大型软件开发构件集成模型: 软件开发与构件开发平行进行,适用于领域工程、行业的中型软件开发转换模型: 形式化的规格说明,自动的程序变换系统。属于理想化模型,尚无成熟工具支持净室模型: 形式化的增量模型,在洁净状态下实现软件制作。适合开发团队熟悉形式化方法,中小型软件开发。 (5) 统一过程和敏捷过程 统一过程(RUP) 描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么要做,描述了一组以某种顺序完成的活动。基本特征是“用例驱动、以架构为中心的和受控的迭代式增量开发”RUP将软件开发分为四个阶段: 初始阶段:该阶段的主要任务包括确定项目范围和边界,识别系统的关键用例,展示系统的候选架构,估计项目费用和时间,评估项目风险。其意图是建立项目的范围和版本,确定业务实现的可能性和项目目标的稳定性。提交结果包括原始的项目需求和业务用例。制品:构想文档、有关用例模型的调查、初始的业务用例、早期风险评估、显示阶段和迭代的项目计划等制品; 细化阶段:该阶段的主要任务包括分析系统问题领域,建立软件架构基础,淘汰最高风险元素。其意图是对问题域进行分析,建立系统的需求和架构,确定技术实现的可行性和系统架构的稳定性。提交结果包括系统架构及其相关文档、领域模型、修改后的业务用例和整个项目的开发计划。制品:补充需求分析、软件架构描述、可执行的架构原型 构建阶段:该阶段相对简单一些,其主要任务包括资源管理、控制和流程优化,开发剩余的构件,然后进行构件组装和测试等。其主要意图是增量式开发一个可以交付用户的软件产品。制品:准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述。 提交(迁移)阶段:该阶段的主要任务包括进行β测试,制作发布版本,用户文档定稿,确认新系统,获取用户反馈,培训、调整产品使最终用户可以使用产品。其主要意图是将软件产品提交用户。每个阶段又分为若干次迭代,每次迭代有一个核心工作流,都会经历需求、分析、设计、实现和测试等活动。 敏捷过程价值观: 个人和交互胜过过程和工具可以运行的软件胜过面面俱到的文档客户合作胜过合同谈判响应变化胜过遵循计划 极限过程 一种轻量级的、敏捷的软件开发方法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图,适用于描述具有复杂数据结构的软件数据模型。![]() ![]() 组成符号: 圆框代表加工箭头代表数据的流向,数据名称总是标在箭头的边上方框表示数据的源点和终点双杠(或单杠)表示数据文件或数据库文件与加工之间用带箭头的直线连接,单向表示只读或只写,双向表示又读又写 数据字典(DD) 数据字典的任务:对于数据流图中出现的所有被命名的图形元素在字典中作为一个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。对软件中的每个数据规定一个定义条目①数据流: 数据流名: 发票 别 名: 购书发票 组 成: 学号+姓名+{书号+单价+数量+总价} +书费合计 备 注: ②数据文件 ③数据项 数据流图与数据字典共同构成系统的逻辑模型 加工说明(PSPEC) 对数据流图中出现的每个加工/处理的功能描述主要工具:结构化语言,判定树或判定表![]() ![]() SC图组成符号和模块调用关系的标识: 矩形框表示模块,带箭头的连线表示模块间的调用,并在调用线的两旁标出传入和传出模块的数据流 简单调用、选择调用、循环调用:![]() ![]() ![]() 结构化分析的基本步骤: 自顶向下对系统进行功能分解,画出分层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)型结构: 一条接受路径一个事务中心若干条动作路径![]() 同时存在变换型结构和事务型结构: 变换映射: 划分DFD图的边界;建立初始SC图的框架;分解SC图的各个分支![]() ![]() ![]() ![]() ![]() 事务映射: 在DFD图上确定事务中心、接受部分(包括接受路径)和发送部分(包括全部动作路径)画出SC图框架,把DFD图的3个部分分别映射为事务控制模块、接受模块和动作发送模块分解和细化接受分支和发送分支,完成初始的SC图![]() ![]() 对模块划分的指导原则 提高内聚,降低耦合简化模块接口少用全局性数据和控制型信息保持高扇入/低扇出的原则 扇入高则上级模块多,能够增加模块的利用率扇出低则表示下级模块少,可以减少模块调用和控制的复杂度 8. 模块设计 模块设计是传统软件工程的重要组成部分,其性质属于详细设计。目的: 为SC图中的每个模块确定算法和数据结构,用选定的表达工具给出清晰的描述主要任务: 编写软件的“模块设计说明书”原则与方法: 清晰第一的设计风格结构化的控制结构仅用这三种控制结构(顺序、选择、循环)来构成程序每个控制结构只应有一个入口和一个出口逐步细化的实现方法详细设计中常用的表达工具 流程图、N-S图、伪代码、PDL语言![]() 对象:代表客观世界中实际或抽象的事物 客观世界是由各种对象组成的数据以及在其上的操作的封装体类:一组相似的对象的共性抽象 类是一组客观对象的抽象实现抽象数据类型的工具类与对象的关系 抽象与具体的关系组成类的每个对象都是该类的实例实例是类的具体事物类是各个实例的综合抽象 (2) 面向对象的基本特征 抽象、封装、继承、多态 (3) 面向对象开发的优点 可复用性、可扩展性、可维护性 2. UML(统一建模语言)简介 通用的可视化的建模语言目前在软件工程里主要用于系统分析与系统设计软件生存周期:RUP(统一过程)软件建模方式:可视化的语言软件文档规范:文档由UML建模工具自动产生软件人员分工:岗位界面逐渐趋向模糊静态图: 类图:类以及类之间的相互关系对象图:对象以及对象之间相互关系实现图: 构件图:构件及其相互依赖关系部署图:构件在各节点上的部署交互图: 时序图:强调时间顺序的交互图协作图:强调对象协作的交互图行为图: 状态图:类所经历的各种状态活动图:对工作流建模用例图: 用例图:需求捕获,测试依据 (1) UML的模型元素表示模型中的某个概念 类、对象、构件、用例、结点、接口、包、注释表示模型元素之间的关系 关联、泛化、依赖、实现、聚集、组合![]() 静态图 用例图静态图:类图、对象图实现图:构件图、部署图动态图 行为图:状态图、活动图交互图:时序图、协作图 ②视图 用例视图(用例图 [活动图] ) 从用户角度看到的系统应有的外部功能逻辑视图(静态:类图,对象图;动态:状态图,时序图,协作图,活动图) 描述系统的静态结构和对象间的动态协作关系进程视图(状态图、时序图、协作图、活动图、构件图、部署图) 展示系统的动态行为及其并发性构件视图(构件图) 展示系统实现的结构和行为特征部署视图(部署图) 显示系统的实现环境和构件被部署到物理结构中的映射 ③模型元素 ④通用机制 (4) UML的特点 统一标准面向对象表达功能强大、可视化独立于过程易掌握、易用 (5) UML五类九种图的符号体系
静态建模包括 用例图、类图、对象图用例模型 使用用例图表示从最终用户的角度描述系统功能类和对象模型 类图和对象图表示 1) 用例图与用例模型用例图的组成符号 用例之间的关系 ①扩展关系 根据指定的条件,一个用例中有可能加入另一个用例的动作; 如果一个用例明显地混合了两种或者两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样可能会使描述更加清晰。扩展用例为基用例添加新的行为,可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。 是扩展关系的构造型,箭头指向基本用例。![]() ![]() ![]() ![]() ②包含关系 一个用例的行为包含另一个用例的行为 当可以从两个或两个以上的用例中提取公共行为时,应该使用包含的关系来表示它们。其中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例或基础用例。 是包含关系的构造型,箭头指向抽象用例。![]() ![]() ![]() 包含关系和扩展关系的联系和区别: 联系:都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通过不同的方法来重用这个公共的用例,以减少模型维护的工作量。区别:扩展关系中基本用例的基本流执行时,扩展用例不一定执行,即扩展用例只有在基本用例满足某种条件的时候才会执行。 包含关系中基本用例的基本流执行时,包含用例一定会执行。例: 现有一医院病房监护系统,病症监视器安置在每个病房,将病人的病症信号实时传送到中央监视系统进行分析处理。在中心值班室里,值班护士使用中央监视系统对病员的情况进行监控,根据医生的要求随时打印病人的病情报告,定期更新病历,当病症出现异常时,系统会立即自动报警, 并实时打印病人的病情报告,立及更新病历。 要求根据现场情景,对医院病房监护系统进行需求分析, 建立系统的用例模型。 简单的需求分析说明 系统名称:医院病房监护系统 根据分析系统主要实现以下功能: 1、病症监视器可以将采集到的病症信号(组合),格式化后实时的传送到中央监护系统。 2、中央监护系统将病人的病症信号开解后与标准的病症信号库里的病症信号的正常值进行比较,当病症出现异常时系统自动报警。 3、当病症信号异常时,系统自动更新病历并打印病情报告。 4、值班护士可以查看病情报告并进行打印。 5、医生可以查看病情报告,要求打印病情报告,也可以查看或要求打印病历。 6、系统定期自动更新病历。
类图表示类间关系: 关联关系(Association) 类之间存在的语义上的关系普通关联、递归关联、多重关联等![]() 二元关联: 表示为在两个类之间用一条直线连接,直线上可写上关联名![]() ![]() ![]() 多元关联: 三个或三个以上的类之间可以互相关联![]() ![]() 受限关联: 用于一对多或多对多的关联,限定符用来区分关联”多”端的对象集合,它指明了在关联“多”端的某个特殊对象![]() ![]() 此处的一般元素可视作父类,特殊元素视作子类。 一般元素所具有的关联、属性和操作,特殊元素也都隐含性地拥有;特殊元素应包含额外信息;允许使用特殊元素实例的地方,也应能使用一般元素。![]() ![]() 例如,某个类中使用另一个类的对象作为操作中的参数,一个类存取作为全局对象的另一个类的对象,或一个类的对象是另一个类的类操作中的局部变量等,都表示这两个类之间有依赖关系。 class Boss{ void do(Staff s){ s.do(); } } ![]() 包图 描述系统的分层结构![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 一个软件系统必须遵循的条件或具备的能力 系统的外部行为——解决用户的问题系统的内部特性——满足了文档的要求软件需求三个层次 业务需求——从业务的角度评估用户需求——从用户使用的角度描述软件必须完成的任务功能需求——开发人员必须实现的功能 软件需求的特性软件质量准则“FURPS” 功能性可用性(易用性)可靠性(平均无故障时间、精确度等)性能(响应时间、吞吐量等)可支持性(与系统相关的特性要求)设计约束 软件需求工程 一门应用有效的技术和方法、合适的工具和符号,来确定、管理和描述目标系统及其外部行为特征的学科。 2. 需求分析与建模需求分析的步骤(迭代): 需求获取、需求建模、需求描述(编写SRS)、需求验证需求获取的目的是让开发人员通过各种方式充分和用户交流,全面、准确地了解系统需求;建立需求模型是需求分析的核心,它通过各种图形及符合,可视化地从各个侧面描述系统需求;(结构化方法(包括数据流、数据字典、加工规格说明)和面向对象方法(面向对象方法包括用例模型、补充规约和术语表))需求描述即编写需求规格说明书,它以各方共同认可的文档形式表述,是软件设计和系统验收的可靠依据;需求验证用来检验以上各步的工作成果。需求分析是一个迭代的过程 3. 需求获取的常用方法常规的需求获取方法: 联合分析小组用户代表、领域专家和系统分析员客户访谈充分准备,寻找共同语言循序渐进、逐步逼近问题分析与确认多个来回用快速原型法获取需求 利用各种分析技术和方法,生成一个简化的需求规格说明;对需求规格说明进行必要的检查和修改后,确定原型的软件结构、用户界面和数据结构等;在现有的工具和环境的帮助下快速生成可运行的软件原型并进行测试、改进;将原型提交给用户评估并征求用户的修改意见;重复上述过程,直到原型得到用户的认可。 4. 需求模型需求模型概述 结构化需求模型面向对象需求模型面向对象的需求建模 画用例图 写用例规约 描述补充规约 编写术语表 结构化需求模型 面向对象需求模型 用例建模 确定参与者 存在与系统外部、与系统交互的人、硬件、其他系统确定用例 考察每个参与者与系统的交互和需要系统提供的服务绘制和检查用例图 按UML标准画用例图检查用例图细化每个用例的用例规约 内容包括: 简要说明:简要介绍该用例的作用和目的 事件流:包括基本流和备选流,表示出所有可能的活动及流程 基本流:指该用例最正常的一种场景 备选流:用于描述用例执行过程中的异常或偶尔发生的情况。 它和基本流合起来,能够覆盖该用例所有可能发生的场景。 包含元素: 1、起点:该备选流从事件流的那一步开始 2、条件:在什么条件下会触发该备选流 3、动作:系统在该备选流下会采取哪些动作 4、恢复:该备选流结束之后,该用例应如何继续执行 特殊需求: 描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统和开发工具等) 前置条件和后置条件 前置条件是执行用例之前必须存在的系统状态,后置条件是用例执行完毕后系统可能处于的一组状态。 用例模型的检查 功能需求的完备性模型是否易于理解是否存在不一致性避免二义性语义 5. 软件需求描述软件需求规格说明书 引言信息描述功能描述行为描述质量保证接口描述其他 6. 需求管理需求管理的流程 需求确认 需求评审需求承诺需求跟踪 需求变更控制 需求变更利弊需求变更流程软件需求和软件分析 软件需求:用户角度,注重软件外在表现软件分析:开发者角度,注重软件内部逻辑结构 2. 面向对象软件分析 (1) OOA的主要任务 理解用户需求进行分析,提取类和对象,并结合分析进行建模。其基本步骤是:标识类,定义属性和方法;刻画类的层次;表示对象以及对象与对象之间的关系;为对象的行为建模。这些步骤反复进行,直至完成建模。 (2) OOA的模型 处于OOA模型核心的是以用例模型为主体的需求模型,抽取和定义OOA模型的3种子模型:类/对象模型,描述系统所涉及的全部类和对象,每一类/对象都可通过属性、操作和协作者来进一步描述;对象-关系模型,描述对象之间的静态关系,同时定义了系统中对象间所有重要的信息路径,也可以具体到对象的属性、操作和协作者;对象-行为模型,描述了系统的动态行为,即在特定的状态下对象间如何协作来响应外界的事件。![]() 共同特征 类和类层次的表示建立对象-关系模型建立对象-行为模型 (6) OOA的建模步骤 需求理解定义类和对象标识对象的属性和操作标识类的结构和层次建立对象-关系模型建立对象-行为模型评审OOA模型![]() 面向对象开发的全过程是OOA,OOD,OOP和OOT的迭代过程。 面向对象分析(OOA)是一种从问题空间中提取类和对象来进行分析的方法,用于建立一个与具体实现无关的面向对象分析模型;面向对象设计(OOD)则从问题空间转移到解空间,在分析模型的基础上考虑实现细节,形成面向对象的设计模型;面向对象编程(OOP)则用于将设计模型转换成实现模型,可获得源代码和相应的可执行代码;面向对象测试(OOT)则通过运行可执行代码来检测程序存在的问题。 3. 面向对象分析建模 (1) 识别与确定分析类边界类 用户界面系统接口硬件接口负责和用户进行交互的界面即用户界面控制类 封装用例所特有的控制行为负责实体类和边界类之间的交互实体类 系统存储的信息及其相关行为主要负责数据和业务逻辑![]() ![]() ![]() ![]() 时序图(以选课用例中创建课表事件流的时序图) 分析类的属性: 分析类本身具有的信息分析类的关联: 通过关联可以找到其他分析类,链与关联的对应关系分析类图:表现分析类及其关系 描述用例的分析类图称为参与类图(VOPC)每个用例可对应一张完整的参与类图,参与类图可以显示类的实例之间的数量关系。![]() |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |