五、我们应当怎样做需求调研:需求研讨

2024-09-08 03:58

本文主要是介绍五、我们应当怎样做需求调研:需求研讨,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面我们探讨了业务研讨会应当怎样组织,下面我们再具体讨论一下我们应当怎样与客户讨论业务需求。如果说组织业务研讨会是项目经理的功底,那么讨论业务需求就是需求分析人员的功底。 

以往我们常常认为,需求分析是一件最简单的事情。客户说他们需要做一个什么软件,有些什么功能,我们照着做就可以了,所谓的需求分析员就是需求的记录员。我要说,这是一个极大的错误,许多失败的软件项目,或者说软件项目中的需求问题,大多都源于此。经过人们多年的研究发现,在需求分析过程中,客户存在的最大问题就是提不出正确的需求,这表现为几种形式: 

1. 由于对软件不了解,客户提不出需求,不知道软件最终会做成什么样子。这类客户在需求讨论过程中,往往只能描述目前自己手工管理的方式是怎样的,不知道计算机会怎样管理。 

2. 能提出一些业务需求,但当软件做出来摆在自己面前时,需求就变了。这类客户,他们能熟练使用电脑,对信息化管理是清楚的。他们提出的业务需求从整体上应当是八九不离十的。但是,由于没有实物,在软件中的一些具体操作并没有完全想清楚。因此,当软件真正做出来摆在自己面前时,甚至经过一系列流程操作以后,会对一些操作提出变更需求。他们正如那句经典的话说的:“I have changed when it saw it.” 

3. 能非常详细地提出业务需求,甚至有时候该怎么做的提出来了。这类客户,参与过很多软件信息化建设,甚至有些还是软件开发的半专业人士。但是他们提出的业务需求过于具体,甚至怎样实现都说出来了,但这些有时候不是最佳设计方案、可能在技术上难于实现,甚至有些就是过于理想化而不可实现。 

因此,我在进行需求研讨的时候,首先跟客户探讨的不是软件功能,而是客户现有的业务知识,用专业的话叫“业务领域分析”。客户现有的业务流程是什么样的,都有些什么操作?客户在业务中都有些什么事物,什么专用名词,都是怎样定义的,相互之间的关系是什么?客户在每一项操作中的目的是什么,为什么要这样做,他们制作的手工报表都说明了什么问题?后面我会更加详细地描述怎么进行业务领域分析。 

在认识了客户的业务领域之后,我们才能去分析他们提出的所有原始需求。他们为什么要提出这项需求,提这项需求的目的是什么?只有经过这样的分析,我们才能深刻地理解需求,进而运用我们的专业知识,提出更加合理的技术方案。但非常遗憾,我们在需求分析中常常不是这样做的,甚至当软件都开发出来了,需求分析人员都说不出客户为什么要提出这个需求,更谈不上了解业务操作流程。一句经典的话是:“客户让我们这样做的。” 

总之,我们做需求分析,眼界不能仅仅停留在软件本身,应当更开阔一些,应当扩展到跟这个业务有关的那些领域知识中。 

当然,另一个极端就是为了开发软件,无限地扩大学习领域知识的范围。为了开发财务软件去考会计师,为了开发税务软件去学习税法等等。开发软件不是让我们成为这个领域的专家。我们学习领域知识是为了更好地理解和开发软件,是学习与这个软件有关的领域知识,而不是成为一个专家。 

在客户提出的所有原始需求中那些与业务实现有关的需求都是无效的需求,它们仅仅只能作为我们的一个参考。什么是与业务实现有关的需求呢?比如要求做成什么界面,数据要求怎样处理,等等。为什么是无效的呢?因为客户毕竟是非专业,我们应当有这种自信,在理解客户真实意图以后,能够提出比客户更优的解决方案。 

还有一些是技术难于实现或者根本就无法实现的需求,我们应当耐心地说服和引导客户,并给他提出一个更加合理的方案。注意最后一句话:“给他提出一个更加合理的方案”。苍白的拒绝客户往往会让客户产生抵触情绪,但当我们提出一个更加合理的方案时,客户往往会欣然接受,当然这是在我们对客户提出的业务需求的真实意图进行深入分析之后。认识到这一点非常重要,为了更加清楚地说明这一点,我举一个我的例子吧。有一次我给客户做一个价格管理系统时,客户提出要做一个动态报表的需求。这个动态报表要求能让客户从无到有,完全自由的定制自己的报表。毫无疑问,这是一个典型的不切实际的业务需求。接到这个需求以后,我们将它作为一个疑问,在整个需求调研过程中着力进行了考察,明白了客户为什么提出这样的需求。当客户在向他们的客户报价时,他们的客户在各个方面都要求他们报出价格细目,而且不同的客户要求他们报的价格细目格式还不一样。但经过仔细分析,发现他们面对的客户就是固定的几家,而这几家的要求的报表虽然格式不尽相同,但其数据项大体是相同的。最后,我们给客户提出两个方案,一个是按照客户所说的动态报表,但要求客户在制作报表时必须能够详细设计报表中数据项的来源、项目的类型,以及绘制报表格式,让他们意识到,即使做出来,作为非专业的他们也是很难自己完成的。同时,我们提出另一个方案:我们为客户准备好他们需要填写的各种客户报表所需的所有数据项,让他们自由删减。同时,为他们的不同客户提供各自相应的报表模板,这些模板可以在少量的范围内进行修改,以此满足他们的客户的不同需要。当客户拿到这样的方案,既能满足他们自己的需要,还操作简便、易懂、不费事,当然就欣然接收啦。 

