- 浏览: 1501460 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
需求从哪儿来?
来自于项目甲方,还是直接或间接的用户、经理、高级经理、操作人员、支持人员、测试人员,与你的系统有联系的其它系统的开发人员,或是维护人员?这是所有的正式需求的来源吗?事实上,提供需求、解释需求、指定需求和排列需求优先级是项目甲方的职责所在。此外,项目甲方有权利要求开发队伍投入时间去辨别和理解这些需求。要想以这种轻巧建模的方式获得成功,理解这个概念是非常重要的。项目甲方负责提供需求,开发组负责理解和实施。
这是否就意味着你可以坐等你的项目甲方来告诉你他们需要什么呢?当然不是。针对他们所告诉你的内容,你可以提出问题,进行分析,促使他们给出更具体的内容,甚而至于可以提出你自己的见解使之改变初衷。你可以建议增加一些新的需求,请注意你所提出的仅是建议,他们可以考虑作为正式的需求加以接受(可能会作出修改)或拒绝。为了找出潜在的需求,你应该经常与甲方保持联系,并借助于一些已有的文档,比如公司政策法规、以前的系统,或者公开的可用资源,比如web上的信息、书籍、杂志或你竞争对手的产品和服务。再次声明,你的项目甲方是需求的最终决定者,而不是你。我不能不强调这一点。
那么项目甲方又从哪里知道他们的需求呢?“我真希望我能这样做”,他们经常会这样抱怨现有的系统,因为他们的竞争对手能做到,但他们却不能;或者想避免过去所出现的问题;或者仅仅是想多增加一个新的功能。一些甲方,尤其是操作人员和高级IT部门经理,可能需要集成现有或即将上马的系统;或者由于某项(象必须削减计算机数量)政策而带来的需求。值得注意的是你的项目甲方应该基于大量的依据明确地阐明需求,而这些依据是应该存在的,你可以通过与之交流确定这一点。
我的经验告诉我在项目中邀请相关方面的专家的加入对找出潜在的需求是很有价值的。例如构建一个电子商务系统,我会邀请有国际化软件设计经验的人员、税法专家或者供应专家的加入。当你对系统中的某些方面不熟悉时(有可能这是你首次构造面向世界各地用户的电子商务系统),这个方法尤其有效。我经常会邀请一些外部的专家和几个甲方在一起交流一两天,来帮助我们检查是否由于我们的经验欠缺而遗漏了什么。这对于确保我们的系统是否完整是一个很重要的方式,特别是在最初定义项目所应包括的范围。这同样也能够帮助甲方进一步的思考。但是,你意识到其中存在危险吗?你所邀请的外部专家提出一些建议可能听上去是非常好的,但目前根本就用不上的。换句话说,你依然得从这些专家意见中精挑细选。
一些基本原理
项目甲方的积极参与对构造需求是非常关键的。实际操作中要做到这点存在着两个问题:第一,甲方自身的提供需求的能力以及他们(或者你)是否愿意积极地参与进来。从我的经验来看,一些项目组并没有足够的途径与甲方联系(或不知道甲方在哪),这完全是项目组自身的问题。你的项目肯定有资金,不是吗?这些资金一定是来自于以某种形式存在的项目甲方,所以他们是确实存在的。同样,用户也是肯定存在的。即使你的系统是面向大众,也至少存在着潜在的用户,你可以找到他们,同他们交谈。所以一定存在着你可以向之询问的人。你可能会说,“有时要找出这些人有一定困难”,“要让他们参与进来不是很好办”。是的,确实存在这样的难处,想办法克服它。在“解决需求分析建模中的常见难题”一节中我谈到了一些解决办法,包括没有足够的途径与甲方联系的问题。我的原则是,如果你的项目甲方不能或不愿意参与,这就意味着你的项目失去了内部支持这条成功的条件,因此你要么解决这个问题要么干脆取消这个项目,以减少损失。如果你听之任之,至少你不能宣称使用的是灵巧建模(Agile Modeling)的开发方法(甲方的积极参与是其中的一项核心内容,在AM的开发方法中必须实施)。
那怎么才算项目甲方积极地参与进来了呢?图1使用UML活动图(UML activity diagram)大体上描述了需求阶段的流程,标示出开发人员与甲方各自应承担的任务。图中的虚线把这两部分任务分开来。从图中可以看出有一些任务是共同承担的,如想法或建议的确定(identifying ideas or suggestions)、潜在需求的讨论(discussing a potential requirement)、建模(modeling),可能还有文档的开发(potentially documenting)。项目甲方单独负责指定需求的优先级,系统是为他们开发的,这当然是他们的责权所在。同样的,开发人员负责估计实现这个需求所需的资源,因为他们是实际工作人员。如果自己不作估计而采用来自于项目组外部的估计,这是不合理的也是不可取的。虽然需求的优先级确定和估算超出了AM的讨论范围,但是你可以在如XP和UP这样的软件流程(Software Process)中找到它,理解它们对于整个需求分析是很重要的。AM并不是一个软件流程,它只是应用于这些软件流程中的一种建模方法。
我的观点是:项目甲方应该加入需求的建模和文档开发中来,积极地参与,而不仅仅是提供信息。为达到这点,肯定需要开发人员对甲方进行培训、导引和指导,这是完全可能做到的。我曾经见过一些刚起步的小公司、大企业和政府机构中的甲方能够以非常高的效率建造需求模型以及将这些需求文档化。在电信业,在金融业,在制造业,在军队里我都看见这样的人存在。为什么这点这么重要?因为你的项目甲方才是需求的真正专家。他们知道他们想要的是什么(参见“解决需求分析建模中的常见难题”,如果他们不知道)。而且只要你愿意,他们是能够学会如何建造需求模型和将它们写下来(译注,这样你们之间就可以同一种语言进行沟通)。从轻巧的观点看,这是很有意义的,因为有更多的人将会分担需求建模的工作。
为了让项目甲方更容易地参与进来,消除行业术语方面的障碍,你应该遵循使用最简单的工具这一做法。表1列出了许多需求阶段的artifact,他们都可以用简单或复杂的工具得到。对于每一种artifact,表中都给出了对应的简单工具。图2和图3是使用简单工具的两个例子。图2表示的用粘贴纸针模拟出一个显示界面。图3是使用索引卡片建立概念模型的例子。当你在需求分析阶段引入新的技术时,比如一些可以制作很好的使用案例图的绘制工具或有强大功能的CASE工具,这就会使得你的项目甲方很难加入进来。因为他们不但要学习建模的技术,而且还要学习如何使用这些工具。使用越简单的工具,进入的门槛也就越低,由此你才有更多的机会去增进相互之间的有效协作。
图http://hiphotos.baidu.com/tdskee/pic/item/8bb0b144c7bbb8a9b3b7dc4c.jpg
3 两个CRC卡片
我坚信需求的建立是独立于技术的。面向对象的需求、结构化的需求、基于组件的需求,这些都属于实现技术的范畴。虽然你可以选择某种技术来分析需求建立需求,但必须牢记你所真正关心的是需求本身。下面所讲的所有技术,你可以选择其中一种或几种来进行需求建模的工作。
但有时你又不得不抛开“建立与技术无关需求”的想法。比如一个很普遍的限制就是大多数的项目可以从已有的基础技术上获益。在这个层次上,需求仍然是独立于技术的。但如果你仍执著要抛开已有的一些基础技术,比如某个版本的Sybase数据库或要与SAP R/3给出的模块集成,而非得从最底层开始,那就过头了。只要你知道你在做的是什么就可以了,但不要经常性地这样干。
记住从小事做起。越小的需求(象特性(features)或者用户故事(user stories)),相对于越大的需求(象使用案例(use case))就越易于估计和实现。平均的来说,一个使用案例涵盖的功能要多于一个使用情景,这就是“大”的含义。
对于需求跟踪表(requirements tracebility matrix)的使用也需要三思而后行。跟踪能力是指能够由项目进行中所生产的某个artifact的某一方面追踪到另一个与其相关的artifact,而需求跟踪表就是用来记录这些关联关系的。它从每个需求为起点,可以追溯到所有与之相关的分析模型、架构模型、设计模型、源代码或者测试用例。使用跟踪表的组织为了保证各个阶段artifact(包括跟踪表本身)的一致性,必须要经常进行更新工作,而不是仅在受到影响时才改动。使用它的好处是你可以很容易地分析出系统中的哪些部分将会受到该需求改变的影响。但是,如果你有一两个熟悉系统的人(译注:当然你得留住他们),当系统需要改变时,通过他们来进行评估影响会更容易而且费用也会更低。在我看来,给予跟踪表的评价过高了,因为维护它所带来的开销远大于所得到的好处,即便你有特殊的工具去做这件事情。让你项目的管理层认识到它真正的价值和代价所在,让他们来作决定是否使用它。毕竟,跟踪表是一份有效的文档。他们可以据此做出决定。
需求的类型
我认为需求可以分为两类:行为类型的(behavioral)和非行为类型的(non-behavioral)。行为类型的需求描述的是用户如何与系统交互(用户界面)、如何使用该系统(用法)、或者是系统如何实现一个业务功能(业务规则)。非行为类型的需求描述的是系统的技术方面,典型的如可用性、安全性、性能、互用性、可信度和可靠性。要注意的是这两类需求有时并不一定能够完全分开来。对存取数据速度的性能要求明显是技术方面的需求,但它也会反映为用户 界面的响应时间,从而影响到可用性和某些用法。访问权限管理,比如谁能够获取特定的信息,这明显是一个行为类型的需求。但它也同样涉及到安全性这个非行为类型的需求。别紧张,不要死揪住这类问题。关键的是能够确定和理解所给出的需求。如果你把一个需求分错了类,谁又会真的去关心呢?
发表评论
-
LAMP网站架构方案分析
2011-09-21 11:09 1309LAMP(Linux-Apache-MySQL-PHP ... -
大流量网站的底层系统架构分析
2011-09-10 22:01 1206大流量、高并发的网站的底层系统架构 http://www.h ... -
详细介绍软件架构设计的三个维度
2011-09-07 19:28 1375本文介绍的是软件架构 ... -
十步构建大型网站架构(2)
2011-09-07 16:21 1456架构演变第六步:分库 享受了一段时间的系统访问量高速增长的幸 ... -
十步构建大型网站架构(1)
2011-09-07 16:20 1403今天我们来谈谈一个 ... -
架构、框架、设计模式之间的关系简述
2011-09-07 16:00 1674本文向您讲解架构、框 ... -
UML实践----用例图、顺序图、状态图、类图、包图、协作图
2011-09-07 10:01 1976面向对象的问题的处理 ... -
UML建模之时序图
2011-09-06 20:19 3014http://www.uml.org.cn/oobject/2 ... -
UML 活动图
2011-09-06 20:13 1465UML 活动图记录单个操作 ... -
UML 状态图
2011-09-06 20:04 1322http://www.uml.org.cn/oobject/2 ... -
三种模型
2011-09-06 19:22 1383《uml面向对象建模与设计》本书提出了一套面向对象的表示 ... -
5 款基于 Web 浏览器的建模工具
2011-09-05 10:29 1278http://www.oschina.net/news/209 ... -
UML用例图
2011-09-02 16:31 5060一、UML用例建模简介 ... -
深入浅出REST
2011-08-19 09:48 1170不知你是否意识到,围绕着什么才是实现异构的应用到应用通信的“正 ... -
数据量非常大的照片分享社区网站架构设计
2011-07-21 21:31 9508数据库一向是网站架构中最具挑战性的,瓶颈通常出现在这里。又拍网 ... -
相关知识
2011-07-04 16:34 1283(二) 架构的分类 架构由于应用的不同而存在不同。大体而言, ... -
软件需求分析方法总结--轻巧建模之需求篇(二)
2011-06-27 23:07 2005http://hi.baidu.com/tdskee/blog ... -
软件需求分析方法总结--撰写优秀的需求
2011-06-27 23:04 1630软件需求常常被写得很糟且难于遵循。清楚地阐明你的需求将使每位项 ... -
软件需求分析方法总结--如何分析问题和需求
2011-06-27 23:03 2299如何分析问题和需求 万事开头难,需求没有完全分析清楚,系 ... -
软件需求分析方法总结--如何进行软件需求分析(三)
2011-06-27 23:02 14748.需求分析的过程 需 ...
相关推荐
敏捷软件开发方法是一种应对快速变化需求的开发策略,旨在提高软件开发效率和质量。它强调灵活性、团队合作和快速反馈,以适应不断变化的业务环境。敏捷开发的名称来源于其核心理念,即轻巧、机敏、迅捷、灵活、高效...
统一建模语言(Unified Modeling Language,简称UML)是一种用于软件工程的标准化建模语言,旨在帮助开发者更好地理解、设计和维护软件系统。UML工具则提供了可视化的环境,使软件架构师、设计师和开发人员能够更...
- 利用MATLAB、Python等软件工具,进行数学建模与仿真,提高学习效率。 综上所述,《2010陈文灯、黄先开考研数学轻巧手册(经济类)》涵盖了数学分析、高等代数、概率论与数理统计等多个方面的基础知识,并结合经济...
2. **敏捷建模(Agile Modeling, AM)**:作为轻量级方法论之一,AM强调简单性和变化性,其核心原则包括主张简单、拥抱变化、递增变化等。 3. **极限编程(eXtreme Programming, XP)**:这是一种轻量级的敏捷软件开发...
"长庆小蝴蝶"可能是该定向设计及计算软件的特定版本或者一个模块的名称,它可能包含了一系列针对特定地质条件或工程需求的定制功能。"长庆"可能指的是中国的一个地区,如陕西省的长庆油田,这表明该软件可能特别适用...
在本压缩包中,我们关注的是“行业文档-设计装置-一种便捷式提手机箱”的主题,主要包含了一份名为“一种便捷式提手机箱.pdf”的文件。这份文档可能详细介绍了如何设计一款便于携带和使用的手机保护装置,即便捷式...
计算机模拟则是利用电磁仿真软件,如HFSS、CST等,进行三维建模和性能预测。实验验证则通过制作实物样品并进行测试,验证理论与模拟结果的准确性。 在实际应用中,根据具体系统需求和制造工艺,工程师会选用不同的...
下面我们将深入探讨这一主题,围绕设计思想、技术实现、用户需求以及潜在的IT应用进行分析。 首先,设计装置的核心在于解决特定问题或满足特定需求。在这个案例中,“折叠写生画板”显然是针对艺术爱好者,尤其是...
总结起来,云计算在桥梁施工中的应用,特别是结合复合牵索三角挂篮结构的创新设计,以及借助高级分析软件进行的仿真计算,为解决超宽变截面桥梁的施工问题提供了科学依据和技术保障。这一研究成果不仅对于武汉的桥梁...
总结来说,本研究通过引入CAD/CAM技术,参数化设计方法,以及数控编程技术,为链轮加工领域提供了一个既经济又高效的解决方案。这不仅提升了链轮的加工效率和质量,也促进了我国数控机床加工能力的提高。
在本压缩包文件“行业文档-设计装置-一种带有动态鸟的文具笔筒.zip”中,主要包含了一份关于创新文具设计的详细文档——“一种带有动态鸟的文具笔筒.pdf”。这个设计巧妙地将实用性和趣味性结合在一起,为日常办公或...
标题中的“行业文档-设计装置-一种可夹在笔上的灯”揭示了这个压缩包文件包含的是一份关于工业设计或产品设计的专业文档,聚焦于一个创新的实用装置——一个可以夹在笔上的灯具。这样的设计旨在提升笔的功能性,为...
UML是一种标准化的建模语言,用于软件工程中的系统分析、设计和开发。它通过图形化的方式帮助开发者理解和表达复杂的系统结构和行为。JUDE Community作为一款UML工具,支持多种类型的UML图表,包括但不限于: 1. **...
描述中的内容简短直接,表明这是一个关于这种特殊小桌的详细文档,可能包含了设计原理、结构特点、使用方法以及可能的优势。对于设计师和工程师来说,这样的文档提供了学习和借鉴的机会,了解如何根据用户需求创新...