软件需求详解

软件需求是软件开发的关键,明确且准确的需求能确保项目成功。本文详细探讨了软件需求的重要性,定义,分类,获取方法,以及需求规约的概念和作用。需求规约是开发团队与用户间的技术合同,对软件设计、管理及测试起到指导作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




软件需求

软件需求其实就像是一个目标一样,朝着这个“目标”所开发出的软件才算得上是合格的软件。不难想象,如果最开始的这个“目标”就是错的,那么无论你费多大劲,你做出来的软件都是不符合用户要求的软件。
为了明确这个“目标”,软件工程大致是这么做的:对软件需求进行定义 ——> 获取需求 ——> 把需求整理成(软件)需求规约。


1-软件需求的重要性

在软件开发的过程中,获取正确的需求可以算是软件开发中最难的事了。因为:

  • 大部分用户并不知道自己想要什么。

  • 就算用户并知道自己想要什么,用户如何把它准确地表达出来是个问题。

  • 而且,就算用户表达清楚了自己的需求,开发人员是否能够正确理解用户表达的需求也是个大问题(了解用户所处的行业的专业术语等)。举个例子,用户想要个苹果,但是用户把它描述成了一个梨,然后需求分析员把这个“梨”描述给开发人员,开发人员听过需求分析员的描述后,又误以为用户要做一个橘子,于是就把做好的橘子给了用户,这要是不打起来才怪呢。

  • 很多时候软件项目的需求是在不断变化的。只是有的时候我们为了做软件项目而人为的把它在某个时刻的需求冻结了,但这并不意味着软件项目的需求就不会变化了。

我们如何应对这种不断变化的需求;如何控制需求变化的规模;在项目的执行中,什么样的需求允许发生变化,什么样的需求不允许变化;通过什么样的方式去控制需求的变更等,都是重要的问题。

那么解决这些问题的第一步就是正确地定义需。因为只有当我们准确地,统一地定义了需求,我们才能在获取软件需求的过程中挖掘出那些满足条件的“真正的需求”,并且使相关人员对需求有一个统一的认识(有了这个前提,我们才能去解决哪些由“需求”所引起的问题)。为了正确地定义需求,我们首先需要解决两个问题:

  1. 定义需求的基本要素是什么——需求包括哪些基本要素。“软件需求的定义”解决的就是这个问题。
  2. 定义需求的基本格式是什么——如何采用规范的方式去描述需。此问题由“需求规约”解决。


2-软件需求的定义

作用:描述了待开发 产品/系统 功能上的能力、性能参数或其它性质。

需求的要素,即具有了以下5个标准 的描述才能算得上是一个需求:

  1. 必要的——此描述中指明了某项要求,如“系统必须支持100个以上的用户并发”。

  2. 无歧义的——此描述只能用一种方式解释吗?如果一个描述,用户、需求分析员和软件开发人员所理解的意思互不相同,那么最终开发出的软件就很难满足用户的实际要求。

  3. 可测的——对于给定的一个或一组输入,我们一定会得到一个或一组确定的输出。

  4. 可跟踪的——可以从一个开发阶段的另一个开发阶段对它进行跟踪吗?

  5. 可测量的。比如说对于“此系统需要良好的安全性”这个描述,“良好的安全性”只是一个定性的描述,我们无法对其进行量化(即,有一个漏洞就叫做“不安全” 还是说 有十个漏洞才叫做“不安全” 或者是 能运行就叫做“安全”?)。


