﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-paulwong-随笔分类-Requirement Analyst</title><link>http://www.blogjava.net/paulwong/category/50629.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 24 Oct 2014 18:48:56 GMT</lastBuildDate><pubDate>Fri, 24 Oct 2014 18:48:56 GMT</pubDate><ttl>60</ttl><item><title>如何写好系统用例</title><link>http://www.blogjava.net/paulwong/archive/2014/10/24/418989.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 24 Oct 2014 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/10/24/418989.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/418989.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/10/24/418989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/418989.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/418989.html</trackback:ping><description><![CDATA[关于系统用例的书籍，太多。不想在这里去解释什么是系统用例。但为什么要写系统用例呢，又如何写好呢？<br /><br />写系统用例是为了更清晰的展示系统的业务场景的功能实现。也是为了给程序员参考的一个图。同时也是与客户沟通的桥梁。很多东西，千言万语，不如一张图那么直观。但在很多项目中，用例分析这个过程被忽略而过。<br /><br />程序员往往只看到文本的需求，就自己开始做了，对于小项目或许这样可以，如果是大项目，后期肯定崩溃。<br /><br />一个良好的系统用例，用图形的方式描述了客户的要求：<br />1. 有那些人去参与这个事件。<br /><br />2.这些人具体要做什么 （可以理解为调用的方法）<br /><br />3.这些人做这个事情，需要什么先决条件 (可以理解为参数，包括权限等等)<br /><br />4.这些在做这些事情的时候，需要第三方帮忙吗？或者需要第三方系统接口吗？<br /><br />5.做完这些事情，应该达到一个什么样的目的，也就是结果，这个结果会是下一个用例的输入吗？<br /><br />当你有着人物，事件，参数，输入，输出的一张图 摆在眼前的时候，所有的事情的都清晰了。<br /><br />看着这张图，就可以写出 相关的接口程序，实现方法等。<br /><br />通过大量的系统用例，可以提取出公共的用例，比如权限等。从而抽象出公共的实现方法，才不会导致同一个方法，不同的程序员各自实现了一套。<br /><br />以图书为例子，列表说明一个用例的主要部分，以及要表达清楚的地方。<p>&nbsp;</p><table border="1" cellspacing="0" cellpadding="0" align="left"><tbody><tr><td width="115" valign="top"><p><strong><span>用例名称</span></strong></p></td><td width="393" valign="top"><p><span>bu_</span><span>借阅图书</span></p></td></tr><tr><td width="115" valign="top"><p><strong><span>用例描述</span></strong></p></td><td width="393" valign="top"><p align="left"><span>借阅人通过此用例向系统查询并提交借书请求</span></p></td></tr><tr><td width="115" valign="top"><p><strong><span>执行者</span></strong></p></td><td width="393" valign="top"><p align="left"><span>借阅人</span></p></td></tr><tr><td width="115" valign="top"><p><strong><span>前置条件</span></strong></p></td><td width="393" valign="top"><p align="left"><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>借阅人借阅证件在有效期内</span></span></p><p align="left"><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>借阅人没有逾期未归还的图书</span></span></p></td></tr><tr><td width="115" valign="top"><p><strong><span>后置条件</span></strong></p></td><td width="393" valign="top"><p align="left"><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>创建借书定单</span></span></p><p align="left"><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>更新借阅人借阅记录</span></span></p></td></tr><tr><td width="115" valign="top"><p><strong><span>主过程描述</span></strong></p></td><td width="393" valign="top"><p><span>1</span><span>用户用借阅证提供的帐号登录系统，计算机显示我的图书馆界面</span></p><p><span>2.</span><span>用户选择查询图书，计算机显示查询界面</span></p><p><span>3.</span><span>用户按书名、作者、出版社查询，计算机显示查询结果</span></p><p><span>4.</span><span>用户可单选或多选书本，并确认借阅。计算机显示确认借阅图书清单。</span></p><p><span>5.</span><span>用户选择确认借阅，计算机显示借阅定单及费用</span></p><p><span>6</span><span>用户选择提交定单，计算机显示提交结果和定单号</span></p><p><span>7.</span><span>计算机执行后置条件。用例结束</span></p></td></tr><tr><td width="115" valign="top"><p><strong><span>分支过程描述</span></strong></p></td><td width="393" valign="top"><p align="left"><span>2.1.1</span><span>用户选择查看原有定单，计算机执行<span>4;</span></span></p><p align="left"><span>4.1.1</span><span>用户可单选或多选书本，放入借书篮，计算机显示借书篮现有内容</span></p><p align="left"><span>4.1.2</span><span>.1.1</span><span>用户选择继续借书，计算机执行<span>2</span>；</span></p><p align="left"><span>4.1.2</span><span>.2.1</span><span>用户选择提交借书篮，计算机执行<span>4</span></span></p><p align="left"><span>4.2.1</span>&nbsp;<span>用户选择放弃，计算机执行<span>2</span>；</span></p><p align="left"><span>6.1.1</span><span>用户选择保存定单，计算机保存并执行<span>1</span>；</span></p><p align="left"><span>6.2.1</span><span>用户选择放弃，计算机执行<span>1</span>；</span></p></td></tr><tr><td width="115" valign="top"><p><strong><span>异常过程描述</span></strong></p></td><td width="393" valign="top"><p align="left"><span>1.1.1</span><span>借阅证已过期，拒绝登录，用例结束</span></p><p align="left"><span>1.2.1</span><span>借阅人有逾期未归还书本，启动<span>bu_</span>归还图书用例</span></p><p align="left"><span>5.1.1</span><span>用户余额不足，计算机显示余额和所需金额</span></p><p align="left"><span>5.1.2</span><span>.1.1</span><span>用户选择续费，启动<span>bu_</span>交纳借阅费用例</span></p><p align="left"><span>5.1.2</span><span>.2.1</span><span>用户选择放弃，计算机执行<span>1</span></span></p></td></tr><tr><td width="115" valign="top"><p><strong><span>业务规则</span></strong></p></td><td width="393" valign="top"><p align="left"><span>4.</span><span>至少选择一本<span>,</span>至多选择三本</span></p></td></tr><tr><td width="115" valign="top"><p><strong><span>涉及的业务实体</span></strong></p></td><td width="393" valign="top"><p align="left"><span>Be_</span><span>费用记录</span></p><p align="left"><span>Be_</span><span>图书</span></p><p align="left"><span>Be_</span><span>借书篮</span></p><p align="left"><span>Be_</span><span>借阅定单</span></p><p align="left"><span>Be_</span><span>借阅证</span></p></td></tr></tbody></table><img src ="http://www.blogjava.net/paulwong/aggbug/418989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-10-24 09:46 <a href="http://www.blogjava.net/paulwong/archive/2014/10/24/418989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Power Designer工具设计需求模型RQM</title><link>http://www.blogjava.net/paulwong/archive/2014/03/11/410883.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 11 Mar 2014 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/03/11/410883.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/410883.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/03/11/410883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/410883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/410883.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 3.1需求模型简介IEEE的软件工程标准术语表将&#8220;需求&#8221;定义为：用户所需的解决某个问题或达到某个目标所要具备的条件或能力。系统或系统组件为符合合同、标准、规范或其它正式文档而必须满足的条件或必须具备的能力。上述第一项或第二项中定义的条件和能力的文档表述。RUP将&#8220;需求&#8221;定义为：需求描述了系统必须满足的情况或提供的能力，它就可以是直接来自客户需要，也可...&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2014/03/11/410883.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/410883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-03-11 16:14 <a href="http://www.blogjava.net/paulwong/archive/2014/03/11/410883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计之路：如何进行软件需求分析？</title><link>http://www.blogjava.net/paulwong/archive/2013/07/23/401874.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 23 Jul 2013 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/07/23/401874.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/401874.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/07/23/401874.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/401874.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/401874.html</trackback:ping><description><![CDATA[<a href="http://www.blogjava.net/amigoxie/archive/2013/07/13/401528.html" target="_blank">http://www.blogjava.net/amigoxie/archive/2013/07/13/401528.html</a><img src ="http://www.blogjava.net/paulwong/aggbug/401874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-07-23 15:31 <a href="http://www.blogjava.net/paulwong/archive/2013/07/23/401874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>职场上千万不做这10件事！那样只会显得你心理幼稚！(转)</title><link>http://www.blogjava.net/paulwong/archive/2013/03/01/395897.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 01 Mar 2013 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/03/01/395897.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/395897.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/03/01/395897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/395897.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/395897.html</trackback:ping><description><![CDATA[标志一、只会踏踏实实地做具体的工作 <br />
<br />
踏踏实实地做具体工作，这没有错。但只会这样那错就大了，因为这永远只是新手的方式，仅靠这个，永远也成不了高手。甘心一辈子本本分分只当个菜鸟，到头来，肯定连菜鸟也做不成，现在的职场，逆水行舟，原地不动，早晚被浪打翻。 <br />
<br />
标志二、不会踏踏实实地工作 <br />
<br />
年轻人喜欢幻想，本身也没错。但若是一天到晚光幻想，那就麻烦了。脱离了现实，好高骛远，白日做梦，眼高手低&#8230;&#8230;漫步云端的感觉是不错，但梦醒时分，从云上跌落粉身碎骨的时候，就追悔莫及了。 <br />
<br />
标志三、瞧不起上司 <br />
<br />
受过高等教育的人都清高，别人不如自己的地方很容易放在眼里，并嗤之以鼻，尤其是对领导。让不如自己的人来领导自己，实在不公平。但是，领导之所以是领导，就有原因，不管合理不合理都存在了。也许他学识不行，也许能力不行，但他赢可能就赢在关系上了，可能就赢在心机上了，好的也好，坏的也罢，都是实实在在存在的现象。 <br />
<br />
标志四、崇拜上司 <br />
<br />
相比起刚才的这种行为，对上司盲目崇拜，则更显得幼稚。对上司的话全盘接受，无条件服从，缺乏了起码的分析能力，最终会让你在职场中迷失自我。 <br />
<br />
标志五、容易被激发、被感动、被忽悠 <br />
<br />
有些人比较感性，我本人也是这样。对于领导一些比较有煽动性东西，难以抵制，很容易用头脑发热。但无论如何，事后一定要冷静思索思索，站在不同的角度来考虑考虑问题，切莫一时意气用事。 <br />
<br />
标志六、甘当云梯默默无闻 <br />
<br />
甘当云梯，默默无闻，这本是一种很高尚的情怀。在如今更是难得。但难得归难得，天不佑此类人，生活不助此类人，时代更是难容此类人。对这种人，只能说，老兄，别那么单纯了。 <br />
<br />
标志七、习惯忍让 <br />
<br />
喜欢争斗的人让人厌恶，但现在的职场上，也只是这种人才得势。人善被人欺，习惯忍让，别人会觉得你好欺负，这已经成为现在职场上的一种思维定势了。谁也打不破它。 <br />
<br />
标志八、锋芒毕露 <br />
<br />
有人则相反，不忍不让，锋芒毕露。这也不好，这样会树敌太多，而且太容易让人看透，很容易中了别人的招儿。适当的时候露露锋芒，展示一下自己的立场就可以了，大多数的情况，还是应该韬光养晦的。 <br />
<br />
标志九、排斥关系 <br />
<br />
近几年来，新兴起一门学问，叫做关系学。这里面学问可大了，大到关系职场中的方方面面。可有人就是排斥它，认为靠自己的打拚就已经足够了。其实，职场不比学术，不是把自己关在实验室里就能出成果的，闭门造车，最终自食苦果。 <br />
<br />
标志十、知无不言言无不真 <br />
<br />
对别人什么都说，而且什么话都说真的，这很诚实，但太不成熟了。职场上混，就跟下棋一样，尽可能地对方的心理，而不是尽可能地让别人了解自己的心理。道理很浅显。<br />
<img src ="http://www.blogjava.net/paulwong/aggbug/395897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-03-01 10:58 <a href="http://www.blogjava.net/paulwong/archive/2013/03/01/395897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>界面模型插件 WireframeSketcher</title><link>http://www.blogjava.net/paulwong/archive/2013/02/12/395306.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 12 Feb 2013 15:29:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/02/12/395306.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/395306.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/02/12/395306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/395306.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/395306.html</trackback:ping><description><![CDATA[<p style="margin: 0px 0px 10px; padding: 0px; line-height: 1.5em; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 13px; background-color: #ffffff;"><a href="http://wireframesketcher.com/download.html" target="_blank">WireframeSketcher</a>是一个Eclipse 插件，用于创建线框图，界面模型和UI原型。</p>
<p style="margin: 0px 0px 10px; padding: 0px; line-height: 1.5em; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 13px; background-color: #ffffff;">项目正式开发前创建原型可以帮助用户和开发者理解系统，使用<span style="margin: 0px; padding: 0px;">WireframeSketcher</span>在Eclipse中创建能够更好的集成进入你的项目开发流程。</p>
<p style="margin: 0px 0px 10px; padding: 0px; line-height: 1.5em; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 13px; background-color: #ffffff;">WireframeSketcher 如何工作？它提供了一个pre-drawn，text-driven 预制图，文本驱动的widgets，能够展现通用UI界面，你可以拖拽他们进入编辑器迅速画出你的界面。界面用XML存储。</p>
<img src="http://www.oschina.net/uploads/img/200904/21221417_1A98.png" alt="" style="margin: 0px; padding: 0px; border: 0px; max-width: 700px;" border="0" /><br /><br />
<img src="http://wireframesketcher.com/mockups/images/small/PrintDialog.jpg" width="500" height="486" border="0" alt="" /><img src ="http://www.blogjava.net/paulwong/aggbug/395306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-02-12 23:29 <a href="http://www.blogjava.net/paulwong/archive/2013/02/12/395306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>业务建模一般步骤和方法</title><link>http://www.blogjava.net/paulwong/archive/2012/07/04/382215.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 04 Jul 2012 10:16:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/07/04/382215.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/382215.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/07/04/382215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/382215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/382215.html</trackback:ping><description><![CDATA[转载自：http://hi.baidu.com/parryblog/blog/item/2d1ae59a72b043bcc9eaf4a0.html <br /><br />本篇开始之前先扯点闲话，商业应用系统开发经历了三个阶段：<br /><br />　　第一个阶段以计算为中心，分析设计围绕程序的运行效率，算法优劣，存贮优化来进行。90年代的大学课程讲的都是这些。<br /><br />　　第二阶段以数据为中心，分析设计围绕数据流进行，以数据流程来模拟业务流程。这也就是所谓的面向过程的分析模式。<br /><br />　　第三阶段以人为中心，分析设计围绕人的业务需求，使用要求，感受要求进行。这也就是现在的面象对象分析模式。<br /><br />　　使用OO方法建立商业模型必须先定义涉众。商业系统无论多复杂，无论什么行业，其本质无非是人，事，物，规则。人是一切的中心，人做事，做事产生物，规则限制人事物。人驱动系统，事体现过程，物记录结果，规则则是控制。无论OO也好，UML也好，复杂的表面下其实只是一个简单的规则，系统分析员弄明白有什么人，什么人做什么事，什么事产生什么物，中间有什么规则，再把人，事，物之间的关系定义出来，商业建模也就基本完成了。这时候可以说，系统分析员已经完全了解了用户需求，可以进入系统建模阶段了。<br /><br />　　书归正传，上篇笔者归纳了一些典型的涉众类型及他们的普遍期望。接下来，就是要将他们这些期望定义出来。这个过程，就是业务用例获取的过程。笔者可以跟大家分享的经验是通过以下步骤进行，这些步骤并非唯一正确，对于经验不多的系统分析员来说，这些步骤很有指导意义。<br /><br />　　笔者做了一个建模实例，有需要有读者请到笔者的BLOG资源中心下载，实例以上一篇所述网上图书馆需求为蓝本建立了业务用例模型，之后的概念模型、系统模型则抽取了其中的借阅过程作为例子。不记得了可以后头找找。<br /><br />　　建模第一步，从涉众中找出用户。并定义这些用户之间的关系。在ROSE中，应该使用business actor 类型。参考上一篇的需求描述，下载实例<br /><br />第二步，找出每个用户要做的事，即业务用例，在ROSE中应使用Business use case类型。请参考《用例的类型与粒度》一文以帮助确定用例的粒度。笔者强烈建议为每一个business actor绘制一个业务用例图，这能很好的体现以人为中心的分析模式，并且不容易漏掉business actor需要做的事。至于以参与者为中心的视图容易漏掉某个业务用例的参与者的担心，可以在第四步中得到消除。下载实例<br /><br />　　第三步，利用业务场景图帮助分析业务流程，在ROSE中，这个阶段最好使用活动图Activity diagram。在这个阶段，业务场景图非常重要，在绘制过程中，系统分析员必须采用第一步中定义的用户名字作为泳道名，使用第二步中定义的业务用例名作为活动名来绘制。必须这么做的原因是，如果你无法把利用已经定义出来的 business actor 和 business use case完备的描绘业务流程，那么一定是前面的定义出问题了，你需要回头审视是否 business actor 和 business use case定义不完善或错误。如果不是所有的business actor 和 business use case 都被用到，要么应该检查业务流程调研时漏了什么，要么应该检查是否定义了一些无用的business actor 和 business use case 。同时，绘制业务场景图也非常有助于选择合适的用例粒度并保持所有的用例都是同一粒度。下载实例<br /><br />　　第四步，绘制用例场景图。与业务场景图不同的是，用例场景图只针对一个用例绘制该用例的执行过程。笔者仍然强烈推荐使用activity diagram。在用例场景图的绘制中，必须使用第一步中定义的业务用户作为泳道。必须这么做的原因是，它能帮助你发现在定义业务用例图时的错误，比如是否漏掉了某个业务用例的潜在使用者。不是每个业务用例都需要绘制场景图，只有两三个步骤的业务用例是不必一定绘制业务用例图的，但仍然需要在业务用例规约文档中写明。下载实例<br /><br />第五步，从第三步或第四步中绘制的活动图中找到每一步活动将使用到的或产生的结果。这是找到物的过程。找到后，应当建立这些物之间的关系。在ROSE中，这称为业务实体模型。应该使用business entity 类型。下载实例<br /><br />　　第六步，在上述过程中，随时补充词汇表Glossary。将此过程中的所有业务词汇，专业词汇等一切在建模过程中使用到的需要解释的名词。这份文档将成为模型建立人与读者就模型达成一致理解的重要保证。<br /><br />　　第七步，根据上一篇中提到的业主，老板等涉众的期望审视建立好的模型，确定业务范围，决定哪些业务用例在系统建设范围内。那些不打算纳入建设范围内的业务用例有两种情况，一种是该业务用例是被调用一方，那么应该把它改为 boundary 类型，意味着将来它是一个外部接口。另一种是该业务用例主动调用系统内业务用例，那么应该将它改为business actor类型。与普通business actor不同的是，由业务用例转换而成的business actor不是人，而通常是一个外部系统进程，因此应该在被调用的系统内业务用例与它之间增加一个boundary元素，意味着我们的系统将为这样一个外部进程提供一个接口。严格来说，那些需要纳入建设范围的business use case 应当对应的生成一个 business use case realization， 以后的设计工作将归纳到这些实现用例中。但笔者觉得这一步并非很关键的，实际中本人也经常省略这一步，而将协作图，象活动图，类交互图等直接在business usecase下说明。不过本实例中笔者还是按照正规方法来建模的。下载实例<br /><br />　　需要说明的是，上述的步骤并非一次性完成的，在每一个步骤中都可能导致对以前步骤的调整。即使建模已经完成，当遇到变化或发现新问题时，上述步骤应当从头到尾再执行一次。这也是RUP倡导的迭代开发模式。<br /><br />经过以上的步骤，我们已经建立了一个完整的业务模型。但这决不是建模工作的全部，以上过程只说明了建立一个完整业务模型的过程，不能说这样就建立了一个很好的业务模型。因为上述的过程中并没有提及业务分析过程。分析过程全凭系统分析员的经验，对OO的理解和对行业业务的把握能力，对原始业务模型进行归纳，整理，抽象，重构，以建立一个更高效，合理，扩展性更强的模型。这个过程无法以步骤说明。或许以后笔者会专门针对模型分析写点东西。另外除了模型，还至少需要写业务架构文档、用例规约和补充用例规约三种文档。因为模型虽然可以较好的体现业务架构，但很不好表达业务规则和非业务需求，这些需要在文档中说明。例如用例的前置条件和后置条件就是一种业务规则。读者可以在RUP文档中找到这些文档的模板。<img src ="http://www.blogjava.net/paulwong/aggbug/382215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-07-04 18:16 <a href="http://www.blogjava.net/paulwong/archive/2012/07/04/382215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>业务建模一般步骤和方法 </title><link>http://www.blogjava.net/paulwong/archive/2012/03/26/372664.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sun, 25 Mar 2012 16:26:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/03/26/372664.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/372664.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/03/26/372664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/372664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/372664.html</trackback:ping><description><![CDATA[转载自：<a href="http://hi.baidu.com/parryblog/blog/item/2d1ae59a72b043bcc9eaf4a0.html">http://hi.baidu.com/parryblog/blog/item/2d1ae59a72b043bcc9eaf4a0.html</a> <br /><br />本篇开始之前先扯点闲话，商业应用系统开发经历了三个阶段：<br />　　第一个阶段以计算为中心，分析设计围绕程序的运行效率，算法优劣，存贮优化来进行。90年代的大学课程讲的都是这些。<br /><br />　　第二阶段以数据为中心，分析设计围绕数据流进行，以数据流程来模拟业务流程。这也就是所谓的面向过程的分析模式。<br /><br />　　第三阶段以人为中心，分析设计围绕人的业务需求，使用要求，感受要求进行。这也就是现在的面象对象分析模式。<br /><br />　　使用OO方法建立商业模型必须先定义涉众。商业系统无论多复杂，无论什么行业，其本质无非是人，事，物，规则。人是一切的中心，人做事，做事产生物，规则限制人事物。人驱动系统，事体现过程，物记录结果，规则则是控制。无论OO也好，UML也好，复杂的表面下其实只是一个简单的规则，系统分析员弄明白有什么人，什么人做什么事，什么事产生什么物，中间有什么规则，再把人，事，物之间的关系定义出来，商业建模也就基本完成了。这时候可以说，系统分析员已经完全了解了用户需求，可以进入系统建模阶段了。<br /><br />　　书归正传，上篇笔者归纳了一些典型的涉众类型及他们的普遍期望。接下来，就是要将他们这些期望定义出来。这个过程，就是业务用例获取的过程。笔者可以跟大家分享的经验是通过以下步骤进行，这些步骤并非唯一正确，对于经验不多的系统分析员来说，这些步骤很有指导意义。<br /><br />　　笔者做了一个建模实例，有需要有读者请到笔者的BLOG资源中心下载，实例以上一篇所述网上图书馆需求为蓝本建立了业务用例模型，之后的概念模型、系统模型则抽取了其中的借阅过程作为例子。不记得了可以后头找找。<br /><br />　　建模第一步，从涉众中找出用户。并定义这些用户之间的关系。在ROSE中，应该使用business actor 类型。参考上一篇的需求描述，下载实例<br /><br />　　第二步，找出每个用户要做的事，即业务用例，在ROSE中应使用Business use case类型。请参考《用例的类型与粒度》一文以帮助确定用例的粒度。笔者强烈建议为每一个business actor绘制一个业务用例图，这能很好的体现以人为中心的分析模式，并且不容易漏掉business actor需要做的事。至于以参与者为中心的视图容易漏掉某个业务用例的参与者的担心，可以在第四步中得到消除。下载实例<br /><br />　　第三步，利用业务场景图帮助分析业务流程，在ROSE中，这个阶段最好使用活动图Activity diagram。在这个阶段，业务场景图非常重要，在绘制过程中，系统分析员必须采用第一步中定义的用户名字作为泳道名，使用第二步中定义的业务用例名作为活动名来绘制。必须这么做的原因是，如果你无法把利用已经定义出来的 business actor 和 business use case完备的描绘业务流程，那么一定是前面的定义出问题了，你需要回头审视是否 business actor 和 business use case定义不完善或错误。如果不是所有的business actor 和 business use case 都被用到，要么应该检查业务流程调研时漏了什么，要么应该检查是否定义了一些无用的business actor 和 business use case 。同时，绘制业务场景图也非常有助于选择合适的用例粒度并保持所有的用例都是同一粒度。下载实例<br /><br />　　第四步，绘制用例场景图。与业务场景图不同的是，用例场景图只针对一个用例绘制该用例的执行过程。笔者仍然强烈推荐使用activity diagram。在用例场景图的绘制中，必须使用第一步中定义的业务用户作为泳道。必须这么做的原因是，它能帮助你发现在定义业务用例图时的错误，比如是否漏掉了某个业务用例的潜在使用者。不是每个业务用例都需要绘制场景图，只有两三个步骤的业务用例是不必一定绘制业务用例图的，但仍然需要在业务用例规约文档中写明。下载实例<br /><br />第五步，从第三步或第四步中绘制的活动图中找到每一步活动将使用到的或产生的结果。这是找到物的过程。找到后，应当建立这些物之间的关系。在ROSE中，这称为业务实体模型。应该使用business entity 类型。下载实例<br /><br />　　第六步，在上述过程中，随时补充词汇表Glossary。将此过程中的所有业务词汇，专业词汇等一切在建模过程中使用到的需要解释的名词。这份文档将成为模型建立人与读者就模型达成一致理解的重要保证。<br /><br />　　第七步，根据上一篇中提到的业主，老板等涉众的期望审视建立好的模型，确定业务范围，决定哪些业务用例在系统建设范围内。那些不打算纳入建设范围内的业务用例有两种情况，一种是该业务用例是被调用一方，那么应该把它改为 boundary 类型，意味着将来它是一个外部接口。另一种是该业务用例主动调用系统内业务用例，那么应该将它改为business actor类型。与普通business actor不同的是，由业务用例转换而成的business actor不是人，而通常是一个外部系统进程，因此应该在被调用的系统内业务用例与它之间增加一个boundary元素，意味着我们的系统将为这样一个外部进程提供一个接口。严格来说，那些需要纳入建设范围的business use case 应当对应的生成一个 business use case realization， 以后的设计工作将归纳到这些实现用例中。但笔者觉得这一步并非很关键的，实际中本人也经常省略这一步，而将协作图，象活动图，类交互图等直接在business usecase下说明。不过本实例中笔者还是按照正规方法来建模的。下载实例<br /><br />　　需要说明的是，上述的步骤并非一次性完成的，在每一个步骤中都可能导致对以前步骤的调整。即使建模已经完成，当遇到变化或发现新问题时，上述步骤应当从头到尾再执行一次。这也是RUP倡导的迭代开发模式。<br /><br />经过以上的步骤，我们已经建立了一个完整的业务模型。但这决不是建模工作的全部，以上过程只说明了建立一个完整业务模型的过程，不能说这样就建立了一个很好的业务模型。因为上述的过程中并没有提及业务分析过程。分析过程全凭系统分析员的经验，对OO的理解和对行业业务的把握能力，对原始业务模型进行归纳，整理，抽象，重构，以建立一个更高效，合理，扩展性更强的模型。这个过程无法以步骤说明。或许以后笔者会专门针对模型分析写点东西。另外除了模型，还至少需要写业务架构文档、用例规约和补充用例规约三种文档。因为模型虽然可以较好的体现业务架构，但很不好表达业务规则和非业务需求，这些需要在文档中说明。例如用例的前置条件和后置条件就是一种业务规则。读者可以在RUP文档中找到这些文档的模板。<br />&nbsp;<br /><font face="Verdana"><a href="http://hi.baidu.com/parryblog/blog/category/%CF%B5%CD%B3%B7%D6%CE%F6">http://hi.baidu.com/parryblog/blog/category/%CF%B5%CD%B3%B7%D6%CE%F6</a><br /></font><a href="http://hi.baidu.com/parryblog/blog/category/%D0%E8%C7%F3%B7%D6%CE%F6">http://hi.baidu.com/parryblog/blog/category/%D0%E8%C7%F3%B7%D6%CE%F6</a><br /><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/372664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-03-26 00:26 <a href="http://www.blogjava.net/paulwong/archive/2012/03/26/372664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我们应当怎样做需求调研：迭代</title><link>http://www.blogjava.net/paulwong/archive/2012/02/14/369903.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 13 Feb 2012 17:12:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/02/14/369903.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/369903.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/02/14/369903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/369903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/369903.html</trackback:ping><description><![CDATA[前面我一直在反复强调这样一个观点，需求分析不是一蹴而就的，是一个反复迭代的过程。它将从第一次需求分析开始，一直持续到整个项目生命周期。为什么这样说呢？让我们一起来分析分析。 <br /><br />在第一次的需求分析阶段，我们在一段时期内需要与客户进行反复地讨论，这个过程往往是这样一个反复循环的过程：需求捕获-&gt;需求整理-&gt;需求验证-&gt;再需求捕获&#8226;&#8226;&#8226;&#8226;&#8226;&#8226; <br /><br />需求捕获，就是我们与客户在一起开研讨会，讨论需求的活动。客户可能会描述他们的业务流程，这时我们在纸上绘制简单的流程草图，及时地记录下来；客户在描述业务的同时，可能会反复提到一些业务名词，详细询问这些名词的含义，以及它们与其它名词的关系，用类图或者对象图绘制简单的草图；客户在描述业务的同时，还会提出今后的软件希望实现的功能，如能够展示某个报表、能够导出文件，以需求列表的形式记录下来。一个功能，在需求列表中会有多个需求，而每个需求应当能够用1、2句话，在20个字以内就可以描述清楚。需求列表是客户提出的最最原始的需求，他不掺杂任何分析设计，是我们的每项功能必须实现的内容。需求列表是需求验证以及日后的用户验收测试的依据，不论我们今后如何分析和设计这些功能，都要能如实地实现这个列表中提出的需求。（需求列表应当如何编写，将在后面的章节详细描述。） <br /><br />需求整理，就是在需求研讨会后，需求分析人员对研讨内容的分析和整理的过程。首先，需求分析人员应当通过用例模型，划分整个系统的功能模块，以及各个模块的业务流程。用例模型分析是一个由粗到细的过程，这样一个过程也是符合人类认识世界的思维习惯的一个过程。最先，我们应当对整个系统绘制用例图，设计用例场景，并依次对这些用例进行用例描述、流程分析、角色分析等分析过程。当然，在整体用例分析的同时，我们还应当进行一个整体的角色分析，绘制一个角色分析图，进行一个流程分析，绘制一个流程分析图（可以是传统的流程图、UML中的行动图，甚至一个简单的示意图，等等）。 <br /><br />然后，我们再在整体用例图的基础上，依次对每个用例绘制用例图。每个用例图中，会更细致地划分出多个用例，并依次进行用例描述、流程分析、角色分析等分析工作。如此这般地不断细化，直到我们认为需求已经描述清楚为止。 <br /><br />在一个系统中，用例需要细化几次，是由这个用例的业务复杂程度决定的。对于一个简单的用例，只需要细化一次就够了；而对于比较复杂的用例，则需要细化2~3次，甚至更多。 <br /><br />用例分析的过程，之所以称之为分析，它掺入了很多需求分析人员对业务的理解与设计：模块如何划分、流程如何设计、业务如何转换，等等。用例分析，还需要让需求分析员与架构师、设计师等技术人员共同协作来完成，因为用例分析还包含对业务需求的技术可行性分析。只有一份可行的需求分析，才能为后续的设计开发扫清障碍，有效降低项目风险。最后，需求分析员应当将需求列表中的内容，逐一地与用例进行核对，以避免分析人员忽略用户的某项业务需求。（后面将详细描述用例模型的搭建过程。） <br /><br />在用例分析的同时，需求分析人员还需要对业务中的相关事物，制作领域模型。领域模型，是对用户业务领域中相关事物、相互关系、相互行为操作的描述，它是以对象图和类图的形式表达的。需求人员对领域模型的分析，对业务理解的深度，对日后软件的设计，以及软件的功能扩展、升级演化，都起到了至关重要的作用。（后面将更加详细地讲述领域模型。） <br /><br />最后，当我们完成了一系列的分析整理并形成文档以后，应当对及时地与客户进行反馈，确认我们的理解是否正确，也就是需求验证工作。需求验证工作应当贯穿整个研发周期，并且在不同时期表现出不同的形式。首先，在需求分析阶段，需求验证工作表现为对需求理解是否正确的信息反馈。需求分析人员与客户再次坐在一起，一项一项描述我们对需求的整理和理解，客户则时不时地对一些问题进行纠正，或者更加深入地加以描述。我们则认真地记录，回来整理，并等待下一次的验证。在需求分析后期，我们还可以制作一些简单的原型，更加形象地描述我们对需求的理解，会使我们与客户的沟通更加顺畅。随后的设计开发阶段，我们则应当以迭代开发的形式进行。每开发完一个迭代周期，将开发的成果与客户反馈。这样做的结果是，客户可以及时地提出我们对需求理解的偏差，或者及时提出对我们设计不满意的地方，使我们存在的问题得到及时地发现与解决。问题及时的解决，使我们修复问题的代价得以降至最小。之后，当开发进入到验收测试阶段，我们则是与客户一道，一项一项地验证我们的软件是否满足需求列表中要求的业务需求。最后，当软件迎来下一次升级开发时，我们将开启另一次轮回。 <br /><br />因此，需求分析就是按照这样的过程，每次多理解一些，再多理解一些，更多理解一些，逐渐深入的过程。每深入一步，我们的软件就更接近客户的满意。 <br /><br /><a href="http://fangang.iteye.com/blog/1345099" target="_blank"><font color="#006699">我们应当怎样做需求分析</font></a> <br /><a href="http://fangang.iteye.com/blog/1345283" target="_blank"><font color="#006699">我们应当怎样做需求调研：初识</font></a> <br /><a href="http://fangang.iteye.com/blog/1392009" target="_blank"><font color="#006699">我们应当怎样做需求调研：拜访</font></a> <br /><a href="http://fangang.iteye.com/blog/1394911" target="_blank"><font color="#006699">我们应当怎样做需求调研：研讨会</font></a> <br /><a href="http://fangang.iteye.com/blog/1396971" target="_blank"><font color="#006699">我们应当怎样做需求调研：需求研讨</font></a> <br /><a href="http://fangang.iteye.com/blog/1403342" target="_blank"><font color="#006699">我们应当怎样做需求调研：迭代</font></a> <br />（续） <img src ="http://www.blogjava.net/paulwong/aggbug/369903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-02-14 01:12 <a href="http://www.blogjava.net/paulwong/archive/2012/02/14/369903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我们应当怎样做需求分析(转)</title><link>http://www.blogjava.net/paulwong/archive/2012/01/15/368565.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sun, 15 Jan 2012 12:24:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/01/15/368565.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/368565.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/01/15/368565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/368565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/368565.html</trackback:ping><description><![CDATA[又到新年了，日历又要从2011年翻到2012年了，这使我有太多的感慨，进而勾起了对太大往事的回忆。过去的10年，毫无疑问是中国软件业发展最快的10年。当我们刚刚毕业的时候，还在使用VB、PB开发一些简单的数据库应用，而现在却几乎看不到它们的踪影，换来的是诸如J2EE和.NET这样的大型web应用。而这期间，RUP、XP、敏捷开发、持续集成&#8226;&#8226;&#8226;&#8226;&#8226;&#8226;一个接一个的新概念层出不穷，令人眼花缭乱。现在想来，恍如隔世。 <br /><br />但更令我印象深刻而难以忘怀的，是我亲自经历的、亲眼目睹的、道听途说的一个又一个的软件项目，它们有的获得了成功，但更多的是令人沮丧的失败。套用一下大文豪托尔斯泰体：幸福的家庭都是一样的，不幸的家庭却各有各的不幸；幸福的软件项目都是一样的，不幸的软件项目却各有各的不幸；或者说，成功的软件项目都是一样的，失败的项目却各有各的问题。我常常在想，我们的项目开发到底怎么了，进而把它们一个一个的剥开来深入分析，竟然触目惊心。它们有的是需求的问题，有的是客户关系的问题，还有设计的问题、技术的问题、时间管理的问题、人员培养的问题&#8226;&#8226;&#8226;&#8226;&#8226;&#8226;但归根到底更多的还是需求的问题。需求分析既是一份体力活儿，更是一份技术活儿，它既是人际交往的艺术，又是逻辑分析与严密思考的产物。正是我们在需求分析过程存在的巨大隐患，最终导致了那么多项目的失败。也许你认为我在危言耸听，好吧，我来举几个典型事例分析分析吧。 <br /><br />我的第一个故事来自大名鼎鼎的东软。我在2005年接一个项目的时候，听说这个项目之前是东软做的。当时东软在做这个项目的时候，整个过程经历了10多次结构性的大变更，局部性的调整更是不计其数。据说某天早上，客户对某个功能不满意，他们不得不对几百处程序进行修改。之后客户对修改的内容还是不满意，又不得不将几百处修改重新改回来。最后这个项目导致的结果是，整个这个项目组的所有成员都离开了东软，并似乎从此不愿涉足软件开发领域。多么惨痛的教训啊！我常常听到网友抱怨客户总是对需求改来改去，但客户对需求改来改去的真正原因是什么呢？当我们对客户的需求没有真正理解清楚时，我们做出来的东西客户必然不满意。客户只知道他不满意，但怎样才能使他满意呢？他不知道，于是就在一点儿一点儿试，于是这种反复变更就这样发生了。如果我们明白了这一点，深入地去理解客户的业务，进而想到客户的心坎儿上去，最后做出来的东西必然是客户满意的。记住，当客户提出业务变更的时候，我们一定不能被客户牵着走，客户说啥就是啥。我们要从业务角度深入的去分析，他为什么提出变更，提得合不合理，我有没有更合理的方案满足这个需求。当我们提出更加合理的方案时，客户是乐于接受的，变更也变得可控了。 <br /><br />第二个故事来自我自己的项目，一个早期的项目。在这个项目中，客户扔给了我们很多他们目前正在使用的统计报表，要我们按照报表的格式做出来。这些报表都是手工报表，许多格式既不规范，又很难于被计算机实现。这些报表令我耗费了不少闹细胞，直到最终项目失败都没法完成。这件事留给我的深刻教训是，不能客户怎么说软件就怎么做。客户提出的原始需求往往是不考虑技术实现，基于非计算机管理的操作模式提出来的。他们提出的很多需求常常比较理想而不切实际，毕竟人家是非技术的。但我们作为技术人员，需求分析必须实事求是地、基于技术可以实现的角度去考虑。那种&#8220;有条件要上，没有条件创造条件&#8221;的鲁莽行事，结果必然是悲惨的。所以我们必须要基于技术实现去引导客户的需求。同时，计算机信息化管理就是一次改革，对以往手工管理模式的改革。如果我们上了信息化管理系统，采用的管理模式却依然是过去的手工模式，新系统的优势从何而来呢？因此，我们做需求就应当首先理解现有的管理模式，然后站在信息化管理的角度去审视他们的管理模式是否合理，最后一步一步地去引导他们按照更加合理的方式去操作与管理。 <br /><br />2007年，我参与了一个集团信息化建设的项目。这个项目中的客户是一个庞大的群体，他们分别扮演着各种角色。从机构层次划分，有集团领导、二级机构人员、三级机构人员；从职能角色划分，有高层领导、财务人员、生产管理员、采购人员、销售人员，等等。在这样一个复杂场景中，不同人员对这个项目的需求是各自不同的。非常遗憾的是，我们在进行需求分析的时候没有认真分析清楚所有类型人员的需求。在进行需求调研的时候，总是集团领导带领我们到基层单位，然后基层单位将各方面的人员叫来开大会。这样的大会，各类型的人员七嘴八舌各说各自的需求，还有很多基层人员在大会上因为羞涩根本就没有提出自己的需求。这样经过数次开会，需求调研就草草收场。我们拿着一个不充分的需求分析结果就开始项目开发，最终的结果可想而知。直到项目上线以后，我们才发现许多更加细节的业务需求都没能分析到，系统根本没法运行，不得不宣告失败。一个软件项目的需求调研首先必须要进行角色分析，然后对不同的角色分别进行调研。需求调研的最初需要召开项目动员大会，这是十分必要的。但真正要完成需求分析，应该是一个一个的小会，1~3个业务专家，只讨论某个领域的业务需求，并且很多问题都不是能一蹴而就完成的，我们必须与专家建立联系，反复沟通后完成。需求分析必须遵从的是一定的科学方法，而不是盲目的大上快上。 <br /><br />我的最后一个故事可能典型到几乎每个人都曾经遇到过。我们的项目从需求分析到设计、开发、测试都十分顺利。但到了项目进行的后期，快到达最后期限时，我们将我们的开发成果提交给客户看，客户却对开发不满意，提出了一大堆修改，而且这些修改工作量还不小。怎么办呢？加班、赶工，测试时间被最大限度压缩。最后项目倒是如期上线了，但大家疲惫不堪，并且上线以后才发现许多的BUG。需求分析不是一蹴而就的，它应当贯穿整个开发周期，不断的分析确认的过程。以上这个事例，如果我们提早将开发成果给客户看，提早解决问题，后面的情况就将不再发生。这就是敏捷开发倡导的需求反馈。敏捷开发认为，需求分析阶段不可能解决所有的需求问题，因此在设计、开发、测试，直到最终交付客户，这整个过程都应当不停地用开发的成果与客户交流，及时获得反馈。只有这样才能及时纠正需求理解的偏差，保证项目的成功。 <br /><br />以上的故事各有各自的不幸，各自都在不同的开发环节出现了问题。但经过深入的分析，各自的问题最终都归结为需求分析出现了问题。为了使我们今后的软件项目不会重蹈覆辙，似乎真的有必要讨论一下我们应该怎样做需求分析。 <img src ="http://www.blogjava.net/paulwong/aggbug/368565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-01-15 20:24 <a href="http://www.blogjava.net/paulwong/archive/2012/01/15/368565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>