第一部分 学习内容

一、需求工程概述

1. 定义
  1. 需求工程是需求的供需双方采取被证明行之有效的原理、方法,通过使用适当的工具和符号体系,全面地描述用户待开发系统的行为特征、约束条件的过程;
2. 开发人员
  1. 系统分析师起到桥梁工程师的作用,负责完成用户“业务世界”逻辑向由软硬件组成的“电脑世界”逻辑的获取和转换过程;
3. 需求工程
  1. 三个阶段:需求获取、需求生成、需求验证;
  2. 需求获取:归纳和整理用户提出的各种问题和需求;
  3. 需求生成:描述问题和需求;
  4. 需求验证:对需求的产品阶段质量进行检验的过程;
4. 其他要求
  1. 软件需求的层次性:业务需求,用户需求,功能需求;
  2. 业务需求:反映了用户对系统和产品高层次的目标要求,他们是用户组织机构流程的在线和模拟,是从用户组织机构工作流程的角度进行的需求描述;
  3. 用户需求:描述了用户使用产品必须要完成的任务,一般通过用例或方案脚本予以说明;
  4. 功能需求:定义了开发人员必须要实现的软件功能,从而使得用户能完成任务,满足其业务需求;

二、需求分析工具概述

1. 分类
  1. 从自动化程度分为以人工方式为主和以自动方式为主的需求分析工具;
  2. 从支持分析设计技术角度分支持传统的结构化方法的需求分析工具、面向对象分析的需求分析CASE工具、原型化分析的需求分析工具、基于其他方法的分析工具;
  3. 根据需求工具和客户的业务领域关系,可以分为很多类;
2. 需求分析工具的功能特性和衡量标准
  1. 特性:
    1️⃣针对结构化方法:多种分析和设计方法、支持DFD、一致性检查;
    2️⃣针对面向对象方法:支持典型的多种面向对象方法、支持类定义和类关系描述、支持对象复用、支持对象交互描述、一致性检查;
    3️⃣一些共性:支持业务方向工程、支持版本控制、脚本支持、支持生成需求分析规格说明书、支持扩展标记语言、支持多种文件格式的导出和导入;
3. 衡量一个需求分析CASE工具功能强弱的主要依据
  1. 所支持的需求分析方法的类型与数量的多少;
  2. 使用方便程度;
  3. 与设计工具衔接的程度;
  4. 所占资源,即系统开销的多少以及对硬件环境的需求程度;
  5. 是否提供需求错误检测机制;
  6. 用户领域知识提示功能。
4. 需求分析CASE工具的选择:遵循因地制宜的原则;

三、需求分析方法与需求分析工具

1. 软件需求分析的方法与工具
  1. 方法:自顶向下和自底向上;
  2. 自顶向下的分析方法(SA):从最上层的系统组织机构入手,采用逐层分解的方式分析系统,用数据流图(DFD)和数据字典(DD)描述系统,处理过程的处理逻辑常常借助判定表或判定树来描述,数据则是借助数据字典来描述;
    1️⃣数据流图:命名的箭头表示数据流、用圆圈表示处理、用矩形或其他形状表示存储;
    2️⃣数据字典:数据项是数据的最小单位、数据结构是数据项有意义的集合、数据流表示某一处理过程中数据再系统内传输的路径、数据存储处理过程中数据的存放场所、处理过程的处理逻辑通常用判定表或判定树来描述;
  3. 常用的需求分析图形工具:UML、DFD、DD、判定树、判定表、结构化高级分析语言、HC、IPO、Warnier图、SADT、SREM、PSL/PSA;
2. 典型方法
  1. 结构化方法:历史悠久,比较成熟;
  2. 面向对象编程技术:时间不是很长,比较成熟;
  3. 产品线方法:关注点转移;

四、软件设计概述

1. 软件设计的概念
  1. 应用各种技术和原理对一个设备、一个过程或者一个系统做出足够详细的规定,使之能够再物理上得以实现;
  2. 把软件需求转化为软件表示的过程;
  3. 运用一些基本的设计概念和各种有效的方法和技术,把软件需求分析转化为软件表示,使系统能在机器上实现。
  4. 重要性:
    1️⃣软件设计阶段占据软件项目开发总成本的绝大部分,是在软件开发过程中形成质量的关键环节;
    2️⃣软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径;
    3️⃣软件设计做出的决策,最终影响软件实现的成败;
    4️⃣设计是软件工程和软件维护的基础;
  5. 要求:
    1️⃣必须实现分析模型中所涉及的所有显示需求,必须与用户希望的所有隐藏需求相适应;
    2️⃣对编程、测试、维护人员必须是可读、可理解的;
    3️⃣应给出相关数据、功能及其行为相关的软件全貌;
  6. 从技术观点来看,软件设计包括软件结构设计、数据设计接口设计、过程设计
