﻿<?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>IT博客-毒菇求Buy-随笔分类-Methodologies</title><link>http://www.cnitblog.com/alsan/category/277.html</link><description>Not now, when?</description><language>zh-cn</language><lastBuildDate>Sat, 08 Oct 2011 02:00:28 GMT</lastBuildDate><pubDate>Sat, 08 Oct 2011 02:00:28 GMT</pubDate><ttl>60</ttl><item><title>J2EE Architects Handbook阅读笔记（四）</title><link>http://www.cnitblog.com/alsan/archive/2005/07/10/843.html</link><dc:creator>毒菇求Buy</dc:creator><author>毒菇求Buy</author><pubDate>Sat, 09 Jul 2005 23:52:00 GMT</pubDate><guid>http://www.cnitblog.com/alsan/archive/2005/07/10/843.html</guid><wfw:comment>http://www.cnitblog.com/alsan/comments/843.html</wfw:comment><comments>http://www.cnitblog.com/alsan/archive/2005/07/10/843.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/alsan/comments/commentRss/843.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/alsan/services/trackbacks/843.html</trackback:ping><description><![CDATA[<P style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">在大部份机构，项目经理与商业方及管理层共同建立项目范围，评估所需资料。而项目经理在这几项工作中，通常会依赖技术架构师协助。</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">定义范围</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>客观地根据用例定义项目范围，及获取商业方同意 
<UL>
<LI>在项目开发期间更改范围会严重影响进度及降低员工士气 
<LI>当商业方在开发期间增加额外需求，记录入用例中及安排它们在未来的版本中。或者简略评估每个用例，并向商业方提供资料以便他们作出决定</LI></UL>
<LI>获取项目投资者对用例的同意 
<UL>
<LI>因为用例是以商业述语编写的，可以作为一份商业方与管理层之间，关于何时交付什么的“合约” 
<LI>与商业方共同选出本次项目将会被实现的用例，其它的保留作下一版本（或另一项目） 
<LI>就算范围是口头上的，也要被记录及以电子邮件通知所有项目相关的人。确保保留一个幅本。</LI></UL>
<LI>当项目范围被确认后，强制跟从</LI></UL>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">评估的基础</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>在项目初期的评估在有更详细计划及设计后，应该定期地细化及重新评估 
<LI>当完成外部接口、完整物件及数据模型的定义后，应该可以更准确地作出评估 
<LI>以项目组中最慢的资源作为评估 
<LI>评估应该是合比例的 
<UL>
<LI>因为计划及设计阶段包括了用例分析，这应占据整个项目生命周期的50%</LI></UL>
<LI>考虑开发、测试及生产所需的环境搭建时间 
<LI>开发人员评估编码及单元测试任务会比较合理</LI></UL>
<P style="FONT-SIZE: 12px; FONT-FAMILY: Verdana"><SPAN style="FONT-WEIGHT: bold">一个评估的算法</SPAN><BR>技术架构师只负责以小时计算评估，项目经理应因其它项目的工作及假期所引至的缺席等因素</P>
<OL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>确定每个用例的画面、接口、数据表及转换等的数量<BR>为项包括的用例组作以下的评估。并非每个用例都有齐所有项目，括号中的基准评估适合开发组尚未成立，如果开发组已经成立，应该可以评估得更准确。因对象模型尚未完成，此时的评估受到对象数量未知的因素影响而未能准确评估<BR>
<UL>
<LI>用户界面（2人/星期） 
<LI>外部应用程序接口（4人/星期） 
<LI>数据表（2人/星期） 
<LI>表或文件转换（2人/星期）</LI></UL>
<LI>评估每个用例所需编码及单元测试所需的时间<BR>基于第1步的评估，计算基准评估是简单地计算各用例的结合，如：所有用例合计有4个画面，2个外部应用程序接口，5个数据表，0个数据转换及2个环境设置，则基准评估如下：<BR>(4x2) + (2x4) + (5x2) + (0x2) = 26人/星期，或1,040人/小时&nbsp; 
<LI>将第2步中的基准评估值乘2.5<BR>如果编码及单元测试占每个用例的整体开销的1/3，则总开销应是基准评估的3倍。因为在此阶段约完成了50%的分析工作，总开销应是基准评估的2.5倍，因此，剩余的总项目小时是：1,040 x 2.5 = 2,600&nbsp; 
<LI>为项目中每个额外的开发人员增加20%<BR>因基准评估假设项目只有1个开发员，每增加1个开发员都会增加沟通及调配的时间约20%，虽然这些时间并非用于开发，但这是必需的开销。因此，如果项目有5个开发人员，估计时间是：2,600 x (1.2)<SUP>4</SUP>&nbsp; = 5,391hr。为说明这只是一个评估而非实际用时，最好取四舍五入为5,500hr。假设每周工作32小时（其余时间可能用于行政等工作），即开发组每周可以工作160小时，约8至9个月可以交付系统。此时以月或季度作为评估时间可避免给人一个准确交付期的观念 
<LI>与开发组成员共同讨论（review）这个评估<BR>开发人员在未得到更详细资料前，不会感受到这个评估范围。告诉他们当设计完成后会重新评估是很重要的</LI></OL>
<P style="FONT-SIZE: 12px; FONT-FAMILY: Verdana"><SPAN style="FONT-WEIGHT: bold">更多的人手很少能挽救一个被延误的项目</SPAN><BR>因为必承担沟通、调配、行政等开销，加入更多人手只会令一个已被延误的项目更延迟更多。架构师通常会被要求在所有分析完成前做一个活动领域评估（ballpark estimates）。虽然并非是字面上正确，你可以在活动领域评估中加入各项假设。</P><img src ="http://www.cnitblog.com/alsan/aggbug/843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/alsan/" target="_blank">毒菇求Buy</a> 2005-07-10 07:52 <a href="http://www.cnitblog.com/alsan/archive/2005/07/10/843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE Architects Handbook阅读笔记（三）</title><link>http://www.cnitblog.com/alsan/archive/2005/07/09/837.html</link><dc:creator>毒菇求Buy</dc:creator><author>毒菇求Buy</author><pubDate>Sat, 09 Jul 2005 10:30:00 GMT</pubDate><guid>http://www.cnitblog.com/alsan/archive/2005/07/09/837.html</guid><wfw:comment>http://www.cnitblog.com/alsan/comments/837.html</wfw:comment><comments>http://www.cnitblog.com/alsan/archive/2005/07/09/837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/alsan/comments/commentRss/837.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/alsan/services/trackbacks/837.html</trackback:ping><description><![CDATA[<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">定义项目</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>开发任何应用程序的第一步是通过分析定义用途、范围及目标 
<LI>定义项目是项目经理、商业逻辑分析员及最终用户的工作，技术架构师并不直接参与 
<LI>架构师的责任是确保项目的定义中有足够的连贯性，实际设计及实现时有足够的细节 
<LI>架构师必须要有分析技能，否则不能识别项目定义中的弱点及缺口 
<LI>在分析过程中，用例是一项重要的工具 
<LI>用户界面原型可帮助精化用例</LI></UL>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">识别项目范围</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>在用例分析前对项目作出一个高层次的项目定义及对范围有初步的构想是需要的， 配合使用原型会更有效 
<LI>高层次定义无需过于详细，它的用途只为确定用例分析的范围</LI></UL>
<P style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">例子：建立一个协助项目经理计划任务，跟踪所有组成员活动及评估完成日期的系统。这个程序可以允许用户完成以下的工作：</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>定义项目及它的任务 
<LI>记录被分配入项目的人的任务及估计完成每项任务所需的时间 
<LI>记录任务被完成的次序 
<LI>记录项目进展及标记已完成任务 
<LI>自动安排项目进度表 
<LI>建立项目进展报告</LI></UL>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">识别参与者</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>用例分析的第一步是识别参与者 
<LI>参与者可以是用户或外部服务系统，或受影响的用例 
<LI>一个使用者可能同代表数个参与者 
<LI>考虑在大型应用程序中加入应用程序管理员作为参与者 
<LI>确保所有参与者都是直接使用系统的 
<LI>由一个小组识开始别参与者会更便利</LI></UL>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">编写用例</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>一个用例是对参与者使用系统的描述 
<LI>应以商业述语编写用例，应做到任何一个商业方人员无传释或技术术语表而可明白其中内容。否则，这表明在编写用例时已对所开发的程序有了技术上的假设 
<LI>用例可充当为商业及开发方之间的非正式的合约，表明将会交付一套怎样的系统 
<LI>用例应以“本系统（或本应用程序）将会”开始。如果发现不能以这种语句开始的话，很可能这只是另一个用例的其中一部份 
<LI>用例通常牵涉多个参与者，应在用列中列出所有受影响的参与者 
<LI>并无规则规定一个用例有多长，越详细越好。有不超过两句作为概要更佳 
<LI>避免使用用例图，只会浪费时间 
<LI>编写用例时需要商业方的深入参与 
<LI>以一个小组展开用例分析 
<LI>可考虑将用例加入数据库中管理 
<LI>在用例讨论时， 征召某人作为记录员 
<LI>当有更多资料时，修改现时用例 
<LI>当组成员感觉已有足够资料可以评估每个用例实施所需时间，用例分析可以结束 
<LI>确保包括有安全、可扩展性及可用性方面的需求 
<LI>当有需求有涵接问题时不要慢下来，作假设然后继续。对方有责任告诉你是什么地方错了及应如何更正。（对此点有保留，如果只是一个独立的问题可以这样处理，但很可能其它的用例会依赖于这个用例，最好还是先搞清楚需求再作分析）</LI></UL>
<P style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">例子：一个报表系统的用例</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>本系统将提供一个界面以接受由现存MVS/CICS应用程序生成报表模板定义 
<LI>本系统将允许应用程序管理员控制受信任的客户机构成员使用报表模板 
<LI>本系统将在运行报表时至少达到原系统的平均速度 
<LI>本系统将会限制所有受信任的客户用户只可接收到该受信任用户所属机构的数据 
<LI>本系统将会允许银行支持客户使用来自任何受信任客户机构的数据执行所有报表模板</LI></UL>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">常见错误</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>强加技术设计的假设作为需求</LI>
<LI>包含实际设计在用例中</LI>
<LI>分析会议效率不能保持，如无人主导、过于细节的讨论、资料不足等</LI>
<LI>用例没有文档化</LI>
<LI>在每个用例都重复定义术语</LI></UL><img src ="http://www.cnitblog.com/alsan/aggbug/837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/alsan/" target="_blank">毒菇求Buy</a> 2005-07-09 18:30 <a href="http://www.cnitblog.com/alsan/archive/2005/07/09/837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE Architects Handbook阅读笔记（二）</title><link>http://www.cnitblog.com/alsan/archive/2005/07/09/835.html</link><dc:creator>毒菇求Buy</dc:creator><author>毒菇求Buy</author><pubDate>Sat, 09 Jul 2005 08:36:00 GMT</pubDate><guid>http://www.cnitblog.com/alsan/archive/2005/07/09/835.html</guid><wfw:comment>http://www.cnitblog.com/alsan/comments/835.html</wfw:comment><comments>http://www.cnitblog.com/alsan/archive/2005/07/09/835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/alsan/comments/commentRss/835.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/alsan/services/trackbacks/835.html</trackback:ping><description><![CDATA[<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">项目生命周期</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>瀑布式（Waterfall approach）</LI>
<UL>
<LI>所有的分析及设计都在编码及测试前完成</LI>
<LI>所开发出的软件往往是巨大及有较长的交付期，承担更多的风险</LI>
<LI>不在过程的初期提供反馈，但交付更完整的方案</LI>
<LI>由于需要较长的开发期而引致需求经常更改，项目经理可能要面对不修改商业逻辑则不能提供最大利益，而修改需求引致资源不足的两难局面</LI></UL>
<LI>迭代式（Iterative approaches）</LI>
<UL>
<LI>尽量分柝项目为细小的组件块，需要较少资源</LI>
<LI>其中一种最流行的方式是XP（Extreme Programming）</LI>
<LI>在长开发周期中，越早发现错误成本越低</LI>
<LI>在长开发周期中，减低复杂性同时也减低技术风险及成本</LI></UL>
<LI>Rational Unified Process （RUP）</LI>
<UL>
<LI>形式化的开发方法</LI>
<LI>在分析及设计阶段采用瀑布式方法，在建构及交付时采用迭代式方法</LI>
<LI>鼓励尽早收集及分析需求，尽量满足使用者的祈望</LI>
<LI>鼓励先开发最具风险部份，以便有更多时间识别及回应问题，同时也减少重新设计所需的改写工作量</LI></UL></UL>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">哪种方法最流行？</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>考虑采用混合模式（Hybird approach）</LI>
<LI>XP所强调的测试具有非常大的价值</LI>
<LI>XP可用于针对复杂的的问题</LI>
<LI>RUP所强调的集中分析及设计具有非常大的价值</LI>
<LI>需要控制与最终用户间的沟通</LI></UL><img src ="http://www.cnitblog.com/alsan/aggbug/835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/alsan/" target="_blank">毒菇求Buy</a> 2005-07-09 16:36 <a href="http://www.cnitblog.com/alsan/archive/2005/07/09/835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE Architects Handbook阅读笔记（一）</title><link>http://www.cnitblog.com/alsan/archive/2005/07/09/832.html</link><dc:creator>毒菇求Buy</dc:creator><author>毒菇求Buy</author><pubDate>Sat, 09 Jul 2005 03:54:00 GMT</pubDate><guid>http://www.cnitblog.com/alsan/archive/2005/07/09/832.html</guid><wfw:comment>http://www.cnitblog.com/alsan/comments/832.html</wfw:comment><comments>http://www.cnitblog.com/alsan/archive/2005/07/09/832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/alsan/comments/commentRss/832.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/alsan/services/trackbacks/832.html</trackback:ping><description><![CDATA[<P style="FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Verdana">开发组角色及其责任</P>
<UL style="FONT-SIZE: 12px; FONT-FAMILY: Verdana">
<LI>技术架构师（Technical architect） 
<UL>
<LI>识别项目所需用到的技术 
<LI>建议项目开发小组所采用方法（methodologies）及框架（frameworks） 
<LI>提供整体设计及应用程序的结构 
<LI>确保项目已被适当地定义 
<LI>确保应用程序设计已被适当地文档化 
<LI>制定编码指引及确保有被跟从 
<LI>帮助项目经理识别需要执行的任务，评估项目造价及得益 
<LI>面对困难的任务时，作为开发人员的导师 
<LI>协助管理层对开发员职位上的安排</LI></UL>
<LI>项目经理（Project manager） 
<UL>
<LI>负责为项目组所有成员协调及计划任务 
<LI>向管理层及最终用户代表汇报项目状态 
<LI>向管理层要求项目所需的资源 
<LI>技术架构师应向项目经理提供技术方面的建议及指引</LI></UL>
<LI>商业逻辑分析员（Business analyst） 
<UL>
<LI>负责与最终使用者共同定义应用程序的需求 
<LI>负责制定术语表 
<LI>应对最终用户方及资讯方的企业流程有经验 
<LI>技术架构师有责任确保商业逻辑分析员所确认的应用程序需求是适当的</LI></UL>
<LI>界面设计师（Layout designer） 
<UL>
<LI>与商业逻辑分析员及客户方代表共同设计出界面 
<LI>与表示层开发员共同建立应用程序原型（prototype） 
<LI>技术架构师有责任确保界面设计师所设计出来的界面是技术上可行的</LI></UL>
<LI>表示层开发员（Presentation-tier developer） 
<UL>
<LI>负责对应用程序中所有界面相关的编码 
<LI>与界面设计师共同建立应用程序的原型及工作版本 
<LI>与技术架构师共同界定前台浏览的结构及设计 
<LI>技术架构师有责任确保设计模式的可维护性及可扩展性</LI></UL>
<LI>商业逻辑层开发员（Business logic developer） 
<UL>
<LI>负责应用程序中所有非可视部份的编码 
<LI>协助技术架构师对应用程序在开发语言相关方面进行性能调整&nbsp; 
<LI>技术架构师应向商业逻辑层开发人员提供指引</LI></UL>
<LI>数据模型师（Data modeler） 
<UL>
<LI>使用商业逻辑分析员所提供的资料识别、定义及分类应用程序在数据库中储存的数据</LI>
<LI>为应用程序建立ER图及文档，主要读者为数据库管理员</LI>
<LI>此角色一般可与数据库管理员合并</LI>
<LI>技术架构师有责任确保数据模型是适当的</LI></UL>
<LI>数据库管理员（Database administrator） 
<UL>
<LI>负责基于应用程序的商业需求阐明数据库设计</LI>
<LI>为应用程序建立、维护数据库环境</LI>
<LI>提供性能调整方面的协助</LI>
<LI>协助商业逻辑开发员诊断与数据存取相关的应用程序开发问题</LI>
<LI>经常会兼任商业逻辑开发员或数据升级专员</LI>
<LI>技术架构师需与数据库管理员共同解决数据储存的难题</LI></UL>
<LI>数据升级专员（Data migration specialist） 
<UL>
<LI>负责持续地编写及管理所有应用程序数据库所需的脚本及程序</LI>
<LI>当应用程序无须或只须少量数据升级要求时，此角色通常与数据库管理员合并</LI>
<LI>技术架构师需为数据升级专员制定数据升级需求</LI></UL>
<LI>系统建构专员/系统管理员（Infrastructure specialist/System administator） 
<UL>
<LI>负责提供所有开发、测试及生产的环境，与及其配置方法</LI>
<LI>编写配置脚本</LI>
<LI>以测试环境协助开发人员诊断问题</LI>
<LI>技术架构师需为系统建构专员制定系统建构需求</LI></UL>
<LI>测试专员/测试员（Testing specialist/Tester） 
<UL>
<LI>通常是比较细心的人</LI>
<LI>确保应用程序符合规格及只包含合理数量的BUG</LI>
<LI>通常对所开发的商业领域有基本知识</LI>
<LI>技术架构师需与测试员共同识别任何建构需求及所需支持</LI></UL></LI></UL><img src ="http://www.cnitblog.com/alsan/aggbug/832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/alsan/" target="_blank">毒菇求Buy</a> 2005-07-09 11:54 <a href="http://www.cnitblog.com/alsan/archive/2005/07/09/832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>