需求工程
需求工程是一门关于发现、分析、文档化、验证和管理软件系统必须做什么以及它必须在何种约束下运行的学科。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
需求工程是系统地获取、分析、规范、验证和管理软件系统应提供的服务及其操作和开发约束的过程。
Scope
该领域涵盖了干系人需求的获取;冲突目标的分析和协商;功能性需求和非功能性(质量)需求之间的区分;从自然语言陈述到形式化模型的规范技术;通过评审和原型验证;以及整个生命周期中需求变更和可追溯性的管理。
Sub-topics
Core questions
- 如何发现和消除干系人真实需求的歧义?
- 功能性和非功能性需求应如何精确而易懂地进行规范?
- 如何检测、协商和解决冲突的需求?
- 需求在变更时如何进行验证并保持一致性?
Key theories
- 功能性需求与非功能性需求
- 需求被划分为关于系统必须做什么的功能性陈述,以及诸如性能、安全性、可用性等非功能性(质量)约束,这些约束通常贯穿整个系统并驱动架构。
- 面向目标的需求工程
- 系统根据干系人目标进行分析,这些目标被细化为子目标并操作化为需求,从而提供了从高层意图到系统功能的理由、冲突检测和可追溯性。
Clinical relevance
需求错误是最昂贵的缺陷之一,因为它们会传播到设计和代码中;严格的需求工程可以减少返工,使交付的软件与干系人需求保持一致,并为验收测试和合同协议提供基础。
Evidence & guidelines
ISO/IEC/IEEE 29148规定了需求工程过程和需求规范的内容,而SWEBOK软件需求知识领域提供了共识参考。
History
需求工程从20世纪70年代的结构化分析方法发展而来,到20世纪90年代成为一个公认的子学科,其标志是专门的会议(RE)和期刊的出现,面向目标和场景建模的兴起,以及对非功能性需求和干系人协商的日益关注。
Debates
- 前期需求与涌现需求
- 计划驱动的实践倾向于在构建之前彻底规范需求,而敏捷实践则将需求视为涌现的,并通过迭代进行完善;权衡取决于波动性、合同约束和后期变更的成本。
Key figures
- Axel van Lamsweerde
- Bashar Nuseibeh
- Steve Easterbrook
- Michael Jackson
Related topics
Seminal works
- vanlamsweerde2009
- nuseibeh2000
- sommerville2015
Frequently asked questions
- 为什么需求错误如此昂贵?
- 一个被误解或缺失的需求通常只有在设计和代码已经建立在其基础上之后才会被发现,因此纠正它需要撤销下游工作;实证研究一致表明,缺陷发现得越晚,修复成本急剧上升。
- 敏捷项目是否进行需求工程?
- 是的,但方式不同。敏捷项目通过用户故事、待办事项列表完善和频繁反馈持续获取、分析和验证需求,而不是预先生成一份大型规范文档。