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

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表示]]:

  2. 一种特殊的类:接口

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

  3. 类间的关系

  4. 画类图的注意事项

相关推荐
红色的山茶花3 分钟前
YOLOv9-0.1部分代码阅读笔记-loss_tal.py
笔记·深度学习·yolo
shinelord明37 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
车轮滚滚__1 小时前
uniapp对接unipush 1.0 ios/android
笔记
云边有个稻草人4 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
冷眼看人间恩怨12 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
Hejjon18 小时前
SpringBoot 整合 SQLite 数据库
笔记
西洼工作室20 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式
初学者7.20 小时前
Webpack学习笔记(2)
笔记·学习·webpack
新手上路狂踩坑1 天前
Android Studio的笔记--BusyBox相关
android·linux·笔记·android studio·busybox
stm 学习ing1 天前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl