系统架构设计师笔记第13期：需求工程
需求工程（Requirements Engineering）是软件工程中的一个关键过程，旨在识别、分析、规范和验证软件系统的需求。它涉及与相关利益相关者合作，以确保对软件系统的需求达成一致，从而为后续的设计、开发和测试活动提供基础。需求工程通常包括以下活动：
- 需求收集：在此阶段，与项目相关的各方（例如客户、用户、利益相关者）进行沟通和讨论，以了解他们的期望、需求和目标。这可以通过面对面的会议、访谈、问卷调查和用户反馈等方式完成。
- 需求分析：在这一阶段，收集到的需求被细化、分解和整理，以便更好地理解和描述软件系统的功能、性能和约束。需求分析过程可能包括对现有系统的研究、业务流程的建模、数据流程的分析等。
- 需求规格说明：在此阶段，将需求以明确、一致和可测量的方式进行规范化和文档化。需求规格说明可能采用自然语言描述、用例模型、流程图、数据字典等形式。此文档将作为后续开发和测试的基础。
- 需求确认：在需求规格说明完成后，与相关的利益相关者（例如客户、用户、开发团队）进行确认，确保需求的理解和一致性。这可能涉及到举行会议、审查和验证需求规格说明文档。
- 需求变更管理：需求是一个动态的过程，可能会受到各种因素的影响而发生变化。在整个软件开发过程中，需要建立适当的变更管理机制，以评估和管理需求变更的影响，确保变更的控制和一致性。
- 需求跟踪和追踪：在软件开发的后续阶段，需要确保每个需求的实现和验证。需求跟踪和追踪可以通过需求跟踪矩阵、测试用例和缺陷跟踪系统等方式实现，以确保每个需求都得到满足。
软件需求过程是一个迭代的过程，可能需要多次迭代和修改，以确保需求的完整性和准确性。同时，需求过程也需要与其他开发过程（如设计、开发和测试）相互配合和交互。
需求获取
软件的需求获取是指收集、理解和记录软件系统的需求的过程。以下是一些常见的软件需求获取方法：
- 面对面会议：组织与客户、用户和其他利益相关者的面对面会议，以深入了解他们的需求和期望。这种方法能够促进实时的沟通和互动，有助于获取详细的需求信息。
- 问卷调查：设计和分发问卷，以便用户和其他相关人员可以在自己的时间内提供他们的需求和意见。问卷调查可以扩大需求收集的范围，并提供对大量用户的观点和反馈。
- 访谈：与关键利益相关者进行一对一的访谈，以深入了解他们的需求和期望。通过直接对话，可以提出更具体的问题，并获得详细和准确的需求信息。
- 观察和用户研究：观察用户在实际工作环境中使用现有系统或进行特定任务的情况。这样可以了解用户的工作流程、需求和痛点，并获取实际场景中的需求信息。
- 原型演示：创建原型或演示系统，以展示软件的基本功能和界面。通过与用户交互和反馈，可以获取对系统的需求和改进意见。
- 文档分析：分析相关的文档，如业务规范、用户手册、现有系统文档等。通过分析这些文档，可以获得对业务需求和系统功能的理解。
- 利益相关者工作坊：组织利益相关者工作坊，邀请相关人员一起讨论和共享他们的需求和期望。这种方法有助于促进合作和协商，并获得来自不同角度的需求信息。
- 历史数据分析：分析历史数据和现有系统的使用情况，以了解需求和模式。这可以通过日志文件、数据库记录和用户反馈等数据源进行。
需求获取过程中的关键是与利益相关者的密切合作和沟通，以确保全面、准确地收集需求信息。多种方法的组合和适应特定项目和情况的方法选择是很重要的。
需求变更
软件需求变更是指在软件开发过程中，已经定义或已确认的需求发生了修改、调整或新增的情况。需求变更是常见的，并且在软件开发过程中是难以避免的，因为需求可能会受到各种因素的影响，例如客户的新要求、市场变化、技术限制等。
以下是软件需求变更的一般过程：
- 变更请求提出：任何人员（例如客户、用户、项目经理、开发人员）都可以提出需求变更请求。请求可以以口头或书面形式提出，并包括对变更的详细说明和原因。
- 变更评估：变更管理团队评估变更请求的影响和可行性。他们会考虑变更对项目范围、时间、成本和风险的影响，并与相关利益相关者进行讨论和沟通。
- 变更影响分析：在评估变更的可行性后，需要对变更进行影响分析。这包括评估变更对软件系统的功能、性能、架构、接口、测试和文档等方面的影响。
- 变更批准/拒绝：根据变更评估和影响分析的结果，变更管理团队决定是否批准变更请求。如果变更被批准，它将被纳入软件开发过程中。如果变更被拒绝，将向相关方解释拒绝的原因。
- 变更实施：一旦变更请求获得批准，变更将被纳入软件开发过程中。这可能涉及更新需求文档、设计文档、代码实现、测试计划等。
- 变更验证和确认：完成变更实施后，需要对变更进行验证和确认。这可能包括对系统进行测试、与相关利益相关者进行验收和确认，以确保变更已经按照预期进行。
需要注意的是，需求变更的管理是一个迭代的过程，可能会有多个变更请求和变更周期。为了有效地管理需求变更，通常会建立一个变更管理机制和流程，确保变更被适当地评估、控制和记录。同时，需求变更也需要与其他开发过程（如设计、开发和测试）进行协调和同步。
需求追踪
软件工程的需求追踪是指在软件开发过程中跟踪和管理需求的状态、实现和验证过程。它旨在确保每个需求都得到满足，并与相关的设计、开发和测试活动保持一致。以下是软件工程中需求追踪的一般步骤和方法：
- 需求标识：为每个需求分配唯一的标识符或编号，以便在整个开发过程中进行标识和引用。标识符可以是简单的数字、字母组合或包含项目和模块信息的复杂标识。
- 需求跟踪矩阵：创建需求跟踪矩阵，它是一个表格，用于记录每个需求的状态、实现和验证情况。矩阵通常包含需求标识、需求描述、实现状态、测试状态、验证结果等字段。
- 链接和关系建立：建立需求之间的链接和关系，以便在变更和追踪时能够追溯其相互之间的依赖关系。这可以通过使用矩阵中的字段或特定工具来实现，例如需求管理工具或跟踪系统。
- 需求实现跟踪：跟踪需求的实现过程，包括设计、编码、集成等活动。记录每个需求的实现状态，以便了解它们是否已经或正在被开发团队实现。
- 需求测试跟踪：跟踪需求的测试过程，包括测试计划、测试用例的编写和执行等活动。记录每个需求的测试状态，以了解其是否通过了相应的测试。
- 需求验证和验收：在需求完成后，进行需求的验证和验收过程。与相关的利益相关者一起评审需求，并确认其是否满足了预期的功能和性能要求。
- 缺陷跟踪：如果在测试或验收过程中发现了与需求相关的缺陷或问题，记录并跟踪这些缺陷，以便进行修复和验证。
- 审查和审核：定期审查需求追踪矩阵和相关文档，确保需求的准确性、一致性和完整性。
需求追踪的关键是保持良好的文档记录和跟踪机制。这可以通过手动的方法（如使用电子表格）或使用专门的需求管理工具和跟踪系统来实现。这些工具通常提供自动化的需求追踪和报告功能，帮助团队更有效地管理需求的状态和变更。