﻿<?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-疯狂-随笔分类-项目管理</title><link>http://www.blogjava.net/freeman1984/category/46246.html</link><description>         
        STANDING ON THE SHOULDERS OF GIANTS</description><language>zh-cn</language><lastBuildDate>Tue, 19 Nov 2013 09:12:43 GMT</lastBuildDate><pubDate>Tue, 19 Nov 2013 09:12:43 GMT</pubDate><ttl>60</ttl><item><title>项目规划与管理记录2 </title><link>http://www.blogjava.net/freeman1984/archive/2013/11/18/406461.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Mon, 18 Nov 2013 04:51:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/11/18/406461.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/406461.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/11/18/406461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/406461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/406461.html</trackback:ping><description><![CDATA[转载自：<a href="http://www.blogjava.net/cheneyfree/archive/2013/11/09/406169.html">http://www.blogjava.net/cheneyfree/archive/2013/11/09/406169.html</a>&nbsp; <br />8、9、10三月，需求依旧爆棚，相比纯业务功能的开发，数据的汇聚、整理、分析、统计成为重点，具体细节不一一展开，按如下关键词：任务计划、项目沟通、项目流程、客户汇报、业务关注、时间评估、管理笔记做一些笔录，持续更新：<br />&nbsp;&nbsp;&nbsp; 1、任务计划：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.决策前考虑充分，决策后不再怀疑。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.任务精细、描述清晰，对内分解针对到负责人、给外汇报针对产品功能。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.计划制定时，请成员预审任务量，再和开发、测试确认时间，由成员承诺时间。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.安排任务多人完成时，指定一个牵头人。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.大的需求，组织讨论，小的需求，点对点沟通，最后要全部闸口到文档。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.任务分配：根据人员特点（善于思考型、认真较劲型、粗枝大叶型）安排难易程度对应的任务。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.紧急需求多时，一次尽可能给成员分配较少任务并约定完成时间、完成后再约定下一批任务。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.根据任务分配情况，了解到谁相对空闲，安排新任务给空闲的成员。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.碰到的问题整理一份清单，尽可能一次性地转交开发、测试人员。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.形成人员对开发任务的备份机制，不局限某个模块的开发，关注整体。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.每一轮版本，制定《风险管理清单》，协调、跟进、解决风险问题。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12.加班如遇特殊情况不能陪同，托管工作给指定接口人。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13.成员加班晚，第二天要根据情况保证人力参与白天工作。<p>&nbsp;&nbsp; 2、项目沟通<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.重要事项亲历亲为。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.每周的项目周报，除了知悉公司外，同步知悉客户。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.需求的分析及客户确认用原型图。需求的确认启动开发，必须是业务部、信息化部、公司三方达成一致。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.技术实现上会就会，不会就不会，和时间的多少没有线性关系。<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;5.控制好工作节奏，多和领导沟通，自己的经历正是人家过去经历的重现。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.沟通项目存在的问题时尊重客观事实和软件开发规律，做不完的跟客户说明原因，该拒绝的果断。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.上线前的客户运作，除了项目层面的客户沟通，也请领导高层向客户高层沟通。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.强调需求变更会影响项目计划的执行，变更需要付出代价（优先策略：时间调整、功能调整、人力调整）。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.遵循&#8216;做得少但质量好，忌讳做的多却质量差&#8217;的原则。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.项目风险且一时对得不到公司资源倾斜时，也可借助客户的力量（下下策）。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.客户的跟催，多耐心少急躁，多自省少借口，多客观少主观。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12.交付时间的答复，不能当下给出的待评估后再给。</p><p>&nbsp;&nbsp; 3、项目流程：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求频繁且变更较多时，建议0.5周～1周一轮版本。每次汇报后产生的新需求、遗留需求、待开发的功能：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.整理《项目跟踪表》，含：新需求、遗留问题、关联影响（指导测试做关联模块的验证）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.测试人员将已明确的开发任务登记到BUG管理系统<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.需求人员与开发、测试人员评审需求<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.负责人牵头需求、开发、测试人员确定开发、测试、发布时间计划。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.与客户反馈交付时间点（对于小需求的交付时间可以直接答复、大需求要内部讨论再答复）。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.项目进度跟踪，以天为单位，测试人员更新《项目跟踪表》。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.需求验证介入<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）开发提交代码后，需求人员、测试人员分别开展系统测试（业务角度，关注界面交互、主干流程、数据展现）、业务测试（系统角度，关注功能操作及边界、业务流程输入输出）。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）需求人员发现的问题，属于开发BUG登记到BUG管理系统、需求BUG与开发人员、甚至客户澄清，如不影响版本发布时间直接加入在研版本、如影响则提交变更请求，与客户沟通得到变更认可或与开发沟通得到变更认可。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.升级前，针对环境数据的准备，编写《升级注意事项（含数据清理、数据准备等）》给测试人员交代。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.升级后，需求人员在演示环境走业务测试（建议离正式演示前2天完成升级验证，提前1天环境冻结。）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.上线前，与客户沟通准备事项（含压力测试、工程部署、资料交付、培训计划、试运行计划等）</p><p>&nbsp;&nbsp; 4、客户汇报：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.小型汇报，前一天，系统冻结，不再做升级，只做业务验证、回归。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.大型汇报，前三天，系统冻结，不再做升级，只做业务验证、回归。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.汇报前，拿用户的笔记本做预演，防止操作系统、浏览器兼容问题。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.汇报思路：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）以一个业务主线，给客户讲故事,结合不同客户关注的角度出发，让平台能融入不同客户的日常工作。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）信息化前是什么样，信息化后是什么样（提高日常办公的效率、平台统计的数据提升客户的业绩等）<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;5.项目初期注意界面UI友好，中期注意数据的规范及业务流程正确，后期注重统计数据的真实、准确。<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;6.版本的技术问题、项目进度的问题、用户需求的问题、沟通协调的问题，实事求是汇报客户。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.汇报前与客户业务接口人沟通汇报内容、汇报方式，掌握领导听取汇报时关注的点。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.汇报前，关注业务部门的需求、信息化部门的建议、更要关注客户领导的关心点。</p><p>&nbsp;&nbsp; 5、业务关注：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.关注平台的数据输入、处理、输出数据的完整性、准确性、关联性。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.抓住平台的建设理念，所有业务模块围绕该理念开展需求分析、设计。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.降低线上复杂的业务操作流程（更多考虑结果数据的录入、留痕，流程多了很难同时在线协同办公）。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.技术实现的同时要考虑业务机制的配套。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.考虑现实性[在现有业务规章制度的环境下运行]、前瞻性[业务层面的发展方向]、可行性[技术是否支持]。<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;6.关注和周边平台的数据结构一致和标准<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.&lt;待补充&gt;</p><p>&nbsp;&nbsp; 6、时间评估：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.每天列出当天要做的工作、每天下班前回顾当天工作，每周列出本周工作成果、下周工作计划。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.任务时间评估 = [成员评估 结合 自评估] + 开发冗余（根据平台特性、开发人员经验及态度判断） + 测试冗余（根据平台特性、测试人员经验及态度判断） + 需求冗余（根据平台特性、需求人员经验及态度判断）+ 其他冗余（如请假、生病、开会等非项目因素）</p><p>&nbsp;&nbsp; 7、一些管理笔记：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.任务精准、给予空间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.狠抓住干、适当放权<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.敢于承担、顶住冲击<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.讲究诚信、承诺到位<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;5.规则考核、理解包容<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;6.用人不疑、疑人不用<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;7.功劳大家、黑锅自己</p><img src ="http://www.blogjava.net/freeman1984/aggbug/406461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-11-18 12:51 <a href="http://www.blogjava.net/freeman1984/archive/2013/11/18/406461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IT项目管理的六种错误思维</title><link>http://www.blogjava.net/freeman1984/archive/2011/08/23/357095.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Tue, 23 Aug 2011 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/08/23/357095.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/357095.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/08/23/357095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/357095.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/357095.html</trackback:ping><description><![CDATA[<p><strong>导读：在软件行业，在界面设计没有正式展现给客户之前，所有的工作都处于需求调研阶段。很多IT项目经理因为年轻，初生牛犊不怕虎，胆量大，勇气足，敢于在实践中引入新的工具、方法。敢于尝试不是坏事，但试验的风险一定要控制好。本文例举了在IT项目管理中常遇到的六种错误思维，给开发者们借鉴，学习，打造成功的IT项目管理。</strong></p>
