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

1 需求分析

#需求分析

1.1 需求分析概述

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

1.2 描述需求的方式

1.2.1 自然语言描述
  1. 描述软件的功能性需求(软件系统需要对老人在家的状况进行分析,以判断是否出现突发异常情况。一旦出现异常情况,就需要通知老人家属和医生)、质量需求(老人通过语音方式与系统进行交互,系统正确理解老人语音指令的比率应达到90%以上)和开发约束需求(客户端App软件须运行在Android 4.4及以上版本的操作系统)等
  2. 不足:不具体,不直观,不准确,有二义
1.2.2 软件原型描述
  1. 直观、可展示和可操作,但无描述软件需求的具体细节

image.png|158

1.2.3 用例图描述
  1. 描述软件系统的边界以及软件外部使用者所观察到的系统功能,“观察到”是指外部使用者与系统存在交互,即信息输入和输出
  2. 用例图的构成

image.png|400

  • 执行者:系统之外的实体,他们使用软件系统功能、与软件系统交换信息,可以是一类用户,也可以是其他软件系统或物理设备。执行者是UML中的类, 代表一类用户或者外部实体,而非具体的对象实例。执行者通常对应于软件系统的利益相关方
  • 用例:核心是功能。表示执行者为达成一项相对独立、完整的业务目标而要求软件系统完成的功能
  • 执行者与用例间的关系:

image.png|450

1.2.3.1 用例建模过程
  1. 第⼀步:找到所有的参与者和用例
    • 识别出参与者并做简单的描述
    image.png|450
    注意事项:
    image.png|475
    • 识别出用例并做简单的介绍,寻找用例的方法:image.png|500
    用例的命名:
    image.png|475
    注意事项:
    image.png|500

  2. 第⼆步:编写用例
    • 列出用例
    用例的全部生命周期:
    image.png
    用例概述的例子(概述时既包括了主成功场景,也有候选场景):
    image.png
    详细用例归约例子:
    image.png
    用例文档模板:
    image.png|500

    • 给用例事件流程划分重要等级
    • 按照重要程度排序详细描述事件流程

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

    一个实际案例的对比理解:
    image.png|500
    image.png|575

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

  2. 包含关系
    image.png|525

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

    示例:
    image.png|500

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

image.png|475

1.2.3.4 扩展与包含关系的区别
  1. 包含:因为子用况被提出,基用况并非一个完整的用况,所以include关系中的基用况必须和子用况一起使用才够完整,子用况也必然被执行。由基用况指向子用况

image.png

  1. 扩展:新用况在原用况(基用况)基础上增加了新步骤。基用况是完整的,即使没有子用况参与。只有当扩展点被激活时,子用况才会执行。由子用况指向基用况

image.png

1.2.3.5 扩展与继承有何本质区别
1.2.4 边界框

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

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

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

image.png

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

image.png

  1. 顺序图的表达方式:
    image.png|450
  2. [[【笔记】需求分析补充知识#^0e4a11 | 顺序图中的绘画技巧]]
1.2.6 类图和对象图

均在描述系统的静态结构

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

  2. 一种特殊的类:接口
    不包含操作实现部分的特殊类, 包括供给接口和需求接口
    image.png

  3. 类间的关系

  4. 画类图的注意事项
    image.png

相关推荐

  1. 软件工程知识梳理2-需求分析

    2024-04-08 01:56:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 01:56:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 01:56:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 01:56:03       82 阅读
  4. Python语言-面向对象

    2024-04-08 01:56:03       91 阅读

热门阅读

  1. 【00150】金融理论与实务-2023年10月自考真题

    2024-04-08 01:56:03       42 阅读
  2. python格式化输出

    2024-04-08 01:56:03       41 阅读
  3. 使用Git进行持续交付:如何使用CI/CD自动化流程

    2024-04-08 01:56:03       40 阅读
  4. C# 系统学习(实例计算器)

    2024-04-08 01:56:03       40 阅读
  5. GO并发总是更快吗?

    2024-04-08 01:56:03       30 阅读