需求工程是软件开发过程中的关键环节,它涵盖了从识别用户需求到管理这些需求的整个过程。这一章主要探讨了需求工程的多个方面,包括需求工程的概述、需求获取、需求分析与协商、系统建模、需求规约、需求验证以及需求管理。
需求工程概述涉及到从项目的初始阶段直到软件架构构建之前的全部活动。Alan Davis将其定义为涵盖所有这些阶段的过程,而Herb Krasner则提出了需求工程的五阶段生命周期,包括需求定义和分析、需求决策、形成需求规格、需求实现与验证、需求演进管理。Matthias Jarke和Klaus Pohl提出了三阶段周期的概念,即获取、表示和验证。本书则将需求工程进一步细分为六个阶段,更具体地指导实践操作。
需求获取是需求工程的第一步,系统分析员通过与用户交流、观察现有系统和任务分析来确定系统或产品的限制、相关人员和特性、技术环境、功能列表、领域限制以及应用场景。这一阶段的工作产品为后续的需求分析奠定了基础。
需求分析与协商紧随其后,分析员对需求进行分类和组织,检查它们的一致性、重叠和遗漏,并处理可能存在的冲突。此阶段可能会遇到用户需求超出软件能力范围或用户间需求冲突的问题。
系统建模是通过建模工具来促进用户与分析员之间的理解和沟通,帮助分析员分析和澄清需求,确保需求文档准确反映用户的需求。常用的建模方法包括面向数据流、面向数据结构和面向对象的方法。
需求规约是需求分析的结果,它详述了软件的完整信息描述、功能和行为、性能需求、设计约束和验收标准,是用户与开发者之间的重要合同。
需求验证是对需求正确性、完整性和清晰性的检查,以保证需求质量。这个过程通常包括正式的评审,由指定人员按照既定规程进行。
需求管理则关注于规划和控制需求的整个生命周期,包括获取、组织、记录和更新,以应对需求变更并保持用户和项目团队的一致性。
软件需求的类型多样,包括功能需求、性能需求、用户因素、环境需求、界面需求、文档需求、数据需求、资源使用、安全保密、可靠性、软件成本和进度、以及其他非功能性要求。需求获取的方法和策略包括建立有效的沟通渠道、访谈、调查、观察用户操作、以及使用用况等方法。
需求工程是一个迭代且交互的过程,各个阶段并非线性执行,而是会根据实际情况反复调整和优化。这一章深入探讨了需求工程的各个方面,对于理解软件开发过程的重要性及其实施方法具有很高的价值。