<p><strong>内容如下：</strong></p>
<p><strong>错误一：错误的需求调研阶段，导致很多项目永远无法结束!</strong></p>
<p>在软件行业，在界面设计没有正式展现给客户之前，所有的工作都处于需求调研阶段。其实建筑行业已经给我们做好了先例：客户买房子之前是先要看看样板房和模型的，什么都看不到，这房子你敢买么?除非你不是自己住！而在我们所学的软件工程概念模型中，这是三个阶段：需求调研、需求分析、概要设计。</p>
<p>在客户把他们想要管理的业务模块以及与之相关的业务数据、流程、表单交付你的时候，你千万不要把这个阶段定性为需要调研结束，写出《需要规格说明书》就可以了。大量的实践证明，在概要设计阶段所衍生出来的需求工作量是之前的5~10倍，甚至更多，因为这要看设计人员的业务沟通能力和建模水平。</p>
<p>有实施经验比较丰富的项目管理人员总结说，在中国实施软件项目，必须以咨询方式展开：要推出自己的方案，而不能完全按照客户来提需求作项目。这是一种很好的解决思路，但无法解决所有实施项目的难题。这种解决方案的前提，要么项目实施者有成熟的业务模型，要么有成熟的产品(包含了成熟的业务模型)，否则是不可能做到的。但如果没有3~5年在同一行业，同一领域的实施经验和理论总结，没有哪家IT企业能达到这样的前提要求。</p>
<p>其实得出这样结论的深层原因，是因为国内多数企业管理思想不成熟，更谈不上完善的业务模型，所以客户的思维一定程度是发散的，还未形成系统。甚至还有些客户的领导，脑子中有很多新鲜的点子，他都有可能想在企业信息化的实施过程中加进来，这对把控项目范围和项目实施效果来说，都可能是灾难的开始。</p>
<p>所以，要做好实施项目，实施者必须有很好的业务建模能力，快速的给客户展示合理的软件原型软件Demo。</p>
<p>请记住：软件实施项目，一定要给用户看到样板房软件Demo，才算需求调研结束!</p>
<p><strong>错误二：IT技术人员不需要掌握项目管理</strong></p>
<p>有这种看法的人不在少数。根据观察，之所以形成这种看法，一是对项目的真正概念不清晰，二是对管理的概念神话了，把管理理解成了高深莫测，非一般人能做的事情。首先有必要普及一下项目的概念。</p>
<p>对项目有很多人下过定义，项目管理圣经PMBOK第三版(2004版)的定义是：为创造某个独特的产品或服务，或完成某独特的任务所做的临时性努力。围绕这句话PMBOK做了详细的解释和举例说明，很严谨，想了解的请学习PMBOK。因为都是翻译过来的定义，翻译得过于术语化很容易把人绕进去，在国内不排除已经拿到PMP认证证书的专业人士还搞不清楚项目究竟是什么。笔者在这里只想用汉语最通俗的语言来说明什么是项目和项目管理。</p>
<p>项目，就是在限定的时间要人完成的事。记住三个关键字即可把握：人、时、事。</p>
<p>项目管理就是参与者用什么(知识、技能、工具、方法)来圆满地干好这件事。</p>
<p>明白了这些，你就会明白从日常生活的吃喝拉撒到国家管理，处处都是项目，处处都需要项目管理，也就能明白每个人都需要项目管理，也就能理解学会了项目管理将会多么受益无穷，娴熟运用项目管理思维将无往不胜!</p>
<p>但需要提醒大家一点，现在的PMBOK是把传统制造行业、建筑行业、IT行业等多个行业领域的项目管理知识糅合到了一起，大而全，但针对性不够好，所以很多人觉得PMBOK理论化太强，学完了觉得很多东西没用。现在国际知名的另外一套项目管理认证，IPMP是按照工作岗位能力进行了分级，也没有针对行业进行分解。所以，无论拿到PMP或者IPMP，很多人都会有同样的困惑。据了解，PMI已经准备做这样的改进，这是一个很好的消息。</p>
<p><strong>错误三：忘记项目目标</strong></p>
<p>你看到这个题目什么感觉?很多人会觉得这样的错误怎么会发生?几乎没有人会认为自己犯这个错误！忘记项目目标有两种情形：一是从开始接手项目就没弄清楚项目的目标是什么;二是虽然清楚项目的目标是什么，但却干着跟完成项目目标无关、甚至有害的事。</p>
<p>时刻铭记项目目标是项目管理很重要的一个思维，项目所有的活动都围绕这个展开。可是随着项目的逐步开展，尤其是复杂项目：人多、事多、周期长，很多项目经理会逐渐因为个人喜好而忘记了项目的大目标，比较典型的有：技术出身的项目经理会沉迷于技术细节，大量时间花在学习新技术或者一头闷在解决技术难题上;脾气火爆的项目经理会因为很多不值当的事情大发脾气，把团队搞得乌烟瘴气;小心眼、爱面子的项目经理会因为某个组员无意的顶撞而怀恨在心，从此总给其穿小鞋，搞得团队拉帮结派，毫不团结;还有更糟糕的，比如爱玩游戏的，爱喝小酒的等等。所有这些，无论原因是自身不成熟，还是管理经验、管理能力不足，结果都一样，那就是项目出问题，甚至失败。</p>
<p>项目经理最重要的一项任务就是跟踪与控制，时刻把握项目方向，保证项目计划得以顺利执行，偏差控制在可控风险范围内。但项目总是有太多意外因素，尤其是周期长的项目，人们常用夜长梦多来形容风险会随时间的延长而增加，所以项目经理一定时刻都要保持头脑清醒，对项目无益的事情不做，对项目有风险的事情更不能做。</p>
<p>任何项目在开展过程中都会不断面对机会和诱惑，项目经理一定要能明确项目大目标，才能清晰地识别哪些是使项目成功的机会，哪些是会给项目带来风险的诱惑，才会少走弯路，早日成功。项目管理者联盟，项目管理问题。</p>
<p>人是需要不断被提醒的，这由人性决定。智慧的人能够不断的反省从而自我提醒，愚笨的人会被挫折、外界的警示不断提醒，这就形成了成功与失败的差异。</p>
<p><strong>错误四：计划不能变</strong></p>
<p>怎样才能保证项目成功?计划，计划，再计划，这是项目管理的最佳实践！所以，做项目管理的一般都知道如何编制项目计划，并且很多人能熟练的使用Project工具，知道80小时或者40小时法则、WBS和关键路径的概念。每个项目经理都会记住计划一旦形成，就严格按照计划去执行，而不受某个人、某件事的影响这个原则，也明白这样做不仅能够减少大量资源的浪费，产品的质量也能得到保障。所以，很多项目经理排斥，甚至拒绝改变计划。坚持原则，这貌似没什么错，但真的这样么?</p>
<p>要弄清楚一件事是否有必要做，首先就得弄清楚两个问题：一、这件事为什么要做?二、做了有什么好处?</p>
<p>那我们首先问一下编制计划的目的是什么?我们知道计划是项目管理的最佳实践，计划是保证项目成功的一种手段和方法，做这件事只有一个目的，那就是为了保证项目成功，但前提是，这份计划是周密的、可行的。严格执行一份周密可行的项目计划才能保证项目成功。很多项目经理记住了上面的严格执行原则，但忘记了这个大前提。</p>
<p>第二个问题，计划有什么好处?项目管理的计划方法，把项目活动、持续时间、所需资源有机地结合在一起，并且有严格的先后次序、里程碑和关键路径，可以清晰地提醒项目所有成员在什么时间，做什么事情，保证每个项目任务都得以执行;通过对计划的执行跟踪，项目经理可以清晰地了解项目进展情况和偏差情况，评估并及时有效的控制项目风险，从而保证项目的成功。</p>
<p>明白了这两点，我们再来看IT项目。对多数IT项目，尤其是软件实施项目，启动时都存在范围不够明晰，需求不确定的情况。只有到软件Demo产生，才可能需求清晰，范围确定，这些情况就决定了IT项目计划需要根据项目的实际情况及时进行修正。如何压缩范围确定的时间，早日制定出周密可行的计划，是软件项目的一个重要课题。</p>
<p>制定一份周密可行的计划是项目经理优秀能力的体现，尤其是WBS的制定，对复杂项目有很大难度。在谈2008奥运项目的管理体会时，项目专家曹蕾就提到奥运会项目最难的一点就是WBS的制定(参见PMU网站对2008奥运项目的访谈)。要保证项目的成功，就要保证项目的每个活动都能得以顺利执行。所以，在项目情况发生变化，在原有的计划基础上有需求变更时，就要把新的任务补充到计划中，修正计划，确保WBS的完整，确保计划周密可行，之后的工作才是严格执行。</p>
<p>顺便提一句，有些项目经理会走另外一个极端：因为需求不确定，所以不制定项目计划。这同样是对计划的错误理解。即使计划不够周密，但它可以提醒我们项目的大目标是什么，保证项目团队所采取的行动不偏离大方向。任何一项大的项目，都可以拆分成很多小项目，WBS的渐进明细，也是项目必须完成的任务之一，所有任务的持续时间都是要估算的，即使不够准确，至少可以作为经验累积，为今后的准确估算做了准备。因此，项目的任何阶段都一定要有计划。</p>
<p><strong>错误五：项目一定要盈利</strong></p>
<p>项目一定要盈利，这句话被无数IT项目经理奉为真理，也就注定了要创造很多悲剧！为了达到这个目的，很多IT项目经理甚至都在悉心研究厚黑学，学习用什么办法把小弟搞得热情高涨，比民工累，从而用最低的成本创造最大的利润。</p>
<p>项目管理作为战术层次的管理手段，一定要服务于战略层次的大方向。商场如战场，有胜利就会有失败。为了战略胜利，很多战役要诱敌深入，必须打败仗。败仗不要紧，关键要弄清楚败到什么层次，损失到何种地步，明确本次战役的真实目标，再去打这场战役，就会做到驾轻就熟，从而不至于到最后形成不仅损兵折将，还未能诱敌深入的局面。</p>
<p>开拓市场、占领市场、站稳市场、挖掘市场，这是每个公司发展必不可少的步骤。很多项目，对公司来说都是为了占领市场，甚至虎口夺食。这样的项目，公司从战略层面首先要求的绝对不是盈利，而是如何能把市场占领，继而站稳，项目经理必须明白这个战略意图。</p>
<p>平衡是项目管理最为重要的一个思想，从过去的做好质量、时间、成本项目三要素的平衡，到现在满足相关干系人的需求，所有的最佳实践和理论研究成果，都绝不会提倡走极端，杀机取卵！利润只是项目的一个目标，并且一定要明白有短期利润和长期利润之分，过分单一追求利润的项目注定要失败，过分追求利润的公司也不会长久。</p>
<p>该花的钱不能省，不该花的钱一分也不要花，项目经理把成本控制在合理的预算范围内，就是成本控制的成功。万万不可为了把一个注定要赔钱的项目做得盈利而想尽办法、绞尽脑汁压缩成本，从而让组员加班加点，玩命干活，到最后，项目干完了，人也走/光了，还极有可能因为赶工导致项目质量不合格，客户不满意，那就真的赔了夫人又折兵!</p>
<p>项目组要能保持激情高效，不能懒散拖沓，项目经理一定要把握好这个度，绝不能走极端。平衡是一门艺术，也是展示项目经理能力水平的一个重要标尺！</p>
<p><strong>错误六：记住了科学，忘记了有效</strong></p>
<p>学以致用，就怕乱用。无论是产品、技术还是管理方法，都存在为了更先进、更科学而罔顾现实，盲目乱用的现象，结果先进和科学的技术、工具不仅未提高生产效率，却成了累赘，这样的情况到处都是，在IT项目中也为数不少。</p>
<p>国内大量失败的ERP项目就是这类错误的典型。有人把ERP项目归结为一把手工程，意思是只有领导重视并推动才能成功。领导支持是项目成功很重要的一个条件，但绝不是有领导支持就一定能够成功。有些项目就是领导决策失误盲目上的，从开始就注定项目要失败。一个信息化项目的实施，对很多企业来说就是一场大的改革，对所有员工从思维、技能到工作习惯等多方面都需要进行调整。如果企业的员工素质不能跟上，纵然有各种各样的培训，但不顾员工基础和学习曲线，用户不能真正掌握全新的系统，结果就只能增加用户负担，而产生不了期望的效果。</p>
<p>很多IT项目经理在学习了一些新的技术后，总想立刻在项目中实践，而不去仔细分析这些技术在这个项目中是否需要，是否适合。IT技术日新月异，不断有新的理论被提出来，被翻译引进到国内。有些项目经理在一知半解，对这些技术还不是很熟悉的情况下，就敢向人吹嘘他所掌握技术的科学性、先进性，进而强制要求在项目中实践。这可能是甲方的项目经理，也可能是乙方的项目经理。因为技术选择错误导致项目失败的例子在国内过去有，现在也还有!绝对不可准备不足，大范围引入全新的技术，待到项目时间过去一半了，才发现选择的技术不适用，那时候一切都晚了。掌握任何新东西都有学习曲线，项目的时间限制是项目经理必须时刻牢记的要素，把握不好就会给项目带来极大风险。</p>
<p>涉及到具体的IT项目管理，PMBOK的知识体系可谓博大，还有一些其他新的项目管理工具，不能说不先进，但是哪些知识、工具、方法适合本项目，需要项目经理根据实情，认真分析后进行筛选使用。</p>
<p>科学、先进、好用等等修饰头衔这些都不是要选择的首要理由，需要、适用和有效才是首要考虑的事情。很多IT项目经理因为年轻，初生牛犊不怕虎，胆量大，勇气足，敢于在实践中引入新的工具、方法。敢于尝试不是坏事，但试验的风险一定要控制好。对于项目经理来说，所有的决策都要围绕项目目标进行。项目经理的首要任务是保证项目成功，如果同时能引入新的技术、工具，增加组员的知识技能，提升项目组工作效率，提高产品的质量和可靠性，绝对是锦上添花，但绝对不能为了锦上添花而导致项目失控甚至失败，捡了芝麻，丢了西瓜!<br />转自：<a href="http://sd.csdn.net/a/20110819/303332.html">http://sd.csdn.net/a/20110819/303332.html</a></p><img src ="http://www.blogjava.net/freeman1984/aggbug/357095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-08-23 10:09 <a href="http://www.blogjava.net/freeman1984/archive/2011/08/23/357095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不同技术团队的配合问题及DevOps(不错的文章，来自infoq)</title><link>http://www.blogjava.net/freeman1984/archive/2011/07/20/354712.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 20 Jul 2011 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/07/20/354712.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/354712.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/07/20/354712.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/354712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/354712.html</trackback:ping><description><![CDATA[<h2>一、技术团队细分及配合问题</h2>
<p>在IT企业里产品从创意到交付给用户，从整体上看是由技术部门负责，但如果深入到技术部门，会发现由不同的技术团队负责不同的部分或者阶段。一般会分产品团队、开发团队、测试团队以及运维团队，在互联网公司里，运维团队一般还分基础运维和产品运维两个团队，基础运维负责基础设施(包括机架、网络、硬件)和操作系统的安装，为整体公司的所有产品提供基础设施的运维服务。而产品运维负责线上产品的问题处理、代码的布署和跟开发的接口等。</p>
<div class="vendor-content-box-float">&nbsp;&nbsp; &nbsp;不同的技术团队一般隶属不同的部门，分散在公司不同的办公区域，团队内部的沟通相对多一些，但团队之间的沟通较少。不同团队都会形成自己的办事习惯、节奏，都有自己的关注点，一般只是知道与之接口的团队的总体职责，但是不知道对方可能面临的困难与工作中的挑战点。另外，如果公司够大，每个团队内部又会分为许更细的小团队，如基础运维一般有系统团队、网络团队和IDC团队等，这样更加重了团队之间沟通难度。</div>
<p>从产品策划到上线，一般是以下边的顺序经过各个团队：</p>
<ol><li>开发团队收集产品的需求，定下时间表并进行开发</li><li>开发完后，交由测试或质量团队进行测试</li><li>然后交给运维团队布署新产品或新版本</li><li>运维团队将运维过程中发现的代码缺陷反馈给开发团队进行修复</li></ol>
<p>在上面的每个阶段，对应的团队都是各做各的，一般是在最后才会把球踢给下一个团队，如果下一个团队发现问题又会把球踢回原来的团队。如果你深入到不同的团队中去，或听到不同的抱怨声音。</p>
<p>基础运维团队经常抱怨：</p>
<ul><li>产品开发一点计划都没有，突然要上线机器，让我们措手不及。</li><li>每个产品都急着上线，谁催得急就上谁的，谁能说一下，到底那个重要？</li><li>动不动就要重装系统，坏了一块盘就着急去修，刚从机房回来，又要过去。</li><li>上线太突然了，没有交换机，没有机架，还需要搬别的机器腾地方。</li><li>那个地方有机架和交换机端口，但没有四层设备，他们又要放在四层后边，真的没有办法了。</li><li>刚跟他们上线到一个机房，他们又说要换到另一个机房，尽折腾。</li><li>他们怎么能那么用设备，把上连端口带宽都跑满了。</li></ul>
<p>产品运维团队会说：</p>
<ul><li>真没办法，上个线不是说没机架，就是没有交换机，还有就是说没有四层设备。</li><li>从来不告诉我们什么时候能设备能上线交付给我们，不派专人催着这事，一点谱都没有。</li><li>本来没有想好怎么用这些设备，先提前一个月申请上线，得我们想清楚了，他们却说又得换机房。</li><li>网络怎么老是出问题，他们怎么规划的。</li><li>开发的代码太不靠谱，一上线就引发用户投诉，只能回滚到老版本。</li><li>开发人员的技术能力不行，写不出能用的版本。</li><li>开发要求有一个跟生产环境一样的测试环境，这不可能有的。</li></ul>
<p>而开发团队却说：</p>
<ul><li>他们又不让我们碰线上的系统，生产环境是什么样，我们都不知道，没法开发代码。</li><li>我们辛苦开发几个月，上线出问题又直接回滚了，心情很不好受。</li><li>代码在测试环境或我的机器跑的好好的呀，怎么一上线就出问题呢。</li><li>测试怎么测的，那么多问题发现不了。</li><li>我们希望产品运维同事帮忙搭一个跟线上一模一样的测试环境。</li></ul>
<p>另外，测试团队的人也许会说：</p>
<ul><li>开发人员不写规定写单元测试代码。</li><li>想着能用一个自动的集成测试环境，因为开发的原因，老是实现不了。</li><li>测试环境跟生产环境不一样，好多问题才发现</li><li>还有那么多的bug没有解决，产品就催着上线。</li></ul>
<h2>二、技术团队之间配合不好的影响</h2>
<p>上面看到的团队之间的冲突和抱怨问题虽然都不一样，产生的影响确是类似的：</p>
<ul><li>产品上线的进度延误，整个团队很难正常交付新版本。</li><li>产品上线后问题很多，影响用户的访问。</li><li>团队的士气很差。</li></ul>
<p>最近又发生了运维团队与开发团队之间的配合不好的问题，影响及原因如下：</p>
<ol><li>新产品上线延误了两个星期，正常情况下一天就可以上线。原因是开发考虑不周，测试环境中没有发现，到上线前才发现部署到多台机器上后，按开发原先计划的方式多台机器无法协作完成任务。还有就是在设计阶段没有考虑生产环境的状况，在上线的过程中需要做出对应的代码调整。</li><li>上线后质量不稳定，出现多次紧急修复。原因同上。</li><li>临时增加硬件投入。新产品中有个组件采用全新的技术方案，跟原来的LAMP体系不兼容，所以需要新增机器，单独部署。</li><li>除低了服务可用性标准，并产生了遗留问题。因为临时需要增加硬件，而恰好又只有一台，这样就形成了单点，如果该机器出现故障，服务将全部中断。另外，由于开发前设计上考虑不周，跟别的组件集成时产生别的单点。所以这些降低了服务的可用性，以后还得想办法解决。除此之外，组件采有新的软件，安装、服务起停以及软件配置的管理都是纯手工打造，以后还得找时间纳入到自动配置管理中。</li><li>影响了团队士气。在上线过程中开发、测试和运维都觉得不舒服，相互之间产生了抱怨。如果不处理好，会影响以后的配合。</li></ol>
<p>虽然，有些问题确实需要靠某些团队提高自身的人员技能才能解决好，但这些团队能够形成一股合力的话，同样的人员组合肯定会产生更好的效果。</p>
<h2>三、过去解决团队配合问题的方法</h2>
<p>第一次碰到团队之间的配合问题时，我们还没来得及解决的时候，公司战略调整，整个开发和系统运营团队转给了另一个大部门。但我们在别的地方重新梳理技术团队时，后来又没有出现这种问题，回想起来，我们的做法是：</p>
<ul><li>部分开发人员有生产环境中服务器的帐号，可以观察代码的运转情况，少数核心开发人员还有sudo权限，当然他们也不会随便修改服务器的设置</li><li>开发时一开始就会跟系统运维团队沟通，在代码中增加数据收集的接口和监控接口，这样上线后，很容易收集产品的性能数据，并能方便地对运行状态进行监控与报警</li><li>生产环境中也有沙箱与beta环境，这样大的版本从测试中过渡到生产环境前，先在沙箱环境中适应一段时间，这样能相对平稳过渡到生产环境</li><li>部分开发人员临时转到系统运维团队工作一到二个季度，跟系统运维同事一起上线产品，解决产品在运行中发生的问题，这样更好地了解代码如何在生产环境中运行，回去之后能更好地运维同事沟通，开发出来的代码更容易在生产环境中运行</li></ul>
<p>这样，不同团队之间虽然有职责上的明确分工，但在中间的配合的部分做了不少柔性处理。另外，开发、运维与测试等团队中的核心人员之间本身就有认同感，大家一开始的目标就是奔着公司能成功来的，这是没有出配合问题的根本原因。这一点其实跟DevOps的核心点类似，既然如此，何不重新审视一下DevOps，并参考着解决团队之间的配合问题呢。</p>
<h2>四、DevOps</h2>
<p>DevOps是2010年从欧洲传过来的概念，最先是由一群有着跨学科技能的工程师提出来的，为了解决下面的问题：</p>
<ul><li>推出新功能和解决老问题的周期过长</li><li>新产品或新版本上线充满风险，代码能否在生产环境中稳定运行，没有人有信心，只能艰难地推上去，再看是不是有问题</li><li>不同团队相互隔离，配合差。如开发人员收到问题后，第一反应是&#8220;在我的机器上工作得好好的呀&#8221;</li></ul>
<p>我认为DevOps的核心是不管你是开发者、测试人员、管理者、DBA、网络工程师还是系统管理员，大家都是一起的，只有一起努力给客户提供稳定而高质量的软件服务，实现公司的商业利益才会有别的，包括自己的工作机会。</p>
<p>所以，DevOps实际是给各个团队之间搭桥，让他们不仅仅是依靠上线申请单这样的鸿雁传书工具进行沟通，而且经常离开自己的孤岛，走到别人的岛上去，了解别人，并提供自己的想法，帮助对方。</p>
<p>DevOps更象是一种运动，每家公司都需要根椐自身的特点进行借鉴，推动团队之间的协作与合作。需要在三个方面努力：</p>
<ol><li>人员</li>
<p>一方面对现有人员进行培训，鼓励他们了解别的团队的工作、面临的挑战等，让他们用自己的特长去审视和帮助别的团队，另一方面也想办法招一些全面的技术人才，在不同团队之间搭出一些适用的桥来。</p></li><li>流程</li>
<p>在研发的前期，让系统运维同事参与起来，一起搭建测试环境，验证想法，或者也可以在一些项目团队中直接配有系统、开发和测试以及产品人员，一起为产品的上线努力。出现问题的时候，一起想方法找到问题的真正根源，避免相互推托，将解决方案落实在以后的研发过程中。从绩效考核流程上也需要考虑协作因素。</p></li><li>工具</li>
<p>说实在的，大家针对DevOps在工具方面其实讨论得更多，这里面跟敏捷有些类似之处。快速的系统部署和自动化产品代码发布方面的工具显得尤为重要了。</p></ol>
<p>为了避免校弯过正，走向另一个极端，也需要避免下面的对DevOps的常见误解：</p>
<ol><li>DevOps意味着要给开发者root权限</li>
<p>可以给开发者加sudo权限，运行指定的命令，比如重启web服务。让开发者更多地了解生产环境和产品的运行状况，但并不意味着让开发者象管理员一样的去管理机器。</p></li><li>所有系统管理员需要写代码，所有开发者需要上架机器</li>
<p>在系统管理和开发者各个领域仍然需要各自的专家，如存储、网络、安装、javascript等专门的人才，DevOps并不意味着让大家不做自己专长的事情。</p></li><li>你一定要用某个工具，不然就不是DevOps</li>
<p>一些技术和自动化的工具对推动各个团队之间协作很有帮助，但是还是需要聚焦于要解决的问题，根椐问题和组织的特点选择合适的工具。</p></li><li>我们需要招聘DevOps</li>
<p>DevOps不是一个新的岗位</p></ol>
<h2>五、结合DevOps，解决团队配合问题</h2>
<p>管理人员关注团队之间的沟通机制及氛围：</p>
<ul><li>以新版能在生产环境中可靠稳定运行为目标，形成协作的氛围。</li><li>在项目的早期，立项之间，运维、开发与测试就进行沟通，可能的话坐在一起，面对面沟通。</li><li>在项目上线前，除了测试功能，还要关注部署、备份、监控、安全以及配置管理，在早期发现的问题越多，越能尽少后期的问题并避免影响用户体验。</li><li>建立各个团队的核心成员定期沟通机制。</li><li>团队之间的协作纳入绩效考核过程中去。</li></ul>
<p>让开发人员了解运维工作、关注点及挑战，并从开发视角帮助运维：</p>
<ul><li>开发人员参与运维团队的内部培训，了解线上的系统。</li><li>了解运维如何定位并解决故障、如何监控系统的运转情况等。</li><li>少数开发人员可以跟运维一样发版本到生产环境中，让开发人员关注并了解自己代码的运行情况。</li><li>从运维的视角修改代码，方便运维人员进行日常的变更与调整，监控与报警。</li><li>帮助运维人员修改puppet配置模板。</li><li>帮助运维人员编写与修改产品的发布脚本，提高自动化水平。</li></ul>
<p>让运维人员了解开发过程的关注点及挑战，并从运维角度改善开发过程：</p>
<ul><li>运维为开发在公司搭建基于虚拟机的测试环境，虚拟机的安装、配置管理以及代码的发布采用跟生产环境一样的方式。</li><li>开发人员与测试人员象运维一样发布版本到测试环境中。</li><li>鼓励开发与测试人员修改puppet配置与模板，管理自己的虚拟机。</li><li>在生产环境中建立了beta环境，开发人员可以直接发版本上去，让代码在最终上线前多一层缓冲。</li><li>运维去了解代码的模块结构，从运维的角度修改代码，让产品上线后更方便运维与适应生产环境的特点。</li><li>运维参与到持续的集成测试中，用自己的自动化知识帮助实现自动的集成测试等。</li></ul>
<p>文章了来自：<a href="http://www.infoq.com/cn/articles/lxh-teamwork-devops">http://www.infoq.com/cn/articles/lxh-teamwork-devops</a></p><img src ="http://www.blogjava.net/freeman1984/aggbug/354712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-07-20 15:41 <a href="http://www.blogjava.net/freeman1984/archive/2011/07/20/354712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大家都用什么bug管理软件？</title><link>http://www.blogjava.net/freeman1984/archive/2011/06/20/352649.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Mon, 20 Jun 2011 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/06/20/352649.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/352649.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/06/20/352649.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/352649.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/352649.html</trackback:ping><description><![CDATA[&nbsp; 公司以前用的mantis，冒失功能太简单了，二次开发比较困难。现在想和公司的项目管理软件平台（java语言）集成，不知道大家有什么经验分享一下？？，或者介绍几个二次开发容易一点的！<img src ="http://www.blogjava.net/freeman1984/aggbug/352649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-06-20 11:38 <a href="http://www.blogjava.net/freeman1984/archive/2011/06/20/352649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>敏捷开发中进度的把握</title><link>http://www.blogjava.net/freeman1984/archive/2011/03/23/346861.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 23 Mar 2011 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/03/23/346861.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/346861.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/03/23/346861.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/346861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/346861.html</trackback:ping><description><![CDATA[<p>项目经理被问到最多的问题就是，&#8220;这个项目什么时候才能完成？&#8221;</p>
<p>被问的时候，可能项目才定下来，仅仅知道大概的功能模块，非功能性需求还模糊不清，甚至团队成员都没到位。但是上级、销售、客户急切地要知道，这个项目什么时候才能完成？</p>
<p>被问的时候，也可能项目已临近结束，或者说临近当初计划的交付日期。然而待完成的功能还有一堆，测试出来的bug有一大堆，客户又提出了新的需求，团队正有人要离职 &#8230;。但是上级、销售、客户非常急切地要知道，这个项目到底什么时候才能完成？</p>
<p>这还不算糟糕。更头疼的问题是：&#8220;再有三周，项目应该完成了吧？&#8221;</p>
<p>因为后者根本不是问题，而是命令。项目经理必须要能够合理解释为什么三周不能够完成项目；或者说明在三周内，能够完成什么。</p>
<p>我们都用过MS Project， 但是那上面的漂亮表格对这样的困境毫无帮助。相反，正是Project 中的甘特图和日程表，埋下了陷阱。因为，在Project 中无法预估需要多少工作日才能完成模糊不清的需求，也无法体现实际情况发生变化后对进度的影响。</p>
<p>当我们讨论进度的时候，其实包含了两个未知的变量。第一是完成需求所要的工作量，包括需求定义、开发内容边界；第二是团队的工作能力，包括成员的行业知识专业技能，成员之间、成员和外部的沟通能力，等等。</p>
<p>关键就在于，这两项都是变量。如果任务是搬一千块砖头，每分钟每人能搬10块，那么结果是显而易见的。</p>
<p><span>在敏捷开发中，采用相对估算和迭代求精的方法来处理项目进度的问题。</span></p>
<p>首先是工作量。用估算代码行数或者界面元素的方式，就像论斤卖书一样，只适用于粗制滥造的软件生产过程。用户需要的并不是代码或者按钮，而是可靠易用的功能。</p>
<p>在敏捷开发方式中，先由用户和设计人员粗略估计各个功能模块的相对规模和难度，给出一定的分值。分值不代表具体人月，起相对比较的作用。例如有查询、显示、修改三个模块，如果实现显示模块的工作量是10分，那么查询模块可能是15分，而修改为20分。</p>
<p>下一步，选择一个工作量估分最低的模块，例如这里是显示模块，然后进一步考量其工作量。例如要准备数据库、设计界面、执行查询，显示内容等等。假设这轮估算得出此模块需要10人天，从而得出单位分值对应的人天为1；那么，整个项目就需要45人天。</p>
<p>这个估算建立在对项目的初步了解上，主要依赖项目经理的经验。有偏差？没关系。接下来通过迭代来求精。先来实现显示模块，如果事实上花费了12人天，那么根据比例关系，剩余内容的估算大约就是42人天。</p>
<p>当然，比例关系也不是一成不变的。随着模块的逐个完成，项目经理对项目的认识也在加深，他可以再调整剩余模块的相对分值。</p>
<p>在实际操作中，项目经理首先按照优先级排列功能模块。然后把高优先级的模块尽可能地细分，再选择分值最小的模块开始开发。统计总工作量时，按比例累加其他模块的工作量，并加一定的调整系数，因为模块的复杂度不是线性增长的。每次迭代开发完成后，逐步降低调整系数。通常4~5次迭代后，可以将调整系数归零。</p>
<p>在上面的例子中，第一次估算的初步结果是45人天，因为完全是凭经验，因此要给较大的调整系数，比如说0.4，因此给出的估算工作量区间为[45*0.6,45*1.4],即27到63人天之间。为保险起见，项目经理上报的工作量为70人天。</p>
<p>第二次估算，剩余内容的初步估算为42，调整系数下降为0.3，因此给出估算区间为30到50人天之间。依此类推，通过不断迭代，对剩余工作量的估算将越来越精确。</p>
<p><strong>这样估算的好处在哪里？</strong> </p>
<p>首先，工作量变量的很大一部分因素，存在于非功能需求，例如界面的美观程度。而同一项目的不同模块之间，非功能需求往往是一致的，相对估算法过滤了这一层复杂度。团队能力这一变量因素也是如此。当然，随着项目的进展，成员的开发能力应该有一定的上升，但随着加班出差等因素，投入程度也可能下降，因而会相互抵消。总之在周期6个月以内的项目中，很少出现团队工作能力戏剧性变化的情形。因此相对估算也过滤了这个复杂度。</p>
<p>其次，迭代求精的方式让项目经理对估算时间更有把握。最初出现偏差是必然的，但只要团队稳定，没有大的需求变动，估算范围将迅速收缩。这比一次性报数更准确。</p>
<p>它的额外好处是，敏捷开发是遵循优先级的，即使对剩余时间（即低优先级模块的开发时间）的估算不十分准确，影响也不是非常大。 </p>
<p>对比一下甘特图方式，在开发初期就要把各个模块的开发时间估算出来以统计总量，这就是瀑布开发的模式。 </p>
<p>进度问题的另一方面，是项目经理如何了解团队以及每个开发人员的开发速度。当任务分配之后，项目经理如何做到心中有数，估算任务实际完成时间。</p>
<p>敏捷开发过程中，由开发人员自己来估算完成该任务所需要的时间。当然，每个人的能力不同；每个人的心态也不同，有的人保守，有的人乐观。没关系，还是靠迭代来逐步求精。</p>
<p>在每天的例会上，开发人员被要求对当前任务的剩余开发时间做重估。不同于Project 统计每人每天在任务中花费了多少时间，敏捷方式只关心这项任务还需要多少时间去完成，直到归零，然后再来统计实际的工作时间。</p>
<p>为什么？因为统计开发过程中的花费时间是毫无意义的。这和搬砖头不同，也许昨天用了8个小时没有一点进展，今天一旦想通了就事半功倍。我们真正关心的，就是到底还需要多少时间来完成任务，而不是已经花费掉不可恢复的时间成本。</p>
<p>在每天例会中，项目经理需要注意时间曲线保持水平的成员，他是不是遇到瓶颈了，是否需求帮助？也要留意时间曲线下降幅度过大的成员，他发现了什么好的办法，有没有低估需求？这样，项目经理会更面向结果，只要按计划保证质量完成任务就行，成员到底花了多少时间是个人的事。传统做法记录每个人每天的工作内容，第一是因繁琐而失真。其次，一旦上级发现某人工作时间不够（即便他完成了任务），忍不住会派新任务，从而造成越干活越多，反过来打击程序员的积极性。</p>
<p>敏捷估算的关键之处，是把成员能力这个变量的估算，交给最合适的人去做，即程序员本人。然后通过比较历次迭代时的预估和实际时间，给出校正系数，以避免程序员过于保守或过于乐观。这肯定不是绝对准确的，但效果往往比项目经理自己拍脑袋估算，然后强行指定deadline 要好得多。</p>
<p>在敏捷开发中，做计划比计划本身更重要。项目经理需要时刻向前考虑，考虑各种动态因素，而不是死报着计划本身。在进度估算的时候，项目经理应该在不同阶段，根据实际情况，给出合乎情理的回答。</p>
转载自：http://yale.javaeye.com/blog/966689
 <img src ="http://www.blogjava.net/freeman1984/aggbug/346861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-03-23 15:43 <a href="http://www.blogjava.net/freeman1984/archive/2011/03/23/346861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件版本号</title><link>http://www.blogjava.net/freeman1984/archive/2011/01/26/343547.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 26 Jan 2011 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/01/26/343547.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/343547.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/01/26/343547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/343547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/343547.html</trackback:ping><description><![CDATA[<pre style="line-height: 16.5pt"><strong><span style="color: black; font-size: 10.5pt">关于软件版本号的问题</strong></span></pre>
