有效需求的特征
如何区分优秀的软件需求和软件需求规格说明书(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控件的设置 过滤加载的文件类型 填写格式为:Hex file |.hex 其中Hex file为自定义name,.hex为你想识别的文件类型 系统变量和环境变量 系统变量:在canoe的Environmen…...
关于es中索引,倒排索引的理解
下面是我查询进行理解的东西 也就是说我们ES中的索引就相当于我们mysql中的数据库表,索引库就相当于我们的数据库,我们按照mapping规则会根据相应的字段(index为true默认)来创建倒排索引,这个倒排索引就相当于我们索引…...
k8s service (二)
K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod访问地址,它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成,这些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企业级应用开发学习记录(第二天)Mybatis的深入学习(增删改查的操作) 上一篇我们的项目搭建好了,也写了简答的Junit测试类进行测试,可以正确映射…...
学习笔记:Opencv实现限制对比度得自适应直方图均衡CLAHE
2023.8.19 为了完成深度学习的进阶,得学习学习传统算法拓展知识面,记录自己的学习心得 CLAHE百科: 一种限制对比度自适应直方图均衡化方法,采用了限制直方图分布的方法和加速的插值方法 clahe(限制对比度自适应直方图…...
R语言处理缺失数据(1)-mice
#清空 rm(listls()) gc()###生成模拟数据### #生成100个随机数 library(magrittr) set.seed(1) asd<-rnorm(100, mean 60, sd 10) %>% round #平均60,标准差10 #将10个数随机替换为NA NA_positions <- sample(1:100, 10) asd[NA_positions] <- NA #转…...
SpringBoot自动配置原理
Spring Boot 的自动配置可以根据添加的jar依赖,自动配置 Spring Boot 应用程序。例如,我们想要使用Redis,直接在POM文件中增加spring-boot-starter-data-redis依赖,然后我们配置下连接信息就可以使用了。 那么Spring Boot 是如何…...
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 五)
管理应用拥有的状态概述 LocalStorage:页面级UI状态存储 LocalStorage是页面级的UI状态存储,通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内,页面间共享状态。 本文仅介绍LocalStora…...
Java基础篇——反射枚举
反射&枚举 课程目标 1. 【理解】类加载器 2. 【理解】什么是反射 3. 【掌握】获取Class对象的三种方式 4. 【掌握】反射获取构造方法并创建对象 5. 【掌握】反射获取成员变量并使用 6. 【掌握】反射获取成员方法并使用 7. 【掌握】反射综合案例 8. 【理解】枚举B友:http…...
每日一学——案例难点Windows配置
在Windows上配置DNS服务器有几个步骤: 步骤1:打开网络连接设置 在任务栏上右键单击网络图标,并选择“打开网络和Internet设置”。 在新窗口中,选择“更改适配器选项”。 在打开的窗口中,找到正在使用的网络适配器&a…...
2023.8 - java - 运算符
Java 运算符 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 算术运算符 算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。 表格中的实例假设整数变量A的值为10,变量B的值为20: …...
推荐三款Scrum敏捷项目管理工具/敏捷管理实践
免费版敏捷工具推荐: Leangoo领歌 Leangoo领歌是ScrumCN(scrum.cn)旗下的一款永久免费的专业敏捷开发管理工具,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、缺陷管理、统计度量等。包括小…...
WARNING: undefined behavior - version of Delve is too old for Go version
在更新了 go 版本后,使用 goland 进行调试会报错 WARNING: undefined behavior - version of Delve is too old for Go version 1.20.5 (maximum supported version 1.19)这是因为 go 的版本升级后,相对 dlv 的版本就低了。 所以解决办法就是升级对应的…...
https非对称加密算法
非对称加密算法原理 在客户端公开公钥,服务端保存私钥 1.客户端第一次请求先请求443端口,从443端口下载公钥。 2.客户端将数据进行公钥算法进行加密,将秘文发送到服务端 服务端收到秘文后,通过私钥算法进行解密得到明文数据。…...
“深入探索JVM:Java虚拟机背后的奥秘“
标题:深入探索JVM:Java虚拟机背后的奥秘 摘要:本文将深入探索Java虚拟机(JVM)的内部工作原理和关键组成部分,揭示JVM背后的奥秘。通过对类加载机制、内存管理、垃圾回收、即时编译等方面的详细介绍&#x…...
树莓派系统入门教程(三)—— 使用Windows上的VSCode远程连接树莓派进行Python开发
树莓派系统入门教程(三)—— 使用Windows上的VSCode远程连接树莓派进行Python开发 1. 安装VSCode和SSH扩展2. SSH连接配置3. 连接到树莓派4. 运行Python程序5. 建议和注意事项 很多开发者更喜欢在大屏幕和强大的开发环境中编写代码,但同时他们…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
