OOAD实践之路——真实案例解析OO理论与实践(二、第一项任务:特性列表)
查看本系列全部文章:
《OOA&D实践之路——真实案例解析OO理论与实践》索引贴
第一份说明
当这个项目开始时,我们得到的关于我们要做的系统的唯一说明是一页Word文档,这是一份简单的不能再简单的说明。文档里只有一行字:我们需要一个系统,使得全国各地的代理加盟商和连锁店能够通过网络订购原料。另外,我们还知道这是一个食品公司,主营面包、麻花、肉夹馍等食品,在全国各地有多家连锁机构。除此之外,我们一无所知。
永远不要和客户谈需求
软件开发的第一步是什么?很多人觉得是需求分析。显然这短短的一句说明无法满足我们的要求,于是很自然的,你希望找客户谈话,详细了解情况,然后做出详细的需求分析。于是,你心里有了这么一个算盘:
和客户谈话 -> 问清所有需求 -> 进行需求分析 -> 生成需求文档
乍看之下,这是很合理的步骤,但是实际上这是不可行的。原因有如下几点。
1.客户不关心系统的所有方面
每个开发人员都希望,客户可以清楚的把自己需要的东西的方方面面清楚无误告诉你,然而,这只是一厢情愿罢了。因为,任何一个客户在需要什么东西的时候,只会大致想想要个什么东西,并不会将所有地方都仔细想清楚。
2.有时客户并不清楚自己到底要什么东西
有时候,客户并不是很清楚自己想要什么。这不是天方夜谭。很多时候,客户仅仅有一个“想要实现某个目的的动机”,而没有“我需要一个什么系统”这么明确的概念。例如,从上文那个“一句话说明”中,可以看出,我们的客户仅仅是有一个动机:希望有一个系统,能使得他们公司的代理商和加盟店在线定料,至于这是一个什么样的系统,他们并没有明确的概念,更不用说这个系统有什么样具体的需求了。
基于以上两点,你是不可能从客户那里问清所有需求的。实际上,就不该和客户谈需求,因为需求从来就不是“客户面”的东西,而是“开发人员面”的东西。需求需要包含方方面面系统需要实现的功能,而客户往往并没有如此精细想过,甚至客户自己对自己想要的东西什么样子都不清晰。面对这种客户,你一本正经往他面前一坐,开发笔记本说:“我们谈谈需求吧”,或说“我们进行需求分析吧”,我想客户会立马崩溃,而你也不可能得到你想要的所有东西。
作为开发人员,不应该一开始就和客户谈需求,而要先谈特性。很多需求并不需要客户告诉你,开发人员应该能通过常识识别出来,就如没有哪一个买汽车的客户会说:我需要一个辆汽车,要有方向盘,还要有四个轮子。他们通常会说:“我要一辆家用车、要省油、舒适,要至少能坐3个人。”这“家用车”、“至少能坐三个人”就是特性。
特性是一些描述,一条特性简要描述了系统的一个客户最关心的核心功能。
最为开发人员,首要任务不是做需求分析,而是帮助用户整理出一份特性列表。这里之所以说“帮助”,是因为很多时候,客户由于自身太关注于某个方面,而漏掉了十分重要的特性,这是你要帮客户想想,并将想到的特性询问客户是否是需要的。如果客户很高兴的说“对!对!”,那么这就是大功一件。所以,在初期阶段,开发人员一定要想客户之所想,急客户之所急,尽快帮客户理清系统有什么特性。
所以,正确的过程应该是:
询问客户系统都有什么功能 -> 写出初期特性列表 -> 想想什么遗漏特性,并询问客户 -> 查漏补缺
生成特性列表
下面回到案例。
虽然客户的说明只有一句话,我们还是整理出一份初期的特性列表,并将其作为我们向客户展示的第一份工作成果。这份特性列表内容如下:
1.可以将各种原料信息发布到系统上
2.加盟商和连锁店可以通过系统在线定料
没错,我们的初期文档只有两项特性。我们把这个给客户看,客户说:“嗯……大约是这个东西吧。”很显然,我们的客户是比较懒的那种,这时,我们有义务引导客户想起更多需要的特性。下面是当时大约对话:
开发人员(简称D),客户(简称C)
D:你这个加盟商和连锁店是要如何区分呢?
C:我们公司有一个加盟商和连锁店的记录。
D:那么你们是准备将各个加盟商的信息全部录入系统吗?
C:不是,我希望他们能自己注册,就和论坛那种。
D:那么你要如何确认他们的身份,总不能任何人都可以在这个系统注册吧。
C:嗯,我们公司有各个加盟商的详细信息,我们希望他们注册时提供足够的信息,我们进行核对。
(于是我们飞快写下一个特性:加盟商和连锁店通过网络进行注册,总店负责人审核后才可以正式使用系统。)
D:你们得在后台能发布各种原料的信息吧。
C:嗯,使得。
D:这里有没有什么特别的要求。
C:没有吧……
D:好的,那么你们准备设立几个人负责管理这个系统。
C:就一个人吧,就信息部那个。我们就这一个比较懂计算机的。
D:也就是说不需要有多个人分别管理这个系统?
C:不需要。
(写下一个特性:系统需要一个管理员,可以对系统进行管理)
D:在你们的加盟商进行定料时,你希望他们怎么操作啊。
C:这个,我没仔细想过……
(看客户对这个地方比较不清晰,我们打开了一个网上书店的网站,给他演示了一下购物车购物的过程)
D:你看,你的这个定料过程是不是和这个购物过程很相似,加盟商定料是不是就相当于从总公司购买原料啊。
C:对对!就要这种效果的!
(这里要记住,在特性不能直接说清楚时,找相似事物是一个不错的选择。也就是说,说明这个特性像什么,不像什么)
(我们又加一条特性:使用购物车功能进行网上定料)
D:付钱这一块怎么弄,需要网上支付吗?
C:不了,我们一般又财务专门做钱这一块工作。
D:那买完原料后要不要什么凭证呢?
C:买完后生成一份定料单吧,打印出来,交给财务,财务清算款项,款到账后通知原料那边发货。
(又一条特性:定料完成后生成定料单,并可以打印)
D:那么关于这些交易,你一定希望能查询吧,你希望怎么查询。
C:哦,这些我们财务那边有专门的财务软件。你这个系统只要能让加盟商定料就行了。
到这里谈话基本结束,我们得到如下一张补充过的特性列表:
1.可以将各种原料信息发布到系统上
2.加盟商和连锁店可以通过系统在线定料
3.加盟商和连锁店通过网络进行注册,总店负责人审核后才可以正式使用系统
4.系统需要一个管理员,可以对系统进行管理
5.使用购物车功能进行网上定料
6.定料完成后生成定料单,并可以打印
我们将补充后的特性列表给客户看了看,基本得到了认可。
到了这里,我们第一步就差不多做完了。但是,我们还是不能马上进入需求分析,因为这之前还有很多事情要做。例如,特性整理,风险规避,这都是后面要讨论的话题。
重点总结
1.客户不会想到方方面面。
2.有时客户并不明确自己想要什么东西,而仅仅是有个动机。
3.不要和客户谈需求,要谈特性。
4.开发人员有义务引导和帮助客户挖掘系统的特性。
5.当客户描述不清某个特性时,可以采用找类似事物的方法,说说这个特性像什么,不像什么。
6.在软件开发初期,我们需要首先整理出一张特性列表,而不是做需求分析。
OOAD实践之路——真实案例解析OO理论与实践(二、第一项任务:特性列表)相关推荐
- OOAD实践之路——真实案例解析OO理论与实践(五、需求分析之前的故事)
查看本系列全部文章: <OOA&D实践之路--真实案例解析OO理论与实践>索引贴 高质量软件的第一要素 到目前为止,我们做了很多工作,但是我一直在强调这些都还不是需求分 ...
- 真实案例解析OO理论与实践
一.导言 为什么要写这个系列 "OO都是一个已经被讨论烂的话题了,还有什么可写的!" 不知当你看到文章标题时,是不是有这种疑问,或者鄙夷.不错,OO从诞生到现在经历了不短的岁月,与 ...
- 视频教程-数据分析快速实践:企业真实案例精讲-Python
数据分析快速实践:企业真实案例精讲 本科:武汉大学 软件工程 博士:美国佐治亚大学 地理信息系统 杨威 ¥69.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订 ...
- 【系统架构设计师】软考高级职称,来自订阅者真实反馈,从理论、实践、技巧让你掌握论文写作秘诀
[系统架构设计师]软考高级职称,来自订阅者真实反馈,从理论.实践.技巧让你掌握论文写作秘诀. 目录 对于系统架构设计师的论文写作几点建议 论文摘要 论文正文 论文结尾 关于[系统架构设计师]备战,我想 ...
- 计算机专业理论和实践的关系,计算机在职研究生如何处理理论与实践的关系
计算机专业是一门新兴专业,在在现代社会,计算机技术已成为科技.经济.军事.文化等社会发展各个方面所不能缺少的推动力量,就业前景可谓十分广阔.因此,计算机专业一直是我国考生所热衷的热门专业.然而,计算机 ...
- Spark、Flink、CarbonData技术实践最佳案例解析
当前无论是传统企业还是互联网公司对大数据实时分析和处理的要求越来越高,数据越实时价值越大,面向毫秒~秒级的实时大数据计算场景,Spark和Flink各有所长.CarbonData是一种高性能大数据存储 ...
- 亿级用户百TB级数据的 AIOps 技术实践之路(增强版)
作者简介 周荣,华为消费者BG云运维部 AIOps 负责人,GOPS 2018 深圳站金牌讲师,07年加入华为,先后分别负责下一代智能网.中间件平台.运维工具等产品的研发与规划,在分布式系统.大数据分 ...
- 艾伟:WCF从理论到实践(11)-异步
本系列文章导航 WCF从理论到实践(1):揭开神秘面纱 WCF从理论到实践(2):决战紫禁之巅 WCF从理论到实践(3):八号当铺之黑色契约 WCF从理论到实践(4):路在何方 WCF从理论到实践(5 ...
- 艾伟:WCF从理论到实践(2):决战紫禁之巅
本系列文章导航 WCF从理论到实践(1):揭开神秘面纱 WCF从理论到实践(2):决战紫禁之巅 WCF从理论到实践(3):八号当铺之黑色契约 WCF从理论到实践(4):路在何方 WCF从理论到实践(5 ...
最新文章
- 想学单片机怎么入手?学单片机前先学什么?
- 百练OJ:1835:宇航员
- markdown 语法_markdown特殊语法之上下标
- 【计算机网络】链路与连通
- web developer tips (55):多项目解决方案中设置启动项
- 前端事件绑定知识点(面试常考)
- 深度剖析python_汉诺塔问题深度剖析(python实现)
- python命令行模式和交互模式区别_对命令行模式与python交互模式介绍
- 【温故而知新-Javascript】使用canvas元素(第一部分)
- 使用GCC和GNU Binutils编写能在x86实模式运行的16位代码
- listview去掉底部多出的边框黑色
- 阿里云总监课第四期:阿里褚霸携专家团独家分享弹性计算最佳实践
- RNA 14. SCI 文章中差异表达基因之 蛋白互作网络 (PPI)
- dex字符串解密_GitHub - zhoushuntong/DexEncryptionDecryption: APK 加固 dex 加密,解密 学习项目...
- 洛谷p3398仓鼠找suger题解
- SLAM之回环检测与优化
- 阿里云最简单的认证是什么?考试费用是多少?
- Altium Designer 19 错误警告 Design contains shelved or modified (but not repoured) polygons
- 锁屏密码锁、图案锁忘记怎么办?简单利用adb删除(部分机型可用)
- Python爬取新浪微博评论数据,写入csv文件中