<pre style="line-height: 16.5pt"><span style="color: black; font-size: 10.5pt">完全的版本号定义，分三项：：</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&lt;</span><span style="color: black; font-size: 10.5pt">主版本号</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&gt;.&lt;</span><span style="color: black; font-size: 10.5pt">次版本号</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&gt;.&lt;</span><span style="color: black; font-size: 10.5pt">修订版本号</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&gt;</span><span style="color: black; font-size: 10.5pt">，如</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt"> 1.0.0</span><span style="color: black; font-size: 10.5pt">。</span></pre>
<pre style="line-height: 16.5pt">&nbsp;</pre>
<pre style="line-height: 16.5pt"><span style="color: black; font-size: 10.5pt">版本号升级原则：</span></pre>
<pre style="line-height: 16.5pt"><strong><span style="color: black; font-size: 10.5pt">主版本号</span></strong><span style="color: black; font-size: 10.5pt">：功能模块有大的变动，比如增加多个模块或者整体架构发生变化。</span></pre>
<pre style="line-height: 16.5pt"><strong><span style="color: black; font-size: 10.5pt">次版本号</span></strong><span style="color: black; font-size: 10.5pt">：和主版本相对而言，次版本号的升级对应的只是局部的变动。但该局部的变动造成了程序和以前版本不能兼容，或者对该程序以前的协作关系产生了破坏，或者是功能上有大的改进或增强。</span></pre>
<pre style="line-height: 16.5pt"><strong><span style="color: black; font-size: 10.5pt">修订版本号</span></strong><span style="color: black; font-size: 10.5pt">：局部的变动，主要是局部函数的功能改进，或者</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">bug</span><span style="color: black; font-size: 10.5pt">的修正，或者功能的扩充。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">*****************************************************************************************</span></pre>
<pre style="line-height: 16.5pt"><strong><span style="color: black; font-size: 10.5pt">各种软件的版本号是怎么确定的，怎样的跨越才能算是由</strong></span><strong><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">bate</strong></span><strong><span style="color: black; font-size: 10.5pt">到正式版？</strong></span></pre>
<pre style="line-height: 16.5pt"><span style="color: black; font-size: 10.5pt">原则上，自第一个稳定版本发布后，修订版本号会经常性改动，而次版本号则依情况作改动，主版本号改动的频率很低，除非有大的重构或功能改进。对于小项目而言，甚至可以简化为：</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&gt;.&lt;</span><span style="color: black; font-size: 10.5pt">次版本号</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&gt;.&lt;</span><span style="color: black; font-size: 10.5pt">修订版本号</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&gt;</span><span style="color: black; font-size: 10.5pt">。</span></pre>
<pre style="line-height: 16.5pt"><span style="color: black; font-size: 10.5pt">版本号比较自由，至于</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">Beta</span><span style="color: black; font-size: 10.5pt">版或者是正式版跟版本号之间并没有任何关系，只要达到正式版的要求的话，即使版本号是</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">1.0</span><span style="color: black; font-size: 10.5pt">或者</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">0.1</span><span style="color: black; font-size: 10.5pt">都可能是正式版的。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">* Alpha</span><span style="color: black; font-size: 10.5pt">版</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">: </span><span style="color: black; font-size: 10.5pt">此版本表示该软件在此阶段主要是以实现软件功能为主，通常只在软件开发者内部交流，一般而言，该版本软件的</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">Bug</span><span style="color: black; font-size: 10.5pt">较多，需要继续修改。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">* Beta</span><span style="color: black; font-size: 10.5pt">版</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">: </span><span style="color: black; font-size: 10.5pt">该版本相对于</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&#945;</span><span style="color: black; font-size: 10.5pt">版已有了很大的改进，消除了严重的错误，但还是存在着一些缺陷，需要经过多次测试来进一步消除，此版本主要的修改对像是软件的</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">UI</span><span style="color: black; font-size: 10.5pt">。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">* RC</span><span style="color: black; font-size: 10.5pt">版</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">: </span><span style="color: black; font-size: 10.5pt">该版本已经相当成熟了，基本上不存在导致错误的</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">BUG</span><span style="color: black; font-size: 10.5pt">，与即将发行的正式版相差无几。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">* Release</span><span style="color: black; font-size: 10.5pt">版</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">: </span><span style="color: black; font-size: 10.5pt">该版本意味</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&#8220;</span><span style="color: black; font-size: 10.5pt">最终版本</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">&#8221;</span><span style="color: black; font-size: 10.5pt">，在前面版本的一系列测试版之后，终归会有一个正式版本，是最终交付用户使用的一个版本。该版本有时也称为标准版。一般情况下，</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">Release</span><span style="color: black; font-size: 10.5pt">不会以单词形式出现在软件封面上，取而代之的是符号</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">(R)</span><span style="color: black; font-size: 10.5pt">。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">2. </span><span style="color: black; font-size: 10.5pt">版本命名规范</span></pre>
<pre style="line-height: 16.5pt"><span style="color: black; font-size: 10.5pt">软件版本号由四部分组成，第一个</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">1</span><span style="color: black; font-size: 10.5pt">为主版本号，第二个</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">1</span><span style="color: black; font-size: 10.5pt">为子版本号，第三个</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">1</span><span style="color: black; font-size: 10.5pt">为阶段版本号，第四部分为日期版本号加希腊字母版本号，希腊字母版本号共有</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">5</span><span style="color: black; font-size: 10.5pt">种，分别为：</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">base</span><span style="color: black; font-size: 10.5pt">、</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">alpha</span><span style="color: black; font-size: 10.5pt">、</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">beta</span><span style="color: black; font-size: 10.5pt">、</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">RC</span><span style="color: black; font-size: 10.5pt">、</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">release</span><span style="color: black; font-size: 10.5pt">。例如：</span><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">1.1.1.051021_beta</span><span style="color: black; font-size: 10.5pt">。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">3. </span><span style="color: black; font-size: 10.5pt">版本号定修改规则</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">* </span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">主版本号</span><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">(1)</span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">：当功能模块有较大的变动，比如增加多个模块或者整体架构发生变化。此版本号由项目决定是否修改。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">* </span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">子版本号</span><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">(1)</span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">：当功能有一定的增加或变化，比如增加了对权限控制、增加自定义视图等功能。此版本号由项目决定是否修改。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">* </span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">阶段版本号</span><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">(1)</span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">：一般是</span><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt"> Bug </span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">修复或是一些小的变动，要经常发布修订版，时间间隔不限，修复一个严重的</span><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">bug</span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">即可发布一个修订版。此版本号由项目经理决定是否修改。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">* </span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">日期版本号</span><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">(051021):</span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">用于记录修改项目的当前日期，每天对项目的修改都需要更改日期版本号。此版本号由开发人员决定是否修改。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">* </span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">希腊字母版本号</span><span style="font-family: 'Arial', 'sans-serif'; background: #d9d9d9; color: red; font-size: 10.5pt">(beta):</span><span style="background: #d9d9d9; color: red; font-size: 10.5pt">此版本号用于标注当前版本的软件处于哪个开发阶段，当软件进入到另一个阶段时需要修改此版本号。此版本号由项目决定是否修改。</span></pre>
<pre style="line-height: 16.5pt"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 10.5pt">*******************************************************************************************</span></pre>
<p style="text-align: left; margin: 3.75pt 0cm 22.5pt" class="MsoNormal" align="left"><span style="font-family: '微软雅黑', 'sans-serif'; color: black; font-size: 22.5pt">软件版本号</span></p>
<div style="border-bottom: #cccccc 1.5pt solid; border-left: medium none; padding-bottom: 3pt; padding-left: 0cm; padding-right: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm">
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; margin: 7.5pt 0cm; padding-left: 0cm; padding-right: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; color: black">百科名片</span></strong></p>
</div>
<p style="text-align: center; line-height: 0%; background: white" class="MsoNormal" align="center"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 1pt"><a title="查看图片" href="http://baike.baidu.com/image/ac0acf138dd1593c5aaf53c5" target="_blank"><span style="color: #136ec2">&nbsp;&nbsp;</span></a></span></p>
<p style="text-align: center; line-height: 13.5pt; background: white" class="MsoNormal" align="center"><span style="font-family: 'Arial', 'sans-serif'; color: black; font-size: 9pt">IMEI </span><span style="font-family: 宋体; color: black; font-size: 9pt">号和软件版本号</span></p>
<p style="text-align: left; line-height: 18.75pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: black">软件名称后面经常有一些英文和数字，如：</span><span style="font-family: 'Arial', 'sans-serif'; color: black">QQ 2007 Beta</span><span style="font-family: 宋体; color: black">，这些都是软件的版本标志，通过它，我们可以对软件的类型有所了解。版本控制比较普遍的</span><span style="font-family: 'Arial', 'sans-serif'; color: black"> 3 </span><span style="font-family: 宋体; color: black">种命名格式</span><span style="font-family: 'Arial', 'sans-serif'; color: black"> :GNU </span><span style="font-family: 宋体; color: black">风格的版本号命名格式、</span><span style="font-family: 'Arial', 'sans-serif'; color: black">Windows </span><span style="font-family: 宋体; color: black">风格的版本号命名格式、</span><span style="font-family: 'Arial', 'sans-serif'; color: black">.Net Framework </span><span style="font-family: 宋体; color: black">风格的版本号命名格式。</span></p>
<div style="border-bottom: #dddddd 1pt dashed; border-left: medium none; padding-bottom: 0cm; padding-left: 0cm; padding-right: 0cm; margin-left: 3pt; border-top: medium none; margin-right: 3pt; border-right: medium none; padding-top: 0cm">
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; line-height: 22.5pt; padding-left: 0cm; padding-right: 0cm; margin-bottom: 7.5pt; border-top: medium none; border-right: medium none; padding-top: 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; color: black">目录</span></strong></p>
</div>
<div style="border-bottom: #dedfe1 1pt solid; border-left: #dedfe1 1pt solid; padding-bottom: 15pt; padding-left: 11pt; padding-right: 15pt; background: white; margin-left: 36pt; border-top: medium none; margin-right: 0cm; border-right: #dedfe1 1pt solid; padding-top: 0cm">
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; line-height: 16.5pt; padding-left: 0cm; padding-right: 0cm; background: white; border-top: medium none; border-right: medium none; padding-top: 0cm" class="MsoNormal" align="left"><a href="http://baike.baidu.com/view/707808.htm#1#1"><span style="font-family: 宋体; color: #136ec2">测试版与演示版</span></a></p>
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; line-height: 16.5pt; padding-left: 0cm; padding-right: 0cm; background: white; border-top: medium none; border-right: medium none; padding-top: 0cm" class="MsoNormal" align="left"><a href="http://baike.baidu.com/view/707808.htm#2#2"><span style="font-family: 宋体; color: #136ec2">正式版</span></a></p>
</div>
<div style="border-bottom: #dedfe1 1pt solid; border-left: #dedfe1 1pt solid; padding-bottom: 15pt; padding-left: 11pt; padding-right: 15pt; background: #fafafa; border-top: medium none; border-right: #dedfe1 1pt solid; padding-top: 0cm">
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; line-height: 15pt; text-indent: 7.5pt; padding-left: 0cm; padding-right: 0cm; background: #fafafa; border-top: medium none; border-right: medium none; padding-top: 0cm" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #136ec2; font-size: 9pt">展开</span></p>
</div>
<div style="border-bottom: #dedfe1 1pt solid; border-left: medium none; padding-bottom: 5pt; padding-left: 0cm; padding-right: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm">
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; line-height: 18pt; padding-left: 0cm; padding-right: 0cm; margin-bottom: 7.5pt; border-top: medium none; border-right: medium none; padding-top: 0cm" class="MsoNormal" align="left"><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: #3366cc; font-size: 9pt"><a href="http://baike.baidu.com/view/707808.htm##"><span style="font-family: 宋体; color: #136ec2">编辑本段</span></a></span></p>
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; line-height: 18pt; padding-left: 0cm; padding-right: 0cm; margin-bottom: 7.5pt; border-top: medium none; border-right: medium none; padding-top: 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 13.5pt">测试版与演示版</span></strong></p>
</div>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">&#945;</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">版</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　此版本表示该软件仅仅是一个初步完成品，通常只在软件开发者内部交流，也有很少一部分发布给专业测试人员。一般而言，该版本软件的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">bug</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">较多，普通用户最好不要安装。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">&#946;</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">（</span></strong><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">beta</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">）版</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　该版本相对于</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#945;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">版已有了很大的改进，消除了严重的错误，但还是存在着一些缺陷，需要经过大规模的发布测试来进一步消除。这一版本通常由软件公司免费发布，用户可从相关的站点下载。通过一些专业爱好者的测试，将结果反馈给开发者，开发者们再进行有针对性的修改。该版本也不适合一般用户安装。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">&#947;</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">版</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　该版本已经相当成熟了，与即将发行的正式版相差无几，如果用户实在等不及了，尽可以装上一试。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">RC</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">版</span></strong><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">:</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">软件正式发布的候选版本</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">Release Candidatem,</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">含义是</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">"</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">发布候选版</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">"</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">，它不是最终的版本，而是最终版</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">(RTM=Release To Manufacture)</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">之前的最后一个版本。广义上对测试有三个传统的称呼：</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">alpha</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">、</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">beta</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">、</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">gamma</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">，用来标识测试的阶段和范围。</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">alpha </span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">是指内测，即现在说的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">CB</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">，指开发团队内部测试的版本或者有限用户体验测试版本。</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">beta </span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">是指公测，即针对所有用户公开的测试版本。然后做过一些修改，成为正式发布的候选版本时叫做</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">gamma</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">，现在叫做</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">RC</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">（</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">Release Candidate</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">）。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">trial</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">（试用版）</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　试用版软件在最近的几年里颇为流行，主要是得益于互联网的迅速发展。该版本软件通常都有时间限制，过期之后用户如果希望继续使用，一般得交纳一定的费用进行注册或购买。有些试用版软件还在功能上做了一定的限制。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">unregistered</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">（未注册版）</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　未注册版与试用版极其类似，只是未注册版通常没有时间限制，在功能上相对于正式版做了一定的限制，例如绝大多数网络电话软件的注册版和未注册版，两者之间在通话质量上有很大差距。还有些虽然在使用上与正式版毫无二致，但是动不动就会弹出一个恼人的消息框来提醒你注册，如看图软件</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">acdsee</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">、智能陈桥汉字输入软件等。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">demo</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">版</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　也称为演示版，在非正式版软件中，该版本的知名度最大。</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">demo</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">版仅仅集成了正式版中的几个功能，颇有点像</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">unregistered</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">。不同的是，</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">demo</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">版一般不能通过升级或注册的方法变为正式版。</span></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　以上是软件正式版本推出之前的几个版本，</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#945;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">、</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#946;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">、</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#947;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">可以称为测试版，大凡成熟软件总会有多个测试版，如</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">windows 98</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#946;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">版，前前后后将近有</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">10</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">个。这么多的测试版一方面为了最终产品尽可能地满足用户的需要，另一方面也尽量减少了软件中的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">bug</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">。而</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">trial</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">、</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">unregistered</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">、</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">demo</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">有时统称为演示版，这一类版本的广告色彩较浓，颇有点先尝后买的味道，对于普通用户而言自然是可以免费尝鲜了。</span></p>
<div style="border-bottom: #dedfe1 1pt solid; border-left: medium none; padding-bottom: 5pt; padding-left: 0cm; padding-right: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm">
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; line-height: 18pt; padding-left: 0cm; padding-right: 0cm; margin-bottom: 7.5pt; border-top: medium none; border-right: medium none; padding-top: 0cm" class="MsoNormal" align="left"><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: #3366cc; font-size: 9pt"><a href="http://baike.baidu.com/view/707808.htm##"><span style="font-family: 宋体; color: #136ec2">编辑本段</span></a></span></p>
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; line-height: 18pt; padding-left: 0cm; padding-right: 0cm; margin-bottom: 7.5pt; border-top: medium none; border-right: medium none; padding-top: 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 13.5pt">正式版</span></strong></p>
</div>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　不同类型的软件的正式版本通常也有区别。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">release</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　该版本意味</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#8220;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">最终释放版</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#8221;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">，在出了一系列的测试版之后，终归会有一个正式版本，对于用户而言，购买该版本的软件绝对不会错。该版本有时也称为标准版。一般情况下，</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">release</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">不会以单词形式出现在软件封面上，取而代之的是符号</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">?</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">，如</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">windows nt? 4.0</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">、</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">ms-dos? 6.22</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">等。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">registered</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　很显然，该版本是与</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">unregistered</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">相对的注册版。注册版、</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">release</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">和下面所讲的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">standard</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">版一样，都是软件的正式版本，只是注册版软件的前身有很大一部分是从网上下载的。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">standard</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　这是最常见的标准版，不论是什么软件，标准版一定存在。标准版中包含了该软件的基本组件及一些常用功能，可以满足一般用户的需求。其价格相对高一级版本而言还是</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#8220;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">平易近人</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#8221;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">的。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">deluxe</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　顾名思义即为</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#8220;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">豪华版</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#8221;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">。豪华版通常是相对于标准版而言的，主要区别是多了几项功能，价格当然会高出一大块，不推荐一般用户购买。此版本通常是为那些追求</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#8220;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">完美</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">&#8221;</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">的专业用户所准备的。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">reference</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　该版本型号常见于百科全书中，比较有名的是微软的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">encarta</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">系列。</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">reference</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">是最高级别，其包含的主题、图像、影片剪辑等相对于</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">standard</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">和</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">deluxe</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">版均有大幅增加，容量由一张光盘猛增至三张光盘，并且加入了很强的交互功能，当然价格也不菲。可以这么说，这一版本的百科全书才能算是真正的百科全书，也是发烧友们收藏的首选。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">professional</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">（专业版）</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　专业版是针对某些特定的开发工具软件而言的。专业版中有许多内容是标准版中所没有的，这些内容对于一个专业的软件开发人员来说是极为重要的。如微软的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">visual foxpro</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">标准版并不具备编译成可执行文件的功能，这对于一个完整的开发项目而言显然是无法忍受的，若客户机上没有</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">foxpro</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">将不能使用。如果用专业版就没有这个问题了。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black; font-size: 12pt">enterprise</span></strong><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">（企业版）</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　企业版是开发类软件中的极品（相当于百科全书中的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">reference</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">版）。拥有一套这种版本的软件可以毫无障碍地开发任何级别的应用软件。如著名的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">visual c++</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">的企业版相对于专业版来说增加了几个附加的特性，如</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">sql</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">调试、扩展的存储过程向导、支持</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">as/400</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">对</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">ole db</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">的访问等。而这一版本的价格也是普通用户无法接受的。如微软的</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">visual studios 6.0 enterprise</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">中文版的价格为</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">23000</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">元。</span></p>
<p style="text-align: left; line-height: 16.5pt; margin: 11.25pt 0cm 3.75pt" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black; font-size: 12pt">其他版本</span></strong></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　除了以上介绍的一些版本外，还有一些专有版本名称。</span></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">update</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">（升级版）</span></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　升级版的软件是不能独立使用的，该版本的软件在安装过程中会搜索原有的正式版，如果不存在，则拒绝执行下一步。如</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">microsoft office 2000</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">升级版、</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">windows 9x</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">升级版等等。</span></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">oem</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">版</span></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　</span><span style="font-family: 'Arial', 'sans-serif'; letter-spacing: 0.4pt; color: black">oem</span><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">版通常是捆绑在硬件中而不单独销售的版本。将自己的产品交给别的公司去卖，保留自己的著作权，双方互惠互利，一举两得。</span></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　单机（网络）版</span></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　网络版在功能、结构上远比单机版复杂，如果留心一下软件的报价，你就会发现某些软件单机版和网络版的价格相差非常大，有些网络版甚至多一个客户端口就要加不少钱。</span></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　普及版</span></p>
<p style="text-align: left; line-height: 18pt" class="MsoNormal" align="left"><span style="font-family: 宋体; letter-spacing: 0.4pt; color: black">　　该版本有时也会被称为共享版，其特点是价格便宜（有些甚至完全免费）、功能单一、针对性强（当然也有占领市场、打击盗版等因素）。与试用版不同的是，该版本的软件一般不会有时间上的限制。当然，如果用户想升级，最好还是去购买正式版。</span></p>
<img src ="http://www.blogjava.net/freeman1984/aggbug/343547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-01-26 09:41 <a href="http://www.blogjava.net/freeman1984/archive/2011/01/26/343547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>团队内是有必要统一IDE</title><link>http://www.blogjava.net/freeman1984/archive/2010/11/12/337878.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 12 Nov 2010 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/11/12/337878.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/337878.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/11/12/337878.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/337878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/337878.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 团队内是有必要统一IDE <br>&nbsp;&nbsp;<a href='http://www.blogjava.net/freeman1984/archive/2010/11/12/337878.html'>阅读全文</a><img src ="http://www.blogjava.net/freeman1984/aggbug/337878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-11-12 10:31 <a href="http://www.blogjava.net/freeman1984/archive/2010/11/12/337878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>需求分析</title><link>http://www.blogjava.net/freeman1984/archive/2010/10/20/335685.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 20 Oct 2010 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/10/20/335685.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/335685.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/10/20/335685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/335685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/335685.html</trackback:ping><description><![CDATA[<p>在一个产品成功的面世，并且得到大家的承认，背后也有一串&#8216;故事&#8217;呢，这些&#8216;故事&#8217;由产品定义、需求分析、设计、开发、测试、市场等等组成。其中需求分析在整个产品体系当中首先起到的就是一个桥梁和纽带的作用，它是将用户的希望和要求通过语言转换成程序人员能识别的语句，这样希望才会在最终产品中得以体现。</p>
<p>准备做一个产品，首先要了解用户的希望和要求，这也就是所谓的&#8216;用户调研&#8217;所要做的工作。需求分析人员就是要从客户的角度出发，在理解客户的要求的基础上，将之转变成一种程序人员识别的文档。下边说一下用户调研需要注意的几点：</p>
<p>首先，要选好调研对象。调研对象的选择要有代表性，最好能选某个区域里的典型行业，具有行业特色，这样才不会片面，至于客户的选择，可以找当地的代理商进行了解后再确定，或是通过市场调研过滤后进行选择。 </p>
<p>其次，要深刻挖掘用户需求。在找好调研对象后，要对其行业背景进行了解，然后根据需要制定调研计划，最好能写一个比较细致的调研目标，这样去了才会有的放矢，不至于太盲目。可以针对客户的行业特色，引导用户说出尽量多的业务场景，并做好记录；另外还要收集一些用户的业务数据及资料，带回以备研究。</p>
<p>再次，要有一定量的客户调研，避免片面性。在做一个产品要尽量多的了解客户实际需求，为了避免片面性，同一行业最好多找几家；针对不同区域，客户需求可能不同，对于做产品，要满足大部分客户需求，就要找不同区域进行调研，这样产品才会相对全面，市场覆盖率才会广。 </p>
<p>刚说的是做产品之前调研很重要，但在需求分析阶段，也可以有针对性去调研，针对某个问题或某些问题，找相关领域客户进行详细了解，这样分析出来的需求会更接近用户的真实要求。</p>
<p>调研完成之后，在理解用户真正需求的基础上，就要将调研内容形成报告，以备对其进行详细分析，转化为程序员可阅读性文档（业务需求文档），由于各公司风格不同，可能要求会不同，不论哪种，只要写出来后续环节的人员可以看懂即可。另外在此想提一下的是，由于产品划分模块的不同，可能会有一些公共的东东，这些东东最好是先出具，然后再出各业务需求，这样不至于重复劳动，也会为后期的变更打下好的基础，减少变更量。另外在做产品需求分析过程中，还要&#8216;取长补短&#8217;，顾名思义就是要学习友商产品的长处。</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/aiunong/archive/2009/03/26/4028121.aspx</p>
<img src ="http://www.blogjava.net/freeman1984/aggbug/335685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-10-20 14:12 <a href="http://www.blogjava.net/freeman1984/archive/2010/10/20/335685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件项目成本估算</title><link>http://www.blogjava.net/freeman1984/archive/2010/10/19/335632.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Tue, 19 Oct 2010 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/10/19/335632.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/335632.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/10/19/335632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/335632.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/335632.html</trackback:ping><description><![CDATA[<p>[背景]</p>
<p>&nbsp;&nbsp; 软件项目一般来说可以分成两种：</p>
<p>A.&nbsp;&nbsp;&nbsp;&nbsp; 客户定制系统</p>
<p>B.&nbsp;&nbsp;&nbsp;&nbsp; 研发产品化系统</p>
<p>目前，国内绝大多数的都是在做A类型的客户定制系统，从接客户的单，到做客户的需求，拿到客户的合同，做开发，做实施，做后期维护之类的工作。</p>
<p>另外一种B类的，做产品研发的工作，国内涉及的人不多，而且它的项目估算里面涉及的问题很多，这里就不展开谈了。</p>
<p>做一个正常的软件项目，作为经营者和管理者，都想清楚地知道，这个软件项目有多大，要花掉多少成本，我能拿到的利润有多少，所以能不能准确地估算出软件项目的规模就显得很重要的。</p>
<p>下面我们来剖析一个小小的软件项目的规模估算。</p>
<p>[项目的需求文档]</p>
<p>&nbsp;&nbsp; 假设现在，我们接到了一个项目，项目的名称是&#215;&#215;&#215;会员综合管理平台，决定采取传统的B/S架构来设计，我们首先要干的事情就是具体的分析这个项目的需求文档，只有在熟悉需求的情况下才能知道整体的规模。</p>
<p>&nbsp;&nbsp; 具体的需求文档参见：</p>
<p>附件---系统的需求文档<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>[项目规模的概算]</p>
<p>&nbsp;&nbsp; 我们大家都知道，正常的软件开发模式，比如瀑布开发模式的话，会分成</p>
<p>A.&nbsp;&nbsp;&nbsp;&nbsp; 需求分析</p>
<p>B.&nbsp;&nbsp;&nbsp;&nbsp; 基本设计</p>
<p>C.&nbsp;&nbsp;&nbsp;&nbsp; 详细设计</p>
<p>D.&nbsp;&nbsp;&nbsp;&nbsp; Codeing</p>
<p>E.&nbsp;&nbsp;&nbsp;&nbsp; UT</p>
<p>F.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CT</p>
<p>G.&nbsp;&nbsp;&nbsp;&nbsp; RT</p>
<p>H.&nbsp;&nbsp;&nbsp; 后期维护</p>
<p>这么多阶段和步骤。但是根据，我所了解到的，国内除了少部分对日的大型公司会严格按照这种流程来做事情之外，绝大多数的国内公司还是随着自己的性子来。其中不乏，东软，联创之类的著名企业。所以我在制定项目概算的时候，还是按照国内的开发步骤来做：</p>
<p>大项目<br />
&nbsp;中项目<br />
&nbsp;小项目<br />
&nbsp;人日<br />
&nbsp;<br />
系统设计<br />
&nbsp;数据库设计(大概10张表左右)<br />
&nbsp;------<br />
&nbsp;6<br />
&nbsp;<br />
系统结构设计<br />
&nbsp;------<br />
&nbsp;6<br />
&nbsp;<br />
画面demo<br />
&nbsp;------<br />
&nbsp;10<br />
&nbsp;<br />
系统开发框架搭建<br />
&nbsp;------<br />
&nbsp;3<br />
&nbsp;<br />
开发作业<br />
&nbsp;会员管理子模块<br />
&nbsp;会员开卡画面<br />
&nbsp;1.5<br />
&nbsp;<br />
会员开卡确认画面<br />
&nbsp;0.5<br />
&nbsp;<br />
会员信息检索画面<br />
&nbsp;1<br />
&nbsp;<br />
会员信息修改画面<br />
&nbsp;1<br />
&nbsp;<br />
会员休息修改确认画面<br />
&nbsp;0.5<br />
&nbsp;<br />
批量生成卡号<br />
&nbsp;1<br />
&nbsp;<br />
会员积分输入和修改<br />
&nbsp;2<br />
&nbsp;<br />
会员卡延期画面<br />
&nbsp;2<br />
&nbsp;<br />
会员卡挂失画面<br />
&nbsp;2<br />
&nbsp;<br />
商品管理子模块<br />
&nbsp;商品录入画面<br />
&nbsp;1<br />
&nbsp;<br />
商品录入确认画面<br />
&nbsp;0.5<br />
&nbsp;<br />
商品检索画面<br />
&nbsp;1<br />
&nbsp;<br />
商品信息维护画面<br />
&nbsp;1<br />
&nbsp;<br />
库存管理<br />
&nbsp;库存检索画面<br />
&nbsp;1<br />
&nbsp;<br />
库存新建画面<br />
&nbsp;1<br />
&nbsp;<br />
库存修改画面<br />
&nbsp;1<br />
&nbsp;<br />
库存信息确认画面<br />
&nbsp;0.5<br />
&nbsp;<br />
～省略～<br />
&nbsp;<br />
测试作业<br />
&nbsp;测试数据和计划的准备<br />
&nbsp;------<br />
&nbsp;3<br />
&nbsp;<br />
分模块测试<br />
&nbsp;分画面测试<br />
&nbsp;～省略～<br />
&nbsp;<br />
后期维护<br />
&nbsp;系统上线安装<br />
&nbsp;硬件安装，布线<br />
&nbsp;1<br />
&nbsp;<br />
环境安装，项目部署<br />
&nbsp;1<br />
&nbsp;<br />
简单的客户培训<br />
&nbsp;3<br />
&nbsp;<br />
维护<br />
&nbsp;日常数据的维护<br />
&nbsp;4<br />
&nbsp;<br />
BUG的修正<br />
&nbsp;5<br />
&nbsp;<br />
总计<br />
&nbsp;大约7人月以上<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;[结论] </p>
<p>软件公司在算钱的时候有几种方法：</p>
<p>A.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 国内的比如联创之类，用项目分段方法收钱，做到哪一个阶段，或者完成了一个模板的上线就算前</p>
<p>B.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 外包公司一般采用一个人月多少钱来收钱，比如对日外包一般是1万～2万一个人月。</p>
<p>对于老板而言，他要计算出项目的成本，也要这样算，比如以下：</p>
<p>（总人月：7人月）<br />
&nbsp;项目成本<br />
&nbsp;对客户收费<br />
&nbsp;<br />
总价<br />
&nbsp;7万(市价：1万/人月)<br />
&nbsp;&gt;=8万<br />
&nbsp;</p>
<p># 为什么项目成本里面，一个人月会有1万呢</p>
<p>&nbsp; 因为如果我们假设项目的成员构成如下：</p>
<p>&nbsp; 职位<br />
&nbsp;月工资<br />
&nbsp;<br />
PM<br />
&nbsp;60,00<br />
&nbsp;<br />
SE<br />
&nbsp;45,00<br />
&nbsp;<br />
PG(5人)<br />
&nbsp;25,00&#215;6<br />
&nbsp;<br />
公司日常运营费用(包括文职人员，会计，场地租金，旅游福利，公司上层的工资，电脑设备，和客户打交道的关系费-----)<br />
&nbsp;500,00<br />
&nbsp;</p>
<p>于是我们就能得到：</p>
<p>月开销合计<br />
&nbsp;75,500<br />
&nbsp;<br />
平均一个人月<br />
&nbsp;10,786<br />
&nbsp;</p>
<p>&nbsp;</p>
<p># 为什么项目最后的售价一定会大于8万呢</p>
<p>在今天的IT市场上，一般来说作客户定制系统的公司，利润率只有10%～20%，厉害一点的比如联创，日恒一般也就15%。</p>
<p>&nbsp;特别是现在每年5%的通货膨胀率，如果一个企业不拿到10%以上的利润，那这个公司一定会完蛋。</p>
<p>&nbsp;所以，7万&#215;(最起码的利润率)10%&gt;=8万。</p>
<p>&nbsp;证明完毕</p>
<p>-----以上------</p>
<p>&nbsp;</p>
<p><br />
以下软件管理相关文章，欢迎大家访问</p>
<p>========================================================</p>
<p>《对日外包项目 管理十日谈》</p>
<p>http://blog.csdn.net/nanjingjiangbiao/archive/2010/01/31/5274307.aspx</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>《对日外包项目管理十日谈 之 第一日 接活》</p>
<p>http://blog.csdn.net/nanjingjiangbiao/archive/2010/03/10/5364523.aspx</p>
<p><br />
========================================================</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>【附件---系统的需求文档】</p>
<p>系统需求：</p>
<p>模块名<br />
&nbsp;处理机能<br />
&nbsp;机能详细<br />
&nbsp;<br />
会员管理子模块<br />
&nbsp;会员卡类型管理：分为储值型返现型、计次型、普通型。<br />
&nbsp;储值型返现型属于预付费型会员卡，例如充100实到帐120。</p>
<p>计次型属于预付费型会员卡，例如500块/20次。</p>
<p>普通型分为两种：一种属于预付费型会员卡，在开卡之际需要充入一定的现金；还有一种仅是用于代表用户拥有某个商户的会员身份，仅用于积分或打折使用。</p>
<p>每种卡类型都有相对应的积分与消费折扣率。<br />
&nbsp;<br />
会员卡管理：包括会员开卡、会员信息维护、批量生成卡号等功能。</p>
<p>&nbsp;<br />
&nbsp;会员开卡：会员首次办理会员卡时需录入会员的信息并生成相应的卡信息与会员信息对应。</p>
<p>会员信息维护：会员信息的查询，会员卡、会员身份信息的修改。</p>
<p>批量生成卡号：可以事先生成一批卡号，当用户需办理卡时，直接录入即可。无论是单独生成还是批量生成卡号，都需屏蔽不吉利的号码。</p>
<p>&nbsp;<br />
&nbsp;<br />
充值管理：有储值的会员卡在金额消费完毕后，需进行续费，若未续费，则会员卡暂不可用。</p>
<p>&nbsp;<br />
&nbsp;储值型返现型、计次型为开卡前一次性充值。使用完毕即结束，再次充值时，所充金额按卡类型的限止进行充值。</p>
<p>普通消费型：可充入金额不等，具体金额由商家自行确定。</p>
<p>&nbsp;<br />
&nbsp;<br />
会员积分</p>
<p>&nbsp;<br />
&nbsp;会员积分是一个可以灵活配置的功能。例如开卡送多少积分，不同类型的会员卡在消费时增加多少积分，在兑换礼品时减少多少积分等等。<br />
&nbsp;<br />
会员卡延期<br />
&nbsp;无论是哪种类型的会员卡，在建卡之初都会设置相应的结束时间，在结束时间到来时，若尚有余额未使用，用户可以申请延期，延期具体时间由商家自行决定。<br />
&nbsp;<br />
会员卡挂失：用户在无意中丢失卡片后可以向办理卡片时的商户申请挂失。</p>
<p>&nbsp;<br />
&nbsp;挂失：用户凭办理时输入的密码与证件进行挂失。</p>
<p>取挂：用户若找到了丢失的卡片，可以取消挂失。</p>
<p>补卡：用户在挂失一段时间后，可以申请补卡。补卡时用户的会员卡号有可能会变，但会员卡编号是唯一的，不可变的。<br />
&nbsp;<br />
商品管理子模块</p>
<p>&nbsp;<br />
&nbsp;商品类别管理：商家为自己的商品创建相应的类别。商品的类别分为真实商品与虚拟商品两种。<br />
&nbsp;真实商品是现实中存在的商品，例如：香烟、酒、饮料等。</p>
<p>虚拟商品为空间或时间上的概念。<br />
&nbsp;<br />
真实商品管理：</p>
<p>&nbsp;<br />
&nbsp;商品信息录入：各商家自行录入商品信息。</p>
<p>商品信息维护：包括商品信息的查询、修改、删除等功能。<br />
&nbsp;<br />
虚拟商品管理：</p>
<p>&nbsp;<br />
&nbsp;商品管理：例如某个球场。3小时/100元。某种服务，100元/1次。<br />
&nbsp;<br />
库存管理</p>
<p>&nbsp;<br />
&nbsp;库房管理<br />
&nbsp;创建、维护、查询、删除本商家的库房信息。</p>
<p>&nbsp;<br />
&nbsp;<br />
供应商管理<br />
&nbsp;创建、维护供应商信息。供应商名称，电话，具体联系人，销售产品等。<br />
&nbsp;<br />
入库管理<br />
&nbsp;新进商品的入库操作。商品的名称，数量，对应的供应商，存储的库房，保持期，最低库存告警点等。</p>
<p>&nbsp;<br />
&nbsp;<br />
出库管理<br />
&nbsp;商品销售过程中，系统会对商品的数量进行自动的减少。<br />
&nbsp;<br />
库存告警<br />
&nbsp;当某种商品库存量低于设定的水平时，给予明确的告警。<br />
&nbsp;<br />
消费管理子模块</p>
<p>&nbsp;<br />
&nbsp;预订管理<br />
&nbsp;用户以电话的形式联系商家,并预订下到达的时间和所消费的服务。商家通过系统创建预订单，预订单中包含用户的联系信息或会员卡号、计划消费的服务、使用的场地等信息。<br />
&nbsp;<br />
消费单生成<br />
&nbsp;用户来到商家消费后，若是事先有预定则此时转化为相应的消费单，若是当场消费，则现场生成消费单。消费单中保存了用户在商户的一切消费行为，当最终进行费用结算时，若用户是会员则可将消费单与会员卡对接。</p>
<p>&nbsp;<br />
&nbsp;<br />
添加真实商品<br />
&nbsp;为已正式生成的消费单添加商品，包括商品的数量，单价，消费时间等。</p>
<p>&nbsp;<br />
&nbsp;<br />
增加虚拟商品<br />
&nbsp;为已正式生成的消费单添加虚拟的商品，虚拟的商品不同于真实商品，未必以数量为单位，可能是以时间或次数为单位。系统会详细记录会员消费的起始时间或次数，到会员结帐时自动根据记录计算出结果。</p>
<p>&nbsp;<br />
&nbsp;<br />
费用结算管理<br />
&nbsp;系统会根据各商户所生成的消费单上的内容进行结算。这包括真实商品的数量与单价的乘积，虚拟商品所用时间或次数的计算结果，或者是二者之和。在计算出结果后，若用户持有会员卡，系统会根据会员卡的类型、商品的类型等进行打折、积分。<br />
&nbsp;<br />
联合结帐<br />
&nbsp;在上面结帐管理的基础上，可以将不同的消费单关联，并设置其中一张消费单为主结算单进行费用结算。<br />
&nbsp;<br />
商家自助管理子模块</p>
<p>&nbsp;<br />
&nbsp;商家信息管理<br />
&nbsp;对商家自身信息的管理、维护。商家充值功能。</p>
<p>&nbsp;<br />
&nbsp;<br />
员工管理<br />
&nbsp;新建、维护员工。包括员工登陆系统的帐号，初始密码，有效期等。</p>
<p>&nbsp;<br />
&nbsp;<br />
员工销售情况统计<br />
&nbsp;查看每个店内员工的商品或服务销售情况，可以借此衡量员工的业绩。</p>
<p>&nbsp;<br />
&nbsp;<br />
员工操作日志<br />
&nbsp;查看每个店内员工的操作行为记录。</p>
<p>&nbsp;<br />
&nbsp;<br />
交班管理<br />
&nbsp;员工与员工之间交班时的一种操作，主要是对上一班员工的各类数据的一个总结，新一班员工数据的重新开始录入。<br />
&nbsp;<br />
提醒管理<br />
&nbsp;分为两种提醒，一种是程序控制的提醒，在某些点上加入，到达限定条件即提醒(待议)；一种是可配置的提醒，如，某年某月某日要做些什么。<br />
&nbsp;<br />
短信群发申请<br />
&nbsp;商家编辑短信的内容提交至管理员处统一发送。</p>
<p>&nbsp;<br />
&nbsp;<br />
邮件群发管理<br />
&nbsp;可以从数据库中随机掏出指定人数用户向其发送邮件。</p>
<p>&nbsp;<br />
&nbsp;<br />
公告管理<br />
&nbsp;针对店内员工的公告信息<br />
&nbsp;<br />
计量单位管理<br />
&nbsp;每个商家可以添加属于自己的计量单位，例如：个，次。这种仅限于页面展示，与价格换算无关联。<br />
&nbsp;<br />
密码修改<br />
&nbsp;对登陆系统密码的修改<br />
&nbsp;<br />
统计报表<br />
&nbsp;待定<br />
&nbsp;<br />
系统管理</p>
<p>&nbsp;<br />
&nbsp;角色权限管理<br />
&nbsp;平台中有众多商家，他们所包含的员工都有相应的角色，不同的角色所看见的功能不一样，角色由管理员统一创建。<br />
&nbsp;<br />
商家管理<br />
&nbsp;所有商家皆由此添加，在有效期到来之前，商家均可正常登陆系统进行操作。<br />
&nbsp;<br />
地市信息管理<br />
&nbsp;系统初始数据，一般不做变更，主要包含江苏省13个地市的信息。<br />
&nbsp;<br />
提醒管理<br />
&nbsp;分为两种提醒，一种是程序控制的提醒，在某些点上加入，到达限定条件即提醒(待议)；一种是可配置的提醒，如，某年某月某日要做些什么。<br />
&nbsp;<br />
短信群发管理<br />
&nbsp;可以从数据库中随机取出指定人数用户向其发送短信。审批后,因按短信的条数扣除从商家的帐户上扣除一定的金额,若金额不够则不能审批。<br />
&nbsp;<br />
邮件群发管理<br />
&nbsp;可以从数据库中随机掏出指定人数用户向其发送邮件<br />
&nbsp;<br />
公告管理<br />
&nbsp;向所有的商家发布公告信息<br />
&nbsp;<br />
密码修改<br />
&nbsp;对登陆系统密码的修改<br />
&nbsp;<br />
统计报表<br />
&nbsp;待定<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客：http://blog.csdn.net/nanjingjiangbiao/archive/2010/03/04/5346859.aspx</p>
<img src ="http://www.blogjava.net/freeman1984/aggbug/335632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-10-19 22:22 <a href="http://www.blogjava.net/freeman1984/archive/2010/10/19/335632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何防止少量的代码修改导致的全用例测试</title><link>http://www.blogjava.net/freeman1984/archive/2010/10/19/335508.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Mon, 18 Oct 2010 16:18:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/10/19/335508.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/335508.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/10/19/335508.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/335508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/335508.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">&nbsp; </span></span></span></span></span></span></span></span></span></span>
<div><span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;一个关于移动的项目，现在做了快两年了，项目越来越大，其中有的表数据加上历史数据都到10亿级别，由于这两年团队成员流动大，导致代码越来臃肿，前期项目代码的管理不善，除了较大的版本，一般的小修小改都不经过代码评审，本地测试通过后，直接hotfix，有时候很顺利，但是偶尔导致较大问题，有时候甚至影响客户使用，导致公司亏损。现在领导发现问题就直接骂工程部，导致现在每当有一点点修改，工程部都要求AQ按照测试用进行全用例测试，测试非常的不易，光是功能测试几乎5个测试人员一天时间，还要兼容几乎所有浏览器（ie6~8,火狐，遨游，TT，360，google,搜狗）。工作量巨大。没办法现在我们的做法如下：<br />
<br />
<br />
</span></span></span></span></span></span></span></span></span></span></div>
<div><span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">1 &nbsp;&nbsp;&nbsp;&nbsp; 加强代码的版本控制，对每次代码的修改，都直接联系到个人，代码的修改都要写修改说明，包括：修改内容，修改前效果，修改后效果，对其他接口或功能的影响，回滚策略，测试用例。<br />
<br />
</span></span></span></span></span></span></span></span></span></span></div>
<div><span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">2 &nbsp;&nbsp;&nbsp;&nbsp; 代码评审：代码评审的标准我们也在不断修改完善，过一段时都会对评审标准进行评审。评审前参会人员都会拿到 上一步相关人员写的修改说明，会前2小时阅读，会中，有相关人员对代码进行流程讲解，并进行效果演示，评审内容包括，代码评审（是否符合代码评审标准），效果评审（是否达到产品需求效果），用例评审(是否可以覆盖当前修改)，回滚评审（出错后是否可以及时的回滚到前一版本）。<br />
<br />
</span></span></span></span></span></span></span></span></span></span></div>
<div><span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">3 &nbsp;&nbsp;&nbsp;&nbsp; 总结每期评审结果，必要时间进行讨论，提出问题：包括项目中遇到的难题，和大家对评审的看法，总结经验，并对公认的技术问题进行归类，由对此熟悉的人员（架构师，开发经理，个人）在周一进行技术讲解（我们是每月2次的技术培训，没有公共话题的情况下，如果有人想分享个人经验的话，可提前准备，现在为了鼓励大家，根据培训效果，对培训讲解人是有偿的，奖励多少不公开，会中很活跃，一般不会刻意打断你，除非公共话题，这一点我是比较喜欢，每天都会去翻大量的文章，书籍去了解话题）。<br />
<br />
</span></span></span></span></span></span></span></span></span></span></div>
<div><span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">4 和绩效挂钩，这一点大家都不喜欢啊，不过没办法，领导意思，每次上线都搞得心里惶惶的。<br />
<br />
</span></span></span></span></span></span></span></span></span></span></div>
<div><span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 这些工作我们做了半年，也是有成效，有时候评审会叫上工程部的人来看，工程部也承认我们的工作，也不怎么要求全用例了，但是好多都慢慢形式化，包括评审，主要还是有时候项目特别紧，大家都加班加点干项目，为了上线，项目都改了好几个版本，还没评审一次，结果可想而知。有时候也想过自动化测试，但是离开了人为的控制任然问题多多啊，主要是自动化测试这方便经验不足。<br />
<br />
</span></span></span></span></span></span></span></span></span></span></div>
<div><span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不知道大家在开发大型项目的过程中，都是如何保证产品质量的，主要是如何在项目比较将紧的情况下防止全用例测试，不要说你们每次修改都全用例测试，都是绿灯才上线，全用例测试对我们来说那简直是要命啦，也不要说刚招聘的一个新人他写的代码你就放心不用测试评审。<br />
<br />
</span></span></span></span></span></span></span></span></span></span></div>
<div><span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我个人认为是可以避免少量修改导致的全用例测试的，主要的问题就是修改带出来的新问题，如何防止修改老问题带出新问题，个人认为有以下因素导致：人的积极性，人的责任心，人的上进心。人的积极性需要领导层共同解决，如何在紧张的项目下给员工舒适的环境和心情，人的责任心和上进心是就是自己的素养，不管多么没意思的工作你是否愿意去做好，还有就是你是否愿意提高你的技能来防止这些问题。 &nbsp;但是这每一点都不是嘴上说说就能做好的。</span></span></span></span></span></span></span></span></span></span></div>
<div><span style="font-size: 14pt"><span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: Arial"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;</span></span></span></span></span></span></span></span></span></span></div>
<img src ="http://www.blogjava.net/freeman1984/aggbug/335508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-10-19 00:18 <a href="http://www.blogjava.net/freeman1984/archive/2010/10/19/335508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringSide代码规范</title><link>http://www.blogjava.net/freeman1984/archive/2010/10/10/334234.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sun, 10 Oct 2010 15:48:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/10/10/334234.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/334234.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/10/10/334234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/334234.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/334234.html</trackback:ping><description><![CDATA[<h2><a name="CodingStandards-%E5%89%8D%E8%A8%80"></a>前言</h2>
<p>&nbsp;&nbsp;&nbsp; 本文档反映的是SpringSide 团队的编码规范，同时推荐所有使用SpringSide框架的开发人员遵循。</p>
<p>&nbsp;&nbsp;&nbsp; 本文档基本遵循<span class="nobr"><a title="Visit page outside Confluence" href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html" rel="nofollow">Sun's Coding Conventions<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>，补充了其中没有说明或者有所改动的地方。</p>
<h3><a name="CodingStandards-%E7%89%88%E6%9D%83%E5%A3%B0%E6%98%8E%26nbsp%3B%26nbsp%3B%26nbsp%3B"></a>版权声明&nbsp;&nbsp;&nbsp;</h3>
<p>&nbsp;&nbsp;&nbsp; 本规范由<span class="nobr"><a title="Visit page outside Confluence" href="http://www.springside.org.cn/team.php" rel="nofollow">springside团队<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>维护，相关评论与意见请发至springside@gmail.com，转载请注明出处。</p>
<h3><a name="CodingStandards-%E8%A7%84%E8%8C%83%E7%AD%89%E7%BA%A7%E8%AF%B4%E6%98%8E"></a>规范等级说明</h3>
<ul>
    <li><font color="#000000">级别I:&nbsp;&nbsp; 默认级别，要求所有项目中的所有成员遵守。</font></li>
    <li><font color="#cc6600">级别II: &nbsp;建议所有项目中的所有成员遵守。</font></li>
    <li><font color="#3333ff">级别III: 鼓</font><font color="#3333ff">励各个项目根据实际情况执行。</font></li>
