当前位置: 首页 > news >正文

有效需求的特征

如何区分优秀的软件需求和软件需求规格说明书(SRS)与可能导致问题的需求和规格说明书?在这篇文章中,我们将首先讨论单个需求应该具有的几种不同特性。然后,我们将讨论成功的SRS整体应具有的理想特征。

1.有效需求的特性

在理想的环境下,每个单独的用户需求、业务需求和功能需求都会展现出以下各节所述的特质。

完整性

每个需求都必须全面地描述预期交付的功能,必须包含所有开发者需要用于设计和实施该功能的信息。如果发现某些信息缺失,最好用“待定”(TBD)标记出。在继续推进项目前,必须解决每个需求中标记“待定”的问题。

没有任何规定你需要在建构开始之前让整个需求集合完整。在大多数情况下,你永远无法达到这个目标。然而,使用迭代或增量开发生命周期的项目应该有一套完整的需求集合,供每次迭代使用。

如果使用的是最低规格要求,不同的人可能会基于不同的假设和决策来填补空缺部分,每个人就会按照自己的理解来执行任务。口头保留需求信息也会导致业务分析师、开发者和测试人员对需求集的理解不同。

正确性

每个需求都必须准确地描述预期构建的功能。

我们应当依据真实世界的需求作为参考,如真实用户或更高级别的系统需求。如果软件需求与父系统需求冲突,则该需求就是错误的。只有用户代表能决定用户需求(例如用例)是否正确,所以用户或其代理人必须认真要审查需求。

可行性

每个需求的实施必须在系统及其运行环境的已知能力和限制之内。为了避免指开发法达成的需求,让开发人员在整个需求完善过程中与市场部门或BA一起工作是必要的。

开发人员可以提供实际的反馈,告诉你在技术上哪些需求是可以实现的,哪些是不能实现的,以及哪些需求虽然能实现,但成本过高。增量开发方法和概念验证原型是两种可以用来评估需求是否可行的方法。

必要性

每个需求都应该描述利益相关者真正需要的功能,或者为了满足外部系统需求或者标准而必须具备的功能。每个需求都应该由有权力提出需求的人或团体提出。要追溯每个需求的来源,比如用户需求(用例)、业务规则或其他有价值的来源,以确保需求的合理性和必要性。

优先级

对每一个功能需求、特性、用例或用户故事进行优先级排序,以表明它们对于特定产品版本的重要性。如果所有的需求被视为同等重要,那么当面临预算削减、项目超出预定时间、人员流失或在开发过程中新增需求等情况时,项目经理会很难做出决策。因此,对需求进行优先级排序是成功进行迭代开发的关键因素。

明确性

所有阅读需求声明的人都应该得到同样的、一致的理解,但是由于自然语言的复杂性,往往容易产生歧义。所以应当使用简单、明了、直接的语言来编写需求,这种语言应当适应用户领域的特性。”可理解性”是一个和”无歧义性”关联的需求质量目标:读者需要能够理解每个需求所表述的内容。在词汇表中,我们应当对所有的专业术语以及可能引起读者困惑的术语进行定义。使用需求模板,如EARS模型,是确保需求以简洁、明确的语言编写的一种有效方法。

可验证性

你应该考虑是否能设计出一些测试,或者采取其他验证方法,比如检查或者示例演示,以确定产品是否正确地实现了每个需求。如果一个需求不能被验证,那么确定它是否被正确实现就变成了一种主观判断,而不是基于客观事实的分析。那些不完整的、矛盾的、无法实现的或者含糊不清的需求也是无法进行验证的。

2.有效软件需求规范说明的特点(SRS)

拥有优秀的个别需求语句并不足够。汇集成软件需求规格说明(SRS)的需求集合应该展示以下各节描述的特性。

完整性

SRS(软件需求规格书)中不应该缺少任何需求或者必要的信息。缺失的需求很难被察觉,因为它们并不存在!将注意力集中在用户的任务上,而不是系统的功能上,可以帮助你防止信息的不完整。Karl Weigers是《软件需求,第三版》的作者,他说:“我不知道有什么方法可以百分之百确定你没有遗漏任何一个需求。”他的书中有一章提供了一些建议,让你可以检查是否漏掉了一些重要的需求。

一致性

一致的软件需求不应该与同类型的其他需求或者更高级别的业务需求、系统需求或用户需求有所冲突。在进一步进行开发之前,需要解决所有的需求冲突。如果你发现两个需求之间存在冲突,你可能需要通过进一步的研究才能知道哪一个(如果有的话)是正确的。记录每个需求的来源可以帮助你在发现软件需求规格说明书中存在冲突时,知道应该去找谁进行讨论。

可修改性

你应当有能力在需要的时候修订软件需求规格说明(SRS),并能追踪到每个需求的修改历史。这意味着每个需求都需要被唯一地标记,并且与其他需求分开表达,以便你可以清晰地引用它。

