软件需求笔记

第一周

软件需求层次

业务需求

  • 内容:表示组织或客户对系统、产品高层次的目标
  • 描述方式:前景(视图)和范围文档
  • 示例:为了让南海校区的同学和老师提供订餐便 利,节约排队打饭时间,同时减少食堂的浪费, 需要开发“南海校区网上订餐系统” 。

用户需求

  • 内容:描述了用户要求系统、产品必须能完成的任务
  • 描述方式:用例模型
  • 示例:“订餐” 、 “变更订单” 、 “查看菜单” 、 “支付订单” 。

系统、功能需求

系统需求

  • 描述子系统包含的需求,实现的功能。
  • 示例: 系统需求:自动订餐系统要能实现选菜、选时间送餐功能等。 通过功能需求来进行细化描述。

功能需求

  • 开发人员必须在产品中实现的软件功能, 用户利用这些功能来完成任务,满足业务需求。 有时称为行为需求。简而言之,描述的是开发人员需要实现什么。
  • 描述方式:软件需求规格说明书(SRS)
  • 示例:“订餐” Order.Place、 “创建浏览修改和 删除订餐” 、 “订餐支付” Order.Place.Pay 、 “请求送餐” Order.Deliver.Select等等

质量属性

声明各种系统操作特定的性能需求。影响功能需求

外部接口

a.用户接口;

b.硬件接口;

c.软件接口;

d.通信接口的需求。

业务规则

 是对业务的某个方面进行定义或约束的语句。业务规则用于声明业务机构、或者控制、影响业务的行为。

需求的开发与管理

需求工程分为需求开发与需求管理

需求开发

需求获取

  • 编写前景和范围文档
  • 用户代表沟通确定用例
  • 召开专门的需求获取讨论会

需求分析

  • 绘制关联图
  • 确定需求优先级
  • 为需求建模
  • 创建数据字典

规格说明

  • 采用SRS模板
  • 为需求分配唯一标号

需求验证

  • 审查需求文档
  • 测试需求

需求管理

在需求开发阶段,通过市场、客户、管理三方将需求通过分析、编写文档、评审、商议得到基准需求说明

在需求管理阶段,定义需求变更控制过程,通过基准需求说明获取当前基线。跟踪每项需求的状态,市场、客户、管理会进行需求变更,项目环境会产生项目变更,这个需求变更过程就需要对基准需求说明进行基线修正,建立基线和控制需求文档的版本。

第二周

关于签字:要建立需求协议的基线。将需求 变更控制在基线范围内。

需求分析

  • 创建关联图
  • 确定需求优先级
  • 为需求建模
  • 创建数据字典

需求验证

  • 审查需求文档

需求管理

  • 定义需求变更控制过程
  • 建立基线和控制需求文档的版本
  • 跟踪每项需求的状态

项目管理

  • 选择合适的软件开发生命周期
  • 管理与需求相关的风险及编写风险文档

需求分析员工作

  • 获取需求
  • 分析需求
  • 编写需求规格说明

第三周

前景与范围文档

关联图

生态系统图

特性树

第四周

聆听客户的需求

需求获取的核心:发现用户需求

  • 强调用户任务,而不是用户界面
  • 强调根本需求,而不是用户表达

第五周

用例图

子系统

有时多个用例包含一组相同的步骤。为了避免每个用例都重复相同的步骤,可以定 一个单独的用例来包括这些相同的功能, 然后由其他用例来包含这个子用例。

包含关系

image-20230620110010476

(2)一个用例的功能太多时,可以用包含关系创建多个子用例。

拓展关系

image-20230620110203026

第六周

业务规则

 是对业务的某个方面进行定义或约束的语句。业务规则用于声明业务机构、或者控制、影响业务的行为。

 基本的业务规则是公司的重要资产,如果没有适当的记录和管理,就只会存在于个 人的大脑中,而不同的人对规则的理解可 能是相互矛盾的。如果知道每个应用程序在什么位置,如何实现引用与其相关的业务规则,那么当业务规则发生变化时,修改程序会容易很多。

业务规则影响了业务需求、用户需求、功能需求、质量属性

用特定数学公式货算法进行的计算:

例: 订单数量为6-10件,则单价降低10%; 数量为11-20件,单价降低20%; 数量超过20件,单价降低35%。 用表格形式表示更清晰。

image-20230620092845057

一些业务规则目录的例子:

image-20230620092913807

每条业务规则都有一个唯一的标识符,这样你就能从功能性需求追溯到对应的规则

规则类型:这里指出是事实、约束、动作触发规则、推论还是计算。

静态或动态:这一列说明该规则随时间变化的可能性有多大。

来源:公司政策、管理政策、主题专家、其他人士、政府法规、软件代码、数据库定义。

如何发现业务规则? 通过不同角度来提问

image-20230620093053561

大作业:

第七八周

需求规格说明

优秀需求的特点

  • 完整性
  • 一致性
  • 可修改性
  • 可追溯性

避免使用有歧义的术语!!

实例

  • 只叙述一个实体

  • 时间起点和预防错误

  • 标准宽泛,信息不清

  • 歧义、信息不清

  • 操作结果不清晰

  • 例子

数据字典!!

是一个共享存储库,用于定义应用程序中使用的所有数据元素或属性的含义、数据类型、长度、格式、需要的精度以及数据允许的取值范围或数据值的列表。

离散值 [a|b|c]

重复项 3{a}8

基本数据元素 x=”a”

第九周

数据流图

image-20230620091720572

泳道图

image-20230620091454213.png

状态转换图

image-20230620091809896

1.DF2 外部实体实体之间不存在数据流

2.DF6 外部实体数据存储之间不存在数据流

3.DF7 数据存储与数据存储之间不存在数据流

4.P4 加工的输入和输出不能同名

5.P1 P3 每个加工既有输入又有输出

电话号码=[校内电话号码|校外电话号码]

校内电话号码=非零数字+ 3 位数字 //后面继续

校外电话号码=[本市号码|外地号码]

本市号码=数字零+8位数字

外地号码=数字零+3位数字+8位数字

3位数字=3{数字}3 //3至3个数字

8位数字=非零数字+7位数字

7位数字=7{数字}7

非零数字=[1|2|3|4|5|6|7|8|9]

数字零=0

数字=[0|1|2|3|4|5|6|7|8|9]

第十周

实体关系图 ER图

类图

关联

->

聚合

组合

依赖

泛化

实现

区别

关联VS聚合VS组合

三者都体现类之间的“拥有”关系,聚合和组合,都是整体和部分的关系,只是两种关系中类的生命周期不同。聚合是“弱拥有”组合是“强拥有”

关联VS依赖

这两种关系的区别很明显,关联体现的是“拥有”依赖体现的是“使用”

泛化VS实现

泛化体现两个类之间的关系,实现是类与接口之间的关系。泛化强调的是类之间的继承,实现强调的是类对接口的实现。

通过对比总结出类图之间4种关系的强弱:依赖<关联<聚合<组合<泛化=实现

十二周

V=E-N+2,11-10+2=3,环路复杂度为3

十三周

第一个空正推得到最长的、第二个空倒推,用最长的往前推,而且往前推要往耗时长的推,例如L是22,往BD推经过走LK,因为耗时长,找那个最需要满足的

如果是BF,最长22,到F是十六,就是十六天要到F,而BF路径最快只需要6天,因此可以拖10天。