</ul>
<h2><a name="CodingStandards-1.%E6%A0%BC%E5%BC%8F%E4%B8%8E%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83%28FormatingandNamingConventions%29"></a>1.格式与命名规范(Formating and Naming Conventions)</h2>
<h3><a name="CodingStandards-1.1%26nbsp%3B%26nbsp%3B%E7%BC%A9%E8%BF%9B"></a>1.1&nbsp;&nbsp;缩进</h3>
<p>&nbsp; 使用Tab缩进，而不是空格键--将缩进2，4，8字符的选择权留给阅读者。</p>
<h3><a name="CodingStandards-1.2%E6%8D%A2%E8%A1%8C"></a>1.2 换行</h3>
<p>&nbsp;&nbsp; 每行120字符--因为已是1024*768的年代。</p>
<p>&nbsp; &nbsp;if,for,while语句只有单句时，如果该句可能引起阅读混淆，需要用" {"和"}"括起来，否则可以省略。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java"><span class="code-comment">//错误，需要使用花括号{}括起来
</span><span class="code-keyword">if</span> (condition)
<span class="code-keyword">if</span>(condition) doSomething();
<span class="code-keyword">else</span>
doSomething();</pre>
</div>
</div>
<h3><a name="CodingStandards-1.3%26nbsp%3B%E5%91%BD%E5%90%8D%E8%A7%84%E5%88%99%26nbsp%3B"></a>1.3&nbsp;命名规则&nbsp;</h3>
<ul>
    <li>不允许使用汉语拼音命名&nbsp;</li>
    <li>遇到缩写如XML时，仅首字母大写，即loadXmlDocument()而不是loadXMLDocument()</li>
    <li>Package名必须全部小写，尽量使用单个单词</li>
    <li>Interface名可以是一个名词或形容词(加上'able','ible', or 'er'后缀)，如Runnable，Accessible。<br />
    为了基于接口编程，不采用首字母为I或加上IF后缀的命名方式，如IBookDao,BookDaoIF。</li>
    <li>页面部件名建议命名为：btnOK、lblName或okBtn、nameLbl。<font color="#cc6600">(II)</font><br />
    其中btn、lbl缩写代表按钮(Button)、标签(Label)。</li>
    <li>局部变量及输入参数不要与类成员变量同名(get/set方法与构造函数除外)</li>
