知识卡片
需求捕获、需求分析、系统分析的区别与交叉
内容
“需求分析”这个笼统说法背后其实包含三种性质不同的活动。需求捕获是获取知识的过程,知识从无到有、从少到多,需求采集者必须理解用户的工作、了解用户和客户希望软件在哪些方面提供帮助。需求分析是挖掘和整理知识的过程,建立在已捕获知识的基础上——初步捕获到的信息往往层次不齐、夹杂主观甚至不正确的成分,经过分析后需求会更系统、更有条理、更全面。系统分析则已经开始涉及”怎么做”的问题:如果说需求分析致力于搞清楚软件系统”做什么”,系统分析就是”针对系统所要面临的问题,搜集相关资料,了解产生问题的原因所在,进而提出解决问题的方法与可行的逻辑方案”,本质上约等于初步的高层设计。一个常见的错误认识是把需求捕获和需求分析当成两个先后独立的阶段——”先集中捕获全部需求,再集中分析”这种做法在实践中效果差、容易引起大量需求变更,因为真实情况是”问题→解决方案→衍生问题→解决方案→……”的循环链条:需求工作伊始需求捕获占主导,随着信息增多需求分析比重逐渐上升,而上一级的解决方案对下一级往往又意味着新的待解决问题,需求分析连带出系统分析的工作是完全正常的,三者相互伴随、交叉进行,不是三个界限分明的顺序阶段。另一个常见混淆是把需求分析和系统分析混为一谈——很多所谓”需求分析文档”其实混入了大量系统设计内容,根源在于业界对”分析”这个术语本身有多种不同理解(有时指需求分析、有时指系统分析、有时是两者的统称),忽略这种术语歧义、在讨论中随意替换,正是导致需求分析和系统设计工作互相”越界争功”的根源。需要特别提醒的是:掌握了面向对象分析(OOA)技能不等于掌握了需求分析——OOA本质上是一种系统分析技能,对需求分析的很多内容并不涵盖。
参考来源
- 位置:《软件架构设计:程序员向架构师转型必备》第5章《需求分析》"5.2.1 需求捕获vs.需求分析vs.系统分析"节(源文件:_epub-src/OEBPS/text00008.html)
- 结论依据:原文分别定义需求捕获("获取知识的过程")、需求分析("挖掘和整理知识的过程")、系统分析("已经开始涉及'怎么做'的问题"),并指出"将需求捕获和需求分析视为两个阶段,这是错误的",同时引用邵维忠、杨芙清对"分析"术语歧义的论述,直接支撑本卡片结论。
- 原始内容:需求分析是搞清楚系统"做什么"。系统分析,关注系统"怎么做"。更直白地说,系统分析≈初步的高层设计……很多"需求分析"内容并不涵盖……认为掌握了OOA就能做需求分析了,结果会"死得很难看"。