博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我们应当怎样做需求分析博客读后感
阅读量:5019 次
发布时间:2019-06-12

本文共 3737 字,大约阅读时间需要 12 分钟。

http://blog.csdn.net/yqmfly/article/details/7679781【原博地址】

  作为一名刚刚学习软件需求分析的大二学生,通读一篇这个几万字的博客,确实受益匪浅。

 我们应当怎样做需求调研:初识

很多需求分析的工作是从需求调研开始的,我们就从这里说起吧。需求调研是需求分析最重要的一环,也最集中地体现了需求分析的特点——既是一份体力活儿,更是一份技术活儿。它既要求我们具有一种理解能力、设计能力,更要求我们具有一种与人交往、沟通的能力。

我们应当怎样做需求调研:拜访

 项目组经过一番努力,获得了一些初步的成果。首先是给客户留下了一个良好的印象,这是一个开端,但要在他们心目中树立自己的职业威信还要看你今后的表现。同时,我们与客户一起为项目制订了短期与长期目标。不要小看了这些目标,它们就是我们的尚方宝剑。正是因为有了它,今后项目中的有关各方就应当协助实现这个目标。我们应当清晰地向客户表达这样一个意思,要完成这样的目标,不是某一方的努力,而是双方共同努力的结果。这也是客户方召开这样一个项目启动会议的重要意义。最后一个成果,也是最重要的成果,就是与各种角色、各个类型的客户建立了联系。下面,我们将一个一个去拜访他们,展开我们的需求调研。

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

 经过一番努力,我们终于在客户中找到了一批人,可以解答困扰我们多时的业务问题了,真是不容易呀。但是,如何以合适的时间、合适的地点、通过合适的形式与客户研讨业务需求,是摆在项目经理面前的一道难题。在我所经历的项目中,业务研讨会没有一个是相同的。

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

2. 能提出一些业务需求,但当软件做出来摆在自己面前时,需求就变了。这类客户,他们能熟练使用电脑,对信息化管理是清楚的。他们提出的业务需求从整体上应当是八九不离十的。但是,由于没有实物,在软件中的一些具体操作并没有完全想清楚。因此,当软件真正做出来摆在自己面前时,甚至经过一系列流程操作以后,会对一些操作提出变更需求。他们正如那句经典的话说的:“I have changed when it saw it.”
3. 能非常详细地提出业务需求,甚至有时候该怎么做的提出来了。这类客户,参与过很多软件信息化建设,甚至有些还是软件开发的半专业人士。但是他们提出的业务需求过于具体,甚至怎样实现都说出来了,但这些有时候不是最佳设计方案、可能在技术上难于实现,甚至有些就是过于理想化而不可实现。
因此,我在进行需求研讨的时候,首先跟客户探讨的不是软件功能,而是客户现有的业务知识,用专业的话叫“业务领域分析”。客户现有的业务流程是什么样的,都有些什么操作?客户在业务中都有些什么事物,什么专用名词,都是怎样定义的,相互之间的关系是什么?客户在每一项操作中的目的是什么,为什么要这样做,他们制作的手工报表都说明了什么问题?后面我会更加详细地描述怎么进行业务领域分析。

一个系统中,用例需要细化几次,是由这个用例的业务复杂程度决定的。对于一个简单的用例,只需要细化一次就够了;而对于比较复杂的用例,则需要细化2~3次,甚至更多。

用例分析的过程,之所以称之为分析,它掺入了很多需求分析人员对业务的理解与设计:模块如何划分、流程如何设计、业务如何转换,等等。用例分析,还需要让需求分析员与架构师、设计师等技术人员共同协作来完成,因为用例分析还包含对业务需求的技术可行性分析。只有一份可行的需求分析,才能为后续的设计开发扫清障碍,有效降低项目风险。最后,需求分析员应当将需求列表中的内容,逐一地与用例进行核对,以避免分析人员忽略用户的某项业务需求。(后面将详细描述用例模型的搭建过程。)

如何破解这样的问题呢?那就是要求我们在需求分析的整个过程,不断进行业务领域知识的学习。在我做需求访谈的初期,我往往不是跟客户谈需求,而是先跟客户谈业务。你们是怎样操作的?都经过些什么流程?谁来完成这些操作的?为什么这样操作?注意,在所有这些问题中,最后一个问题是最重要的。客户业务领域中的所有操作、所有流程都是有它存在的意义的,它体现了其内部的原因与作用。多问为什么,可以让我们深入地理解这些领域知识,站在客户的视角去思考问题,进而深入地理解客户为什么要提出他们的那些业务需求。当一个需求分析员能达到这样的水平,客户嘴中没有说出来的需求就会被源源不断地被发掘出来,最终做出来的需求分析才是完整的、准确的。

 般地,在一个用例图中通常有三种元素:参与者(Actor)、用例(Use Case)与系统边界(Boundary)。用例描述的是系统为用户提供的功能,也就是系统能为用户做什么,通常被绘制成一个椭圆;参与者,我认为称为角色更加合适,也就是系统为哪些类型的用户提供服务,他们都各自承担哪些不同的职责,通常被绘制成一个小人儿;最后是系统边界,也就是系统是对现实世界哪个范围的内容进行的模拟,它涉及到软件设计的工作范围与工作量,通常被绘制成一个方框。但是,通常情况下系统边界只是一个概念而不用真正绘制出来,因为被绘制成用例的必然是系统内部的功能,被绘制成参与者的必然是系统外部事物。从这个意义上讲,用例图中的参与者不仅包括人,还包括那些外部系统和自动触发器。根据这样一个思路,我以往常常将外部系统和自动触发器绘制成一个小人,这常常令客户感到困惑。随后我改变了思路,将外部系统和自动触发器绘制成另一种表达形式——类元符号表示法,并在构造型上标注为Actor。