</ul>
<h3><a name="CodingStandards-1.4%E5%A3%B0%E6%98%8E"></a>1.4 声明</h3>
<ul>
    <li>修饰符应该按照如下顺序排列：public, protected, private, abstract, static, final, transient, volatile, synchronized, native, strictfp。</li>
    <li>类与接口的声明顺序(可用Eclipse的source-&gt;sort members功能自动排列):&nbsp;
    <ol>
        <li>静态成员变量 / Static Fields</li>
        <li>静态初始化块 / Static Initializers</li>
        <li>成员变量 / Fields</li>
        <li>初始化块 / Initializers</li>
        <li>构造器 / Constructors</li>
        <li>静态成员方法 / Static Methods</li>
        <li>成员方法 / Methods</li>
        <li>重载自Object的方法如toString(), hashCode() 和main方法</li>
        <li>类型(内部类) / Types(Inner Classes)</li>
    </ol>
    </li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 同等的类型，按public, protected, private的顺序排列。</p>
<h2><a name="CodingStandards-2.%E6%B3%A8%E9%87%8A%E8%A7%84%E8%8C%83%28DocumentConvertions%29"></a>2.注释规范(Document Convertions)</h2>
<h3><a name="CodingStandards-2.1%E6%B3%A8%E9%87%8A%E7%B1%BB%E5%9E%8B"></a>2.1 注释类型</h3>
<h4><a name="CodingStandards-2.1.1JavaDoc%E6%B3%A8%E9%87%8A"></a>2.1.1 JavaDoc注释</h4>
<p>&nbsp; 略。</p>
<h4><a name="CodingStandards-2.1.2%E5%A4%B1%E6%95%88%E4%BB%A3%E7%A0%81%E6%B3%A8%E9%87%8A"></a>2.1.2 失效代码注释</h4>
<p>&nbsp; 由/*<strong>...*</strong>/界定，标准的C-Style的注释。专用于注释已失效的代码。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java">/*
&nbsp;* Comment out the code
&nbsp;* <span class="code-object">String</span> s = <span class="code-quote">"hello"</span>;
* <span class="code-object">System</span>.out.println(s);
&nbsp;*/</pre>
</div>
</div>
<h4><a name="CodingStandards-2.1.3%E4%BB%A3%E7%A0%81%E7%BB%86%E8%8A%82%E6%B3%A8%E9%87%8A"></a>2.1.3 代码细节注释</h4>
<p>&nbsp; 由//界定，专用于注释代码细节，即使有多行注释也仍然使用//，以便与用/**/注释的失效代码分开</p>
<p>&nbsp; 除了私有变量外，不推荐使用行末注释。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java">class MyClass {
<span class="code-keyword">private</span> <span class="code-object">int</span> myField; <span class="code-comment">// An end-line comment.
</span>
<span class="code-keyword">public</span> void myMethod {
<span class="code-comment">//a very very <span class="code-object">long</span>
</span>       <span class="code-comment">//comment.
</span>       <span class="code-keyword">if</span> (condition1) {
<span class="code-comment">//condition1 comment
</span>          ...
} <span class="code-keyword">else</span> {
<span class="code-comment">//elses condition comment
</span>          ...
}
}
}</pre>
</div>
</div>
<h3><a name="CodingStandards-2.2%26nbsp%3B%E6%B3%A8%E9%87%8A%E7%9A%84%E6%A0%BC%E5%BC%8F"></a>2.2&nbsp;注释的格式</h3>
<ul>
    <li>注释中的第一个句子要以（英文）句号、问号或者感叹号结束。Javadoc生成工具会将注释中的第一个句子放在方法汇总表和索引中。</li>
    <li>为了在JavaDoc和IDE中能快速链接跳转到相关联的类与方法，尽量多的使用@see xxx.MyClass，@see xx.MyClass#find(String)。</li>
    <li>Class必须以@author 作者名声明作者，不需要声明@version与@date，由版本管理系统保留此信息。<font color="#cc6600">(II)</font></li>
    <li>如果注释中有超过一个段落，用&lt;p&gt;分隔。<font color="#cc6600">(II)</font></li>
    <li>示例代码以&lt;pre&gt;&lt;/pre&gt;包裹。<font color="#cc6600">(II)</font></li>
    <li>标识(java keyword, class/method/field/argument名，Constants) 以&lt;code&gt;&lt;/code&gt;包裹。<font color="#cc6600">(II)</font></li>
    <li>标识在第一次出现时以{@linkxxx.Myclass}注解以便JavaDoc与IDE中可以链接。<font color="#cc6600">(II)</font></li>
</ul>
<h3><a name="CodingStandards-2.3%26nbsp%3B%E6%B3%A8%E9%87%8A%E7%9A%84%E5%86%85%E5%AE%B9"></a>2.3&nbsp;注释的内容</h3>
<h4><a name="CodingStandards-2.3.1%E5%8F%AF%E7%B2%BE%E7%AE%80%E7%9A%84%E6%B3%A8%E9%87%8A%E5%86%85%E5%AE%B9"></a>2.3.1 可精简的注释内容</h4>
<p>&nbsp;&nbsp;&nbsp; 注释中的每一个单词都要有其不可缺少的意义，注释里不写"@param name -名字"这样的废话。<br />
&nbsp;&nbsp;&nbsp; 如果该注释是废话，连同标签删掉它，而不是自动生成一堆空的标签，如空的@param name，空的@return。</p>
<h4><a name="CodingStandards-2.3.2%E6%8E%A8%E8%8D%90%E7%9A%84%E6%B3%A8%E9%87%8A%E5%86%85%E5%AE%B9"></a>2.3.2 推荐的注释内容</h4>
<ul>
    <li>对于API函数如果存在契约，必须写明它的前置条件(precondition)，后置条件(postcondition)，及不变式(invariant)。<font color="#cc6600">(II)</font></li>
    <li>对于调用复杂的API尽量提供代码示例。<font color="#cc6600">(II)</font></li>
    <li>对于已知的Bug需要声明。<font color="#cc6600">(II)</font></li>
    <li>在本函数中抛出的unchecked exception尽量用@throws说明。<font color="#cc6600">(II)</font></li>
</ul>
<h4><a name="CodingStandards-2.3.3Null%E8%A7%84%E7%BA%A6"></a>2.3.3 Null规约</h4>
<p>&nbsp;&nbsp; 如果方法允许Null作为参数，或者允许返回值为Null，必须在JavaDoc中说明。<br />
&nbsp;&nbsp;&nbsp;如果没有说明，方法的调用者不允许使用Null作为参数，并认为返回值是Null Safe的。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java">/**
&nbsp;* 获取对象.
&nbsp;*
&nbsp;* @ <span class="code-keyword">return</span> the object to found or <span class="code-keyword">null</span> <span class="code-keyword">if</span> not found.
&nbsp;*/
<span class="code-object">Object</span> get(<span class="code-object">Integer</span> id){
...
}</pre>
</div>
</div>
<h4><a name="CodingStandards-2.3.4%E7%89%B9%E6%AE%8A%E4%BB%A3%E7%A0%81%E6%B3%A8%E9%87%8A"></a>2.3.4 特殊代码注释</h4>
<ul>
    <li>代码质量不好但能正常运行，或者还没有实现的代码用//TODO: 或 //XXX:声明&nbsp;</li>
    <li>存在错误隐患的代码用//FIXME:声明</li>
</ul>
<h2><a name="CodingStandards-3.%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83%28ProgrammingConventions%29"></a>3.编程规范(Programming Conventions)</h2>
<h3><a name="CodingStandards-3.1%E5%9F%BA%E6%9C%AC%E8%A7%84%E8%8C%83"></a>3.1基本规范</h3>
<ol>
    <li>当面对不可知的调用者时，方法需要对输入参数进行校验，如不符合抛出IllegalArgumentException，建议使用Spring的Assert系列函数。&nbsp;</li>
    <li>隐藏工具类的构造器，确保只有static方法和变量的类不能被构造实例。</li>
    <li>变量，参数和返回值定义尽量基于接口而不是具体实现类，如Map map = new HashMap();</li>
    <li>代码中不能使用System.out.println()，e.printStackTrace()，必须使用logger打印信息。</li>
</ol>
<h3><a name="CodingStandards-3.2%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86"></a>3.2 异常处理</h3>
<ol>
    <li>重新抛出的异常必须保留原来的异常，即throw new NewException("message", e); 而不能写成throw new NewException("message")。</li>
    <li>在所有异常被捕获且没有重新抛出的地方必须写日志。&nbsp;</li>
    <li>如果属于正常异常的空异常处理块必须注释说明原因，否则不允许空的catch块。</li>
    <li>框架尽量捕获低级异常，并封装成高级异常重新抛出，隐藏低级异常的细节。<font color="#3333ff">(III)</font></li>
</ol>
<h3><a name="CodingStandards-3.3%E4%BB%A3%E7%A0%81%E5%BA%A6%E9%87%8F"></a>3.3 代码度量</h3>
<h4><a name="CodingStandards-3.3.1%E8%80%A6%E5%90%88%E5%BA%A6%E5%BA%A6%E9%87%8F"></a>3.3.1 耦合度度量</h4>
<ul>
    <li>DAC度量值不要不大于7 <font color="#3333ff">( III )</font><br />
    解释：DAC(Data Abstraction Coupling)数据抽象耦合度是描述对象之间的耦合度的一种代码度量。DAC度量值表示一个类中有实例化的其它类的个数。</li>
    <li>CFO度量值不要不大于20 <font color="#3333ff">( III )</font><br />
    解释：CFO(Class Fan Out)类扇出是描述类之间的耦合度的一种代码度量。CFO度量值表示一个类依赖的其他类的个数。</li>
</ul>
<h4><a name="CodingStandards-3.3.2%E6%96%B9%E6%B3%95%E5%BA%A6%E9%87%8F"></a>3.3.2 方法度量</h4>
<ul>
    <li>方法（构造器）参数在5个以内 <font color="#cc6600">( II )</font><br />
    太多的方法（构造器）参数影响代码可读性。考虑用值对象代替这些参数或重新设计。</li>
    <li>方法长度150行以内 <font color="#cc6600">( II )</font></li>
    <li>CC&nbsp;度量值不大于10<font color="#3333ff">(III )</font><br />
    <font color="#000000">解释：CC(CyclomaticComplexity)圈复杂度指一个方法的独立路径的数量，可以用一个方法内if,while,do,for,catch,switch,case,?:语句与&amp;&amp;,||操作符的总个数来度量。</font></li>
    <li>NPath度量值不大于200 <font color="#3333ff">( III )</font><br />
    解释：NPath度量值表示一个方法内可能的执行路径的条数。</li>
</ul>
<h4><a name="CodingStandards-3.3.3%E5%85%B6%E4%BB%96%E5%BA%A6%E9%87%8F"></a>3.3.3 其他度量</h4>
<ul>
    <li>布尔表达式中的布尔运算符(&amp;&amp;,||)的个数不超过3个<font color="#3333ff">(III)</font>&nbsp;</li>
    <li>if语句的嵌套层数3层以内<font color="#cc6600">(II)</font></li>
    <li>文件长度2000行以内<font color="#cc6600">(II)</font></li>
    <li>匿名内部类20行以内 <font color="#cc6600">( II )</font><br />
    太长的匿名内部类影响代码可读性，建议重构为命名的（普通）内部类。</li>
</ul>
<h3><a name="CodingStandards-3.4JDK5.0"></a>3.4 JDK5.0</h3>
<ol>
    <li>重载方法必须使用@Override，可避免父类方法改变时导致重载函数失效。</li>
    <li>不需要关心的warning信息用@SuppressWarnings("unused"), @SuppressWarnings("unchecked"), @SuppressWarnings("serial") 注释。</li>
</ol>
<h2><a name="CodingStandards-4.%E8%87%AA%E5%8A%A8%E4%BB%A3%E7%A0%81%E6%A3%80%E6%9F%A5"></a>4.自动代码检查</h2>
<p>&nbsp;&nbsp; 使用<span class="nobr"><a title="Visit page outside Confluence" href="http://www.eclipse.org" rel="nofollow">Eclipse<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>与 <span class="nobr"><a title="Visit page outside Confluence" href="http://www.jetbrains.com" rel="nofollow">Inellij IDEA<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>的代码校验功能已经排除了很多问题。</p>
<p>&nbsp;&nbsp; 再配合使用<span class="nobr"><a title="Visit page outside Confluence" href="http://checkstyle.sf.net" rel="nofollow">Checkstyle<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>，<span class="nobr"><a title="Visit page outside Confluence" href="http://pmd.sf.net" rel="nofollow">PMD<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>，<span class="nobr"><a title="Visit page outside Confluence" href="http://findbugs.sf.net" rel="nofollow">FindBugs<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>三重检查，总共五层的校验涵盖了Java编码大部分的Guide Line。</p>
<p>&nbsp;&nbsp; 如果要求不苛刻，可以只使用Eclipse或IDEA 搭配 Checkstyle的两重保湿效果。</p>
<ol>
    <li><strong>Eclipse</strong>：在Windows-&gt;Preferences-&gt;Java-Compiler-&gt;Errors/Warnings中，按本文档将一些原来Ignore的规则打开。<br />
    也可以将springside团队预设在/tools/codereviewer/eclipse.check.prefs的内容拷贝到项目的.setting/org.eclipse.jdt.core.prefs 文件中。</li>
    <li><strong>IDEA</strong>：在Setting-&gt;Errors中设定规则，调用Analyzer-&gt;Inspece Code进行校验。</li>
    <li><strong>CheckStyle</strong>：安装<span class="nobr"><a title="Visit page outside Confluence" href="http://eclipse-cs.sourceforge.net/" rel="nofollow">CheckStyle的Eclipse插件<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>，在Windows-&gt;Preferences-&gt;CheckStyle导入springside团队预设在/tools/codereviewer/springside_check.xml的规则。</li>
    <li><strong>PMD</strong>：安装<span class="nobr"><a title="Visit page outside Confluence" href="http://pmd.sourceforge.net/eclipse/" rel="nofollow">PMD的Eclipse插件<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>，Windows-&gt;Preferences-&gt;PMD清除原来所有规则，导入springside团队预设在/tools/codereviewer/springside_pmd.xml的规则。</li>
    <li><strong>FindBugs</strong>：安装<span class="nobr"><a title="Visit page outside Confluence" href="http://findbugs.sourceforge.net/manual/eclipse.html" rel="nofollow">FindBugs的Eclipse插件<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>，在项目属性-&gt;FindBugs中，取消下列警告MS/EI/EI2/ ，&nbsp;SnVI/SE/WS/RS ，ST/NP/UwF/SS/UuF|UrF|SIC。</li>
</ol>
<h2><a name="CodingStandards-5.%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99"></a>5.参考资料</h2>
<ol>
    <li><span class="nobr"><a title="Visit page outside Confluence" href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html" rel="nofollow">Sun's Coding Conventions<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span> Sun MicroSystem；</li>
    <li><span class="nobr"><a title="Visit page outside Confluence" href="http://www.ambysoft.com/books/elementsJavaStyle.html" rel="nofollow">The Elements of Java Style<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>&nbsp; Scott W. Ambler&nbsp;等著；</li>
    <li>代码检测工具的规则： <span class="nobr"><a title="Visit page outside Confluence" href="http://checkstyle.sourceforge.net/checks.html" rel="nofollow">checkstyle<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span>，<span class="nobr"><a title="Visit page outside Confluence" href="http://pmd.sourceforge.net/rules/index.html" rel="nofollow">pmd<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span> ，<span class="nobr"><a title="Visit page outside Confluence" href="http://findbugs.sourceforge.net/bugDescriptions.html" rel="nofollow">findbugs<sup><img class="rendericon" border="0" alt="" align="absMiddle" src="http://www.blogjava.net/images/icons/linkext7.gif" width="7" height="7" /></sup></a></span></li>
