﻿<?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-joe --专注java,开源,架构,项目管理-随笔分类-敏捷</title><link>http://www.blogjava.net/freeman1984/category/46247.html</link><description>         
        STANDING ON THE SHOULDERS OF GIANTS</description><language>zh-cn</language><lastBuildDate>Mon, 20 Jun 2011 15:54:13 GMT</lastBuildDate><pubDate>Mon, 20 Jun 2011 15:54:13 GMT</pubDate><ttl>60</ttl><item><title>大家都用什么bug管理软件？</title><link>http://www.blogjava.net/freeman1984/archive/2011/06/20/352649.html</link><dc:creator>@joe</dc:creator><author>@joe</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>4</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">@joe</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>@joe</dc:creator><author>@joe</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>0</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">@joe</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/2010/10/01/333604.html</link><dc:creator>@joe</dc:creator><author>@joe</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>0</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">@joe</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>给敏捷团队中的架构师的10个建议</title><link>http://www.blogjava.net/freeman1984/archive/2010/09/24/332754.html</link><dc:creator>@joe</dc:creator><author>@joe</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">@joe</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>敏捷开发中编写高质量Java代码</title><link>http://www.blogjava.net/freeman1984/archive/2010/09/05/331072.html</link><dc:creator>@joe</dc:creator><author>@joe</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">@joe</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>@joe</dc:creator><author>@joe</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">@joe</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>