2. 软件设计的基本原理
  1. 分解与抽象:控制软件复杂性的基本手段是分解,把事实本质的共性提取出来而不考虑其他细节是抽象;
  2. 模块化:指解决一个复杂问题时自顶向下逐层把软件系统划分为若干个模块的过程;
  3. 模块:把一个待开发的软件分解成若干小的简单的部分;
  4. 模块分解的标准评价设计方法:
    1️⃣模块的可分解性;
    2️⃣模块的可组装性;
    3️⃣模块的可理解性;
    4️⃣模块连续性;
    5️⃣模块保护性;
  5. 信息隐蔽:在一个模块内包含的信息,对于不需要这些信息的其他模块来说是不能访问的;
  6. 模块的独立性:指每个模块只完成系统要求的独立的子系统,并且与其他模块的联系最少且接口简单;
  7. 模块的独立性度量标准:耦合性、内聚性;
  8. 内聚性:一个模块内部的各个元素间彼此结合的紧密程度的度量;
    1️⃣偶然内聚:指一个模块内的各处理元素之间没有任何联系;
    2️⃣逻辑内聚:指模块内执行几个逻辑上相关的功能,通过参数确定该模块完成哪一个功能;
    3️⃣时间内聚:把需要同时或顺序执行的动作组合成一起形成的模块;
    4️⃣过程内聚:必须以特定次序执行的;
    5️⃣通信内聚:模块内所有处理功能都通过使用公用数据而发生关系;
    6️⃣顺序内聚:处理按顺序执行;
    7️⃣功能内聚:所有元素共同完成一个功能;
  9. 耦合性:模块间互相连接的紧密程度的度量;
    1️⃣内容耦合:直接访问另一模块内容;
    2️⃣公共耦合:访问同一全局数据结构;
    3️⃣外部耦合:访问同一全局简单变量;
    4️⃣控制耦合:一个模块控制另一个模块;
    5️⃣标记耦合:两模块间通过数据结构交换信息;
    6️⃣数据耦合:两模块间通过数据参数交换信息;
    7️⃣非直接耦合:模块间没有关系,通过主模块调用;
3. 软件设计过程和模型
  1. 过程:需求规格说明包括信息、功能、行为、其他描述作为设计的输入,设计输出结果是数据、体系结构、接口、过程设计;
  2. 模型:由接口设计、过程设计、数据设计、体系结构设计构成;

五、结构化设计方法与工具

1. 概述
  1. 采用最佳的可能的方法设计系统的各个组成部分以及各成分之间的内部联系的技术;
  2. 基本思想:将软件设计成由相对独立、单一化的功能的模块组成的结构;
  3. 步骤
    1️⃣评审和细化数据流图;
    2️⃣确定数据流图的类型;
    3️⃣把数据流图映射到软件模块结构,设计出模块结构的上层;
    4️⃣基于数据流图逐步分解高层模块,设计中下层模块;
    5️⃣对模块结构进行优化,得到更为合理的软件结构;
    6️⃣描述模块接口。
  4. 设计原则
    1️⃣使每个模块执行一个功能;
    2️⃣每个模块用过程语句调用其他模块;
    3️⃣模块间传送参数作数据用;
    4️⃣模块间共用的信息尽量少。
2. 结构化设计方法的基本概念
  1. 是基于模块化、自顶向下细化、结构化程序设计等程序设计基础发展起来的;
  2. 基本思想:将软件设计由相对独立且具有单一功能的模块组成的结构,分为概要设计和详细设计两个阶段;
  3. 概要设计阶段描述工具是结构图;
  4. 概要设计:把系统的功能需求分配给软件结构,形成软件的模块结构图;
3. 概要设计工具——结构图
  1. 作用:反映系统的功能实现以及模块与模块之间的联系与通信,即反映了系统的总体结构;
  2. 基本组成成分:模块、数据、调用;
  3. 基本术语:
    1️⃣深度:模块结构的层次数
    2️⃣宽度:同一层模块的最大模块数;
    3️⃣扇入:一个模块直接调用的其他模块数目;
    4️⃣扇出:调用一个给定模块的模块个数;
  4. 好的软件结构:顶层扇出比较多,中层扇出较少,底层扇出较多;
4. 概要设计任务的实现——数据流图到结构图的变换
  1. 典型的信息流类型分为变化型和事物型;