</ol>
<p><span class="nobr"><br />
&nbsp;&nbsp; 文章来自springside官网</span></p>
<img src ="http://www.blogjava.net/freeman1984/aggbug/334234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-10-10 23:48 <a href="http://www.blogjava.net/freeman1984/archive/2010/10/10/334234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的创业体会和大公司的做事比较</title><link>http://www.blogjava.net/freeman1984/archive/2010/10/01/333604.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 01 Oct 2010 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/10/01/333604.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/333604.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/10/01/333604.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/333604.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/333604.html</trackback:ping><description><![CDATA[<p>文章转载自：http://www.javaeye.com/topic/646406<br />
<br />
<br />
</p>
工作五年，一晃已年过三十了。读研时，独立做项目，毕业头三年，主要在大公司工作，后来，也就是08年，半创业。具体点，合伙人吧，自己负责IT部门，到现在6人，公司总共20来人，旅游业。这两年严酷的创业经历，让我越发觉得管理(做事)，以及领导(带人、待人，不是管人)的重要性。因为，随着组织的扩大，混乱度无形中就会增大，管理和领导，就是让这种混乱重归有序，重归单人作战那种意图和行动的高度统一。 <br />
<br />
&nbsp;&nbsp;&nbsp; 说得功利点吧，一个人的财富和其影响力是成正比的。影响力本质上就是对他人的价值。比如，郎_xian_评的出场费一天超过15万。作为技术人员，如果我们只能影响周边几个人，那么我们凭什么拿那么高的报酬，除非我们做的事情影响了很多人，比如杨勃的豆瓣网。所以，我还是觉得，技术人员往高处发展，逐渐应该有管理意识、培养自己的管理能力。技术从书本上可以学到很多，管理还真得实践，书上看到的，你觉得很弱智的问题，比如盲目扩张，自己亲身经历时，一样会犯，也许是行为习惯在起作用，看书不足以改变行为。 <br />
<br />
&nbsp;&nbsp;&nbsp; 回到正题上。 <br />
&nbsp;&nbsp;&nbsp; 也许是自己曾经在较大公司或团队的做事习惯和视野，刚创业时，用在这种小团队的商业项目开发上，几乎惨败。 <br />
&nbsp;&nbsp;&nbsp; 先说项目开发这块吧。 <br />
&nbsp;&nbsp;&nbsp; 大家知道，项目管理和过程管理是两码事，前者关注目标和进度，成本和收益；后者关注做事流程、方法。 <br />
&nbsp;&nbsp;&nbsp; 项目管理，体会最深的，就是目标和任务分解、进度控制，以及沟通。 <br />
<br />
&nbsp;&nbsp;&nbsp; <strong>项目管理软件</strong> <br />
&nbsp;&nbsp;&nbsp; 从大公司出来的人，我想最喜欢玩的，就是借助于项目管理软件(核心是甘特图)。市面上的大多数知名的项目管理软件，无论是桌面版还是网页版的，我都试过。当然最后也选择了一款：ConceptDraw Project，用了一年多，也多少有些用。但最后还是发现，它其实对项目进度和质量关系并不大。也许，一个Excel表格更实用。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 项目管理软件，本质上是解决一种沟通和职责分配的问题。比如，一个项目，折叠成一个三层树形结构，老板只关心第一层，也就是整体进度；中间是项目经理关注的功能层，最后一层，也就是具体的任务，是开发人员关注的。想想，如果没有这玩意，你怎么告诉其它项目干系人进度？但又引出几个问题： <br />
&nbsp;&nbsp;&nbsp; 靠文档来沟通，还是靠信任? 太在乎文档，往往导致每天去关注文档如何漂亮、有说服力，并为此花大量时间，而不是项目如何漂亮。另外，是否有文档就可以防止扯皮、兑现承诺？我们是关于项目目标，还是关注彼此的博弈？ <br />
<br />
&nbsp;&nbsp;&nbsp; 进度偏差 创业型项目，往往都是以前没有接触过，其进度评估往往有很大误差，比如业务需求的挖掘和变化，技术难点，开发人员素质。我们是关注进度，还是关注项目本身的质量？两者都要，但如何兼顾？虽然有方法学，比如砍掉优先级低的，但你怎么让老板相信某个核心功能就得四天时间。 <br />
&nbsp;&nbsp;&nbsp; 在我们的进度设计不合理情况下，是否开发人员完成甘特图(WBS)下的任务就ok？远远不够，任务分得太细，往往限制了开发人员的创造性和自我评估能力，如果提前两天完成呢？ <br />
&nbsp;&nbsp;&nbsp; 我们现在是以项目管理软件为辅，任务的下达主要以邮件传达，每周一上午的周例会会白板宣布。我发现白板比投影仪PPT好用。 <br />
<br />
&nbsp;&nbsp; <strong>关于规范</strong> <br />
&nbsp;&nbsp; 这也是大公司特别喜欢玩的。 <br />
&nbsp;&nbsp; 也许我们前期会制定一个的架构、设计文档，代码规范，这有一个规范建立的时间成本以及规范本书的合理性，再说如果一个开发人员，特别是高手，如果不认同你的设计和规范，你要强推，他要么走人要么怠工。规范的本质是为了协作和后期可维护，如果只有两个人或一个人写某个模块，你觉得有这个必要吗？规范整洁的代码，在项目初期，对用户的价值关系很小，你会关心豆瓣网的js代码写得很漂亮吗？我们应该关注代码的健壮性而不是可维护性，我们不是在开发Windows。 <br />
<br />
&nbsp;&nbsp;&nbsp; <strong>人适应项目，还是项目适应人</strong> <br />
&nbsp;&nbsp;&nbsp; 大公司，往往是来了一个项目，赶快招人，人来适应项目。小公司呢，我现在的看法是，项目适应人。小公司，往往一个项目做砸，公司就面临解散。所以，我认为，最好还是按照开发人员的擅长，保证功能质量，最快的速度上线。另外，为了达成进度，可以在上线初期砍掉不太重要的栏目或功能。 <br />
&nbsp;&nbsp;&nbsp; 我在这个上面栽过跟头的。比如开发人员的擅长，如果他擅长jsp开发模式，而不是Hibernate+Spring的分层开发，就让他按自己的意思做吧。因为，创业型项目都不会太大；即使技术实现你感觉完美了，用户可能感觉不爽；再说，项目开发，涉及到业务调研、需求分析、原型界面、架构、开发、部署、推广。开发，也就是代码实现，占去项目时间，也许不到30%。项目如果证实有商业前景，代码重新实现一遍，花不了多少时间。 <br />
&nbsp;&nbsp;&nbsp; 但我也深深地意识到我们项目管理的级别，就如同CMM1到CMM4。但我还是觉得目前是最好的选择。 <br />
&nbsp;&nbsp;&nbsp; 如果最低层次的用户需求目标都达不到，直接考虑代码怎么有可扩展性、可维护性，对于小公司就是找死。 <br />
&nbsp;&nbsp;&nbsp; 另外，尊重和信任、支持开发人员的技术选择，往往是一种激励、增强团队凝聚力的方式。万众一心，比什么目标、进度更有效、实际。 <br />
&nbsp;&nbsp;&nbsp; 我们应该培养一种团队成员的内部创业心态，而不只是敬业。 <br />
<br />
&nbsp;&nbsp;&nbsp; 在进度把控上，我现在更倾向于强调我们的项目目标和紧迫性，而不是他们的任务。因为我希望大家的关注点是项目，而不是他的上级，他应该对项目负责，而不只是对上级负责。 <br />
<br />
&nbsp;&nbsp;&nbsp; <strong>说说沟通</strong> <br />
&nbsp;&nbsp;&nbsp; 项目管理中最难处理好的，就是沟通。以前，我比较关注于工具，如邮件、文档、ppt讲稿会议，逐渐我关注效率和效能，特别是态度。沟通最基础的就是态度。如果网站上线后，订单提交出现一个核心bug，你是直接找开发人员问责；还是告诉他哪儿出了问题，这个问题的严重，并且自己反省，比如测试流程出了问题。出现这种事情，也许需要负责人举重若轻的气度。但更深层次的，如果负责人能够培养其员工质量意识，危机意识，才是治本。因为一个有强烈质量意识的团队，他自然会去对代码健壮性、功能易用性精益求精，自然会去配合测试流程。 <br />
&nbsp;&nbsp; 刚才那个沟通问题，对开发人员的态度，前者是负面，后者是中立。那么前者，开发人员的反应是如何不让领导下次责怪自己，比如只做领导安排的事情；后者的反应是怎么去改进，不让这样的事情发生。 <br />
&nbsp;&nbsp; 如果你认可创新就可能出错，如果你认可开发人员都是想做好的。那么所有的事情，朝正向发展迈出了最决定性的第一步。 <br />
<br />
&nbsp;&nbsp; <strong>沟通:命令式还是征询式</strong> <br />
&nbsp;&nbsp; 在沟通，特别是下达任务或做决策这类事情上。应该说中国绝大多少管理者都是用命令式。我过去经常在用，但一直在试图改正，改用建议式和征询式。管理者最需要、最难开口的一句话是：Do you think so？命令的方式，经常出现下级不能理解上级的意图，严重的出现抵触。每个人，其实都喜欢别人按自己的想法做事，但你怎么知道自己的想法或决策是对或不是偏颇的，怎么让团队愿意去执行？去征询团队其他成员的意见，让他们参与，往往能够培养其主人翁意识、责任感、向心力，还能够完善自己的想法。但要将员工参与意识，转化为一种习惯，太难。 <br />
&nbsp;&nbsp;&nbsp; 当大家都没有主见时，需要领导者的果断、魄力和强势，但这种机会并不多，而且这种情况，需要团队成员对领导者的信任。 <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <strong>遵守制度，还是建立信任</strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp; 在大公司，往往是告诉你怎么去遵守公司制度。在小公司，我认为最基础、最核心的一件事，就是建立信任，让团队信任你的人品(说到做到)，信任你的能力(能够把大家带到一个新的高度)。建立了信任后，下一步的核心工作，怎么将你的个人目标，也就是团队目标，转化为每个成员的个人目标。 <br />
&nbsp;&nbsp;&nbsp; 有了信任这个基础，才会有了团队建设的第二个核心：激励。 <br />
&nbsp;&nbsp;&nbsp; 是激励，而不是约束、监督，让团队有战斗力。但大公司往往喜欢后者。也许，大公司都是职业经理人，反正是打工，太关注于事。如果说有个所谓的中国式领导，我觉得就是以人为本，对人的尊重。人的关系处理好了，事情就好做。 <br />
&nbsp;&nbsp;&nbsp; 加班、考勤、上网监控，这类对信任、激励极具破坏力的行为，也许是工业型社会对我们这个思考性创造性行业的侵蚀。知识型劳动者，需要一种与体力型劳动者完全不同的管理模式，这种模式也许需要一个从萌芽、生长到成熟期。现在在目前的中国，还只是刚走出萌芽期。 <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 以前完整看过余世维的11套视频，还看过几遍。他那种人本理念我还是很认同，只是，他在大公司、规范公司的做事情方法和风格，完全照搬拿到小公司，非常危险。你能够拿幼儿园那种教育方法来教育成年人吗？小公司不具备大公司那种职业化的环境，也不具备大公司在行业中的市场地位及资金实力。 <br />
&nbsp;&nbsp;&nbsp; 如果说大公司讲究做事方法、流程，如SWOT分析法、BCG矩阵，小公司更看重灵活性、市场适应性。小公司应该适当短视、急功近利，否则在你实施一个三年计划时，第二年还不赚钱可能就撑不下去。 <br />
&nbsp;&nbsp;&nbsp; 所以我觉得，在跨国大企业呆惯了，出来创业很危险。一个是做事方法不适应，另外一个就是没有平台。如果要出来创业，以前那种大企业的经历可能更是一种劣势。 也许有一种情况，你是大公司的高官，拿到一笔很大的风险投资，然后出来创业。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <strong>人事招聘 </strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; <strong>薪水</strong>&nbsp; 如果公司给得起，并且应聘者能力差不多。 就不要太在乎那200、300。虽然说至少要不低于行业平均值（IT人员是IT行业平均值，而不是本公司所在的行业平均值），但最重要的，还是不要低于当事人的期望值，因为最核心的是满意度，而满意度决定于期望值和实际值的差距。对于小公司，往往一个人技术人员的成本和收益，和其工资差距非常大，有可能10倍。所以，我们的关注点，应该是怎么一开始留住这位人才。然后，怎么让其充分发挥潜力。小公司往往不是因为节省那几千几万的工资成本死掉的，而是充分利用这位人才才活下去了。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 另外，不要以为有多少人才选择的机会，小公司往往不受高级人才的青睐。太高级的人才，可能养不起，而且往往太有个性，很难合作愉快，除非在来公司前有很长时间的了解。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 招聘到合适人才后，应该让其忘掉薪水，专注于工作，寻找工作本身的乐趣。当然，要做到让其在薪水上有优越感，也许是项目很盈利的那一天，开始时很难。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; <strong>人才标准</strong> 如果其能力和你预期相差不大的话，更应该考虑其态度、做事风格，甚至是价值观。因为其能力的发挥，和这个环境，特别是他的直接利益相关者，也就是上司，关系太大。如果配合得好，一个人可以顶三个。否则，那种内耗导致的进度延期，由此引起的市场机会丧失，公司财力无法支撑，往往是致命的。因为一个几人的IT团队，每一个人的职责就如同那木桶的一块板，缺了那块都存不了水。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 比如关于质量，更确切说是内容质量，我们目前做旅游电子商务，我认为内容质量很核心。但你招进来的同事，始终认为先要量，什么都可以抄，而我强调质，原创、半原创，可以少而精，而不能多而乱。除开项目进度，怎么去沟通？最好两个人一开始都认同原创的力量。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 提升一个人的技能不难，但改变一个人的态度比较难，改变一个人的价值观几乎不现实。所以先找志同道合的人吧。&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 别期望人才是可替代的。我们不是大公司，我们缺了谁，那一块就不转。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 大家都知道，松耦合要付出代价，比如SOAP协议的低性能，AMF私有协议的高性能。创业期，不要太多考虑人才替换，而是关注怎么发挥人的潜力，留住人，尽快高质量完成项目。人才替换的一个假设，可能是你对自己管理的不自信，因为你不相信自己能够留住人。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 这次就写这么多吧。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 我似乎有这种体会，考大学、四六级这类资格、证书类考试最好混，因为只要勤奋就可以，再加点方法就可以出类拔萃了。&nbsp; 上班也比较好混，说找工作吧，像我搞技术的，本身对技术很狂热，根本就不愁找不到工作，因为面试时我觉得那家伙应该比我牛，正好可以切磋切磋，没想太多所以没啥怯场或不自信。工作吧，如果是技术类，特别是商业软件，技术难度都不大，按上司意思来，很容易搞定。创业呢，自己要做商业判断、业务决策，还要协调若干人的工作(协调的本质是协调利益)。做事和管事，完全是两码事，有些难。不过，创业还是很有意思，因为你可以按自己的意愿去工作去生活，当然也是受限环境的自由。 <br />
<br />
<br />
我将我的一个回复放在这个地方，特示警醒： <br />
<br />
<div class="quote_title">引用</div>
<div class="quote_div">告诫各位处于开发第一线的朋友，千万不要受本文的误导，把规范和设计文档不当回事。 <br />
<br />
我的看法： <br />
1、文档的多少和深度决定于项目环境。 <br />
&nbsp;&nbsp;&nbsp; 如果是大项目，比如二三十开发人员，架构文档、需求文档、代码规范等都是必须，否则开发人员不能迅速了解项目技术和业务特点，从而无法快速开发，也即是规范可以降低培训成本和团队沟通；另外，项目开发中后期可能根本不可控，谁都看不懂其它人的代码。部署时看到的一些bug无法及时修复，因为到处都有地雷。我以前经历过这样的项目，最后加班都没用。 <br />
<br />
&nbsp;&nbsp;&nbsp; 如果是产品型，规范更重要。当然我说的产品可能是2.0版以后，因为这时候的产品基本得到了市场的认可。而在初版时，代码写得烂都没关系，因为你不不知道用户会不会买单，也不知道能否按进度开发完成。而在后续版本，如果没有规范文档，维护的成本都不亚于重新开发。特别是处于一线的开发人员会怨声载道：为什么要我来收拾残局？那么，这样的士气，开发效率怎么会高，项目质量怎么会高？ <br />
<br />
2、成熟型大公司那套做事流程，可能高手受不了，但可能是最优的方案。因为，到项目后期维护，往往只是一些业务功能的删减改进，不需要技术高手，这个过程可能漫漫几年，项目维护成本会非常高，雇佣高手一来他不愿意干二来也不需要这种人，如果项目代码还维持在一种&#8220;秩序&#8221;，初中级开发人员就可以胜任，有什么不好呢？ <br />
&nbsp;&nbsp; 项目上线时，是为了追求利润。项目维护期，是为了省成本。 <br />
<br />
3、刚入道的朋友，最好是按规范来，就像学武术，先要学套路。否则，养成的编程坏习惯，比如文件名叫Aaa1.java，代码没有缩进。过几年非常难改。而好的编程习惯，可以提升开发效率，还能让自己思维清晰。 <br />
&nbsp;&nbsp; 学技术阶段，一定要注意代码的可维护性、健壮性及灵活性，只有养成对代码精益求精的态度，你才可能成为技术高手。技术学好，做技术管理就有了基础，而且别人也会服你。</div>
<img src ="http://www.blogjava.net/freeman1984/aggbug/333604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-10-01 11:09 <a href="http://www.blogjava.net/freeman1984/archive/2010/10/01/333604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UML用例图</title><link>http://www.blogjava.net/freeman1984/archive/2010/09/25/332818.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sat, 25 Sep 2010 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/09/25/332818.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/332818.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/09/25/332818.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/332818.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/332818.html</trackback:ping><description><![CDATA[<span>前些时间参加了潘加宇老师的技术讲座，</span><span>UML</span><span>建模技术受益匪浅。我也把平时的一些积累和上次的收获总结在这篇文章中，主要讲解用例图相关的知识。</span><span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>用例图是软件需求分析到最终实现的第一步，它描述用户如何使用系统及使用系统什么样的功能。用例图从业务角度上体现谁来使用系统、用户希望系统提供什么样的服务，以及用户需要为系统提供的服务，也便于软件开发人员最终实现这些功能。用例图在开发中被广泛的应用，但是它最常用来描述系统提供了什么样的功能给什么样的用户使用。</span><span><br />
</span>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>在官方文档中用例图包含六个元素，分别是：执行者</span><span>(Actor)</span><span>、用例</span><span>(Use Case)</span><span>、关联关系</span><span>(Association)</span><span>、包含关系</span><span>(Include)</span><span>、扩展关系</span><span>(Extend)</span><span>以及泛化关系</span><span>(Generalization)</span><span>。但是有些</span><span>UML</span><span>的绘图工具多提供了一种直接关联关系</span><span>(DirectedAssociation)</span><span>。</span><span><br />
</span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>用例图可一个包含注释和约束，还可一个包含包，用于将模型中的元素组合成更大的模块。有时，可以将用例的实例引入到图中。用例图模型如下所示，执行者用人形图标来标识，用例用椭圆来表示，连线表示它们之间的关系。</span><span><br />
</span></span></p>
<p>&nbsp;<br />
&nbsp;</p>
<p><span><strong><span>一、执行者（</span><span>Actor</span><span>）</span></strong><span><br />
</span></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span> 1</span><span>、执行者概念</span><span><br />
</span></strong></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>是指用户在系统中扮演的角色。如图</span><span>1-1</span><span>是一个用户管理的用例图，图中的用户、管理员就是用例的执行者。</span><span><br />
</span></span></p>
<p><img alt="" src="http://www.alisdn.com/wordpress/wp-content/uploads/2009/03/030609-0708-uml1.png" /><span><br />
</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>图</span><span>1-1<br />
</span></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</span><span>、从业务中找出执行者</span><span><br />
</span></strong></span></p>
<p><span><span><strong>&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span>获取系统用例首先要找出系统的执行者。我们可以通过用户回答一些问题的答案来识别执行者。可以参考以下问题：<br />
</span></span></p>
<ol>
    <li><span>谁使用系统的主要功能（主要使用者）？<br />
    </span></li>
    <li><span>谁需要系统支持他们日常工作？<br />
    </span></li>
    <li><span>谁来维护、管理系统使其正常工作（辅助使用者）？<br />
    </span></li>
    <li><span>系统需要控制哪些硬件？<br />
    </span></li>
    <li><span>系统需要其他哪些系统交互？这里包含其他计算机系统或者应用程序。<br />
    </span></li>
    <li><span>对系统产生结果感兴趣的是哪些人和哪些事物？<br />
    </span></li>
</ol>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</span><span>、执行者之间关系</span><span><br />
</span></strong></span></p>
<p><span><span>因为执行者是类，所以多个执行者之间可以具有与类相同的关系。在用例图中，使用了泛化关系来描述多个执行者之间的公共行为。如果系统中存在几个执行者，它们既扮演自身的角色，同时也扮演更具一般化的角色，那么就用泛化关系来描述它们。这种情况往往发生在一般角色的行为在执行者超类中描述的场合。特殊化的执行者继承了该超类的行为，然后在某些方面扩展了此行为。执行者之间的泛化关系用一个三角箭头来表示，指向扮演一般角色的超类。这与</span><span>UML</span><span>中类之间的返还关系符号相同。图1-2<br />
</span></span></p>
<p><img alt="" src="http://www.alisdn.com/wordpress/wp-content/uploads/2009/03/030609-0708-uml2.png" /><span><br />
</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>图1-2<br />
</span></span></p>
<p>&nbsp;</p>
<p><span><strong><span>二、用例（</span><span>Use Case</span><span>）</span></strong><span><br />
</span></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span><span>、用例概念</span><span><br />
</span></strong></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>用例就是外部可见的系统功能，对系统提供的服务进行描述。</span><span><br />
</span></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</span><span>、从业务中找出用例</span><span><br />
</span></strong></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>找出系统的用例，我们从执行者入手，对每个执行者提出一些问题，然后从执行者对这些问题的答案中获取用例。可以参考以下问题：</span><span><br />
</span></span></p>
<ol>
    <li><span>执行者要求系统提供哪些功能（执行者需要做什么）？<br />
    </span></li>
    <li><span>执行者需要读、产生、修改、删除或者存储系统中的信息有哪些类型？<br />
    </span></li>
    <li><span>执行者必须提醒系统事件有哪些？把这些事件表示成系统用例。<br />
    </span></li>
</ol>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</span><span>、用例之间关系</span></strong><span><br />
</span></span></p>
<p><span><strong><span>二、用例之间关系</span><span><br />
</span></strong></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</span><span>、关联关系（</span><span>Association</span>）<br />
</strong></span></p>
<p><span><span>关联关系是连接执行者和用例，表示该执行者代表的外部系统实体与该用例描述的系统需求有关。</span><span><br />
</span></span></p>
<p><img alt="" src="http://www.alisdn.com/wordpress/wp-content/uploads/2009/03/030609-0708-uml3.png" /><span><strong><br />
</strong></span></p>
<p><span>图1-3<br />
</span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</span>、包含关系（<span>Include</span>）<br />
</strong></span></p>
<p><span>包含关系是来自于用例的抽象，即从数个不同的Use Case中，分离出公共的部分，而成为可以复用的用例。<br />
</span></p>
<p><img alt="" src="http://www.alisdn.com/wordpress/wp-content/uploads/2009/03/030609-0708-uml4.png" /><span><strong><br />
</strong></span></p>
<p><span><span>图</span><span>1-4<br />
</span></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</span>、扩展关系（<span>Extend</span>）<br />
</strong></span></p>
<p><span><strong>&nbsp;&nbsp;&nbsp;&nbsp;</strong>扩展关系表示某一个用例的对话流程中，可能会根据条件临时插入另外一个用例，而前者称为基础用例后者称为扩展用例。<br />
</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.alisdn.com/wordpress/wp-content/uploads/2009/03/030609-0708-uml5.png" /><br />
</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图1-5<strong><br />
</strong></span></p>
<p><span><strong>4、泛化关系（<span>Generalization</span>）<br />
</strong></span></p>
<p><span><strong>&nbsp;&nbsp;&nbsp;&nbsp;</strong>一个用例可以被特别列举为一个或多个用例，这被称为用例泛化，如果系统中一个或多个用例是某个一般用例的特殊化时，就需要使用用例的泛化关系。<br />
</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.alisdn.com/wordpress/wp-content/uploads/2009/03/030609-0708-uml6.png" /><strong><br />
</strong></span></p>
 <img src ="http://www.blogjava.net/freeman1984/aggbug/332818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-09-25 14:22 <a href="http://www.blogjava.net/freeman1984/archive/2010/09/25/332818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UML中几种类间关系：继承、实现、依赖、关联、聚合、组合的联系与区别</title><link>http://www.blogjava.net/freeman1984/archive/2010/09/25/332815.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sat, 25 Sep 2010 06:19:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/09/25/332815.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/332815.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/09/25/332815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/332815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/332815.html</trackback:ping><description><![CDATA[<p>&nbsp;转载自：<a href="http://blog.csdn.net/sfdev/archive/2009/02/18/3906243.aspx">http://blog.csdn.net/sfdev/archive/2009/02/18/3906243.aspx</a><br />
这是一堂关于UML基础知识的补习课；现在我们做项目时间都太紧了，基本上都没有做过真正的class级别的详细设计，更别提使用UML来实现规范建模了；本篇主要就以前自己一直感觉很迷糊的几种class之间的关系进行整理，让我们在真正用UML进行比如类图设计时能够更加清晰明了；以下就分别介绍这几种关系：</p>
<h3>继承</h3>
<p>指的是一个类（称为子类、子接口）继承另外的一个类（称为父类、父接口）的功能，并可以增加它自己的新功能的能力，继承是类与类或者接口与接口之间最常见的关系；在Java中此类关系通过关键字extends明确标识，在设计时一般没有争议性；<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/sfdev/EntryImages/20090218/Generalization.jpg" width="293" height="204" /></p>
<h3>实现</h3>
<p>指的是一个class类实现interface接口（可以是多个）的功能；实现是类与接口之间最常见的关系；在Java中此类关系通过关键字implements明确标识，在设计时一般没有争议性；<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/sfdev/EntryImages/20090218/Realization.jpg" width="121" height="203" /></p>
<h3>依赖</h3>
<p>可以简单的理解，就是一个类A使用到了另一个类B，而这种使用关系是具有偶然性的、、临时性的、非常弱的，但是B类的变化会影响到A；比如某人要过河，需要借用一条船，此时人与船之间的关系就是依赖；表现在代码层面，为类B作为参数被类A在某个method方法中使用；<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/sfdev/EntryImages/20090218/Dependence.jpg" width="430" height="97" /></p>
<h3>关联</h3>
<p>他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系，比如我和我的朋友；这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的，一般是长期性的，而且双方的关系一般是平等的、关联可以是单向、双向的；表现在代码层面，为被关联类B以类属性的形式出现在关联类A中，也可能是关联类A引用了一个类型为被关联类B的全局变量；<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/sfdev/EntryImages/20090218/Association.jpg" width="430" height="105" /></p>
<h3>聚合</h3>
<p>聚合是关联关系的一种特例，他体现的是整体与部分、拥有的关系，即has-a的关系，此时整体与部分之间是可分离的，他们可以具有各自的生命周期，部分可以属于多个整体对象，也可以为多个整体对象共享；比如计算机与CPU、公司与员工的关系等；表现在代码层面，和关联关系是一致的，只能从语义级别来区分；<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/sfdev/EntryImages/20090218/Aggregation.jpg" width="430" height="108" /></p>
<h3>组合</h3>
<p>组合也是关联关系的一种特例，他体现的是一种contains-a的关系，这种关系比聚合更强，也称为强聚合；他同样体现整体与部分间的关系，但此时整体与部分是不可分的，整体的生命周期结束也就意味着部分的生命周期结束；比如你和你的大脑；表现在代码层面，和关联关系是一致的，只能从语义级别来区分；<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/sfdev/EntryImages/20090218/Composition.jpg" width="430" height="106" /></p>
<p>对于继承、实现这两种关系没多少疑问，他们体现的是一种类与类、或者类与接口间的纵向关系；其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系，是比较难区分的，有很多事物间的关系要想准备定位是很难的，前面也提到，这几种关系都是语义级别的，所以从代码层面并不能完全区分各种关系；但总的来说，后几种关系所表现的强弱程度依次为：组合&gt;聚合&gt;关联&gt;依赖；</p>
 <img src ="http://www.blogjava.net/freeman1984/aggbug/332815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-09-25 14:19 <a href="http://www.blogjava.net/freeman1984/archive/2010/09/25/332815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给敏捷团队中的架构师的10个建议</title><link>http://www.blogjava.net/freeman1984/archive/2010/09/24/332754.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 24 Sep 2010 05:13:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/09/24/332754.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/332754.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/09/24/332754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/332754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/332754.html</trackback:ping><description><![CDATA[<p>微软澳大利亚的解决方案架构师Tom Hollander，在TechEd Australia大会上举行了一场题为&#8220;<a id="xgik" title="敏捷团队中的架构师角色" href="http://www.msteched.com/2010/Australia/ARC204">敏捷团队中的架构师角色</a>&#8221;的演讲。在演讲中，他讨论了他作为领导敏捷团队的架构师所做的工作。</p>