因此,需求分析不是一种简单的你说我记的收集活动,而是在大量业务分析与技术可行性分析基础上的分析活动。只有建立在这种分析基础上的软件研发,才能保证需求的正确与变更的可控。 

这篇关于五、我们应当怎样做需求调研:需求研讨的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

LabVIEW程序员是怎样成长为大佬

成为一名LabVIEW编程领域的“大佬”需要时间、实践、学习和解决复杂问题的经验。尽管LabVIEW作为一种图形化编程语言在初期可能相对容易上手,但要真正成为精通者,需要在多个层面上深入理解。以下是LabVIEW程序员如何逐步成长为“大佬”的路径: 1. 打好基础 LabVIEW的大佬们通常在初期会打下非常坚实的基础,理解LabVIEW编程的核心概念,包括: 数据流编程模型:Lab

mysql动态扩容调研

MySQL动态扩容方案 目前可用方案 MySQL的复制: 一个Master数据库,多个Salve,然后利用MySQL的异步复制能力实现读写分离,这个方案目前应用比较广泛,这种技术对于以读为主的应用很有效。数据切分(MySQL的Sharding策略): 垂直切分:一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;垂直切分的思路就是分析

十四、我们应当怎样做需求分析:子用例与扩展用例

用例模型作为UML中4+1视图中非常重要的一员,非常集中地体现了面向对象的分析与设计思想。用例模型将现实世界中连续的一个一个业务流程,按照场景划分到了一个一个的用例中。由于场景的出现,使得用例中的业务流程存在着高度的内聚性,从而成为了日后各种对象的雏形。同时,在用例分析中,又将那些存在于各个用例中的,相同或相近的业务操作提取出来,形成一个一个的子用例或扩展用例,又体现了面向对象设计中的复用性。现在

十三、我们应当怎样做需求分析:查询报表分析

在我以往的用例分析中,使用这样格式的用例模式,对于大多数业务操作流程来说是得心应手的,但对于有些功能来说总感觉不对劲。感觉不对劲的,就是那些查询、汇总与报表功能。对于这部分功能,需要我们描述的不是什么操作流程,而更重要的是那些数据项、数据来源、报表格式、数据链接,以及使用者、使用频率的说明。而这些,在以往的用例说明格式中统统都没有,怎么办呢?俗话说“东西是死的人是活的”,把我们的用例格式改改吧。

九、我们应当怎样做需求分析:功能角色分析与用例图

在我们进行一系列需求调研工作的同时,我们的需求分析工作也开始启动了。需求调研与需求分析工作应当是相辅相伴共同进行的。每次参加完需求调研回到公司,我们就应当对需求调研的成果进行一次需求分析。当下一次开始进行需求调研时,我们应当首先将上次需求分析的结果与客户进行确认,同时对需求分析中提出的疑问交给客户予以解答。这就是一个需求捕获->需求整理->需求验证->再需求捕获的过程。  但是,当我们经

八、我们应当怎样做需求调研:需求捕获(下)

前面我们讨论了,需求分析工作是一个迭代的过程:需求捕获->需求整理->需求验证->再需求捕获······需求捕获是这个迭代过程的开始,也是整个需求分析工作中最重要的部分。没有捕获哪来后面的整理与验证工作?但是,非常遗憾,按照我以往的经验,需求捕获是我们最薄弱的环节。前面我提到的许许多多项目开发的问题都可以归结为需求分析的问题,而许许多多需求分析的问题又都可以归结为需求捕获不完整的问题。需求捕获是整

七、我们应当怎样做需求调研:需求捕获(上)

前面我们讨论了,需求分析工作是一个迭代的过程:需求捕获->需求整理->需求验证->再需求捕获······需求捕获是这个迭代过程的开始,也是整个需求分析工作中最重要的部分。没有捕获哪来后面的整理与验证工作?但是,非常遗憾,按照我以往的经验,需求捕获是我们最薄弱的环节。前面我提到的许许多多项目开发的问题都可以归结为需求分析的问题,而许许多多需求分析的问题又都可以归结为需求捕获不完整的问题。需求捕获是整

六、我们应当怎样做需求调研:迭代

前面我一直在反复强调这样一个观点,需求分析不是一蹴而就的,是一个反复迭代的过程。它将从第一次需求分析开始,一直持续到整个项目生命周期。为什么这样说呢?让我们一起来分析分析。  在第一次的需求分析阶段,我们在一段时期内需要与客户进行反复地讨论,这个过程往往是这样一个反复循环的过程:需求捕获->需求整理->需求验证->再需求捕获••••••  需求捕获,就是我们与客户在一起开研讨会

面试官:synchronized的锁升级过程是怎样的?

大家好,我是大明哥,一个专注「死磕 Java」系列创作的硬核程序员。 回答 在 JDK 1.6之前,synchronized 是一个重量级、效率比较低下的锁,但是在JDK 1.6后,JVM 为了提高锁的获取与释放效,,对 synchronized 进行了优化,引入了偏向锁和轻量级锁,至此,锁的状态有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁。 锁升级就是无锁 —>

【JavaScript】0.1 + 0.2 = 0.30000000000000004该怎样理解?

如果你以前没了解过类似的坑,乍一看似乎觉得不可思议。但是某些语言下事实确实如此(比如 Javascript): 再看个例子,+1 后居然等于原数,没天理啊! 如果你不知道原因,跟着楼主一起来探究下精度丢失的过程吧。 事实上不仅仅是 Javascript,在很多语言中 0.1 + 0.2 都会得到 0.30000000000000004,为此还诞生了一个好玩的网站 0.30000000