在对需求开发这部分内容介绍时,作者分为了五个模块来讲:需求定义、需求捕获、需求分析与建模、需求描述、需求验证。准确来讲,需求定义活动是不属于需求工程范畴的,它实际上是立项管理需要做的工作。但需求定义阶段的产物对于需求捕获、分析与建模活动都有着直接影响,如果定义阶段工作做的不理想,就会导致后面的需求工作变得难以更难处理。所以作者将需求定义也纳入了需求开发的范畴。
从定义上讲,需求定义就是要确定项目的宏观需求。即定义项目的业务需求,也就是明确项目的目标和范围。一个正确的需求定义往往被建立在项目立项时完成。然而实际开发中,通常是不愿意在需求定义上花费精力的,究其根本就是时间对软件开发团队的敏感性。但这样做的结果往往是“欲速则不达”,反而会让时间在后面的阶段里被浪费掉。还记得我们上学期听到的那个软件开发过程中的“六拍”:“拍脑袋”、“拍肩膀”、“拍胸脯”、“拍桌子”、“拍大腿”最后“拍屁股”。“拍脑袋”其实就是对工作范围(需求定义)、工作量(估算)拍脑袋,从而导致了大家最后拍拍屁股走人。所以清晰的项目目标和范围定义,能够引导需求工作顺利进行。现在想想,在学校的软件编程过程中,我们结组开发所实现的任务之所以“不堪入目”有很大一部分原因也是我们没有对我们要开发的内容进行目标和范围的确立,从而导致我们的实现变的漫无目的,产生失败的半成品。在现实的工作环境中,那些经历了立项环节的项目确实也会产生一个用来定义项目目标和范围的文档。但往往都做得十分空洞,得出一些不切实际的空泛的目标,给分析人员和开发人员带来极大困扰。因此,破解混沌不清的目标和对需求定义理念的了解就显得尤为重要。对于混沌不清的目标,可以通过内部寻根和外部溯源的方法来破解。而在需求定义、制作项目提案时,往往需要我们采用:目标 (Goals)->问题(Problem)->可选方案(Option)->建议方案(Answer)的过程。对于需求定义活动,RUP(Rational Unified Process:统一软件开发过程)给出一种操作的思路:问题分析的五步法。在问题定义上达成共识、理解根本原因,分析问题背后的问题、确定相关人员和用户、定义解决方案的界限和确定加在解决方案上的约束。虽然这套方法在项目的实际开发环境中操作性不够强,但它确实为需求分析人员提供了一个很好的理论指导框架。了解到需求定义的方法后也该追究一下需求定义的产物与要素了。需求定义的产物其实可以分为POS(Project overview Specify,项目综述)和Vision(愿景)两大类。而需求定义的要素包括目标、范围、相关人员与用户和相关事实与假定。一个好的目标应当满足SMART原则:目标必须能够指导具体(Specific)的工作;目标必须是可以度量(Measurable)的,才能进行成本和效益分析;目标必须是可以达到(Attainable)的,否则是没有意义的目标;目标必须和其他目标具有相关性(Relevant);目标必须具有明确的截止日期(Time-based)。往往目标决定了范围,我们常采用的对范围的区分是使用程序分解结构来实现的(系统->子系统->模块->子模块)。需求定义的重点在于明确项目的目标和范围,这是后续工作的基础。需求定义的具体内容是需要我们了解和掌握的。
事实上,需求捕获其实是需求开发的第一个过程。可以说任何一个开发团队对他都不陌生,但如何提高需求捕获的有效性却一直以来是困扰大家的问题。需求捕获的过程其实就是人与人打交道的过程,是需求人员展示自己沟通能力的地方,因此往往需要掌握一些人文技巧,学会一些和人打交道的策略。需求捕获应当是主动的,换言之需要需求分析人员自己去主动向用户了解需求内容。要明白需求捕获是撒网打渔,而不是休闲钓鱼。如果把用户的需求比作一座冰山,在海平面上的那部分就是用户意识到的需求,也就是用户所直接提出或我们分析人员可以直接了解的需求内容;而更多的其实是隐藏在海平面下面的一些无意识的需求,它是用户的实际工作场景,只有我们开发人员能对这些场景做到感同身受才能挖掘出这一层的需求;更深一层的就是未梦想的需求了,这是由于用户对技术的不了解而产生的,这种需求则是由需求分析人员帮助用户来选择和设计。尝试业务场景是合格需求分析人员的良好习惯。而对于具体的需求该如何捕获书中给出了六种常见的捕获方法。
1.用户访谈:占用时间长和信息的片面性是用户访谈的两大敌人。
2.用户调查:在需求捕获过程中,先访谈再调查是更合理的方式。
3.文档考古:分析文档时应思考新流程对其的影响;手机文档时,应尽可能让用户提供带有真实数据的样本。
4.情节串联板:原型法消除用户盲区。
5.现场观摩:消除开发团队认识盲区的手段。
6.联合开发:突破双方需求盲区的手段。
在需求捕获的记录工具的描述中,作者主要讲到两种主要工具,任务卡片和场景说明。记录工具的选择主要是为了方便团队所有人员得到的捕获结果为统一口径。重点还是在需求捕获的过程中,需要我们主动的有计划并科学的实现对需求的捕获。