每个需求应当只在SRS中出现一次。如果在一个复制的需求上只改动一处,很容易产生矛盾。所以,应考虑把后面出现的同样的需求通过交叉引用指向原先的需求,而不是复制需求。目录和索引可以使SRS更易于修改。把需求保存在数据库或者商业需求管理工具中,可以使这些需求变成可重复使用的对象。

可追溯性

可追溯的需求可以向后链接到其来源,向前链接到实现该需求的设计元素和源代码,以及验证实现是否正确的测试用例。可追溯的需求会被赋予独一无二、持久的标识符。它们应当以结构化、细粒度的方式编写,而不是写成长篇的叙述性段落。你应该避免把多个需求整合到一条声明中,因为每个需求可能会关联到不同的设计元素和代码部分。

3.怎么确保需求和软件需求规范(SRS)具备上述特征?

确保需求和软件需求规范(SRS)符合上述标准的最佳方法,是让项目中的多个利益相关者都参与审核编写好的SRS。不同的利益相关者会从不同的角度发现不同类型的问题。例如,分析师和开发人员并不会对需求的完整性或正确性进行评估;而用户也不会去评估技术的可行性。

创建符合所有标准的SRS不是件容易的事。然而,如果在编写和审核需求时我们始终牢记这些标准,那么最终所编写的需求文档质量就会更高,更利于我们交付出优质的产品。

 需求管理指南: 

需求管理: 需求管理主要内容  |  需求管理的重要性  |  采用敏捷方法进行需求管理  |  如何克服需求管理的 5 大挑战  |  更多 

需求编写: 功能需求的示例和模板  |  采用 EARS 方法来改进需求工程  |  如何编写一份优秀的产品需求文档(PRD) |  功能性需求与非功能性需求的区别  |  有效需求的特征  |  更多 

需求收集和管理流程: 需求工程概述  |  产品团队的需求分析指南  |  敏捷产品团队的 11 种需求收集技巧  |  定义和实施需求基线  |  更多  需求的可追溯性: 什么是需求可追溯性  |  可追溯性在现代产品和系统开发中的关键作用  |  如何创建和使用需求追溯矩阵  |  更多 

需求确认和验证: 产品团队的需求验证和确认  |  更多 

需求管理领域文章:

 做好需求分析的4大关键认知  |  盘点国内9款热门需求管理系统  |  构建产品路线图的方法与工具  |  做好需求优先级判断的7种主流模型  |  采用敏捷方法进行需求管理  | 更多

相关文章:

有效需求的特征

如何区分优秀的软件需求和软件需求规格说明书(SRS)与可能导致问题的需求和规格说明书?在这篇文章中,我们将首先讨论单个需求应该具有的几种不同特性。然后,我们将讨论成功的SRS整体应具有的理想特征。 1.有效需求的特…...

基于51单片机无线温度报警控制器 NRF24L01 多路温度报警系统设计

一、系统方案 1、本设计默认采用STC89C52单片机,如需更换单片机请联系客服。 2、接收板LCD1602液晶实时显示当前检测的2点温度值以及对应的上下限报警值。发射板由DS18B20采集温度值,通过无线模块NRF24L01传给接收板。 3、按键可以设置温度上下限值&…...

Spring Data JPA的@Entity注解

一、示例说明 rules\CouponTypeConverter.java Converter public class CouponTypeConverterimplements AttributeConverter<CouponType, String> {Overridepublic String convertToDatabaseColumn(CouponType couponCategory) {return couponCategory.getCode();}Overr…...

CANoe panel中,Path Dialog如何保存选择的文件路径

这里写目录标题 Path Dialog控件的设置系统变量和环境变量 Path Dialog控件的设置 过滤加载的文件类型 填写格式为&#xff1a;Hex file |.hex 其中Hex file为自定义name&#xff0c;.hex为你想识别的文件类型 系统变量和环境变量 系统变量&#xff1a;在canoe的Environmen…...

关于es中索引,倒排索引的理解

下面是我查询进行理解的东西 也就是说我们ES中的索引就相当于我们mysql中的数据库表&#xff0c;索引库就相当于我们的数据库&#xff0c;我们按照mapping规则会根据相应的字段&#xff08;index为true默认&#xff09;来创建倒排索引&#xff0c;这个倒排索引就相当于我们索引…...

k8s service (二)

K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象&#xff0c;存储在etcd中&#xff0c;用来记录一个service对应的所有pod访问地址&#xff0c;它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成&#xff0c;这些Pod通过Endpoints…...

桌面软件开发框架 Electron、Qt、WPF 和 WinForms 怎么选?

一、Electron Electron 是一个基于 Web 技术的跨平台桌面应用程序开发框架。它使用 HTML、CSS 和 JavaScript 来构建应用程序界面,并借助 Chromium 渲染引擎提供强大的页面渲染能力。Electron 的主要特点包括: 跨平台:Electron 可以在 Windows、macOS 和 Linux 等多个主流操…...

SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第二天)Mybatis的深入学习

SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录&#xff08;第二天&#xff09;Mybatis的深入学习&#xff08;增删改查的操作&#xff09; 上一篇我们的项目搭建好了&#xff0c;也写了简答的Junit测试类进行测试&#xff0c;可以正确映射…...

学习笔记:Opencv实现限制对比度得自适应直方图均衡CLAHE

2023.8.19 为了完成深度学习的进阶&#xff0c;得学习学习传统算法拓展知识面&#xff0c;记录自己的学习心得 CLAHE百科&#xff1a; 一种限制对比度自适应直方图均衡化方法&#xff0c;采用了限制直方图分布的方法和加速的插值方法 clahe&#xff08;限制对比度自适应直方图…...

R语言处理缺失数据(1)-mice

#清空 rm(listls()) gc()###生成模拟数据### #生成100个随机数 library(magrittr) set.seed(1) asd<-rnorm(100, mean 60, sd 10) %>% round #平均60&#xff0c;标准差10 #将10个数随机替换为NA NA_positions <- sample(1:100, 10) asd[NA_positions] <- NA #转…...

SpringBoot自动配置原理

Spring Boot 的自动配置可以根据添加的jar依赖&#xff0c;自动配置 Spring Boot 应用程序。例如&#xff0c;我们想要使用Redis&#xff0c;直接在POM文件中增加spring-boot-starter-data-redis依赖&#xff0c;然后我们配置下连接信息就可以使用了。 那么Spring Boot 是如何…...

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 五)

管理应用拥有的状态概述 LocalStorage&#xff1a;页面级UI状态存储 LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内&#xff0c;页面间共享状态。 本文仅介绍LocalStora…...

Java基础篇——反射枚举

反射&枚举 课程目标 1. 【理解】类加载器 2. 【理解】什么是反射 3. 【掌握】获取Class对象的三种方式 4. 【掌握】反射获取构造方法并创建对象 5. 【掌握】反射获取成员变量并使用 6. 【掌握】反射获取成员方法并使用 7. 【掌握】反射综合案例 8. 【理解】枚举B友:http…...

每日一学——案例难点Windows配置

在Windows上配置DNS服务器有几个步骤&#xff1a; 步骤1&#xff1a;打开网络连接设置 在任务栏上右键单击网络图标&#xff0c;并选择“打开网络和Internet设置”。 在新窗口中&#xff0c;选择“更改适配器选项”。 在打开的窗口中&#xff0c;找到正在使用的网络适配器&a…...

2023.8 - java - 运算符

Java 运算符 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 算术运算符 算术运算符用在数学表达式中&#xff0c;它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。 表格中的实例假设整数变量A的值为10&#xff0c;变量B的值为20&#xff1a; …...

推荐三款Scrum敏捷项目管理工具/敏捷管理实践

免费版敏捷工具推荐&#xff1a; Leangoo领歌 Leangoo领歌是ScrumCN&#xff08;scrum.cn&#xff09;旗下的一款永久免费的专业敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、缺陷管理、统计度量等。包括小…...

WARNING: undefined behavior - version of Delve is too old for Go version

在更新了 go 版本后&#xff0c;使用 goland 进行调试会报错 WARNING: undefined behavior - version of Delve is too old for Go version 1.20.5 (maximum supported version 1.19)这是因为 go 的版本升级后&#xff0c;相对 dlv 的版本就低了。 所以解决办法就是升级对应的…...

https非对称加密算法

非对称加密算法原理 在客户端公开公钥&#xff0c;服务端保存私钥 1.客户端第一次请求先请求443端口&#xff0c;从443端口下载公钥。 2.客户端将数据进行公钥算法进行加密&#xff0c;将秘文发送到服务端 服务端收到秘文后&#xff0c;通过私钥算法进行解密得到明文数据。…...

“深入探索JVM:Java虚拟机背后的奥秘“

标题&#xff1a;深入探索JVM&#xff1a;Java虚拟机背后的奥秘 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部工作原理和关键组成部分&#xff0c;揭示JVM背后的奥秘。通过对类加载机制、内存管理、垃圾回收、即时编译等方面的详细介绍&#x…...

树莓派系统入门教程(三)—— 使用Windows上的VSCode远程连接树莓派进行Python开发

树莓派系统入门教程&#xff08;三&#xff09;—— 使用Windows上的VSCode远程连接树莓派进行Python开发 1. 安装VSCode和SSH扩展2. SSH连接配置3. 连接到树莓派4. 运行Python程序5. 建议和注意事项 很多开发者更喜欢在大屏幕和强大的开发环境中编写代码&#xff0c;但同时他们…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...