第二章 需求工程
第二节 需求获取与分析
概述
需求获取与分析是软件工程中极其关键的阶段,它直接决定了项目的成功与否。本节将详细介绍需求获取与分析的基本概念、核心方法、工作流程以及实际应用。通过本节学习,考生将能够系统掌握如何准确、有效地收集用户需求,分析并转化为规范、可实现的需求规格,为后续设计、开发和测试阶段奠定坚实基础。
核心概念
- 需求(Requirement):指软件系统必须具备的功能、性能或属性,是用户和系统之间的桥梁。
- 需求获取(Requirements Elicitation):指通过多种手段从用户、利益相关者处收集需求信息的过程。
- 需求分析(Requirements Analysis):对收集的需求信息进行分类、整理、矛盾识别和优先级排序的过程,确保需求的完整性、一致性和可行性。
- 利益相关者(Stakeholders):包括用户、客户、开发团队、测试人员和维护人员等所有与软件系统相关的人员。
- 需求规格说明书(SRS):用来详细描述需求的文档,作为设计和开发的依据。
原理分析
需求获取与分析的核心在于沟通与理解。软件开发人员需要通过多种技术手段与利益相关者进行有效沟通,挖掘并澄清用户的真实需求。需求通常是隐含、模糊甚至相互冲突的,因此分析阶段要通过系统方法解决矛盾,保证需求的准确性和完整性。
需求获取原理
- 多渠道收集:通过访谈、问卷、观察、研讨会等多种方式,获取多角度需求信息。
- 用户参与:保持用户及利益相关者的持续参与,减少遗漏和误解。
- 需求记录:及时、准确地记录需求,避免信息丢失。
需求分析原理
- 分类整理:将需求分为功能性与非功能性需求,便于后续处理。
- 冲突识别与解决:通过沟通和权衡,消除或协调需求间的矛盾。
- 优先级排序:根据项目目标、资源、风险等因素确定需求的实现顺序。
- 可行性分析:评估需求从技术、资金、时间等方面的可实现性。
详细内容
1. 需求获取方法
需求获取是发现并收集用户需求的过程,主要方法包括:
访谈法
访谈是最直观的需求获取方式,分为结构化、半结构化和非结构化访谈。结构化访谈有固定问题,便于比较;非结构化访谈更灵活,适合挖掘隐含需求。问卷调查法
通过设计合理问卷,向大量用户收集需求信息,适用于需求范围广泛的项目。观察法
通过观察用户实际使用系统或业务流程,发现潜在需求及问题,尤其适合用户难以明确表达需求的场景。文档分析法
研究已有的相关文档,如业务流程图、政策文件、系统手册,提炼出隐含的需求。用户故事和用例法
通过描述用户行为场景和目标,帮助开发团队理解用户需求和系统边界。研讨会和头脑风暴
多方参与者共同讨论,集思广益,快速产生大量需求想法。
2. 需求分析步骤
需求分析是将收集来的需求进行整合和处理,主要步骤包括:
需求分类
将需求分为功能需求(系统必须执行的操作)和非功能需求(性能、安全性、可靠性等)。需求精炼
去除冗余、模糊和不合理需求,确保表达准确。冲突检测与协调
利用需求审查会议等方式,发现并解决需求之间的冲突。优先级确定
采用MoSCoW法(Must have, Should have, Could have, Won't have)等方法,确定需求实现的先后次序。需求验证
通过评审、原型设计等方式确认需求的正确性和完整性。
3. 需求规格说明书(SRS)编写
SRS是需求工程的最终输出,结构通常包括:
- 引言(目的、范围、定义术语)
- 总体描述(产品视角、功能概述、用户特征、限制条件)
- 具体需求(详细功能需求、性能需求、接口需求、安全需求等)
- 其他信息(附录、参考文献)
SRS要求内容准确、完整、可验证,避免歧义和不确定性。
实例分析
案例一:银行网上系统需求获取与分析
背景:某银行计划开发网上银行系统,目标是让客户能随时随地进行账户查询、转账和缴费。
分析:
- 采用访谈法与银行职员、客户进行深度访谈,明确主要功能。
- 通过观察法了解客户操作习惯,发现客户对界面简洁度和响应速度有较高要求。
- 在需求分析阶段,发现客户对安全性要求较高,需增加多因素认证。
结论:
- 需求规格中着重描述功能性需求和严苛的安全需求。
- 优先开发账户查询和转账功能,缴费功能作为后续迭代。
案例二:电商平台需求获取过程
背景:某电商平台希望升级购物流程,提升用户体验。
分析:
- 采用问卷调查收集大量用户意见,发现购物车功能不够友好。
- 组织头脑风暴研讨会,团队提出增加智能推荐功能。
- 通过原型设计验证需求合理性。
结论:
- 优先完善购物车交互,兼顾个性化推荐。
- 规范SRS,明确非功能性需求如响应时间、系统稳定性。
案例三:医疗管理系统需求分析
背景:医疗机构需要一套病历管理系统,支持医生快速查询患者信息。
分析:
- 访谈医生和护士,了解使用场景和需求。
- 文档分析现有病历管理流程,发现流程繁琐,存在效率瓶颈。
- 需求分析确定关键性能指标和数据安全要求。
结论:
- 系统设计强调快速响应和用户权限管理。
- 需求规格详细列出接口规范和数据加密要求。
常见误区
- 只依赖单一获取方法:依赖单一方式(如只访谈)可能遗漏部分需求,正确做法是结合多种方法。
- 忽视用户真实需求:只听用户表面需求,忽略潜在需求,需深入分析和验证。
- 需求表达模糊或不完整:导致后续开发偏差,需使用明确、具体的语言。
- 忽略需求冲突:未及时发现冲突导致项目风险,需开展定期需求审查。
- 未进行需求优先级排序:导致资源浪费和进度问题,需科学排序。
应用场景
- 软件项目启动阶段需求梳理
- 系统升级和维护需求收集
- 多方利益相关者需求协调
- 敏捷开发中的用户故事编写
- 大型系统的需求管理和变更控制
知识拓展
- 需求工程中的原型设计:通过快速制作原型帮助用户理解和确认需求。
- 需求变更管理:需求在开发过程中会变化,需建立变更控制流程。
- 需求追踪矩阵:记录需求与设计、测试用例的对应关系,确保需求实现。
- 需求优先级模型:如Kano模型,帮助理解用户满意度。
总结回顾
本节重点围绕需求获取与分析展开,详细阐述了需求的定义与重要性,介绍了多种需求获取方法及其适用场景。通过系统的需求分析流程,强调了需求的分类、冲突解决、优先级排序及需求规格说明书的编写。结合典型案例,帮助考生理解实际操作中的挑战与解决方案。掌握本节内容,有助于考生在实践中准确、全面、高效地完成需求工程任务,为软件项目成功奠定基础。