第二章 需求工程
第二节 需求获取与需求分析方法
概述
需求工程是软件开发的基础环节,而需求获取与需求分析则是需求工程中最关键的两个阶段。本节内容旨在帮助学习者系统掌握需求获取的基本方法及技巧,以及如何进行需求分析,从而准确理解和定义软件系统应满足的功能和性能要求。通过深入讲解需求获取与需求分析的概念、步骤、方法和工具,配合典型案例分析,帮助考生建立严密的需求思维,提升需求工程的实战能力。
学习目标:
- 理解需求获取和需求分析的定义与区别
- 掌握常用的需求获取技术和方法
- 熟悉需求分析的流程和工具
- 能够识别和解决需求获取与分析过程中的常见问题
- 通过案例掌握实际需求工程的操作技巧
核心概念
需求(Requirement):指软件系统必须具备的功能、性能、约束和属性,是用户对系统的期望和要求。
需求获取(Requirements Elicitation):收集和发现用户需求的过程,确保需求的全面性和准确性。
需求分析(Requirements Analysis):对获取的需求进行分类、细化、验证和组织,形成清晰、一致的需求规格说明。
需求规格说明书(SRS, Software Requirements Specification):详细描述软件系统需求的正式文档。
利益相关者(Stakeholders):涉及项目的所有人员,包括用户、客户、开发团队、管理者等。
用例(Use Case):描述系统与外部实体交互的场景,体现功能需求。
需求优先级:对需求的重要性和实现顺序进行排序。
原理分析
需求获取的原理
需求获取的目的是从各种利益相关者那里收集完整、真实且有效的需求信息。需求可能隐含、模糊或相互冲突,因此获取过程需要采用多种技术手段,确保信息的准确性和全面性。需求获取不仅是信息收集,更是沟通和理解的过程,强调与用户和其他利益相关者的互动。
需求分析的原理
需求分析基于获取的需求信息,进行系统化梳理和处理。分析过程包括需求分类(功能需求、非功能需求)、识别需求间的关系和依赖、消除矛盾和模糊点、进行需求验证和确认。分析结果应形成规范化、可理解、无歧义的需求规格。
需求分析强调需求的可行性、完整性和一致性,同时兼顾系统设计的可实现性。
详细内容
1. 需求获取方法
需求获取是需求工程的第一步,常用的方法包括:
访谈法:通过与用户或利益相关者进行一对一或小组访谈,获取需求信息。
- 优点:可深入了解用户需求背景和动机,灵活互动。
- 缺点:依赖访谈技巧,可能遗漏隐性需求。
问卷调查法:设计结构化问卷,收集大量用户的需求意见。
- 优点:效率高,适合大规模用户。
- 缺点:难以获取深入信息,设计问卷难度大。
观察法:观察用户实际工作流程和行为,发现隐含需求。
- 优点:真实反映用户操作,有助于发现未表达的需求。
- 缺点:耗时,可能受观察者影响。
头脑风暴法:组织利益相关者集体讨论,激发创意和需求。
- 优点:多角度提出需求,促进创新。
- 缺点:管理复杂,可能出现偏离主题。
文档分析法:分析现有系统文档、规范、报告等资料。
- 优点:节省时间,获取历史需求。
- 缺点:可能过时或不完整。
原型法:构建软件原型,帮助用户形象化表达需求。
- 优点:直观,易于沟通和修改。
- 缺点:制作成本较高,易引起误解。
2. 需求分析流程
需求分析一般包括以下步骤:
- 需求分类:将需求划分为功能需求、性能需求、约束条件等。
- 需求细化:将高层需求拆解为具体的子需求。
- 需求冲突识别与解决:发现需求间的矛盾,协调利益相关者达成一致。
- 需求优先级确定:根据重要性和实现难度排序。
- 需求建模:使用用例图、数据流图等工具进行需求表达。
- 需求验证:确认需求的正确性和一致性。
- 需求规格说明书编写:形成正式文档。
3. 需求建模技术
- 用例图:展示系统功能及其与外部用户的交互。
- 数据流图(DFD):描述信息流动和处理过程。
- 状态图:展示系统状态及状态间的转变。
- 实体关系图(ER图):描述数据及其关系。
4. 需求文档编写规范
- 语言应准确、简洁、无歧义。
- 应包括需求编号、描述、优先级、来源、验证方法。
- 结构清晰,便于维护和更新。
实例分析
案例一:图书管理系统需求获取与分析
背景:某高校图书馆计划开发一套图书管理系统,实现图书借阅、归还、查询等功能。
需求获取:通过访谈图书管理员和学生用户,结合观察现有管理流程,收集需求。
分析:对需求进行分类,发现部分需求存在冲突,如管理员和学生对借阅期限的不同期待。通过会议协调,确定统一的借阅期限规则。
结论:采用用例图描述主要功能,形成需求规格说明书,为后续设计提供基础。
案例二:电子商务系统需求分析
背景:电商平台需要开发新功能,实现用户评价和推荐。
需求获取:采用问卷调查收集用户意见,结合头脑风暴讨论新功能设计。
分析:将用户需求细化为评价功能、评分机制、推荐算法接口等子需求,明确优先级。
结论:通过用例建模和数据流图,明确系统功能和数据流,确保需求完整。
案例三:医院预约挂号系统需求分析
背景:医院希望推出网上预约挂号,提高挂号效率。
需求获取:访谈医生、护士、患者,观察挂号流程,发现现有流程繁琐。
分析:识别关键需求如身份验证、预约时间选择、挂号费用支付等,明确非功能需求如系统响应时间。
结论:制定详细需求规格,确保系统设计满足用户需求。
常见误区
忽视隐性需求:只关注用户显性表达的需求,忽略潜在需求,导致系统功能不完整。
- 正确做法:结合观察法和原型法,挖掘隐含需求。
需求获取过于依赖单一方法:如仅通过访谈,信息片面。
- 正确做法:多种方法结合,覆盖全面。
需求分析不充分,草率形成规格说明:导致后续开发反复修改。
- 正确做法:严格分析、验证,确保需求准确。
忽视需求间的冲突:未及时解决需求矛盾,影响系统设计。
- 正确做法:协调利益相关者,统一需求。
需求优先级不明确:导致资源分配和开发顺序混乱。
- 正确做法:明确优先级,合理安排开发计划。
应用场景
- 软件项目启动阶段的需求调研与分析
- 需求变更管理中的需求重新获取与评估
- 新系统替换老系统时的需求迁移与确认
- 面向用户定制软件解决方案的需求沟通
- 质量保证过程中需求验证与确认
知识拓展
需求管理(Requirements Management):需求获取和分析后,如何跟踪和控制需求变更,确保项目顺利进行。
敏捷需求获取:敏捷开发环境中需求获取的持续性和迭代性特点。
需求工程工具:如JIRA、DOORS等工具在需求管理和分析中的应用。
非功能需求的分析:安全性、可靠性、性能等非功能需求的特殊处理方法。
需求验证技术:评审、原型验证、测试用例设计等方法。
总结回顾
需求获取与需求分析是软件开发生命周期中至关重要的环节。准确、全面的需求获取为系统开发奠定坚实基础,而科学严谨的需求分析则保证需求的合理性和可实现性。本节重点讲解了需求获取的多种方法及其特点,详细阐述了需求分析的流程和建模技术,配合典型案例帮助理解实际操作。掌握这些内容能够有效避免需求错误和遗漏,提高软件项目成功率。
考生应重点掌握:需求获取与分析的定义、方法、流程和注意事项;如何运用建模工具表达需求;识别并解决需求冲突;编写规范的需求规格说明书;以及结合实际案例提高实战能力。
关键词汇总结
- 需求获取
- 需求分析
- 用例建模
- 需求规格说明书
- 需求优先级
- 利益相关者
- 需求验证