5.1 基本概念

5.1.1 定义与作用

1.定义

需求工程,是指采用工程化的方法和标准,收集、记录和分析客户对信息化的需求,并最终确定系统需要实现的功能以及功能的相关特征和约束。

需求工程包含三个主要的部分:需求调研、需求分析、需求管理,本书的重点在需求调研和需求分析两个部分。

注:关于需求管理

需求管理是需求工程中非常重要的内容,包含对需求的跟踪、控制、变更、版本管理等内容,它是保证系统的内容、质量、进度的重要手段,但由于本书的重点是分析与设计的方法,需求管理的内容更加偏重于软件的过程管理,因此本书不涉及这个部分的内容。

2.作用

需求工程的作用归集为一句话就是:收集客户想要做什么,最终确定实际做什么。

对于一个应用软件的开发来说,需求工程成果的质量极大地影响着这个软件的设计结果,是决定成败的主要环节,从客户那里完整地获取、记录、分析与确认需求,并正确地传递给后续的工程是一个需求分析师的必备能力。需求工程的分析成果形成的需求规格说明书不但是后续设计与开发的依据,同时也是客户对完成系统评估、验收的依据。

另外一方面,需求工程的内容也极大地影响着软件开发的成本、技术、周期、资源、质量以及最终客户的满意度等诸多方面。需求工程的成果不但会影响客户最后获得的效果,也会影响到软件开发者的最终利益。

5.1.2 内容与能力

1.作业内容

需求工程的核心工作是需求调研和需求分析,最终的主要交付物有两个,见图5-2。

图5-2 需求工程的内容

1)需求调研成果(需求调研资料汇总)

从客户现场通过面对面的调研收集到的第一手需求资料,包括用图形、文字和表格等方式记录的原始资料,形成需求调研资料汇总。

2)需求分析成果(需求规格说明书)

基于前述的调研资料进行分析,识别出最终需要进行开发的全部内容,并且通过客户确认,最终形成需求规格说明书,这是后续设计、开发过程的依据。

2.角色要求

在需求工程两个阶段中采用了统一的称呼(角色的称谓与软件企业内的岗位无关):需求分析师,他们要做两个工作,即需求调研、需求分析。

需求工程中的角色是个什么样的存在呢?把他们的作用与其他行业对比一下,因为任何行业都存在着需求调研与分析的工作,如制造业和建筑业,不同的是其他行业对需求的调研和分析基本上都是由设计师自己完成的,鉴于设计师的知识和经验比较丰富,所以很少发生需求错误。但是在软件行业,需求工作是由专门的需求岗位完成的(小型公司或是小型项目则直接由开发工程师完成),所以软件行业要想将需求工程的水平提升到与其他行业相同,有以下两个方法。

(1)学习其他行业,让设计师直接参与调研和分析(不太现实,没有那么多的设计师)。

(2)提升需求人员的水平,让他们学习和掌握一定的业务设计能力。

分享

从事需求工作的地位、作用和价值

在培训中从事需求工作的学员是提出疑问最多的群体,他们吐槽说,虽然需求工程干的是软件工程中最“艰苦”的工作,但本人却是软件项目过程中最没有“地位”的角色,他们举的例子有:

(1)与客户接触、交流很累,特别是见新客户、大客户,调研就是一个痛苦的过程。

(2)收集到的需求被开发工程师以各种理由删改,但是客户又不认可,两头受气。

(3)客户和开发都将需求调研者看成是“传声筒”“录音机”,难以有自己的主见。

(4)客户与技术两方面对需求分析师的信任度都不够,得不到他们的尊重。

(5)缺乏方法、模板,不但工作效率低,而且杂乱的表达方式也为人所诟病。

(6)定位不清楚、地位低,自己的价值以及未来的发展方向不明等。

老师与学员们一起进行了现状改进和未来发展的分析,首先对信任和尊重方面取得了共识,即信任和尊重不是要来的,是靠能力和成果换来的。大家讨论总结的内容如下。

(1)如果想要在软件行业做出一番事业来,不论是什么岗位,首先都要做过(至少一次)需求调研工作,没有做过需求调研、没有接触过客户的人难以成为真正的软件工程师。

(2)需求分析师处于客户、设计以及开发等干系人的中间位置,是学习与人交流沟通的绝佳岗位(因为语言交流是软件工程师的第一能力,不论从事什么岗位)。