应该说,从最初的粗浅认识,深入到后来对四种情况的认识,正是体现了DDD的另一个思想:持续学习。需求人员在开始一个新的管理系统的分析工作时,都有可能面临着一个全新的业务领域。在这个领域中,他们不可能一夜成为专家,也不必要成为专家。他们需要时间去学习领域知识,但这并不意味着学习所有的领域知识,而是与软件相关的领域知识。做财务软件,你不必考财务师,但你必须要学会与财务软件相关的财务知识。你对领域模型的认识被延伸到了整个软件生命周期中,包括之后一次一次的升级完善。你每认识深入一点儿,就可能会体现到你的分析设计中,并最终体现在开发的软件中。你对领域知识认识再深入一点儿,软件就再完善一分。

1.评审发起人填写一份评审计划,详细记录评审时间、评审内容、评审者、评审地点,制订评审组长,并预计评审工作量,发起一个评审任务。

2.评审者在收到邮件后,进入评审任务中,对评审内容进行评审,同时填写并提交各自的评审意见。
3.评审组长汇总所有的评审意见,并在评审会上依次过所有的评审意见,对评审意见进行修改或删除,填写问题跟踪,形成此次评审会上最终的评审意见及问题跟踪表。
4.评审组长制作评审报告,并形成评审结论,以邮件的形式通知所有评审者。
5.所有评审者对评审报告进行回复意见,如果都选择同意,评审组长关闭此次评审。
6.评审组长跟踪所有问题,并可以依次关闭每个问题。
当然,在这个需求列表中,客户提出了一些名词,比如评审计划、评审意见、评审组长等。我们在整理需求列表的同时,应当注意整理这些名称,弄清它的内涵外延,以及它们相互之间的关系、作用。这将为我们后面的领域模型分析提供素材。毫无疑问,这样的需求列表过于粗略。因而在后面的业务讨论中,我们逐项对它们进行了细化:
1.评审发起人填写一份评审计划,详细记录评审时间、评审内容、评审者、评审地点,制订评审组长,并预计评审工作量,发起一个评审任务。
1.1 评审时间应当分为数个阶段分别制订时间计划,如评审准备、评审会议、评审报告;
1.2 评审内容应当可以上传数个文件,分别描述文件的内容、作者、编写日期、版本号,供评审者下载与查看;
1.3 填写评审者时,选择一个评审者为评审组长,评审发起人不能是评审组长;
1.4 评审地点与预计评审工作量只需直接填写;
在我们后面的用例分析中,我们对这段需求列表进行了大量的分析设计。但这些都是设计与实现,它们会出现在后面的用例分析及其模型中,却不应出现在需求列表中。在后来的升级开发中,客户又提出了发邮件通知的功能。将该功能描述出来,并添加到需求列表中:
1.5 评审计划提交以后,以邮件的形式发送给每个评审者,通知该评审任务。
有了这样的需求列表,当需求分析工作完成时,我们将一项一项检查用例模型是否满足需求列表的内容;当软件开发完成时,我们将一项一项检查软件功能是否满足需求列表的内容;当用户验收时,我们同样使用需求列表,一项一项检查我们的软件是否满足用户需求。

经过数月的分析讨论,最终在一片和谐的气氛中,双方领导在需求规格说明书上签字,项目开始进入一个新的轮回。在这个轮回中,是焦头烂额、不胜其苦,还是如履薄冰、最终顺利交付,是与许多因素有关的。但我想说,一份高质量的需求分析必定起到决定性的作用,必定为日后的软件开发扫清了许多许多的地雷。

转载于:https://www.cnblogs.com/miria-486/p/8530750.html

你可能感兴趣的文章
Elasticsearch最佳实践之分片使用优化
查看>>
Java入门(6)
查看>>
更具体的描述JNI
查看>>
数据库——SQL-SERVER练习(6) 数据库安全性
查看>>
Frameset 两页面互调控件技术案例
查看>>
ruby 构建API接口流程代码
查看>>
ASP.NET没有魔法——第一个ASP.NET应用《MyBlog》
查看>>
java web 插件式开发
查看>>
软件工程周总结12
查看>>
DDL对表的操作
查看>>
flutter key
查看>>
hibernate之关系映射上
查看>>
Cinder错误解决方案
查看>>
activemq的配置和使用范例
查看>>
CSS3高级
查看>>
CSS Satyr v1.2(CSS Sprites生成工具)
查看>>
spark on yarn
查看>>
基于 Token 的身份验证方法
查看>>
(后端)分页比较好的语句
查看>>
2014-07-02 19:53
查看>>