<p>在谈到架构师的角色时，Hollander指的是&#8220;解决方案架构师&#8221;或者应用架构师。他不是指企业架构师或者其他的专业人士（专精于特定的领域，例如消息或基础设施）。</p>
<p>Hollander的团队采纳了由4周迭代以及最后的稳定阶段（几天代码冻结的时间）组成的流程，实施了每日站立会议、每日构建与自动化测试的持续集成等实践，并采用了许多角色： </p>
<ul>
    <li><strong>PjM</strong>——项目经理，类似于Scrum Master，确保团队遵循了流程
    <li><strong>PdM</strong>——产品经理，也被称为客户或Product Owner，决定产品应该是什么样子
    <li><strong>架构师</strong>——解决方案/应用架构师
    <li><strong>开发人员</strong>——开发团队
    <li><strong>测试人员</strong>——测试团队
    <li><strong>用户体验设计人员</strong>（<strong>UX</strong>）——用户体验团队
    <li><strong>发布人员</strong>——承担构建和发布的职责，负责维护构建的流程 </li>
</ul>
<p>Hollander针对解决方案架构师如何在敏捷团队中取得成功，提出了最重要的十件事情：</p>
<ol>
    <li><strong>&#8220;正好足够&#8221;的预先设计</strong>——除了非常简单的项目，一定时间的预先设计（例如，1到2周）是绝对必要的，其时间长短会取决于应用的类型——网络应用程序、智能客户端（smart client）、移动或批处理，基本的功能需求是什么，是长期的解决方案抑或是折衷的、暂时的方案，都要弄清楚。预先设计的目的是要决定：使用什么技术——例如，ASP.NET或MVC，应用程序是什么类型——2层、3层抑或是面向服务的应用，如何访问数据库——存储过程、实体框架、LINQ、依赖注入（DI）。一篇简短的文档就可以包含所有这些信息以供大家参考。
    <li><strong>从垂直分片开始</strong>——是指从一小块功能开始（例如登录页面），尽可能地在垂直方向把它切分为很多层，从而把前一阶段所决定的所有技术结合在一起。这将验证设计决策的正确性，而且所有的技术可以一起工作，并且将向开发者展示在开发新代码时可以遵循的模式。如果发现最初的设计决策不当，此时是一个合适的修改时间。
    <li><strong>在每次迭代中的Just-in-time设计</strong>——在每个4周迭代的中段，项目经理、产品经理和架构师应该聚在一起讨论在下一个迭代中要完成的需求，确保他们每一位都同意这些需求，重要性更高的事情放在了前面处理，而且每个人对一切事情都非常清楚。这些讨论在当前迭代中会以不太明显的方式延续一个星期。接下来的一周，也即当前迭代的最后一周，架构师复审下一次迭代的需求，作出必要的设计决策，以便团队可以在下一个星期基于这些决策开展工作。如果需求与以往相当不同，那么，架构师会开发一些原型，编写一些代码来证明概念，绘制一些图表，然后把所有这些东西集编为5页的文件以供参考。这不是为了制定出有利于开发人员的详细设计方案，而是要确保新的需求满足全局的要求。
    <li><strong>信任你的团队...但要跟他们在一起</strong>——这关乎架构师与开发人员的关系。架构师需要确保他没有逾越自己的角色，没有独占所有&#8220;做决定&#8221;的乐趣，使得开发人员的工作变得无聊。与此同时，架构师需要给团队提供指导，解决那些可能会导致开发人员停顿的困难问题。架构师每天都应该与每位开发人员接触，获悉他们在做什么，并且在他们遇上编程问题的时候给予帮助。特别是当开发人员不喜欢寻求帮助，试图花上整整一个礼拜的时间来自行解决问题的时候，这种帮助尤为需要。这种关系也适用于PjM和测试/构建/发布团队。
    <li><strong>编写代码！</strong>——架构师应该知道代码的质量如何，这样才会对他做出的决定所产生的影响有更好的理解。他也可以整明白何时重构是必须的。 编写代码的架构师在开发团队中有更好的声誉。也就是说，Hollander并不认同（设计和开发）职责的泾渭分明。他还认为，架构师仍然是架构师，他不一定要像普通的开发人员一样擅长于编写代码。
    <li><strong>参与一切</strong>——架构师参与所有与项目有关的会议：设计、开发、代码评审、需求规划等，这是有好处的，因为他能够以更广阔、更清晰的视角看待正在发生的事情，而且他能够通过告知产品经理其决定的潜在后果，从而帮助他/她避免在早期阶段做出错误的决定。
    <li><strong>推动质量文化</strong>——一个成功的团队，一个人人都想成为其中一分子的团队，是建立在质量文化之上的：没有人偷工减料；没有人提交拙劣代码；如果设计中有一个重大的缺陷，它绝不会不知不觉地混过关；所有人都是诚实和开放的，寻求整个团队达到最佳的结果。Hollander承认，建立这样一个团队很难，但并非不可能。首先，架构师应该在一开始就创建一些规则，这些规则不会因为开发人员不喜欢就随着时间而改变。比如决定编写单元测试，再比如在每次提交以前都要进行代码评审，包括由架构师提交的代码。如果评审人员（可以是团队中的任意一位）不认可代码，代码就不能提交。
    <li><strong>知道何时需要改变</strong>——架构师应该非常灵活，随时准备好在设计需要改变的时候去改变设计。早期的解决方案也许不再适合，抑或是新的需求需要不同的方法。
    <li><strong>屏蔽来自外部的随机请求</strong>——虽然这通常是项目经理/Scrum master的职责，但架构师可以保护团队不受外部请求的影响，这些影响往往会分散团队的精力和浪费真正工作的时间。举个例子：业务团队可能想要以某种特定的方式完成某些特定的事情，而他们的请求并不全然合理，也并不是必须实现。&nbsp;
    <li><strong>撰写文档...但只有当有人需要阅读它们的时候</strong>——Hollander并不提倡记录一切，也不提倡根本不撰写任何文档。他认为有必要取得一个平衡——只编写一定数目真正有帮助的、有人会去阅读的文档。文档在记录详细设计的决定（比如数据模型）方面是很好的载体。迭代的设计决定，虽然它们由整个团队在迭代开始之初讨论得出，但我们仍然建议将它们记录在5页的文档之中，以备开发人员日后不记得架构师言论的时候进行查阅。而当最开始的开发人员和架构师离开项目、加入其他项目之后，新加入项目工作的人也能借助于这些文档理解某些决定的来龙去脉。&nbsp; </li>