3-软件需求的分类

  1. 功能需求:功能需求是系统同最核心的需求,是整个需求的主题,其它的非功能需求是附加在功能需求之上的,即没有功能需求就没有非功能需求——性能需求、外部接口需求、设计约束和质量属性。

  2. 性能需求:性能需求规定了一个系统或系统构件必须具有的性能。如,对于“系统因该在5分钟内计算出给定季度的销售税”这个描述来说,功能需求是“计算出给定季度的销售税”,性能需求是“在5分钟内计算出结果”。性能需求隐含了一些满足功能需求的设计方案,经常对涉及产生一些关键性的影响。例如排序,花费时间的限制将确定那种算法是可行的。

  3. 外部接口需求:外部接口需求规定了 系统或系统构件必须与之交互的硬件、软件或数据库元素。外部接口可分为:

    • 系统接口:描述一个应用如何与系统的其他应用进行交互。
    • 用户接口:规约了软件产品和用户之间接口的逻辑特性。即规约 给用户所显示的数据,对用户所要求的数据以及用户如何控制该用户接口。
    • 硬件接口:如果软件系统必须与硬件设备进行交互,那么就应说明所要求的支持和协议类型。
    • 软件接口:允许与其它软件产品进行交互,如,数据管理系统、操作系统或数学软件包。
    • 通讯接口:规约待开发系统与通讯设施(如,局域网)之间的交互。如果通讯需求包含了系统必须使用的网络类型(TCP/IP,WindowsNT,Novell),那么有关类型的信息就应包含在SRS中。
    • 其它:内存约束、操作和地点需求。

  4. 设计约束:设计约束限制了系统或系统构件的设计方案。为了满足功能、性能和其它需求,许多设计约束将对软件项目规划、所需要的附加成本和工作产生直接影响。比如“系统必须使用C++或其它面向对象语言编写”。

  5. 质量属性:质量属性规定了一个软件产品必须具有的一个性质 是否达到质量方面一个所期望的水平。例如(属性只表达了性质,而描述是对属性的一种量化):

属性描述
可靠性软件系统在指定环境中没有失败 而正常运行的概率。
存活性当系统的菜一部分系统不能运行时,该软件继续运行或支持关键功能的可能性。
可维护性发现和改正一个软件故障或对特定的范围进行修改所要求的平均工作。
用户友好性学习和使用一个软件系统的容易程度。
安全性在一个预定的时间内,使软件系统安全的可能性。
可移植性软件系统运行的平台类型。



4-获取软件需求的方法

(1)自悟

描述:需求人员把自己作为系统的最终用户,审视该系统并提出问题。

适用条件:需求工程师不能直接与用户进行交流。

(2)交谈

描述:需求人员通过提出问题/用户回答这一方式,直接询问用户需要的是一个什么样的系统。

适用条件:需求人员具有“正确提出问题”的能力;回答人员具有“揭示需求本意”的能力。

风险:在交谈期间需求可能不断增长。因为很多时候用户在提出需求的时候并不会考虑成本、进度和开发特点等因素,如果在这种情况下需求人员不清楚用户想要的需求是否是合理的,那么就会导致最终获得的需求“过于完美”但无法实现。

应对措施:项目管理人员和客户管理人员应该定期地对交谈的结果进行复审。其主要解决的问题是,“需求增长的界限在哪里”和“什么时候将需求的增长告诉用户”。

(3)观察

描述:通过观察用户执行其现行的任务和过程,或观察他们如何操作与所期望的新系统有关的现有系统,了解系统运行的环境。

风险:一、客户可能会抵触这一观察,因为它们可能会认为开发者打扰了它们的正常业务(想想,如果你在工作的时候总有一个人在旁边看着);二、客户还可能认为开发者在签约之前 就已经熟悉了它们的业务(由于观察时客户与开发者不会有太多的交流,所以客户可能不会对一些业务进行详细的解释)。

(4)小组会

描述:举行客户和开发人员的联席会议,与客户组织的一些代表共同开发需求。
,并提取相关的信息。

优点:一、如果会议组织得当,可很快地标识出一些需求;二、可使需求开发人员在一次会议中能够对一个给定的需求得到多种观点,从而不但可节省与个人交谈的时间,还可节省联系他们的时间;三、有关需求不同观点之间的冲突,可以揭示需求中存
7在的问题,也有助于客户在其内部达成一致。

(5)提炼

复审技术文档:复审技术文档,并提取相关的信息。

适用条件:已经有了部分需求文档。



5-需求规约(也称需求规格说明书)

此阶段解决的问题是:如何规范化地去描述软件需求。
软件需求被规范化地描述之后就形成了软件需求规约。

5.1-定义

需求规约是一个软件 产品/系统 所有需求陈述的正式文档,它表达了一个软件产品/系统的概念模型。

5.2-需求规约必备的基本性质

  • 重要性和稳定性程度:对获取到的需求进行分类,一共分为三类——基本需求(必须要实现的需求)、可选需求和期望需求(未来考虑的需求)。

  • 可修改的:在不过多影响其他需求的前提下,可以容易地修改一个单一需求。

  • 完整的:把获取到的需求描述为需求规约后,需求规约中没有漏掉其中的需求。

  • 一致的:需求规约中的需求不存在互斥。

5.3-需求规约的格式