(3)一般来说,系统的客户价值高低与需求分析师的能力成正比,以获取客户价值为目标展开调研分析工作是获得客户信任的重要途径。

(4)需求分析师的下一步发展方向有两条(仅作参考):业务设计师、高级咨询师。

通过培训和大量的实践之后,学员们亲身感受到了知识带来的作用和价值,利用书中提供的理论和方法,提出有理有据的建议和提案,不但获得了客户与开发人员的认可,最为重要的是:通过严谨的、专业的表达方式,获得了对方的尊重,这个尊重又增强了参加培训学员的自信,形成了良性循环。

5.1.3 思路与理解

1.需求的收集与确认

需求工程的重要性是毋庸置疑的,但是这个工作在软件行业中还没有形成体系化的培训机制,成长基本上靠前辈帮带、自学实践、经验积累。需求工程的工作很难用一套方法就可以解决多领域业务、多个性用户的问题。由于需求分析师难以培养,所以软件商大都缺乏优秀的高级需求分析师。需求工程的难度和作用可以参见图5-3,从客户不清晰的原始需求到可以进行编码开发的过程中,对收敛贡献最大的部分是②需求工程,而比较容易进行规范化、标准化作业的是③~⑤的部分。

②将①的复杂内容梳理并形成了清晰的需求说明规格书。

③将②的成果再进一步抽提、转换成为架构、功能和数据的设计成果。

④将③的成果再进一步抽提、转换为组件、机制的构成方式。

⑤将④的成果用编码的形式开发成为最终的软件。

图5-3 软件工程各阶段对收敛的贡献

从图形的推进变化上可以看出,需求工程②担负着将原始需求①的内容理出头绪并形成一份清晰明了、可以确认的需求规格说明书的任务;而③~⑤的一系列工作,越靠后的部分就越单纯,复杂度降的越低,要做的事就越收敛。

②需求工程是开拓者,它担负了最为杂、乱、累的工作,从客户原始需求到编码的5个步骤中对收敛起的作用最大。②部分图形的收敛越大(梯形的坡度大),③以后的设计开发的图形就越接近于正矩形,工作就越顺利,否则②~⑤都是大坡度的梯形时就说明需求工程做的不到位,在后续的设计和开发中会不断地发现前期的需求有问题而造成返工。

注:关于“收敛”的含义

收敛,指的是将复杂的原始需求,归集成为可以进行标准化作业的过程。标准化的作业内容是不受需求影响的,不论需求是否复杂其内容都是固定的,详见各阶段的设计内容。

作为一个开发团队,仅有高水平的设计和开发工程师而没有与之匹配的高水平的需求分析师,其开发的成果就有可能最终出现木桶理论中的短板现象了,培养出优秀的需求分析师是非常重要的,周期也是比较长的,因此除了学习和掌握需求分析的方法和工具以外,软件商还应该构建相应的需求体系、知识库(案例、场景、原型、模板)。

2.需求,并非都是来自于客户调研

构建信息系统的需求是否都是从客户那里获得的呢?这个问题反映出了完成的系统中有多少内容是经过软件工程师(包括咨询、需求、设计、开发、实施等)提案的,这些提案往往包含更多的高级需求、更多的附加价值,需求的来源有多个,举例如图5-4所示。

1)基本需求

基本需求来自于对客户进行的“调研”,这类需求以功能需求为主,基本上按客户意愿进行设计和开发,内容大部分在需求调研、需求分析阶段内确定。

2)中级需求

中级需求不是客户直接提出来的功能需求,而是在需求分析阶段、业务设计阶段通过对客户提出来的业务需求进行转换、优化、补缺、提升的过程中产生的需求,也就是为完善业务而产生的需求。

图5-4 需求的来源

3)高级需求

高级需求主要来自于软件工程师根据本次客户的目标需求、新的设计理念、新技术等而提出,也就是说,高级需求是软件工程师设计出来的需求,例如,“事找人流程设计(架构)”“按照任务设计组件(功能)”“数据的复用(数据)”等。“设计需求”需要软件工程师有足够的知识和能力。详见第15章。

上述三个需求来源的获取难度顺序为高级需求>中级需求>基本需求。

软件工程师要认识到,需求工程(调研与分析)完成了,并非是需求获取的工作全部完成了,只是由客户直接提出来的需求完成了,而通过设计工程的需求发掘尚未开始。

注:高级需求会影响开发成本

这里只考虑如何发掘有价值需求的方法,不考虑新需求带来的开发成本问题。