【愚公系列】软考中级-软件设计师 036-软件工程基础(需求分析)
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
软件工程需求分析是软件开发过程中的重要环节之一,它主要是通过收集、分析和规范用户的需求,为软件开发团队提供明确的需求指导,确保软件开发的目标和方向与用户需求一致。
在软件工程需求分析过程中,一般包括以下几个主要步骤:
-
需求收集:通过与用户沟通、访谈、调查等方式,收集用户对软件的需求和期望。收集的需求可以包括功能需求、性能需求、安全需求等。
-
需求分析:对收集到的需求进行分析和整理,将其转化为可操作的需求规范。需求分析一般包括需求描述、需求分类、需求优先级确定等步骤。
-
需求验证:验证需求是否符合用户的实际需求,通常包括需求审查、原型验证、用户测试等方式。通过需求验证,可以发现和纠正需求规格中的问题,确保需求的准确性和完整性。
-
需求管理:管理和维护需求规格,包括需求变更管理、需求跟踪管理、需求优先级调整等。在软件开发过程中,需求可能会随着时间和用户需求变化而发生变更,需求管理可以帮助开发团队及时响应和处理需求变更。
需求分析是软件开发过程中的关键环节,它对于软件开发的成功与否起着至关重要的作用。只有通过需求分析,开发团队才能了解用户的真实需求,设计出符合用户期望的软件系统。
🚀一、需求分析
🔎1.软件需求
🦋1.1 定义
软件需求是指用户或相关利益相关方对软件系统所提出的期望或要求。它涵盖了系统的功能、行为、性能、设计约束
等方面。
-
功能需求
描述了系统应该具有的功能和特性。这些功能需求可以是用户期望的基本功能,也可以是系统必须具有的关键功能。 -
行为需求
描述了系统在不同情况下的行为和响应。这些行为需求可以包括用户界面的交互过程、数据处理过程、错误处理过程等。 -
性能需求
描述了系统在处理各种输入情况下的性能要求。这些性能需求可以包括系统的响应时间、吞吐量、可靠性等。 -
设计约束
描述了系统设计和实现时需要遵循的约束条件。这些约束条件可以包括操作系统和硬件平台的要求、技术限制、安全需求等。
IEEE中的定义是:软件需求指用户解决问题或达到目标所需要的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。
🦋1.2 需求来源
- 可以来自于用户(实际的潜在的)、用户的规约、应用领域的专家、相关的技术标准和法规。
- 可以来自于原有的系统、原有系统的用户、新系统的潜在用户。
- 甚至还可以来自于竞争对手的产品。
🦋1.3 需求分类
软件需求的分类:软件需求就是软件必须完成的事以及必须具备的品质。需求是多层次的,包括业务需求、用户需求和系统需求,这三者是从目标到具体,从整体到局部,从概念到细节。
需求分类 | 描述 |
---|---|
业务需求 | 反映企业或客户对系统高层级的目标要求(高层级需求) |
用户需求 | 描述用户的具体目标,用户想要什么,以及要这些做什么(用户需求) |
系统需求 | 从系统的角度说明软件的需求,包括功能需求、非功能需求、设计约束等 |
– 功能需求 | 系统必须完成的那些事,即为了向其用户提供有用的功能,产品必须执行的动作 |
– 非功能需求 | 产品必须具备的性能或品质,例如,可靠性、容错性等 |
– 设计约束 | 也称为限制条件、补充规约,通常是对解决方案的一些约束说明,例如,某系统必须采用国有自主知识版权的数据库,必须运行在UNIX系统之下,等等 |
质量功能部署(QFD)是一种技术,旨在将用户要求转化为软件需求,以最大限度提高用户满意度。它通过多层次的演绎分析,将用户对产品的需求转化为产品设计需求、工程部件特征、工艺要求和生产要求,以指导产品设计和保证产品质量。由于QFD使用的图形类似于房屋,因此也被称为"质量屋"。
QDF将软件需求分为三类:
软件需求分类 | 描述 |
---|---|
常规需求 | 系统应该做到的功能或性能,实现的越多,用户越满意 |
期望需求 | 用户想当然认为系统应该做到,但是不能正确表达的功能,没有实现会让用户不满意 |
意外需求 | 用户要求范围外的功能或性能,开发人员控制,实现会高兴,不实现也没关系 |
🔎2.需求工程
需求工程:是一个不断反复的需求定义、文档记录、需求演进的过程,并最终在验证的基础上冻结需求。需求工程可以细分为需求获取、需求分析(包括系统建模)、需求规约、需求验证以及需求管理5个阶段。
-
需求开发:包括需求获取、需求分析、编写规约(系统规格说明书)和需求验证4个阶段。
-
需求管理:通常包括定义需求基线、处理需求变更及需求跟踪等方面的工作。
需求开发的4个阶段:
在需求开发阶段需要确定产品所期望的用户类型、获取每种用户类型的需求、了解实际的用户任务和目标,以及这些任务所支持的业务需求。
同时还包括分析源于用户的信息、对需求进行优先级分类、将所收集的需求编写成为软件规格说明书和需求分析模型,以及对需求进行评审等工作。
🦋2.1 需求获取
需求获取是一个确定和理解不同项目干系人的需求和约束的过程。在需求获取的过程中,主要解决需求调查的问题。为了做好需求调查,必须清楚地了解以下三个问题:
-
What:应该搜集什么信息。
需要明确搜集的信息内容,包括功能需求、性能需求、用户体验需求、安全需求等。 -
Where:从什么地方搜集这些信息。
需要确定搜集信息的来源,可以通过用户访谈、问卷调查、采样、情节串联板、联合需求计划等方式来获取需求信息。 -
How:用什么机制或技术来搜集这些信息。
需要选择合适的机制或技术来进行需求获取,例如使用结构化和非结构化的用户访谈,设计用户调查问卷,采用统计分析技术进行采样,使用情节串联板来讲述故事,以及通过联合讨论会来组织会议等。需求记录技术,如任务卡片、场景说明、用户故事等,也可以用来搜集需求信息。
常见的需求获取方式有:
需求获取方式 | 描述 |
---|---|
用户访谈 | 一对一进行访谈,适合于针对有代表性的用户。形式分为结构化和非结构化两种。 |
问卷调查 | 设计问题、制作成用户调查问卷、下发填写、整理分析。适合用户面广、用户需要灵活时间进行回馈。 |
采样 | 采用统计分析技术,从目标总体中选择出样本集的过程。可以是随机抽样,也可以是非随机抽样。适合用于大量用户信息或者数据信息采集分析,最终得出需求的场景。 |
情节串联板 | 一系列图片,通过这些图片来讲述故事,从而帮助理解用户需求和场景。 |
联合讨论会 | 通过联合关键用户代表、系统分析师、开发团队代表等进行组织的会议,讨论需求,以促进有效的交流和共识形成。 |
需求记录技术 | 使用任务卡片、场景说明、用户故事等方式来记录和描述用户需求,以便后续分析和编写需求规格书。 |
🦋2.2 需求分析
☀️2.2.1 需求分析定义
需求分析是将用户的杂乱无章的要求和期望转化为清晰、准确、可测试、可跟踪的系统需求,并形成最终的需求规约。一个好的需求应具有无二义性、完整性、一致性、可测试性、确定性、可跟踪性、正确性和必要性等特性。
在需求分析过程中,需求分析人员逐步细化软件功能,找出系统各元素之间的联系、接口特性和设计上的限制,并分析它们是否满足需求。不合理的部分被剔除,需要的部分被增加。最终,综合成系统的解决方案,并给出详细的逻辑模型,描述系统的功能和实现方式。
☀️2.2.2 需求分析任务
需求分析的任务包括:
- 绘制系统上下文范围关系图,以帮助理解系统的范围和边界。
- 创建用户界面原型,用于展示系统的外观和交互方式,以便用户和开发团队进行讨论和确认。
- 分析需求的可行性,评估各项需求在技术、资源和时间等方面的可行性和可实现性。
- 确定需求的优先级,将各个需求进行排序,以确保关键需求得到优先满足。
- 为需求建立模型,使用各种符号和图形来描述需求,以便更好地理解和传达需求信息。
- 创建数据字典,对系统中使用的数据进行定义和描述,确保数据的一致性和准确性。
- 使用QFD(质量功能部署),将用户需求与系统设计和开发过程相连接,以确保系统能够满足用户的期望和需求。
☀️2.2.3 需求分析方法
目前,已存在的多种需求分析方法引用了不同的分析策略,常用的分析方法有以下两种:
- 面向数据流的结构化分析方法 (SA)。
- 面向对象的分析方法 (OOA)。
🌈2.2.3.1 面向数据流的结构化分析方法
结构化分析方法的特点是:自顶向下、逐步分解、分析的核心是数据字典。
结构化分析应该建立三种模型:数据模型、功能模型、行为模型:
模型类型 | 描述 | 常用图示 |
---|---|---|
数据模型 | 描述实体、属性和实体间的关系 | 实体关系(E-R)图 |
功能模型 | 描述数据在系统间的传递情况 | 数据流图(DFD) |
行为模型 | 描述系统状态和状态转换的事件,指出系统行为和执行的动作 | 状态转换图(STD) |
🍬2.2.3.1.1 状态转换图(STD)
🍬2.2.3.1.2 数据流图(DFD)
描述数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能建模,数据流图相关概念示例如下:
数据图是一种可以分层的图表,根据层级可以分为顶层数据流图、中层数据流图和底层数据流图。顶层数据流图是最高层的图表,其他数据流图从零开始编号。
数据流图级别 | 描述 |
---|---|
顶层数据流图 | 只有一个加工,代表整个系统。包括输入数据流和输出数据流,表示系统的范围和与外部环境的数据交换关系。 |
中层数据流图 | 对顶层数据流图中的某个加工进行细化,可以再次细化形成子图。中间层次的多少取决于系统的复杂程度。 |
底层数据流图 | 不能再分解的数据流图,其加工称为"原子加工"。 |
🦋2.3 需求规约
☀️2.3.1 需求规约定义
软件需求规约(SRS)是需求分析任务的最终产物,也被称为需求定义或软件需求规格说明书。它通过建立完整的信息描述、详细的功能和行为描述、性能需求和设计约束的说明,以及合适的验收标准,来提供对目标软件的各种需求。作为用户和开发者之间的一个协议,需求规约在软件工程的各个阶段发挥重要作用。
☀️2.3.2 需求规约内容
内容 | 描述 |
---|---|
引言 | 描述软件目标,以计算机系统为背景进行阐述 |
信息描述 | 描述问题的详细说明、信息内容、信息流和信息结构 |
功能描述 | 为每个功能提供处理过程说明,描述设计约束和性能特征,使用图形表示软件的整体结构和与其他系统元素的相互影响 |
行为描述 | 描述软件操作的外部事件和内部控制特征 |
校验标准 | 描述系统成功的测试标准,即哪些测试和结果表示系统已成功实现 |
参考书目 | 引用与软件相关的文档,包括其他软件工程文档、技术参考文献、厂商文献和标准 |
附录 | 包含补充信息、表格数据、算法描述、图表和其他资料等 |
☀️2.3.3 需求规约方法
-
严格定义(又称预先定义)是需求建立在以下基础假设之上:所有需求都能被预先定义;开发人员与用户能准确交流;采用图形(或文字)充分体现最终系统。
-
原型方法是一种迭代循环的开发方式,但需注意并非所有需求都能在系统开发前准确说明。原型提供了克服交流困难的手段,需要实际可供用户参与的系统模型和合适的系统开发环境。反复是完全需要和值得提倡的,一旦需求确定,就应遵从严格的方法。
🦋2.4 需求验证
☀️2.4.1 需求验证定义
需求验证,也称为需求确认,旨在与用户一起确认需求的准确性。这个过程包括两个步骤:需求评审和需求测试。需求评审是对需求规约进行正式或非正式的评审。需求测试则是设计概念测试用例来验证需求。
需求验证作为需求开发阶段的一项工作,旨在复查需求的正确性、完整性和清晰性,以确保它能够准确反映用户的意愿。由于需求的变化可能会导致系统设计和实现的变更,因此,由需求引起的系统变更成本往往比修改设计或代码错误的成本要高得多。为了确保软件需求定义的质量,评审应由专门的人员负责,并按照规程严格进行。除了分析人员外,还应有用户、开发部门的管理者以及软件设计、实现和测试人员参加评审。
需求验证通过后,需要请用户签字确认,作为验收标准之一。此时,需求规格说明书作为需求基线,不可再随意更新。如果需要更改,必须按需求变更流程进行。需要注意的是,需求验证无法发现所有的需求问题。因此,在需求验证之后,无法避免地会对遗漏的需求进行补充,对错误理解进行更正,需求管理是必要的。
☀️2.4.2 需求验证内容
- 确保系统定义的目标与用户的要求一致。
- 检查系统需求分析阶段提供的文档资料是否齐全,以及文档中的描述是否完整、清晰、准确地反映了用户要求。
- 确认被开发项目的数据流与数据结构是否确定且充足。
- 检查主要功能是否已包括在规定的软件范围之内,并且是否都已充分说明。
- 确认设计的约束条件或限制条件是否符合实际。
- 评估开发的技术风险。
- 确保详细制定了检验标准,并且这些标准能够对系统定义进行确认。
🦋2.5 需求管理
☀️2.5.1 需求管理定义
软件需求管理是指在软件项目进行过程中,通过一系列的活动来识别、控制和跟踪需求。它涉及需求工程的规划和控制,以获取、组织和记录系统需求,并使用户和项目团队在不断变更的需求上达成一致。需求管理是确保软件开发过程中需求的正确性、一致性和有效性的关键过程。它帮助项目团队确定和理解用户需求,并在开发过程中追踪和管理这些需求的变化。
在需求管理中,每个需求被赋予唯一的标识符,这种需求的唯一标识符通常被称为需求ID,它可以是一个数字、字母或组合的代码。通过为需求建立跟踪表,可以清楚地记录需求与其他相关文档或代码的关系,方便跟踪和管理需求的变更和演化过程。
特征跟踪表:
需求ID | 特征1 | 特征2 | 特征3 | … |
---|---|---|---|---|
REQ001 | 是 | 否 | 是 | … |
REQ002 | 否 | 是 | 否 | … |
REQ003 | 是 | 是 | 是 | … |
… | … | … | … | … |
来源跟踪表:
需求ID | 来源1 | 来源2 | 来源3 | … |
---|---|---|---|---|
REQ001 | 用户反馈 | 业务需求 | … | … |
REQ002 | 业务需求 | … | … | … |
REQ003 | 用户反馈 | 业务需求 | 用户调研 | … |
… | … | … | … | … |
依赖跟踪表:
需求ID | 依赖需求1 | 依赖需求2 | 依赖需求3 | … |
---|---|---|---|---|
REQ001 | REQ002 | REQ003 | … | … |
REQ002 | REQ004 | … | … | … |
REQ003 | REQ002 | REQ005 | … | … |
… | … | … | … | … |
跟踪表可以包含以下信息:
- 需求ID:每个需求的唯一标识符。
- 需求描述:对需求的详细描述。
- 需求状态:需求的当前状态,如提出、评审中、已实现等。
- 需求优先级:需求的优先级,用于确定开发和测试的顺序。
- 需求来源:需求的来源,如业务需求、用户反馈等。
- 需求关系:需求与其他需求或文档的关系,可以是包含关系、依赖关系等。
- 需求变更历史:需求的变更记录,包括变更原因、变更内容和变更日期等。
这些跟踪表可以用于需求跟踪。在整个开发过程中,进行需求跟踪的目的是为了建立和维护从用户需求开始到测试之间的一致性与完整性,确保所有的实现是以用户需求为基础,所有的输出符合用户需求,并且全面覆盖了用户需求。
☀️2.5.2 版本控制
是的,版本控制在需求管理中起到非常重要的作用。通过版本控制,可以确保团队和用户之间对需求的共识,并定义需求的基线。一旦需求规约经过评审并形成了需求基线,下次如果有需求变更,则需要按照一定的流程进行处理。
版本控制可以通过以下步骤来进行:
-
需求规约评审:一旦完成了需求规约的编写,团队需要进行评审,确保需求规约的准确性和完整性。只有通过了评审的需求规约才能被视为需求基线。
-
变更请求:如果有任何需求变更的请求,用户或团队可以提交变更请求。变更请求应该包含详细的变更描述和原因。
-
变更评估:变更请求被接收后,团队需要对变更进行评估。评估包括分析变更的影响范围、资源需求、时间计划等。
-
变更批准:根据变更评估结果,团队确定是否批准变更请求。如果批准,团队将进行相应的变更实施。
-
变更实施:团队根据批准的变更请求进行相应的变更实施,更新需求规约或其他相关文档。
☀️2.5.3 需求跟踪
1、 需求跟踪
需求跟踪是确保软件开发过程中满足用户需求的一种方法。正向跟踪和逆向跟踪是两种常用的需求跟踪方式。
正向跟踪是从用户需求出发,通过检查需求规约中的每个需求是否在后继工作产品中找到对应点来进行跟踪。简单来说,就是核对用户原始需求是否都已实现。
逆向跟踪则是从工作产品出发,检查设计文档、代码、测试用例等产品是否能在需求规约中找到对应的来源。简单来说,就是检查软件实现是否符合用户需求。
2、状态跟踪
整个项目过程中,要始终跟踪需求状态即变更情况
☀️2.5.4 变更控制
🌈2.5.4.1 变更控制的风险
变更控制是项目管理中关键的一环,其主要目标是管理需求的变更,确保变更的合理性和有效性。在需求变更过程中,存在一些潜在的风险,需要进行风险管理。
以下是一些带有风险的做法:
风险因素 | 描述 |
---|---|
无足够用户参与 | 如果项目团队缺乏与最终用户的充分沟通和合作,可能导致对用户需求的误解和遗漏,最终影响项目的成功。 |
忽略用户分类 | 不同用户群体有不同的需求和优先级,忽略了用户分类可能导致无法满足某些重要用户群体的需求,降低项目价值。 |
用户需求的不断增加 | 如果在项目进行过程中,不断有新的需求被提出并接受,可能导致项目进度延迟和成本增加。 |
模棱两可的需求 | 如果需求描述模糊不清或存在歧义,可能导致开发过程中产生错误理解,最终交付的产品不符合预期。 |
不必要的特性 | 如果项目团队在需求变更过程中不加以筛选和评估,可能导致添加不必要的特性,增加开发成本和复杂性。 |
过于精简的SRS | 如果需求文档(SRS)过于简单和不完整,可能导致对需求的理解不准确或遗漏,影响项目的规划和实施。 |
不准确的估算 | 如果在需求变更过程中对成本、时间和资源的估算不准确,可能导致项目延期、超支和资源不足。 |
🌈2.5.4.2 变更控制的原因
变更原因 | 描述 |
---|---|
外部环境的变化 | 市场需求的变化、竞争对手的新产品推出、法规政策的调整等,都可能导致业务流程和需求发生变化,从而需要进行变更。 |
需求和设计不够完整 | 在项目开始阶段,需求和设计可能未能考虑到所有情况,或者在实施过程中发现了一些问题,需要进行相应的调整和变更。 |
新技术的出现 | 随着科技的不断发展,新的技术可能提供了更好的解决方案,或者能够提高效率和质量,因此需要对原有系统进行升级或变更。 |
公司机构重组 | 公司的组织结构发生调整,业务流程可能会有所变化,需要调整相应的系统和流程来适应新的组织架构。 |
🌈2.5.4.3 变更控制委员会
变更控制委员会(Change Control Board, CCB)是一个负责评价、审批和监督变更的组织机构。它也被称为配置控制委员会。CCB通常由项目经理、技术专家、利益相关者和其他相关人员组成。它的任务包括:
CCB职责 | 描述 |
---|---|
评价变更建议 | CCB会对提出的配置项变更建议进行评估,包括对其目的、范围、影响和风险等方面进行分析和评估。 |
审批变更请求 | CCB对变更请求进行审批,决定是否将其纳入项目的变更控制流程中。审批过程可能包括讨论、投票和达成共识。 |
监督已批准的变更 | 一旦变更请求得到批准,CCB负责监督变更的实施过程,确保按照批准的计划和要求进行变更。 |
跟踪和报告变更 | CCB跟踪所有已批准的变更,并定期向相关人员报告变更的状态和结果。 |
风险管理 | CCB也需要评估变更可能带来的风险,并提出相应的控制措施,以最大程度地减少对项目的负面影响。 |
🌈2.5.4.4 变更控制的内容
- 需求变更需要经过正式评估来决定是否批准:变更控制的核心是确保对需求变更进行评估和决策,以避免不必要的变更带来的影响和风险。在变更控制过程中,需求变更将经过严格的评估,包括对变更的必要性、影响和可行性进行分析和讨论,以决定是否批准变更。
- 保持项目计划与需求的同步:变更控制的一个重要目标是确保项目计划与需求的一致性和同步。当需求发生变更时,需要及时修改项目计划,并确保所有相关方了解和同意这些变更。这有助于确保项目在变更发生时能够及时做出相应的调整,以保证项目的进度和质量。
- 以可控制的方式将需求变更融入项目中:变更控制的另一个重要目标是确保需求变更能够被有效地管理和融入项目中。这包括定义变更的优先级和紧迫性,制定变更实施计划,确保变更的可控性和可追踪性,以及对变更进行适当的测试和验证。
- 估计变更需求产生的影响,并协商新的约定:在变更控制过程中,需要对变更需求产生的影响进行估计,并与相关方进行协商,制定新的约定和规划。这包括对项目进度、成本、资源和风险等方面的影响进行评估,以及与相关方就变更的实施和后续工作进行协商和达成一致。这有助于确保变更的顺利实施,并最大程度地减少变更造成的不利影响。
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)