软件需求规约的质量属性

以下属性被认为有利于书写好的软件需求规约(Software Requirements Specification,SRS):

  • 正确。每个需求都是对用户需要的精确解释。
  • 完整。SRS包含了每个有意义的需求。另外,SRS需要定义系统对每个可能输人的响应,无论输人是正确的或错误的。最后,不应有任何的"待定"。
  • 无二义。这意味着每个陈述的需求只有一个解释。模糊的陈述都必须被替换。
  • 一致。这是指确保单个需求之间不冲突。可能会有冲突的术语,例如两个术语都意指同一个概念;可能会有冲突的需求,例如一个需求做出了一个关于其所依赖需求的错误假设;还可能在后续的阶段添加一个新需求时,会和已有的需求冲突。
  • 可验证。需求规约实际上是开发者和客户机构之间的合同。软件验收标准是开发自需求规约的。因此,每个需求能被测试以确定系统满足需求是必要的。
  • 非计算机专家能够理解。因为系统的用户很可能是非计算机专家,所以需求规约以易理解的叙述文字书写是很重要的。
  • 可修改。因为需求规约很可能经过多次迭代,并且系统部署之后也需要演化,所以需求规约可修改是必要的。为了辅助该目标,需求规约需要有目录、索引以及交叉引用。每个需求应该只在一个地方陈述,否则,不一致性就可能蔓延到规约中。
  • 可追踪。需求规约需要能反向追踪到系统级需求和用户需要,同时也需要能向前追踪到满足需求的设计部件和实现需求的代码部件。

在开发需求规约的过程中会频繁地产生困境,因为上述这些目标中有些是相互冲突的。例如,为了让需求规约更易理解可能会和让其一致和无二义的目标相冲突。在需求规约过程的所有阶段,用户参与是必需的,以确保用户的需要包含在需求规约中。理想情况下,用户也应当在需求规约的团队中。需要和用户一起举行多次评审。开发抛弃型原型对澄清用户需求是有帮助的(详见第3章)。对自动化一个手工系统而言,当用户可能不清楚自动化系统会是什么样子时,原型设计会非常有用。

相关推荐
二哈赛车手6 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
为何创造硅基生物7 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好7 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~7 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李7 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS8297 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
仰泳之鹅7 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆8 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
星星也在雾里8 小时前
PgBouncer 解决 PostgreSQL 连接数超限 + 可视化监控
数据库·postgresql
未若君雅裁8 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis