http://sunxiunan.com/?p=1333
闲逛javaeye论坛,发现一个很有趣的帖子《面子驱动编程》,里面的观点简单说就是:从客户需求出发,实事求是,面向用户(或者说面向需求)来做设计。
前面我写了一篇文字如果我来做软件(1)- 评《走出软件作坊》,这里想写的是软件开发最重要的一个时期,也就是所谓的需求分析阶段。
在维基百科上是这样解释需求分析的:
在软件工程中,需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范围、定义和功能时所要做的所有的工作。需求分析是软件工程中的一个关键过程。在这个过程中,系统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。
在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤,但在过去十年中越来越多的人认识到它是整个过程中最关键的一个过程。假如在需求分析时分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。
简单的说,需求分析实际上就是客户想要做什么,想要一个什么样的产品,想实现一个什么样的功能。这个阶段可以分得更细一些,但是大体意思就是你要做什么不要做什么。
为何这个最重要?做过软件编程的朋友都知道,一个错误的设计无论如何也得不到正确的结果,哪怕你是再牛逼的大师来编码。
一个软件从初始到客户验收使用,中间会经历很多人的构思描述,伴随出现大量的文档,而一开始的方向一定要正确,才能保证后面走的路也是正确的。
用户提出的叫做业务需求,可能是一个功能,可能是一个流程,但是不一定能和程序设计挂钩,业务需求需要转化为软件需求,才真正能够进行具体的设计。
简单的说,一个软件的需求可能有下面几个动机:
1,客户需要一个信息管理系统或者物流或者财务报表系统。这种客户的特点是比较了解业务流程,不了解IT具体如何实现。阿朱那本《走出软件作坊》在这方面的介绍比较多一些,大家可以参考书里面的内容。只想说明一点是,在一些企业中,尤其是国内企业,领导与具体做事的人往往对一个系统的理解是不同的,而国内企业的软件开发,基本上都是“面向领导”编程,一开始一定要在生活中搞定领导,让他们能把单子签下来才可能继续开发软件,而具体使用软件的人对软件的看法又是另外一回事,这里面的玄机不在于技术。
2,软件需求从内部提出。这种需求也比较广泛,比如我们公司就是开发硬件配套的软件,需求可能从客户提出,也很多是从公司内部的分析师提出来的。这种软件需求分析相比第一类要简单一些,通常来说提出需求的人都有一定的技术基础,比较容易从业务需求转化成为软件需求。
如何写软件需求,我就不多说了,毕竟自己只是一个程序员,对于这些很高层的分析还是不熟悉,只想提一些个人零散的看法。
“你真的不需要它”,这句话对于做需求分析的朋友来说,应该时时在心里提醒自己。喜欢构造大而全系统的代表基本上都是那些大公司。我们知道微软的业务来源主要有几个方面,一个是office系列,另外一个是操作系统系列,还有就是开发平台系列(visual studio)以及各种服务器系统(sql server),另外不怎么赚钱的web service。微软软件的需求估计就是非常的庞大,什么都想完成,可是作为微软用户,一些不方便不好用的地方却是一直存在到windows7,如那个简陋的画笔程序,以及不好用的搜索程序,直到最新版本的windows才有所改进。一方面是越来越庞大的软件功能,一方面是不好用的软件体验,真是很讽刺。另外对于一些架构师或者分析师,他们喜欢描绘复杂系统,分层分架构高扩展性庞大的部属,也许不这样就无法体现他们的水平。这种面向自我的需求设计,带来的往往是悲剧性的后果,这些问题却要程序员或者测试人员去承担责任。
如何避免这种无谓的过度设计。最重要的就是紧靠用户的需求,不过多考虑什么扩展性,如果需要从两个方案中选择一个,那就选择简单的那一个(奥卡姆剃刀原理),以完成用户需求为宗旨。
另外需要注意的是通常来说20%的功能就能满足用户80%的日常需求,那些不常用的功能往往需要程序员更多的时间去编码实现,如何掌握常用与不常用需求的比例,也是需要长时间经验教训来获取。
关于需求分析方法,大家可以参考后面的链接,写的比我强多了。
http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it
http://zh.wikipedia.org/wiki/需求分析
http://en.wikipedia.org/wiki/Requirements_analysis
http://icecloud.iteye.com/blog/34957 敏捷需求分析
http://blog.nona.name/tag/analyst
补记:
http://www.far2go.cn/blog/post/what-is-the-goal.html
目标是什么?
如果我当年去问顾客他们想要什么,他们肯定会告诉我:“一匹更快的马” ——福特
一句大家十分熟悉的名言,当人们想要一匹更快的马的时候,福特造出了一辆汽车。很多时候我们迷失在执行上而忽略了真相,做事情一定要首先问自己:目标是什么?
人们说:“我要一匹更快的马”,很多人听到了这个"需求",然后冲进马场去选马配种。
如果先问一下:“为什么要一匹更快的马?”
“因为更快的马跑得更快”
“为什么要跑得更快?”
“这样我就比以前更快的到家”
“所以你的目的是什么?”
"更快的到达目的地,节约路上的时间!“
OK,这个时候,我们可以问自己,或对身旁的那帮天才说:”同志们,什么东西、任何东西,可以人们更快的达到目的地,节约时间?“
忘掉可怜的马吧,飞的怎么样?或者……
分享到:
- 2009-10-13 17:22
- 浏览 833
- 评论(0)
- 论坛回复 / 浏览 (0 / 2187)
- 查看更多
相关推荐
YAGNI(You Ain't Gonna Need It):这条原则的含义是"你不会需要它",是指开发者自以为有用的功能,实际上都不会需要。 2022/6/30 3 软件工程-08-设计优化全文共51页,当前为第3页。 设计的"味道(sm
Also, because this program accesses the hardware directly, you will need to run it as root ( pretty obvious ). If you have any questions regarding the circuit setup or operation just let me know ...
信息融合技术是一种集成多个传感器...提出采用人工免疫网络(Artificial Immune Network,AIN)作为模式识别领域中信息融合技术的融合算法,并做出了初步的尝试,两个实验证明了AIN作为信息融合算法的可行性和有效性。
osnet_ain_x1_0_imagenet.pt, 需要的请自行下载。下载自:'osnet_ain_x1_0': 'https://drive.google.com/uc?id=1LaG1EJpHrxdAxKnSCJ_i0u-nbxSAeiFY'
PZGLI007-品质管理-ain_1206_x国际大酒店餐饮部岗位.pdf
**PyPI 官网下载 | ain-worker-staging-1.4.31.tar.gz** PyPI(Python Package Index)是Python编程语言的官方软件仓库,它为开发者提供了一个平台来发布、分享和发现Python模块。ain-worker-staging-1.4.31.tar.gz...
| `1111` | AIN0- (AIN1+) + AIN2- (AIN3+) + AIN4- (AIN5+) | 通过上述表格可以看到,除了直接选择单端输入外,还可以通过设置不同的组合来实现差分输入的选择。例如,当AMX0AD3-0设为`1001`时,选择AIN0和AIN1...
初级入门吉他谱 guitar tab
osnet_ain_x1_0_msmt17_256x128_amsgrad
名称:AODocs - Smartbar for Google Wor -------------------- 版本:16.14 ...分类:生产工具 -------------------- 概述:将AODocs:registered:功能添加到Google Workspace:trade_mark:(Google...AIN主要特点 ★从Goo
6. **You Ain’t Gonna Need It (YAGNI)** YAGNI原则主张只实现当前需要的功能,避免过度设计。过度设计可能导致项目复杂性增加,增加开发成本,并可能提前消耗未来的扩展性。软件开发首先是沟通的过程,过多考虑...
2021_usa21_prof-r03_01_your_cyber_journey_you_ain%27t_seen_nothin%27_yet 2021_usa21_prof-r05_01_lessons_learned_from_diverse_paths_to-successful-cybersecurity_careers 2021_usa21_prof-r09_01_rebels_...
磁悬浮 基于stm32f103单片机的下推式磁悬浮项目 驱动:TB6612fng 主控:STM32 f103c8t6 ADC: PA1--ADC12_IN1 用于检测浮子是否放上,... AIN2--PB13 CIRCLE: AO1--Circle1 AO2--Circle2 BO1--Circle3 BO2--Circle4
标题中的“行业分类-设备装置-响应于高级智能网(AIN)触发来提供因特网协议多媒体子系统(IMS)服务的方法、系统和计算机程序产品”揭示了一个技术领域,涉及电信行业的融合,尤其是传统通信网络与现代IP网络的集成...
标题中的"osnet_ain_x1_0_imagenet.pth.zip"是一个压缩文件,其中包含一个名为"osnet_ain_x1_0_imagenet.pth"的模型权重文件。这个文件是深度学习领域的一个重要资源,主要用于计算机视觉任务,尤其是图像识别。 **...
9. **你不会需要它原则(You Ain't Gonna Need It, YAGNI)** - 不要提前实现你认为未来可能需要但目前并不需要的功能。 - 这有助于避免过度设计,让代码更专注于当前需求。 10. **后期绑定原则(Late Binding)** -...
支持语言:Bahasa Indonesia,Bahasa Melayu,Deutsch,English,Filipino,Français,Kiswahili,Nederlands,Norsk,Tiếng Việt,Türkçe,català,dansk,eesti,español,español (Latinoamérica),hrvatski,italiano,...
- YAGNI(You Ain't Gonna Need It)原则建议不要预先添加那些可能不需要的功能。 - SOA(Service-Oriented Architecture)指出了服务导向架构的重要性。 - 编程最佳实践还包括了数据缓存策略、类型扩展方法以及...
这个插件的目的是提高代码的可读性和维护性,因为YAML(YAML Ain't Markup Language)以其清晰的结构和易于人类阅读的特性在配置文件领域变得越来越流行。 首先,我们来了解一下Properties文件。Properties文件是...
外部PWM电流控制模式允许用户通过AIN1、AIN2、BIN1和BIN2输入引脚灵活地调整电机电流,实现精细的电机速度控制。 BDR6622T的内部PWM电流控制采用固定的关断时间PWM缓慢衰减方式,通过检测电阻(RSENSE)监控电机绕...