需求术语的概览
什么是需求?什么是需求分析?什么是需求跟踪?什么是需求获取?什么是需求规格?什么是需求验证?什么是需求变更?……一堆关于需求的问题,一堆关于需求和需求管理的恼人问题,需求真的很重要吗?那为什么如此难以把握?为什么在软件工程中如此难以应用呢?
您作为从事项目开发,尤其是软件项目开发的负责人,需求分析师,系统架构师,程序员,测试人员,维护人员,项目的使用者,只要您是项目开发和应用中的一位成员,您一定思考过上述的问题,或许您曾为此问题曾经与人激烈讨论过,或许您已经疲于争论已经在实际的项目中应用您的认识和体会了。
上述这些话,在 IBM 或者软件行业协会举办的需求管理讲座上,我以 IBM Rational 产品讲师的身份曾经多次询问过客户和听众,他们每每给予我的回应除了无奈的笑之,就是带着期许的眼光等待着我给出回答。
什么是需求
对于第一个问题:什么是需求?很多需求专家和权威机构已经给出了他们的描述,为什么是描述而不是定义呢?“因为软件产业存在的一个问题就是缺乏统一定义的名词术语来描述我们的工作。客户所定义的“需求”对于开发者似乎是一个较高层次的产品概念。而开发人员所说的“需求”对用户来说又象是详细设计了。实际上,软件需求包含着多个层次,不同层次需求从不同角度与不同程度反映着细节问题:
---IEEE 软件工程标准词汇表(1997)中需求为:
(1)用户解决问题或达到目标所需的条件或能力
(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或能力
(3)一种反映上面(1)或(2)所描述的条件或能力的文档说明。”
---Jones 认为“需求是用户所需要的并能触发一个程序或系统开发工作的说明 ----(Jones 1994)”
---Alan 认为“从系统外部能够发现系统所具有的满足于用户的特点、功能及属性等 ----(Alan Davis 1993)”
---S&S 认为“需求是指明必须实现什么的规格说明。它描述了系统的行为、特性或属性,是在开发过程中对系统的约束 ----(Sommerville and Sawyer 1997)”
所以引出上述这些描述,是因为我们仔细阅读上述权威机构和专家的描述,可以发现,他们分别从用户,从系统,从系统部件,从作用,从实现等不同方面对需求进行了阐述,至少通过上述的描述我们可以知道,需求基于不同的立场和角度是可以有不同的理解的,这也是为什么总是会有人针对什么是需求喋喋不休的争论,而最终谁也无法说服谁的场景在软件开发过程中层出不穷的原因。那么谁会对需求有不同的立场和角度呢?干系人,同项目或者系统有关的干系人(Stakeholder),前文我们提到的软件项目开发的负责人,需求分析师,系统架构师,程序员,测试人员,维护人员,项目的使用者等等,这些都是需求的干系人,因为有干系人的存在,就会有基于不同立场和角度的需求认识,这样就会形成不同类型的需求,因此当我们在探讨什么是需求时,我建议大家不要忘了思考我们正在针对何种类型的需求在进行探讨,探讨的目的是什么。
至此如果我们接受了从需求分类的角度考虑什么是需求。那么什么是需求分析?什么是需求跟踪?什么是需求获取?什么是需求规格?什么是需求验证?什么是需求变更?……也就是我们该如何理解并组织这些需求活动和术语呢?
需求术语的组织结构
对于第二个问题,如何理解和组织众多需求术语和活动。本文借鉴需求管理专家 Wiegers 在《Software Requirements》一书中对于这些需求活动和概念的描述与分类, 需求工程:需求开发和管理的过程。它包括了需求开发和需
项目经理胜任力免费测评PMQ上线啦!快来测测你排多少名吧~
http://www.leadge.com/pmqhd/index.html