笔记 | 软件工程:需求分析

1 需求分析

#需求分析

1.1 需求分析概述

  1. 初步软件需求存在的问题:不具体,不清晰,关系不明朗,存在潜在缺陷,没有区分不同软件需求(有必要鉴别不同软件需求项的重要性差别,区分不同软件需求的开发优先级)
  2. 分析软件需求的任务:基于初步软件需求,进一步精化和分析软件需求,确定软件需求优先级,建立软件需求模型,发现和解决软件需求缺陷,形成高质量的软件需求模型和软件需求规格说明书
  3. 软件需求的不同视角表示:
    1. 用例视角:具有哪些功能、功能间有何关系、功能与利益相关方有何关系,UML提供了[[【笔记】软件工程:需求分析#1.2.3 用例图描述 | 用例图]]来分析和描述用例视角的软件需求模型
    2. 行为视角:用例是如何通过业务领域中一组对象以及它们间的交互来达成的,UML提供了交互图、状态图来描述行为视角的软件需求模型
    3. 结构视角:业务领域有哪些重要的领域概念以及它们之间具有什么样的关系,UML提供了类图来描述和分析业务领域的概念模型

1.2 描述需求的方式

1.2.1 自然语言描述
  1. 描述软件的功能性需求(软件系统需要对老人在家的状况进行分析,以判断是否出现突发异常情况。一旦出现异常情况,就需要通知老人家属和医生)、质量需求(老人通过语音方式与系统进行交互,系统正确理解老人语音指令的比率应达到90%以上)和开发约束需求(客户端App软件须运行在Android 4.4及以上版本的操作系统)等
  2. 不足:不具体,不直观,不准确,有二义
1.2.2 软件原型描述
  1. 直观、可展示和可操作,但无描述软件需求的具体细节
1.2.3 用例图描述
  1. 描述软件系统的边界以及软件外部使用者所观察到的系统功能,"观察到"是指外部使用者与系统存在交互,即信息输入和输出
  2. 用例图的构成
  • 执行者:系统之外的实体,他们使用软件系统功能、与软件系统交换信息,可以是一类用户,也可以是其他软件系统或物理设备。执行者是UML中的类, 代表一类用户或者外部实体,而非具体的对象实例。执行者通常对应于软件系统的利益相关方
  • 用例:核心是功能。表示执行者为达成一项相对独立、完整的业务目标而要求软件系统完成的功能
  • 执行者与用例间的关系:
1.2.3.1 用例建模过程
  1. 第⼀步:找到所有的参与者和用例

    • 识别出参与者并做简单的描述

    注意事项:

    • 识别出用例并做简单的介绍,寻找用例的方法:

    用例的命名:

    注意事项:

  2. 第⼆步:编写用例

    • 列出用例

    用例的全部生命周期:

    用例概述的例子(概述时既包括了主成功场景,也有候选场景 ):

    详细用例归约例子:

    用例文档模板:

    • 给用例事件流程划分重要等级

    • 按照重要程度排序详细描述事件流程

1.2.3.2 用例建模时注意事项
  1. 不要把用例定义成功能分解

    一个实际案例的对比理解:

1.2.3.3 用例间的关系
  1. 包括包含(Include),扩展(Extend),继承(Inherit)三种关系

  2. 包含关系

  3. 扩展关系:按基用例中指定的扩展条件,把扩展用例的行为插入到由基用例中的扩展点定义的位置,基用例是可单独存在的,在扩展用例中定义的行为如果离开基用例是没意义的,一个用例可以被多个用扩展,而一个扩展用例也可以扩展多个用例

    示例:

  4. 继承关系:如果A与B相似,但A的动作序列是通过改写B的部分动作或者扩展B的动作而获得的,则称用例A继承用例B

1.2.3.4 扩展与包含关系的区别
  1. 包含:因为子用况被提出,基用况并非一个完整的用况,所以include关系中的基用况必须和子用况一起使用才够完整,子用况也必然被执行。由基用况指向子用况
  1. 扩展:新用况在原用况(基用况)基础上增加了新步骤。基用况是完整的 ,即使没有子用况参与。只有当扩展点被激活时,子用况才会执行。由子用况指向基用况
1.2.3.5 扩展与继承有何本质区别
1.2.4 边界框

表示整个软件系统或子系统的边界,边界框内的用例构成了系统或子系统的内容,如用例。外面的是系统之外的执行者。

注意画图的时候不要把这个漏掉了

示例:"空巢老人看护软件"的用例图

1.2.5 交互图描述
  1. UML交互图的的作用:刻画对象间的消息传递,分析如何通过交互协作完成功能
    理解:
    • 用例的功能实现方式
    • 软件系统在某种使用场景下对象间的交互协作流程
    • 软件系统的某个复杂操作的逻辑实现模型
  2. 二类交互图(表达能力相同,二类图可以相互转换
顺序图 通信图
强调消息传递的时间序 突出对象间的合作
1.2.5.1 顺序图
  1. 描述对象间的消息交互序列:
  • 纵向:时间轴,对象及其生命线(虚线),活跃期(长条矩形)
  • 横向:[[【笔记】需求分析补充知识#1 对象间的消息传递 | 对象间的消息传递]] 注意:[[【笔记】需求分析补充知识#^f01848 | 消息图元的表示]]
  1. 顺序图的表达方式:
  2. \[【笔记】需求分析补充知识#\^0e4a11 \| 顺序图中的绘画技巧\]

1.2.6 类图和对象图

均在描述系统的静态结构

1.2.6.1 类图
  1. 图的构成:
  • 结点:表示系统中的类(或接口)及其属性和操作
  • 边:类之间的关系
  1. \[【笔记】需求分析补充知识#4 类图的UML表示\| 类的UML表示\]\]: ![image.png](https://file.jishuzhan.net/article/1778220352749441025/fca6fd90ad7625abf6af839368553c72.webp)

    不包含操作实现部分的特殊类, 包括供给接口和需求接口

  2. 类间的关系

  3. 画类图的注意事项

相关推荐
使一颗心免于哀伤10 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
_落纸2 天前
三大基础无源电子元件——电阻(R)、电感(L)、电容(C)
笔记
Alice-YUE2 天前
【CSS学习笔记3】css特性
前端·css·笔记·html
2303_Alpha2 天前
SpringBoot
笔记·学习
Hello_Embed3 天前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中3 天前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Grassto3 天前
RAG 从入门到放弃?丐版 demo 实战笔记(go+python)
笔记
Magnetic_h3 天前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
周周记笔记3 天前
学习笔记:第一个Python程序
笔记·学习
丑小鸭是白天鹅3 天前
Kotlin协程详细笔记之切线程和挂起函数
开发语言·笔记·kotlin