</ol>
<p>综上所述，Hollander指出，架构师应该确保他从理论上和实践上都是团队的一分子。架构师不应该编写所有的代码，而只是其中一小部分，他不去测试或部署这些代码，但他要确保整个流程的顺利进行。<br />
转载自：http://www.infoq.com/cn/news/2010/09/Tips-Architect-Agile-Team</p>
<img src ="http://www.blogjava.net/freeman1984/aggbug/332754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-09-24 13:13 <a href="http://www.blogjava.net/freeman1984/archive/2010/09/24/332754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>需求问题排查</title><link>http://www.blogjava.net/freeman1984/archive/2010/09/23/332713.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Thu, 23 Sep 2010 15:02:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/09/23/332713.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/332713.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/09/23/332713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/332713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/332713.html</trackback:ping><description><![CDATA[<p>在平常的工作中，我们总是会说需求不够明确，这是一种很笼统的说法，是我们对一份需求文档抽象的评价，其中包含的含义可能是如下情况：需求存在二义性、需求不明确、需求不完整、需求不正确，等等。<br />
当我们反馈问题的时候，仅仅反馈需求不明确或者需求质量不好，是没有意义的，我们必须明确的指出具体的问题所在，这样才有利于需求的完善和质量提升。下面就需求二义性、需求正确性、需求完整性几个方面进行说明。<br />
一.需求二义性<br />
需求描述的二义性一方面是指不同读者对需求说明产生了不同的理解；另一方面是指同一读者能用不同的方式来解释某个需求说明。<br />
在需求阅读过程中，只要是不能够明确清晰理解的内容，都需要提出来，让PD给予确认修改。如某需求文档中对商品价格的描述，在不同的地方分别使用了价格、单价，这就很容易引导读者以为是两个概念。</p>
<p>二.需求正确性<br />
需求文档描述的内容，除了要求清晰的，还要保证内容是正确的。我们可以从以下方面进行检查：<br />
1.功能是否正确合理<br />
任何一个需求都不会凭空而降，都有它背后的理由。考虑问题的时候换位思考，运营/pd推出该需求的动机是什么，明白了背景，再去思考需求是否能满足背景要求，是否有损害到真正用户的利益。<br />
2.与现有系统业务是否冲突矛盾<br />
如果需求是和现有的业务紧密联系的，需要对现有业务进行一个梳理，确认新的需求不会和已有的功能是冲突矛盾的，或者与原有的业务意图是背离的。<br />
3.用户对象是否正确<br />
用户对象，会涉及到用户权限的问题，主要是看功能涉众描述是否正确，避免错乱和遗漏。</p>
<p>三.需求完整性<br />
需求完整性包含描述不细致、不完整和缺失。<br />
1.需求不细致<br />
需求文档对一个功能点进行了描述，但是颗粒过于粗糙，细节信息没有被传递。比较常见的是页面元素的处理。比如这样的一个描述说明：点击网点名称，打开网点详细信息。网点详细信息页面需要输出哪些内容是不明确的，面对这样一个需求，开发可以根据自己的理解对信息进行输出，但是可能会与PD的预期有出入。<br />
2.需求不完整<br />
不完整是指需求文档有说明，但是没有给出明确定义说明。比如某个PRD文档中，有文字提及下单模式有预付金下单和非预付金下单，但文档中有详细描述的只有预付金下单，非预付金下单还没有来得露脸就消失了，让读者完全搞不懂这是一种什么样的下单模式。<br />
3.需求缺失<br />
需求缺失则是彻底的遗漏，整个文档都没有出现，又可分为业务规则缺失和功能缺失。要找出需求缺失问题，必须熟读需求文档。<br />
查找业务规则缺失问题，需要有业务基础，对现有的相关业务知识进行学习了解，对需求的背景进行剖析，在明确需求目的前提下，对需求已经提及的业务规则分析，查找是否有遗漏。<br />
查找功能缺失问题，可以通过画系统功能模块框架图和活动图，明确各个功能是否能完整的流转，如果有数据是不能到达终点的，则是存在缺失的功能点。<br />
&nbsp;<br />
原文地址：<a href="http://qa.taobao.com/&#8216;http://qa.taobao.com/?p=8781&#8217;">http://qa.taobao.com/?p=8781</a><br />
<br />
&nbsp;&nbsp;&nbsp; </p>
<img src ="http://www.blogjava.net/freeman1984/aggbug/332713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-09-23 23:02 <a href="http://www.blogjava.net/freeman1984/archive/2010/09/23/332713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>敏捷开发中编写高质量Java代码</title><link>http://www.blogjava.net/freeman1984/archive/2010/09/05/331072.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sun, 05 Sep 2010 04:20:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/09/05/331072.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/331072.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/09/05/331072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/331072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/331072.html</trackback:ping><description><![CDATA[<p>转载自：csdn http://sd.csdn.net/a/20100308/259219.html<br />
敏捷开发的理念已经流行了很长的时间，在敏捷开发中的开发迭代阶段中，我们可以通过五个步骤，来有效的提高整个项目的代码质量。</p>
<p>Java项目开发过程中，由于开发人员的经验、Java代码编写习惯，以及缺乏统一的标准和管理流程，往往导致整个项目的代码质量较差，难于维 护，需要较大的测试投入和周期等问题。这些问题在一个项目组初建、需求和设计均具有不完全可预期性和完备性的全新项目中将尤为突出。</p>
<p>如图1所示，敏捷开发过程经历需求调研，用例分析和用例分解，进入开发迭代阶段。在每个迭代过程中，可以采用以下步骤来保证和提高整个项目的代 码质量：统一编码规范、代码样式;静态代码分析(staticcodereview);单元测试;持续集成;代码评审和重构 (Review&amp;Refactor)。下文将针对每个步骤和其所使用的工具、方法进行详细描述。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="323" alt="敏捷开发中的Java代码质量保证步骤" src="http://articles.csdn.net/uploads/allimg/100308/103A44647-0.jpg" width="498" /></p>
<p style="text-align: center" align="center">图1.敏捷开发中的Java代码质量保证步骤</p>
<p><strong>步骤一：统一编码规范、代码样式</strong></p>
<p>规范统一的编码会增加项目代码的可读性和可维护性，但实际情况往往是项目组内的Java代码开发人员的编码风格常常各不相同，这可能是由于不同 的经验习惯或者缺乏编码规范方面的学习造成的。这样一来，其他项目成员或者维护人员在阅读项目代码时就需要花费更多的时间来理解代码作者的意图，所以制定 并采取统一的编码规范就显得很重要。编码规范主要应包含以下几个方面：</p>
<p>◆一般规则和格式规范。例如代码缩进、程序块规范、每行最大代码长度等。</p>
<p>◆命名规则。例如包名、类名、变量、方法、接口、参数等命名规范</p>
<p>◆文档规范。例如类文件头声明、类注释、成员变量和方法注释等规范。</p>
<p>◆编程规范。例如异常、并发、多线程等方面的处理方式。</p>
<p>◆其他规范。例如日志格式、属性文件格式，返回值和消息格式。</p>
<p>项目的编码规范可以参考已有的一些Java编程规范书籍和其他相关资料并结合项目的本身来制定，可供参考的书籍有《Java编程风格》(英文书 名为：TheElementsofJavaStyle)。编码规范要形成文档，而且要简洁明了，并组织项目成员一起学习，确保所有成员正确理解所有条目。</p>
<p>一旦编码规范确定，就可以利用Eclipse自身提供的功能来控制代码样式和格式。具体做法是，点击Eclipse的 Windows-&gt;Preference菜单项，在打开的Preferences<span style="text-decoration: underline">对话</span>框的左侧栏中找到Java节点下的子项CodeStyle(如图2)，该项 和它的子项允许您对Java代码的样式进行控制。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="394" alt="Eclipse代码样式设置窗口" src="http://articles.csdn.net/uploads/allimg/100308/103A42306-1.jpg" width="498" /></p>
<p style="text-align: center" align="center">图2.Eclipse代码样式设置窗口</p>
<p>例如，为了使用自动格式化工具，可以在Eclipse提供的默认代码格式配置的基础上建立自定义的格式。在Formatter面板中，点击 New，输入新的名字并选择一个默认的配置作为初始化格式，如图3所示。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="468" alt="创建新的代码格式配置" src="http://articles.csdn.net/uploads/allimg/100308/103A4Mc-2.jpg" width="498" /></p>
<p style="text-align: center" align="center">图3.创建新的代码格式配置</p>
<p>单击OK后就可以在新打开的窗口中进行修改定制自己需要的格式。如图4所示。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="515" alt="创建新的代码格式配置" src="http://articles.csdn.net/uploads/allimg/100308/103A42501-3.jpg" width="498" /></p>
<p style="text-align: center" align="center">图4.创建新的代码格式配置</p>
<p>修改完成后点击Apply保存所作修改。同时可以点击Export将当前的格式定义导出成一个XML文件，这样项目组的其他成员就可以很方便通 过点击图3中的Import按钮来导入该XML文件来使用同一个代码格式定义。</p>
<p>这样每次在提交代码到版本控制<span style="text-decoration: underline">服务器</span>前就可以通过Eclipse界面里的Source-&gt;Format菜单来对代码进行格式化，从而 使整个项目的代码具有相同的格式。同样可以通过对CodeStyle下的其他项目进行设置来帮助对Java代码的样式进行控制。将所有这些样式文件导出成 XML文件后，同编码规范一起归档，供所有项目成员使用。</p>
<p><strong>步骤二：静态代码分析</strong></p>
<p>在完成源代码的开发以后，下面要进行的工作就是审视和测试代码。除了通过运行测试代码来检查功能之外，还能利用一些静态分析工具来快速、直接地 提高代码质量。静态代码分析工具并不需要运行代码，可以直接对Java文件和Class文件进行分析，通过一些检查条件的设置，快速找到代码中的错误和潜 在缺陷。现在的静态分析工具很多，有FindBugs、PMD、IBMRationalTool，等等。在这里，选择FindBugs作为静态代码分析工 具。FindBugs可以和日常开发工具Eclipse进行集成，在开发过程中，就可以方便的开始静态代码的检查。通过检查Class文件或者JAR文 件，将字节码和一组缺陷模式进行对比，来发现可能存在的代码问题。在Eclipse的开发环境中，用插件安装的方式安装了Findbugs后，在 Eclipse的配置选项中就会多出来FindBugs的配置选项。可以对自己的项目进行配置，选择需要的Detector检查代码。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="570" alt="FindBugs的配置选项" src="http://articles.csdn.net/uploads/allimg/100308/103A43B0-4.jpg" width="498" /></p>
<p style="text-align: center" align="center">图5.FindBugs的配置选项</p>
<p>设置好自己的规则后，在需要检查的代码文件夹上点击右键，就可以启动FindBugs检查。代码可以是一个项目，也可以只是几个文件。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="118" alt="运行FindBugs" src="http://articles.csdn.net/uploads/allimg/100308/103A46139-5.jpg" width="458" /></p>
<p style="text-align: center" align="center">图6.运行FindBugs</p>
<p>检查完毕后，会出现FindBugs视图，把所有检查的结果根据错误分组展示。点击结果里面的每一个错误，会自动打开对应的代码。当根据规则改 正了所有的错误，或者说潜在错误，这些代码也就通过了静态代码检查。FindBugs的检查结果可以是XML文件，也可以是文本文件，便于项目的集成管理 和检查保存。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="185" alt="FindBugs检查结果" src="http://articles.csdn.net/uploads/allimg/100308/103A4K53-6.jpg" width="434" /></p>
<p style="text-align: center" align="center">图7.FindBugs检查结果</p>
<p style="text-align: center" align="center"><strong>步骤三：单元测试</strong></p>
<p><strong>单元测试用例设计和评审</strong></p>
<p>单元测试是软件开发过程中重要的质量保证环节，在此环节中，设计和评审对于保证整个单元测试过程的完整性和有效性来说十分重要。设计阶段需要具 体考虑要对哪些代码单元进行测试，被测单元之间的关系，测试策略，以及单元测试用例设计等，并最终输出《单元测试用例设计》文档，用来指导具体的单元测试 执行。在用例设计中，通过对代码单元输入和期待输出的定义来保证该单元的功能正确性，边界值的测试和异常测试非常重要。同时也配合测试用例和功能块的匹配 方法来衡量用例设计的完整性。</p>
<p>在用例设计完成之后，下一步的工作就是进行测试用例的评审。个人的理解和经验始终是有限的，用例评审可以借集体之力，对用例设计进入查漏补缺， 进一步保证测试用例的有效性。由于单元测试属于白盒测试范畴，它主要通过对代码的逻辑结构进行分析来设计测试用例，因此，评审员的选择最好以理解代码逻辑 结构为前提，如果评审员来自相关<a class="fllink" href="http://www.chinabyte.com/keyword/%E6%A8%A1%E5%9D%97/" target="_blank">模块</a>，还能够有效的发现模块相关性和依赖性所带来的问题。</p>
<p><strong>模拟对象技术</strong></p>
<p>在实际项目中，开发人员自己的代码往往需要和其他的代码模块或系统进行交互，但在测试的过程中，这些需要被调用的真实对象常常很难被实例化，或 者这些对象在某些情况下无法被用来测试，例如，真实对象的行为无法预测，真实对象的行为难以触发，或者真实对象的运行速度很慢。这时候，就需要使用模拟对 象技术(Mock)，利用一个模拟对象来模拟我们的代码所依赖的真实对象，来帮助完成测试，提高测试覆盖率，从而提高代码质量。模拟对象技术利用了在面向 接口的编程中，由于代码直接对接口进行调用，所以代码并不知道引用的是真实对象还是模拟对象，这样就可以顺利的完成对代码的测试，模拟技术有很多种，如 jMock，EasyMock，Mockito，PowerMock等等。其中Mockito消除了对期望行为的需求，避免了这些代码的大量初始化。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="199" alt="Mockito示例" src="http://articles.csdn.net/uploads/allimg/100308/103A43506-7.jpg" width="473" /></p>
<p style="text-align: center" align="center">图8.Mockito示例</p>
<p>在模拟对象过程中，先模拟一个需要调用的List对象LinkedList，再设定这个对象的行为，当调用get(0)的时候，返 回&#8221;first&#8221;。这样，测试代码就可以利用这个对象来测试我们的功能代码，需要调用和返回值的时候，可以顺利的得到模拟对象的返回值。也需要对模拟对象 进行错误情况的模拟，保证代码对错误的处理的正确性。</p>
<p><strong>测试覆盖率分析</strong></p>
<p>为了衡量单元测试的质量和覆盖的范围，需要对单元测试的代码进行测试覆盖分析。常用的衡量测试覆盖率的指标主要有语句覆盖率、分支覆盖率、路径 覆盖率、条件覆盖率和方法覆盖率等。具体采用哪些指标可以根据项目的实际情况来定，以避免因过高的指标增加了代码开发人员的工作量而影响了项目整体的进 度。</p>
<p>EMMA是一款比较流行的开源Java测试覆盖率分析工具，支持类、方法、代码行、基本代码块等多种类型的测试覆盖率分析，支持将覆盖率分析结 果导出为多种格式的报告，并采用多种颜色来高亮显示不同的覆盖率状态。EclEmma是一款基于EMMA的Eclipse插件，方便在 EclipseIDE中进行测试覆盖率分析。如图9，在测试用例写好后，可以在右键点击测试类，选择CoverageAs-&gt;JUnitTest。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="280" alt="运行测试覆盖分析" src="http://articles.csdn.net/uploads/allimg/100308/103A41U8-8.jpg" width="498" /></p>
<p style="text-align: center" align="center">图9.运行测试覆盖分析</p>
<p>单元测试跑完后，Coverage视图中会显示所选择的测试的覆盖率。双击打开某一具体的类后，可以看到高亮显示的覆盖分析结果，如图10所 示。红色代表测试没有覆盖到该行，黄色表示部分覆盖，绿色的行表示该行在本次测试中被覆盖到。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="443" alt="查看测试覆盖分析结果" src="http://articles.csdn.net/uploads/allimg/100308/103A4K96-9.jpg" width="498" /></p>
<p style="text-align: center" align="center">图10.查看测试覆盖分析结果</p>
<p>在Coverage视图中可以通过点击鼠标右键将测试覆盖分析的结果导出成需要的格式，例如HTML。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="233" alt="导出测试覆盖分析结果" src="http://articles.csdn.net/uploads/allimg/100308/103A4FE-10.jpg" width="498" /></p>
<p style="text-align: center" align="center">图11.导出测试覆盖分析结果</p>
<p>图12显示了导出的report。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="435" alt="测试覆盖分析报告" src="http://articles.csdn.net/uploads/allimg/100308/103A45V1-11.jpg" width="498" /></p>
<p style="text-align: center" align="center">图12.测试覆盖分析报告</p>
<p>为了保证单元测试的有效性和质量，可以规定一个测试覆盖率的下限，例如所有的包和类的覆盖率必须达到80%以上。不过值得注意的是，不要单纯追 求高覆盖率，要同时注意测试用例的质量，如果测试用例本身就写的有错误，那么即使测试覆盖率很高也没有意义。</p>
<p><strong>步骤四：持续集成</strong></p>
<p>持续集成(ContinuousIntegration)是利用一系列的工具，方法和规则，做到快速的构建开发代码，自动的测试化，来提高开发 代码的效率和质量。利用自动构建工具，随时都能把提交的代码构建出来，提供一个可以测试使用的版本，让用户和开发人员同时看到相同的功能，尽早的发现问题 和错误，也可以尽快的得到测试人员和用户的反馈。</p>
<p>要做到持续集成，就要利用一系列工具，把开发过程中的重复工作<a class="fllink" href="http://www.chinabyte.com/keyword/%E8%87%AA%E5%8A%A8%E5%8C%96/" target="_blank">自动化</a>。搭建自动的构建<a class="fllink" href="http://server.chinabyte.com/" target="_blank">服务器</a>， 自动的进行单元测试和发布新版本，一个集成的服务器可以提供构建过程的结果报告，自动通知开发人员构建结果，并且保存历史数据。 IBMRationalTeamConcert(RTC)可以提供工作任务的管理，项目计划的安排，代码版本管理控制，自动构建可用版本，生成构建结果报 告。这些过程构成了项目的持续集成过程，其中，版本的自动构建和代码的自动单元测试是持续集成的关键过程，RTC在这些过程上提供了有力的支持。</p>
<p><strong>自动构建</strong></p>
<p>RTC提供了buildengine来负责构建build，首选，启动buildengine，并和RTC服务器建立了连接。再创建项目的 build定义。在这个定义中，需要设定编译哪些<a class="fllink" href="http://www.chinabyte.com/keyword/%E6%A8%A1%E5%9D%97/" target="_blank">模块</a>的代码，需要跳动哪个ANT文件来启动编译，和一些编译过程中的参数的设 定。当这些都准备好了，编译对于项目而言，就变成一个简单的事情。</p>
<p>可以看到，通过在build定义上，点击请求构建，就可以触发一次构建过程。选择需要的构建参数，这个过程就会在后台运行。每一个开发人员，做 了稍许的代码改变和提交，都可以触发新的构建过程，来保证我们代码的有效性。申请一个新的构建的过程如图13、图14所示。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="453" alt="申请一个新的构建" src="http://articles.csdn.net/uploads/allimg/100308/103A4G60-12.jpg" width="498" /></p>
<p style="text-align: center" align="center">图13.申请一个新的构建</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="519" alt="构建申请界面" src="http://articles.csdn.net/uploads/allimg/100308/103A44419-13.jpg" width="419" /></p>
<p style="text-align: center" align="center">图14.构建申请界面</p>
<p>当构建结束后。RTC服务器会提供构建结果报告。开发人员可以查询到这次构建的详细信息。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="488" alt="构建结果" src="http://articles.csdn.net/uploads/allimg/100308/103A46406-14.jpg" width="498" /></p>
<p style="text-align: center" align="center">图15.构建结果</p>
<p>整个开发过程中，构建版本的过程应该是无数次的，通过每次构建，都可以得到当时代码的编译情况，并且可以得到一个可运行的软件版本。在构建定义 上，RTC支持设置构建计划。定时自动的触发一次构建。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="498" alt="构建定义" src="http://articles.csdn.net/uploads/allimg/100308/103A42418-15.jpg" width="498" /></p>
<p style="text-align: center" align="center">图16.构建定义</p>
<p><strong>自动单元测试</strong></p>
<p>构建可以自动了，重点提高代码质量的单元测试呢？如果每一天的代码，每一个版本的代码，都已经通过了我们的单元测试，这样我们就能对代码的质量 有了基本的保证。在构建脚本的自动调用过程中，通过ANT的脚本，可以加上JUnit，EMMA，FindBugs的ANT脚本调用，每一次的构建，都可 以把这些检查工作自动的进行一遍测试。这些测试都要生成测试结果报告，RTC不能提供这些报告的展示，就可以利用Hudson这个开源工具，集成测试报告 来方便查阅。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="450" alt="自动测试报告" src="http://articles.csdn.net/uploads/allimg/100308/103A464X-16.jpg" width="498" /></p>
<p style="text-align: center" align="center">图17.自动测试报告</p>
<p style="text-align: center" align="center"><strong>步骤五：代码评审和重构</strong></p>
<p>代码评审(CodeReview)是Java项目开发过程中的一个重要步骤，代码评审可以帮助发现静态代码分析过程中无法发现的一些问题，例如 代码的编写是否符合编码规范，代码在逻辑上或者功能上是否存在错误，代码在执行效率和性能上是否有需要改进的地方，代码的注释是否完整正确，代码是否存在 冗余和重复。代码评审还可以帮助新进入项目组的成员快速学习和了解项目，促进经验分享，同时也能保证项目成员的良好沟通。代码评审主要包括两种形式，同级 评审(PeerReview)和小组评审(GroupReview)。同级评审主要指项目成员间的互相评审，小组评审是指通过召开评审会议，项目成员一起 对项目代码进行评审。</p>
<p>为了提高代码评审的有效性和效率，可以借助一些外部工具，比较常用的代码评审工具有Jupiter和CodeStriker。Jupiter是 一款开源的Eclipse插件，允许成员将评审意见定位到真实代码的具体行，由于代码评审的结果以XML文件的形式保存，所以可以把结果提交到版本管理<a class="fllink" href="http://server.chinabyte.com/" target="_blank">服务器</a>进 行共享。图18显示了使用Jupiter进行代码评审的界面。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="461" alt="Jupiter代码评审界面" src="http://articles.csdn.net/uploads/allimg/100308/103A43433-17.jpg" width="485" /></p>
<p style="text-align: center" align="center">图18.Jupiter代码评审界面</p>
<p>在代码评审任务创建后，Jupiter将代码评审分成三个阶段，个人评审阶段(IndividualPhase)、团队评审阶段 (TeamPhase)和问题修复阶段(ReworkPhase)。在个人评审阶段，评审成员将发现的代码问题或者缺陷记录下来，每个问题都会作为一个记 录保存在评审表格中。在团队评审阶段，团队的全部或者部分成员会一起对个人评审阶段发现的问题进行定性，如果问题确实存在，就将该问题分配给某个成员去解 决，并在Jupiter中将该问题设置成相应的状态。在问题修复阶段，团队成员会修复属于自己的问题，并将相应的记录设置成已解决等正确的状态。</p>
<p>Codestriker是一款基于Web的常用代码评审工具，对代码的评审可以针对某一具体行，也可以针对整个代码文件，评审意见会被保存在<a class="fllink" href="http://com.chinabyte.com/%E6%95%B0%E6%8D%AE%E5%BA%93/" target="_blank">数据库</a>中。评审人员可以同时看到其他人的评论，代码作者也可以针对某一具体的评 论回复。Codestriker支持邮件通知，还可以同版本控制服务器进行集成，以跟踪和显示文件内容的改变。图19显示了Codestriker的界 面。</p>
<p><img style="display: block; margin: 0px auto; text-align: center" height="438" alt="Codestriker报告界面" src="http://articles.csdn.net/uploads/allimg/100308/103A42624-18.jpg" width="498" /></p>
<p style="text-align: center" align="center">图19.Codestriker报告界面</p>
<p>在实践中对所有代码进行小组评审会比较费时，所以可以根据实际情况来挑选一些核心代码进行小组评审，或者在项目的前期安排较多的小组评审，等项 目组的成员对代码评审的标准和要求有较好的理解，进行代码评审的经验提高后，就可以逐渐减少小组评审的次数，从而达到大部分代码即使只进行同级评审也能保 证很好的质量。</p>
<p>通过代码评审发现的问题要通过代码重构及时解决掉，较小的不涉及多人代码的重构可以由项目成员自己借助Eclipse的重构功能完成，不同项目 成员写的实现相同功能的不同代码要通过讨论整合成公共的类或者方法。比较复杂的或者比较高层次的重构工作，例如整个项目层面的代码组织形式的改变需要由整 个项目组共同讨论完成。</p>
<p><strong>结论</strong></p>
<p>软件开发没有一成不变、万能通用的流程和方法，希望大家能从本文得到启发和收益，结合您的实际项目特点，实践以上步骤和方法，并加以完善和改 进，共同打造高效高质量的Java代码，为您的项目成功奠定坚实的基础。</p>
<img src ="http://www.blogjava.net/freeman1984/aggbug/331072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-09-05 12:20 <a href="http://www.blogjava.net/freeman1984/archive/2010/09/05/331072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IT项目管理的六种错误思维</title><link>http://www.blogjava.net/freeman1984/archive/2010/09/05/331071.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sun, 05 Sep 2010 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/09/05/331071.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/331071.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/09/05/331071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/331071.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/331071.html</trackback:ping><description><![CDATA[<p class="blueline"><script language="javascript" src="http://articles.csdn.net/count.php?aid=258541&amp;view=1"></script></p>
<div class="blkCont">
<p>
<p><strong>错误一：错误的需求调研阶段，导致很多项目永远无法结束!</strong></p>
<p>在软件行业，在界面设计没有正式展现给客户之前，所有的工作都处于需求调研阶段。其实建筑行业已经给我们做好了先例：客户买房子之前是先要看看样板 房和模型的，什么都看不到这房子你敢买么?除非你不是自己住!</p>
<p>而在我们所学的软件工程概念模型中，这是三个阶段：需求调研、需求分析、概要设计。</p>
<p>在客户把他们想要管理的业务模块以及与之相关的业务数据，流程，表单交付你的时候，你千万不要把这个阶段定性为需要调研结束，写出《需要规格说明 书》就可以了。大量的实践证明，在概要设计阶段所衍生出来的需求工作量是之前的5~10倍，甚至更多，因为这要看设计人员的业务沟通能力和建模水平。</p>
<p>有实施经验比较丰富的项目管理人员总结说，在中国实施软件项目，必须以咨询方式展开：要推出自己的方案，而不能完全按照客户来提需求作项目。这是一 种很好的解决思路，但无法解决所有实施项目的难题。这种解决方案的前提，要么项目实施者有成熟的业务模型，要么有成熟的产品(包含了成熟的业务模型)，否 则是不可能做到的。但如果没有3~5年在同一行业，同一领域的实施经验和理论总结，没有哪家IT企业能达到这样的前提要求。</p>
<p>其实得出这样结论的深层原因，是因为国内多数企业管理思想不成熟，更谈不上完善的业务模型，所以客户的思维一定程度是发散的，还未形成系统。甚至还 有些客户的领导，脑子中有很多新鲜的点子，他都有可能想在企业信息化的实施过程中加进来，这对把控项目范围和项目实施效果来说，都可能是灾难的开始。</p>
<p>所以，要做好实施项目，实施者必须有很好的业务建模能力，快速的给客户展示合理的软件原型软件Demo。</p>
<p>请记住：软件实施项目，一定要给用户看到样板房软件Demo，才算需求调研结束!</p>
<p><strong>错误二：IT技术人员不需要掌握项目管理</strong></p>
<p>有这种看法的人不在少数。根据观察，之所以形成这种看法，一是对项目的真正概念不清晰，二是对管理的概念神话了，把管理理解成了高深莫测，非一般人 能做的事情。首先有必要普及一下项目的概念。</p>
<p>对项目有很多人下过定义，项目管理圣经PMBOK第三版(2004版)的定义是：为创造某个独特的产品或服务，或完成某独特的任务所做的临时性努 力。围绕这句话PMBOK做了详细的解释和举例说明，很严谨，想了解的请学习PMBOK。因为都是翻译过来的定义，翻译得过于术语化很容易把人绕进去，在 国内不排除已经拿到PMP认证证书的专业人士还搞不清楚项目究竟是什么。笔者在这里只想用汉语最通俗的语言来说明什么是项目和项目管理。</p>
<p>项目，就是在限定的时间要人完成的事。记住三个关键字即可把握：人、时、事。</p>
<p>项目管理就是参与者用什么(知识、技能、工具、方法)来圆满地干好这件事。</p>
<p>明白了这些，你就会明白从日常生活的吃喝拉撒到国家管理，处处都是项目，处处都需要项目管理，也就能明白每个人都需要项目管理，也就能理解学会了项 目管理将会多么受益无穷，娴熟运用项目管理思维将无往不胜!</p>
<p>但需要提醒大家一点，现在的PMBOK是把传统制造行业、建筑行业、IT行业等多个行业领域的项目管理知识糅合到了一起，大而全，但针对性不够好， 所以很多人觉得PMBOK理论化太强，学完了觉得很多东西没用。现在国际知名的另外一套项目管理认证，IPMP是按照工作岗位能力进行了分级，也没有针对 行业进行分解。所以，无论拿到PMP或者IPMP，很多人都会有同样的困惑。据了解，PMI已经准备做这样的改进，这是一个很好的消息。</p>
<p><strong>错误三：忘记项目目标</strong></p>
<p>你看到这个题目什么感觉?很多人会觉得这样的错误怎么会发生?几乎没有人会认为自己犯这个错误!忘记项目目标有两种情形：一是从开始接手项目就没弄 清楚项目的目标是什么;二是虽然清楚项目的目标是什么，但却干着跟完成项目目标无关、甚至有害的事。</p>
<p>时刻铭记项目目标是项目管理很重要的一个思维，项目所有的活动都围绕这个展开。可是随着项目的逐步开展，尤其是复杂项目：人多、事多、周期长，很多 项目经理会逐渐因为个人喜好而忘记了项目的大目标，比较典型的有：技术出身的项目经理会沉迷于技术细节，大量时间花在学习新技术或者一头闷在解决技术难题 上;脾气火爆的项目经理会因为很多不值当的事情大发脾气，把团队搞得乌烟瘴气;小心眼、爱面子的项目经理会因为某个组员无意的顶撞而怀恨在心，从此总给其 穿小鞋，搞得团队拉帮结派，毫不团结;还有更糟糕的，比如爱玩游戏的，爱喝小酒的等等。所有这些，无论原因是自身不成熟，还是管理经验、管理能力不足，结 果都一样，那就是项目出问题，甚至失败。</p>
<p>项目经理最重要的一项任务就是跟踪与控制，时刻把握项目方向，保证项目计划得以顺利执行，偏差控制在可控风险范围内。但项目总是有太多意外因素，尤 其是周期长的项目，人们常用夜长梦多来形容风险会随时间的延长而增加，所以项目经理一定时刻都要保持头脑清醒，对项目无益的事情不做，对项目有风险的事情 更不能做。</p>
<p>任何项目在开展过程中都会不断面对机会和诱惑，项目经理一定要能明确项目大目标，才能清晰地识别哪些是使项目成功的机会，哪些是会给项目带来风险的 诱惑，才会少走弯路，早日成功。项目管理者联盟，项目管理问题。</p>
<p>人是需要不断被提醒的，这由人性决定。智慧的人能够不断的反省从而自我提醒，愚笨的人会被挫折、外界的警示不断提醒，这就形成了成功与失败的差异。</p>
<p><strong>错误四：计划不能变</strong></p>
<p>怎样才能保证项目成功?计划，计划，再计划，这是项目管理的最佳实践!所以，做项目管理的一般都知道如何编制项目计划，并且很多人能熟练的使用 Project工具，知道80小时或者40小时法则、WBS和关键路径的概念。每个项目经理都会记住计划一旦形成，就严格按照计划去执行，而不受某个人、 某件事的影响这个原则，也明白这样做不仅能够减少大量资源的浪费，产品的质量也能得到保障。所以，很多项目经理排斥，甚至拒绝改变计划。坚持原则，这貌似 没什么错，但真的这样么?</p>
<p>要弄清楚一件事是否有必要做，首先就得弄清楚两个问题：一、这件事为什么要做?二、做了有什么好处?</p>
<p>那我们首先问一下编制计划的目的是什么?我们知道计划是项目管理的最佳实践，计划是保证项目成功的一种手段和方法，做这件事只有一个目的，那就是为 了保证项目成功，但前提是，这份计划是周密的、可行的。严格执行一份周密可行的项目计划才能保证项目成功。很多项目经理记住了上面的严格执行原则，但忘记 了这个大前提。</p>
<p>第二个问题，计划有什么好处?项目管理的计划方法，把项目活动、持续时间、所需资源有机地结合在一起，并且有严格的先后次序、里程碑和关键路径，可 以清晰地提醒项目所有成员在什么时间，做什么事情，保证每个项目任务都得以执行;通过对计划的执行跟踪，项目经理可以清晰地了解项目进展情况和偏差情况， 评估并及时有效的控制项目风险，从而保证项目的成功。</p>
<p>明白了这两点，我们再来看IT项目。对多数IT项目，尤其是软件实施项目，启动时都存在范围不够明晰，需求不确定的情况。只有到软件Demo产生， 才可能需求清晰，范围确定，这些情况就决定了IT项目计划需要根据项目的实际情况及时进行修正。如何压缩范围确定的时间，早日制定出周密可行的计划，是软 件项目的一个重要课题。</p>
<p>制定一份周密可行的计划是项目经理优秀能力的体现，尤其是WBS的制定，对复杂项目有很大难度。在谈2008奥运项目的管理体会时，项目专家曹蕾就 提到奥运会项目最难的一点就是WBS的制定(参见PMU网站对2008奥运项目的访谈)。要保证项目的成功，就要保证项目的每个活动都能得以顺利执行。所 以，在项目情况发生变化，在原有的计划基础上有需求变更时，就要把新的任务补充到计划中，修正计划，确保WBS的完整，确保计划周密可行，之后的工作才是 严格执行。</p>
<p>顺便提一句，有些项目经理会走另外一个极端：因为需求不确定，所以不制定项目计划。这同样是对计划的错误理解。即使计划不够周密，但它可以提醒我们 项目的大目标是什么，保证项目团队所采取的行动不偏离大方向。任何一项大的项目，都可以拆分成很多小项目，WBS的渐进明细，也是项目必须完成的任务之 一，所有任务的持续时间都是要估算的，即使不够准确，至少可以作为经验累积，为今后的准确估算做了准备。因此，项目的任何阶段都一定要有计划。</p>
<p><strong>错误五：项目一定要盈利</strong></p>
<p>项目一定要盈利，这句话被无数IT项目经理奉为真理，也就注定了要创造很多悲剧!为了达到这个目的，很多IT项目经理甚至都在悉心研究厚黑学，学习 用什么办法把小弟搞得热情高涨，比民工累，从而用最低的成本创造最大的利润。</p>
<p>项目管理作为战术层次的管理手段，一定要服务于战略层次的大方向。商场如战场，有胜利就会有失败。为了战略胜利，很多战役要诱敌深入，必须打败仗。 败仗不要紧，关键要弄清楚败到什么层次，损失到何种地步，明确本次战役的真实目标，再去打这场战役，就会做到驾轻就熟，从而不至于到最后形成不仅损兵折 将，还未能诱敌深入的局面。</p>
<p>开拓市场、占领市场、站稳市场、挖掘市场，这是每个公司发展必不可少的步骤。很多项目，对公司来说都是为了占领市场，甚至虎口夺食。这样的项目，公 司从战略层面首先要求的绝对不是盈利，而是如何能把市场占领，继而站稳，项目经理必须明白这个战略意图。</p>
<p>平衡是项目管理最为重要的一个思想，从过去的做好质量、时间、成本项目三要素的平衡，到现在满足相关干系人的需求，所有的最佳实践和理论研究成果， 都绝不会提倡走极端，杀机取卵!利润只是项目的一个目标，并且一定要明白有短期利润和长期利润之分，过分单一追求利润的项目注定要失败，过分追求利润的公 司也不会长久。</p>
<p>该花的钱不能省，不该花的钱一分也不要花，项目经理把成本控制在合理的预算范围内，就是成本控制的成功。万万不可为了把一个注定要赔钱的项目做得盈 利而想尽办法、绞尽脑汁压缩成本，从而让组员加班加点，玩命干活，到最后，项目干完了，人也走光了，还极有可能因为赶工导致项目质量不合格，客户不满意， 那就真的赔了夫人又折兵!</p>
<p>项目组要能保持激情高效，不能懒散拖沓，项目经理一定要把握好这个度，绝不能走极端。平衡是一门艺术，也是展示项目经理能力水平的一个重要标尺!</p>
<p><strong>错误六：记住了科学，忘记了有效</strong></p>
<p>学以致用，就怕乱用。无论是产品、技术还是管理方法，都存在为了更先进、更科学而罔顾现实，盲目乱用的现象，结果先进和科学的技术、工具不仅未提高 生产效率，却成了累赘，这样的情况到处都是，在IT项目中也为数不少。</p>
<p>国内大量失败的ERP项目就是这类错误的典型。有人把ERP项目归结为一把手工程，意思是只有领导重视并推动才能成功。领导支持是项目成功很重要的 一个条件，但绝不是有领导支持就一定能够成功。有些项目就是领导决策失误盲目上的，从开始就注定项目要失败。一个信息化项目的实施，对很多企业来说就是一 场大的改革，对所有员工从思维、技能到工作习惯等多方面都需要进行调整。如果企业的员工素质不能跟上，纵然有各种各样的培训，但不顾员工基础和学习曲线， 用户不能真正掌握全新的系统，结果就只能增加用户负担，而产生不了期望的效果。</p>
<p>很多IT项目经理在学习了一些新的技术后，总想立刻在项目中实践，而不去仔细分析这些技术在这个项目中是否需要，是否适合。IT技术日新月异，不断 有新的理论被提出来，被翻译引进到国内。有些项目经理在一知半解，对这些技术还不是很熟悉的情况下，就敢向人吹嘘他所掌握技术的科学性、先进性，进而强制 要求在项目中实践。这可能是甲方的项目经理，也可能是乙方的项目经理。因为技术选择错误导致项目失败的例子在国内过去有，现在也还有!绝对不可准备不足， 大范围引入全新的技术，待到项目时间过去一半了，才发现选择的技术不适用，那时候一切都晚了。掌握任何新东西都有学习曲线，项目的时间限制是项目经理必须 时刻牢记的要素，把握不好就会给项目带来极大风险。</p>
<p>涉及到具体的IT项目管理，PMBOK的知识体系可谓博大，还有一些其他新的项目管理工具，不能说不先进，但是哪些知识、工具、方法适合本项目，需 要项目经理根据实情，认真分析后进行筛选使用。</p>
<p>科学、先进、好用等等修饰头衔这些都不是要选择的首要理由，需要、适用和有效才是首要考虑的事情。很多IT项目经理因为年轻，初生牛犊不怕虎，胆量 大，勇气足，敢于在实践中引入新的工具、方法。敢于尝试不是坏事，但试验的风险一定要控制好。对于项目经理来说，所有的决策都要围绕项目目标进行。项目经 理的首要任务是保证项目成功，如果同时能引入新的技术、工具，增加组员的知识技能，提升项目组工作效率，提高产品的质量和可靠性，绝对是锦上添花，但绝对 不能为了锦上添花而导致项目失控甚至失败，捡了芝麻，丢了西瓜!</p>
<br />
转载自：csdn http://java.csdn.net/a/20100127/258541.html</div>
<img src ="http://www.blogjava.net/freeman1984/aggbug/331071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-09-05 12:15 <a href="http://www.blogjava.net/freeman1984/archive/2010/09/05/331071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>