《火球——UML大战需求分析》(第2章 耗尽脑汁的需求分析工作)——2.2 持续进化的客户需求

本文主要是介绍《火球——UML大战需求分析》(第2章 耗尽脑汁的需求分析工作)——2.2 持续进化的客户需求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说明:

《火球——UML大战需求分析》是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张。欢迎你按文章的序号顺序阅读,谢谢!本书已经在各大网上书城及书店销售,欢迎你的关注。


------------------------------------------------------------------------------------------------------------------------------


第2章 耗尽脑汁的需求分析工作


摘要:怎么又变了?当初就应该让客户书面签字确认!你可能会经常发这样的牢骚,可是就算客户书面确认,客户还是会“赖账”的!软件项目的其中一项不变真理:人是会死的,需求是会变的!本章将会和你一起来体验软件需求分析工作的风风雨雨,找出需求分析工作的根本之道,了解UML如何帮助我们提升需求分析的水平。


2.2 持续进化的客户需求


你可能曾遇到过这样的情况:客户今天想要一个苹果,明天改变主意要一条香蕉,但后天突然又说还是苹果好,到最后他想要一个西瓜!遇到这样的情况,你会抱怨客户吗?你会后悔当初没有让客户签字确认吗?

楚国有人坐船渡河时,不慎把剑掉入江中,他在舟上刻下记号,说:“这是我把剑掉下的地方。”当舟停驶时,他才沿着记号跳入河中找剑,遍寻不获。这就是刻舟求剑的故事。
客户的想法总是在变化的,但总体来说是螺旋前进的,客户需求总是持续进化的,不要对此有任何抱怨,否则我们就是“刻舟求剑”之人了!

某系统已经上线了,以下三种情况,你会更喜欢哪种情况呢?
A. 客户一直没有提出过任何问题。
B. 客户开始提了一些问题,但很快就没有其他问题了。
C. 客户一直在提问题,项目组解决这些问题后,新的问题又来了,如此不断重复。

情况A,估计客户没有怎样用过这套系统,所以没有提出什么问题。对于项目组来说,似乎不用再被麻烦的需求变更所纠缠,可以爽快地脱离此项目了。但对于客户来说,此系统白白花了他们的钱,对他们没有任何实际价值。而对于你所在的软件公司来说,你们项目组花费很大工作来做出来的软件系统,客户居然没有能用上,而你们公司很可能收不到项目的验收款项,此项目完全实现不了公司的战略。情况A的最终结果就是“双输”。

情况B,有两种可能:第一种可能,客户试用了一段时间系统,后来由于客户方面的某些原因(原因可能有:更换领导、上了另外一个更重要的系统等)不再使用本系统了;第二种可能,客户试用一段时间,提出了很多问题,而你们项目组不能很好地解决这些问题,甚至认为客户“无理取闹”,所以客户干脆就不再使用本系统了。出现情况B,本项目估计也很难能通过最终验收,软件公司最终也收不到项目验收款项,而最终结果很可能也是“双输”。

情况C,我曾经比较厌烦这样的情况,每天被客户的各式各样的小问题纠缠。其实这是相当理想的情况,说明客户在不断使用该软件。这些问题最开始会比较多,最开始项目组解决问题的速度会低于问题的产生速度,但后来问题会逐步减少,直到基本消失,软件和用户的“磨合”过程终于完成,系统成为客户日常工作中的一部分。出现情况C,我们项目组千万不要产生厌烦情绪,客户要真正用上软件,项目才算真正成功。软件只有对客户的工作真正有帮助,客户才算“赢”,而在客户能“赢”的基础上,我们软件公司才可能实现自己的“赢”。达致“双赢”是我们每个项目应追求的目标。

从某种角度来说,需求变更其实是好事,说明客户对需求的理解更进一步,而我们觉得不适应,往往是因为我们对需求理解的进步程度不如客户。请看下图:
图2.1 客户VS项目组对需求的理解1.jpg

图 2.1 客户VS项目组对需求的理解1

此图表示项目开始后随着时间的发展,客户和项目组对需求理解程度的上升趋势。
在时间=0时,客户的曲线并不是从零开始的,而是有一定起点的。这表明,客户在项目刚开始的时候,对需求是有一定认识的。而项目组在项目最开始时,对需求的理解几乎是零。
随着时间的发展,客户对需求的理解越来越强,尽管项目组对需求的理解同样也变强,但项目组对需求的认识总是落后于客户,这样 需求分析工作肯定陷于被动,总会被客户“牵着鼻子走”,很容易出现互相责怪的局面:客户责怪项目组水平太差,而项目组责怪客户需求变来变去!
要打破这样的局面,项目组需要做到下图的效果:
图2.2 客户VS项目组对需求的理解2.jpg
图 2.2 客户VS项目组对需求的理解2

项目刚开始时,客户对需求的理解确实比项目组强,但项目组在很短时间内对需求的认识超越了客户。从图中的“交点”打后,项目组对需求的认识总领先于客户。项目组应具备超强的业务学习能力,切实理解客户的真正需要,为客户规划出真正符合其需要的软件系统。




请看下一节……




作者:张传波

创新工场创业课堂讲师

华为某团队高级顾问

《火球——UML大战需求分析》作者

www.umlonline.org 创办人

这篇关于《火球——UML大战需求分析》(第2章 耗尽脑汁的需求分析工作)——2.2 持续进化的客户需求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/606866

相关文章

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用