在这里插入图片描述
在这里插入图片描述

5.4-需求规约的三种表达方式

  1. 非形式化的需求规约(一般使用在起草需求规约的时候):以一种自然语言来表达需求规约,如同使用自然语言写了一篇文章。易理解但容易产生歧义。比如,“你不要乱来”可以理解为“你不要乱来”或“你不要乱,来!”。所以我们需要 为那些在一个特定语境中所使用的术语提供语义定义,一般情况下,该语境与通常使用该术语的语境是由区别的。

  2. 半形式化的需求规约(一般在对需求进行技术分析期间使用):以半形式化符号体系来表达需求规约。因此,半形式化规约的编制应遵循一个标准的表示模板或约定。

  3. 形式化的需求规约(对于质量,特别是安全性要求比较高的软件产品/系统,一般使用此规约):以一种基于良好数学概念的符号体系来编制需求规约,一般往往伴有解释性注释的支持。容易进行形式化的验证但是提高了阅读人群的门槛。

5.5-需求规约的作用

  1. (软件开发角度)需求规约是软件开发组织和用户之间一份事实上的技术合同书,是产品功能及其环境的体现。事实上,软件需求规约是开发组织与用户之间的第一次“亲密握手”。有了软件需求规约后,开发组织与用户就能在“做什么”的事情上达成共识,进而才能有序地进行软件设计,软件实现等工作。

  2. (软件管理角度)对于项目的其余大多数工作,需求规约是一个管理控制点。对于项目经理来说,软件需求规约是实施管理的重要文档,因为成本估算,进度控制等都需要以软件需求规约为依据。

  3. 对于产品/系统的设计,需求规约是一个正式的、受控的起始点。软件设计人员只有在拿到需求规约时,才能对软件进行设计。

  4. 需求规约是创建产品验收测试计划和用户指南的基础,即基于需求需求规约一般还会产生另外两个文档——初始测试计划和用户系统操作描述。

本书讲述了软件开发中一个至关重要的问题—软件需求问题。软件开发人员及用户往往容易忽略信息沟通,导致软件开发出来后,不能很好地满足用户的需要。而返工则不仅在技术上给开发人员带来巨大的麻烦,而且软件性能深受影响且造成人力、物力的浪费。所以在开发周期早期提高项目需求分析的质量,减少重复劳动,通过控制项目范围的扩展及需求变更来达到按计划完成预定目标是当前我国软件业急需解决的问题—这也是本书讨论的主要内容。 目 录 译者序 前言 第一部分 软件需求:是什么和为什么 第1章 基本的软件需求 1 1.1 软件需求的定义 2 1.1.1 一些关于“需求”的解释 2 1.1.2 需求的层次 3 1.2 每个项目都有需求 4 1.3 什么情况将会导致好的群体发生不合格 的需求说明 5 1.4 高质量的需求过程带来的好处 7 1.5 优秀需求具有的特性 7 1.5.1 需求说明的特征 7 1.5.2 需求规格说明的特点 8 1.6 需求的开发和管理 9 第2章 客户的需求观 11 2.1 谁是客户 12 2.2 客户与开发人员之间的合作关系 12 2.2.1 软件客户需求权利书 13 2.2.2 软件客户需求义务书 15 2..3 “签约”意味着什么 17 第3章 需求工程的推荐方法 18 3.1 知识技能 19 3.2 需求获取 20 3.3 需求分析 21 3.4 需求规格说明 22 3.5 需求验证 23 3.6 需求管理 23 3.7 项目管理 24 第4章 改进需求过程 26 4.1 需求与其他项目过程的联系 26 4.2 软件需求对其他项目风险承担者的影响 27 4.3 软件过程改进的基础 28 4.4 过程改进周期 29 4.4.1 评估当前采用的方法 29 4.4.2 制定改进活动计划 30 4.4.3 建立、实验和实施新的过程 31 4.4.4 评估结果 32 4.5 需求过程的积累材料 33 4.5.1 需求开发过程的积累材料 34 4.5.2 需求管理过程的积累材料 34 4.6 需求过程改进路标 35 第5章 软件需求与风险管理 37 5.1 软件风险管理基础 38 5.1.1 风险管理的要素 38 5.1.2 编写项目风险文档 39 5.1.3 制定风险管理计划 40 5.2 与需求有关的风险 41 5.2.1 需求获取 41 5.2.2 需求分析 42 5.2.3 需求规格说明 42 5.2.4 需求验证 43 5.2.5 需求管理 43 5.3 风险管理是你的好助手 43 第二部分 软件需求工程 第6章 建立项目视图与范围 45 6.1 通过业务需求确定项目视图 45 6.2 项目视图和范围的文档 46 6.3 关联图 50 6.4 把注意力始终集中在项目的范围上 51 第7章 寻找客户的需求 52 7.1 需求的来源 52 7.2 用户类 53 7.3 寻找用户代表 54 7.4 产品的代表者 55 7.4.1 寻求产品代表者 56 7.4.2 产品代表者的期望 56 7.4.3 多个产品代表者 57 7.5 谁作出决策 58 第8章 聆听客户的需求 60 8.1 需求获取的指导方针 60 8.2 基于使用实例的方法 62 8.2.1 使用实例和用法说明 62 8.2.2 确定使用实例并编写使用实例文档 64 8.2.3 使用实例和功能需求 67 8.2.4 使用实例的益处 67 8.2.5 避免使用实例陷阱 68 8.3 对客户输入进行分类 69 8.4 需求获取中的注意事项 70 8.5 如何知道你何时完成需求的获取 71 第9章 编写需求文档 72 9.1 软件需求规格说明 72 9.1.1 标识需求 73 9.1.2 处理不完整性 74 9.1.3 用户界面和软件需求规格说明 74 9.2 软件需求规格说明模板 75 9.3 编写需求文档的原则 79 9.4 需求示例的改进前后 81 9.5 数据字典 83 第10章 需求的图形化分析 85 10.1 需求建模 85 10.2 从客户需求到分析模型 86 10.3 数据流图 87 10.4 实体联系图 88 10.5 状态转换图 90 10.6 对话图 92 10.7 类图 94 10.8 最后的提醒 96 第11章 软件的质量属性 97 11.1 非功能需求 97 11.2 质量属性 97 11.3 定义质量属性 98 11.3.1 对用户重要的属性 99 11.3.2 对开发者重要的属性 100 11.4 属性的取舍 101 第12章 通过原型法减少项目风险 103 12.1 原型是“什么”和“为什么”要原型 103 12.2 水平和垂直的原型 103 12.3 抛弃型原型或进化型原型 104 12.4 书面原型和电子原型 106 12.5 原型评价 107 12.6 原型法的最大风险 108 12.7 原型法成功的因素 108 第13章 设定需求优先级 110 13.1 为什么要设定需求的优先级 110 13.2 不同角色的人处理优先级 111 13.3 设定优先级的规模 111 13.4 基于价值、费用和风险的优先级设定 112 第14章 需求质量验证 116 14.1 需求评审 117 14.1.1 审查过程 118 14.1.2 需求评审的困难 122 14.2 测试需求 124 第15章 需求开发向设计规划的转化 128 15.1 从需求到项目规划 128 15.1.1 需求和进度安排 128 15.1.2 需求和预估 129 15.2 从需求到设计和编码 130 15.3 从需求到测试 131 15.4 从需求到成功 131 第三部分 软件需求管理 第16章 需求管理的原则与实现 133 16.1 需求管理和过程能力成熟度模型 133 16.2 需求管理步骤 135 16.3 需求规格说明的版本控制 135 16.4 需求属性 136 16.5 度量需求管理的效果 138 第17章 管理变更请求 139 17.1 控制项目范围的扩展 139 17.2 变更控制过程 140 17.2.1 变更控制策略 140 17.2.2 变更控制步骤 141 17.2.3 变更控制工具 144 17.3 变更控制委员会 145 17.3.1 变更控制委员会的组成 145 17.3.2 变更控制委员会总则 145 17.4 测量变更活动 146 第18章 需求链中的联系链 149 18.1 需求跟踪 149 18.1.1 需求跟踪动机 151 18.1.2 需求跟踪能力矩阵 151 18.1.3 需求跟踪能力工具 153 18.1.4 需求跟踪能力过程 153 18.1.5 需求跟踪能力可行吗,必要吗? 154 18.2 变更需求代价:影响分析 154 18.2.1 影响分析过程 155 18.2.2 影响分析报告模板 157 第19章 需求管理工具 158 19.1 使用需求管理工具的益处 159 19.2 商业需求管理工具 160 19.3 实现需求管理自动化 161 附录 当前需求实践的自我评估 163 参考文献 167 后记 171
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值