5. 详细设计及工具
  1. 目的:为软件结构图中的每一个模块确定采用的算法,模块内数据结构用某种选定的表达工具给出清晰的描述;
  2. 工具种类:图形工具、表格工具、语言工具;
  3. 工具:流程图(PFD),盒图(N-S图)、问题分析图(PAD)、过程设计语言(PDL)

六、典型需求分析与设计工具

1. BPwin简介
  1. 提供功能建模、数据流建模、工作流建模;
  2. 将与建立过程模型有关的任务自动化;
  3. 为复杂项目的项目分析小组成员提供统一的分析环境;
  4. 可与模型管理工具ModelMart集成使用;
  5. 可与建模工具ERin集成使用;
  6. 符合美国政府FIPS和IEEE标准;
  7. 易于使用,支持Unicode;
2. Power Designer 简介
  1. 使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。
  2. 四种模型文件:
    1️⃣概念数据模型CDM:表现数据库的全部逻辑结构,与任何软件或数据储藏结构无关;
    2️⃣物理数据模型PDM:叙述数据库的物理实现;
    3️⃣面向对象模型OOM:一个OOM包括一系列包、类、接口和他们的关系;
    4️⃣业务程序模型BPM:描述业务的各种不同内在任务和内在流程,而且客户如何以这些任务和流程互相影响;

第二部分 练习

一、名称解释

1. 需求工程

答:需求的供需双方采取被证明行之有效的原理、方法,通过适当的工具和符合体系,正确、全面地描述用户待开发系统的行为特征、约束条件的过程;

2. SA方法

答:即自顶向下的分析方法,从最上层的系统组织机构入手,采用逐层分解的方式分析系统,用数据流图和数据字典描述系统;

3. 软件设计

答:即运用一些基本的设计概念和各种有效的方法和技术,把软件需求分析转化为软件表示,使系统能在机器上实现。传统软件设计可以分成系统的总体设计和过程设计;

4. 模块化

答:解决一个复杂问题使自顶向下逐层把软件系统划分成若干模块的过程;

5. 信息隐蔽

答:指在一个模块看内包含的信息,对于不需要这些信息的其他模块来说是不能访问的;

6. 模块独立性

答:指每个模块只完成系统要求的独立的子系统,并且与其他模块的联系最少且及接口简单;

二、简答

1. 需求工程包括哪些阶段?

答:需求获取、需求生成、需求验证;

2. 如何理解软件需求?

答:具有不同的层次性,即业务需求、用户需求、功能需求;

  1. 业务需求:反映了用户对系统和产品的高层次的目标要求,他们是用户组织机构流程的再现和模拟,是从用户组织机构工作流程角度进行的需求描述;
  2. 用户需求:描述了用户使用产品必须要完成的任务,一般通过用例或方案脚本予以说明,它是从系统使用角度对待开发系统进行的需求描述;
  3. 功能需求:定义了开发人员必须实现的软件功能,从而使得用户能完成任务,满足其业务需求;
3. 如何定位软件设计的重要性?

答:

  1. 软件开发阶段占据软件项目开发总成本绝大部分,是在软件开发中形成质量的关键环节;
  2. 软件设计是开发阶段最重要的步骤,是将需求准确的转化为完整的软件产品或系统的唯一途径;
  3. 软件设计作出决策,最终影响软件实现的成败;
  4. 设计是软件工程和软件维护的基础;
4. 评价模块分解设计方法有哪些标准?

答:模块可分解性、模块可组装性、模块的可理解性、模块连续性、模块保护性;

5. 结构化设计的基本思想是什么?

答:将软件设计成由相对独立、单一化功能的模块组成的结构,软件结构设计的一个目标就是得出一个系统化的程序结构;

三、分析题

1. 如何衡量一个需求分析CASE工具功能的强弱?

答:

  1. 所支持的需求分析方法的类型与数量多少;
  2. 使用的方便程度;
  3. 与设计工具衔接的程度;
  4. 所占资源,即系统开销的多少硬件环境的需求程度;
  5. 是否提供需求错误检测机制;
  6. 用户领域知识提示功能;
2. 请简单分析软件设计过程?

答:软件设计的任务是把分析阶段产生的软件需求规格说明书转换为适当手段表示的软件设计文档;设计过程由接口设计、过程设计、数据库设计和体系结构设计这四个字过程构成:

  1. 接口设计描述了软件内部、软件与协作系统、软件与使用者之间的通信方式;
  2. 过程设计将软件体系结构的结构性元素变换成为对软件构建的过程性描述;
  3. 数据设计师将系统分析创建的信息与模型变换成软件所需的数据结构;
  4. 体系结构设计定义了软件的主要结构元素,也就是建立基于计算机的系统的架构,包括系统主要组件以及通信的识别
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