<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>软件开发和项目管理论坛最新讨论 - JavaEye</title>
    <description>软件开发过程、XP、TDD、软件配置管理、软件测试、项目管理、UML - Java编程，Ruby编程，微软.net，AJAX，敏捷软件开发，综合软件技术</description>
    <link>http://www.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>技术总监和CTO的区别 浅谈CTO的作用----软件公司如何开源节流（一）</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://david-lv.javaeye.com">david_lv</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/229940" style="color:red;">http://www.javaeye.com/topic/229940</a>&nbsp;
          发表时间: 2008年08月18日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我一直在思考软件公司如何开源节流。<br />当然，老板也在思考开源节流。<br />当然，老板思考的开源节流在公司运营层面上，而我作为CTO，我考虑的则是在产品运营角度上来思考这个问题。否则，一个软件公司，它的生存与发展就是靠软件产品，除此之外没有别的收入来源，那么作为负责产品的人再觉得没有责任思考这个关乎公司盈利与发展的问题，那么要把这个问题甩给天天忙销售忙资金忙公司管理的老板么？那要你这个CTO干吗？难道就是为了让你当个工头管住一帮人么？<br /><br />      有的公司光有技术总监，没有CTO。技术了得，但和公司战略发展不贴身，光有技术发挥不了，公司的业务发展也沾不上他的技术的光。原因就是技术总监在思考产品，却没有思考产品和公司战略发展的结合。<br /><br />      而且，一个产品要想成功，销售能支撑和发展一个公司，是很难的。不是你做出一个产品就能成功。而且产品也不是一个独立的东西，它的成功要关联许多人。<br /><br />      首先，你不理解老板的发展战略(首先老板得喜欢你。喜欢一个人，有性格脾气对路的原因，也有你的气质和管理能力和眼光和勇气和决心和威信原因，也有你忠于老板的原因。一个老板觉得不放心不喜欢的人，光有能力是不行的，是迟早被老板Kill的人，当然老板也不会让你知道他在想什么。你连老板在想什么都不知晓，如何做和老板想法贴切的产品呢？这也是很多技术总监和CTO连头都没开就身先死的原因，更别说运营一个成功的产品。这个话题虽然让很多崇尚职业管理的人不屑一顾，但现实就是如此。要么你怀着才等中国变成职业民主国度，要么你现在就动手做。成功的人都是在不可能完成的情况下完成的。如果都是万事俱备，那老板要你和要别人有什么两样呢？)，连制造一个产品的机会都没有，更别说给你人力资源和研究的时间资源和技术培训资源。<br /><br />      你即使理解了，你还得想出与之匹配的产品。这是更难的第二步。<br /><br />      但不要以为一个好的想法就能成功。你需要组织你的人力资源来执行落地实现。一个公司所处的困境都是各有各的不同。没有春风得意让你随理想调度资源的公司。老板给你的资源，永远小于你干事需要的资源。这就是现实。<br /><br />      首先就是人力资源，就这么多人，这些人的素质。所以，你的设想，不仅要和公司战略匹配，而且还要和公司现状匹配，找好平衡点很不容易。<br /> <br />      这么多不容易还不算。你两个都考虑到了，就是没考虑到客户行业的现状、挑战、机遇、困境和客户行业未来3-5年的变化，那么你的产品可能符合老板的想法，但就是卖不出去（老板有理想有梦想，但未必老板的理想和梦想能和客户的发展同步），老板问罪的可是你。<br /><br />      人归你管了，人也就这样了，短期内提高和扭转是不可能的。于是，必须开始。但是每个人的想法是否能统一一致朝着你的目标走，每个人的配合起来的素质是否能达到你的要求，快进了也不行，推出早了是先烈，而且很有可能都推不出来，因为自己内部乱了阵脚了。慢了也不行，人家都在热卖了，你想炒个热点突出你，不容易。<br /><br />      人也是有疲劳期的，人也有发脾气的时候，人的精神惰性也很大，人的性格也不同。你如何给这支队伍进行持续的浇花施肥修剪枝丫防虫防害，有时还要晒晒太阳见见风，有时还要搬到阴凉地儿，都需要不时看看这支队伍是否有坏迹象。<br /> <br />      产品是费了劲做了出来，公司的其他部门不知道怎么推广怎么销售怎么实施怎么咨询怎么支持。梦想着靠流程来推行，自言自语说反正开发产品是我研发的事情，能不能推广就是你市场部的事情了，这样说纯粹是欺骗自己。这样，很容易产品连研发部都出不去，憋死在内部了。你一点成就感没有，当然，你的物质奖励也是没有的，还很有可能你该职业经理人跑路了。所以，必须有CTO，凌驾于技术总监之上，统管企业咨询实施支持，而协调市场与销售。<br /><br />      传递是会失真的，尤其是一个需要费好大劲才能说明白的管理理念。于是你理解100%，研发人员理解70%，落实到产品上，落实了50%，传递到市场，成了30%，到了实施，成了20%，到了客户那里，客户只吸收10%。所以，一个灌注了好的管理理念的管理软件，客户只能接收10%的好处。所以，管理软件客户认为差不多就是个600块钱，高级点的电子表格而已。尤其随着客户人员的流失和更替，随着软件公司人员的流失和更替，最后啥都剩不下，软件能展示给客户的好处，真是一点好处都说不出来了。
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/229940#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 18 Aug 2008 21:44:03 +0800</pubDate>
        <link>http://www.javaeye.com/topic/229940</link>
        <guid>http://www.javaeye.com/topic/229940</guid>
      </item>
      <item>
        <title>人，是人，真的是人---走出软件作坊：三五个人十来条枪 如何成为开发正规军（四）</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://david-lv.javaeye.com">david_lv</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/231239" style="color:red;">http://www.javaeye.com/topic/231239</a>&nbsp;
          发表时间: 2008年08月21日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          写了《三五个人十来条枪 如何走出软件作坊成为开发正规军》（一）、（二）、（三）后，每篇都点击上万跟贴评论无数。<br /><br />  有网友评论我之前的几篇博文：分析的不错，方案似乎也很能解决问题！不过必须满足一个潜条件：一定要找到非常合适人。现实中，就连最基本的程序员，找个合格的也不容易（聪明伶俐的养不住、经验丰富的养不起、迟钝呆傻的没法要、碰上心术不正的还够你喝一水壶的）<br /><br />  还有网友评论：楼主所说的很多方法，都是假设了客户还不错、对项目的重视程度、习惯于正规化的程度都还过得去，而楼上有些朋友的质疑则是指出这些资源不一定满足的情况；<br /><br />  但是跟贴最多的评论就是：现实问题描述的很精确，但解决方案不现实，太理想化，老板根本不可能给你人。如果真的发慈悲心，也是给你一个新人让你哭死。你想主导项目，省省吧，死了你的心吧，一切都是老板说了算。而且，你敢和客户说个不字，看来你是不想要你的饭碗了。还是乖乖敲好你的代码，多干活，多跟客户搞好关系。高手做啥都是高手，低能再培养再有方法管理他也是低能。你这样研究，只能吃饱饭瞎想瞎扯蛋，有你这工夫，早就把项目做好了。<br /><br />  种种评论来看，一切的根源都是人，是人。大家都觉得我的方法要想实施，必须老板支持，员工也是高素质的，客户也是高素质的。而三者要想凑到一起具备，根本不可能。所以我的方法算是理想的痴人说梦。<br /><br />  能支持的老板从哪里来？高素质的员工从哪里来？高素质的客户从哪里来？好像一切都是运气而来。好像我们就有高薪能聘得起高素质的员工。好像我们的产品面对的就是高素质的客户。<br /><br />  但我回顾了自己10多年的从业经验和管理经验，我并没有发现这个规律。我并非供职国际巨头公司，也不是国内知名企业，只是信息化行业内略有名气而已。手下很少出现名牌大学的员工，也很少能达到所谓的高薪（我自认自己还没有在马云、史玉柱、牛根生、柳传志这样大胸怀大眼光的企业家手下任过职，我们所从事的行业信息化也不是暴利的行业，大家也都知道管理软件没啥暴利，定制化修改、实施、咨询、培训、支持占去了很多成本。），我们的客户也是各种各样的人都有，从挖煤暴发户的私营老板到死气沉沉勾心斗角的国企，我们的客户千奇百怪。<br /><br />  在这样的环境下，我能把方法用起来，我和许多网友也交流过，最重要的是我认可了以下观点，这就是一个职业经理人和老板的关系：<br /><br />  1老板都是疑人也用用人也疑。用人不疑，疑人不用，我不奢望。<br /><br />  2再劳苦功高，我也只是职业经理人，我不拥有这个企业的哪怕1%所有权，所以我做好职业经理人本分，老板的归老板，职业经理人的归职业经理人。职业经理人的职责范围的，老板权力范围的，不要超越，也不要动歪脑筋。即使公司大部分的收入都是你研发的产品带来的。<br /><br />  3计划不计划一件事情，执行不执行一件事情。一定要以老板利益为目的。老板不赚钱，一切好事一切好想法都会被老板推翻，老板就是老板。老板赚钱赚的眉开眼笑，其他的事情就好办的多。这是很多职业经理人居然都认识不到的，他们总抱怨老板限制太死，什么资源也不给，干活还贼累。根源就出在这里了。想实现你的想法，必须在实现了老板想法和目的的前提下才能做。所以我的方法能实现，多靠此。<br /><br />  4而且我的方法不是为了我自己有什么好处，我的每一个方法也都不是为了正规化装修门面图好看。我的方法都是为了解决实际问题，为了老板赚钱更快更省成本更容易，员工更省力，客户更满意，而且每个方法都是在本企业能力和成本范围内能执行落地的解决方案。这样的解决方案，哪个老板会不支持呢。但很奇怪的是，很多研发部主管都忽略这个重点，老板在想利益，他在想技术。两人说不到一个目的去，互相不理解互相不支持互相埋怨，久而久之互相猜疑互相提防互相留一手。其实技术就是个手段，赚钱是目的，双方一起绑定去赚钱，怎么合法的赚更多钱怎么来。如果研发主管能脚踏实地的从本企业的能力和困境和现状去思考改进方法执行落地，而不是抱怨这样的环境没法实现想法消极怠工或心想跳槽，我想很多心结就都打开了。<br /><br />  只有和老板具备了这样的距离和关系，我的方法才好实施下去。所以，很多人觉得太理想化，就是和老板没有找到自己的位置。<br /><br />  但是，即使有这样的基础，要实现我所述的方法，也需要其他的环境支持。<br /><br />  我个人是这么看的：<br /><br />  1好的氛围，才会引入、留住好的人（乱世强盗多就是这个理）。<br /><br />  2好的人，才会有好的制度，并且保持好这个制度（制度是人定的）。<br /><br />  3好的人和好的制度，才会遇到好的客户（有句老话，夜路走多了总会遇见鬼。有些人老想着邪门事，最后也被邪人玩。近朱者赤近墨者黑，什么人总遇到什么人，就这个道理）。好客户就会产生好的结果。<br /><br />  所以，好的人才，好的客户都不是运气来的，而是来自你自己。你就是控制源头的人。<br /><br />  如何制造好的氛围，我讲讲我的职业经理人管理人的一些心得：<br /><br />  1师傅制。这里没有总监，没有经理，只有师傅，老师。总监，经理，会让员工产生隔阂，距离，权力争斗。每一个人总有一个师傅。每一个新人进来，都要指定一位合适的师傅。尤其是新人，更要短期内注意看时候合适，不合适就要更换合适的师傅。什么问题都可以问师傅，从技术到公司制度到公司新闻公司历史到职业发展规划到个人生活问题。团队的凝聚力，配合性，归属感，责任感，很多问题都被人的感情消化了。<br /><br />  2朝九晚五，禁止加班。其实大部分程序员也是不喜欢加班的（不过有些程序员是光棍，也是漂在北京，反正也是一个人，于是就喜欢呆在公司上网玩游戏看小说看电影吹空调，美其名曰加班。还有一类老板喜欢看表面功夫，谁加班就喜欢谁，于是大家都装做很忙都要加班）。因为加班不给钱。不给钱，还加班，天长日久就觉得自己很亏，心里不平衡，各种心思就都有了。其实也没有多大的事。我的老板一开始对我的不加班也是心存戒心，但是每次交给他的结果比加班的部门做的都好都快，他也就默许了。<br /><br />  3良好的办公环境和良好的个人形象。我们看到美女就兴奋的口吐莲花，我们看到阳光溪水草地我们就心情舒畅。当然，我们看自己，别人看我们，都是一个道理。心情好，工作才能好。一个满桌狼藉充满烟味饭味脚丫子味有人在冥思苦想解决问题有人在打游戏有人在放朋克音乐有人在骂有人在打闹嬉笑有人把脚放到桌子上的办公环境，我看谁都会逃离。<br /><br />  4以更快更省成本更容易完成任务为目标，以赚更多钱为目标，以提高产品质量产品价值产品售价为目标，鼓励员工进行自我岗位上的改进创新，我经常给与交流和指导，一旦有效，进行精神或物质的奖励或职位提拔或工资晋级。<br /><br />  好的氛围有了，就需要有好的人才。以下是我引入好的人才的几个心得：<br /><br />  1人的年龄和工作经验拉开距离。年年招，时时招。不断看人，试人，滤人，培养人，形成层次感有阶梯有接力的员工组织，绵绵不断前赴后继，不会出现人才地震、集体疲劳、小团伙争斗。避免不同高低职位上全是80-84年的人。下属还在窝里斗互相不服（很多员工不看对方能力，就看对方的工资和年龄。凭啥你就是我师傅？），那么客户逼你，老板压你，其他部门利益冲突你，下属还闹你，你这个孤独人算是失道者寡助也。<br /><br />  2人的技术能力高低先放一边。首先要过EQ关。有些中小型企业没有HR经理，一般考察EQ，都是老板把关。如果你现在招人没有老板把关，那么必须先考察人的EQ，再考察他的技术能力。我最怕有些羡慕科学管理的管理者照搬什么EQ测试问卷或什么团队游戏来评测。我的评测方法仍然是不讲道理，要讲经历。没有工作经历，至少有学习经历和生活经历吧。一个人的情感、压力、正义感、真诚感、领悟力、心细观察力、思路整理总结能力、关注全面平衡能力、执着力，都能看的出来。<br /><br />  招聘程序员也得看这些。我曾遇到一个程序员，思维混乱所以代码也混乱，思考也不全面，程序到处都是漏洞，思路也不自我整理总结，无法举一反三，给他讲了多遍的需求他都无法自己重述，一有了问题很急躁说搞不定了，一看还是很简单的问题，把错误提示原模原样输入到百度中查百度就能搜到好多，你说这样的程序员算技术合格吗？<br /><br />  其实，试用期的三个月就是主要看他的EQ和他的技术能力、理解学习成长能力，而不是片面只看他的现状技术能力。一个不愿意学习钻研，没有方法钻研快速学习理解，推一下动一下，或者怎么说都理解不了的，都需要统统辞掉。另外，对于心术不正有仇必报不服管教之类，早就扫出门外。一个讲究吃穿用享受或者满口脏话习惯毛病一堆或者不孝顺父母或者满口介词的人坚决不能要。<br /><br />  3专业发展，流程协作。如果不专业化，老板有什么活就分配什么活，时间短了还认为自己是在学习更多知识在锻炼。时间长了就会觉得自己就像个混子，干什么都干过，但什么都拿不起来。出去应聘啥职位，是应聘开发呢，项目经理呢，实施呢，支持呢，销售呢。啥都做过，但啥都没做专，都了解个皮毛，真要让上手还真给人家拿不下来。心就慌了，觉得自己是个被老板困在手心的小鸟，无法飞出本企业的樊笼，一旦飞出就要饿死没有能力存活。好可怕。难道只能在这家公司耗死了？赶快能逃逃吧，逃到一个正规的专业的公司去。<br /><br />  4下一阶段目标交流制定。交流，我想每个CTO或技术总监或研发经理都会做。交流可以了解员工的困难和心中的疑惑、个人期望、个人专业兴趣的变化、人生观世界观技术观管理观生活观（以调整自己以后和该员工如何交流、如何讲解工作、如何鼓励、如何布置任务、如何考察等等）。交流也可以让员工多了解自己是怎么想的。双方在日常很多事情的分歧和误解就会消除，心会往一处想，劲会往一处使。但是，交流也不仅仅实现这些目标。更重要的是，交流，主要为了能给该员工制定一个切实可行的、某段时间段内可达到的、他也喜欢也愿意努力的、也会他未来职业发展很有好处的职业目标。没有目标的工作，虽然他很努力，但是他容易迷失方向。如果他又是一个不能很有悟性很有规划的人，他的工作就会形成做一天和尚撞一天钟。撞钟撞的不错，但没什么更高层次的提高。天长日久，就会木然，倦怠，不思进取，思想守旧，遇到新问题无法突破。所以，我会根据双方的交流，和员工一些协商一个下一阶段的职业发展目标，并且时常指导调整他的做事方法和思考方法，给他讲解一些我过去的工作经验和我的感受，鼓励指导他们有计划有目标的走的更高更专业。这是很多研发部门主管没有做的一点。<br /><br />  最后有几句话和大家分享一下：<br /><br />  1毛主席说：社会主义就是打土豪分田地（不是资本论这样的天人天书），要天天讲，时时讲，到处讲，要团部建设到连队。所以，借用毛主席的方针，咱们的团队精神建设也得这样。天长日久，就形成了文化精神，就形成了习惯。<br /><br />  2习惯决定性格，性格决定命运，细节决定成败
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/231239#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Aug 2008 16:35:04 +0800</pubDate>
        <link>http://www.javaeye.com/topic/231239</link>
        <guid>http://www.javaeye.com/topic/231239</guid>
      </item>
      <item>
        <title> 走出软件作坊：三五个人十来条枪 如何成为开发正规军（二）</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://david-lv.javaeye.com">david_lv</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/230149" style="color:red;">http://www.javaeye.com/topic/230149</a>&nbsp;
          发表时间: 2008年08月19日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          上一次，写了一篇文章《三五个人十来条枪 如何走出软件作坊成为开发正规军》，反响异常激烈。<br /><br />    我的一个朋友也看到了我的博文，他是做某个行业企业管理软件的。他说：你这个方法，在我从事的行业不适用。<br /><br />    我对他从事的那个信息化的行业还是有一定了解的。<br /><br />    他们的实施模式是：<br /><br />    1一个实施项目，大约50万的签单额，做完验收后给最后的20%-30%的尾款。<br /><br />    2他们是一家小公司，为了多做项目多赚钱（企业都希望利润保持的很高，如果毛利低，做软件就不合适了，受的苦和压力和不规律性比其他行业多的多），所以一个项目只派一个人去，而这个人需要培训、辅助导入旧系统数据、清洗合并数据、规范化数据、报表制作、需求协调、推动切换上线、现场运行监控、个性化定制修改代码。<br /><br />    3如果不能推动客户上线，就无法验收结项。不结项，就无法去追尾款。<br /><br />    4一个项目这个人，身兼项目经理、开发员、需求调研、软件设计、功能测试、实施培训、定制化开发，还有时候写培训文档。因为公司里都是这样的人，根本没有分工出专门的文档人员，所以产品根本没有培训手册和帮助手册。除非客户必须要，这个项目的这个人才写一份草稿应付。而公司又没有人来做文档管理工作，所以各个项目各个人写，也没有人合并，也没有人来统一收集。每个文档都在项目每个人的移动硬盘里。<br /><br />    5由于项目就老哥一个人全活儿，所以自己答应了客户修改什么需求就自己修改，根本没有啥需求调研方法和版本管理方法，就看这个老哥和客户之间的博弈了。每个项目一套源代码，而且都在各个项目的各个人手里。返回公司后，往公司的服务器上一扔做个备份。以后谁的项目出了问题或需求，就谁负责继续修改。但是，很有可能这个人已经在做其他项目了，还需要修改前几个项目的需求或BUG，还需要接听前几个项目的支持电话。如果这个老哥是在顶不住压力和焦虑而跑路了，只能把这些所有的活交给现存活的人的手里，啥也没有。无法交接也得交接，反正人要跳槽。<br /><br />    6由于每个人都是这样一人挡一摊或数摊项目，而且项目周期长，每个项目都需要2-3个月的时间。老板也想把公司做大，但是每个项目能去实施的人，要求都非常的高，新人来了一年也上不了前线干不了活。所以，对招新人也是不愿意招，干花钱没见起作用，小公司培养不起人。而对项目游刃有余的人，都是跑单帮跑惯了，带着个新人，还干不了活，还浪费出差费用，真是气死人了，还不如自己亲自动手三下五除二搞定爽。<br />   <br />    于是，公司五六年了也就那么大规模，老板员工都干的很辛苦，当然老板得到的钱要多一些，赚个500多万没啥问题，自己后半辈子算是有靠了。所以，老板也得过且过，反正现在赚钱速度已经比较满足了，这样也熟练习惯了，经验路径依赖，就这样顺坡下驴做吧。<br /><br />    我的朋友是个理想和现实总是不断冲突的人。一方面，他确实想把项目做的很是顺畅，另一方面，他却觉得一切都像是被各种因素牵扯，根本无法转变模式，于是只能认命继续现在。<br /><br />    我说，你这种情况其实在中国很普遍。中国大部分软件公司都是从事行业信息化，因为这块技术难度最低，而且只要有人脉关系就可以做销售开干。而很多软件公司的成立，就是由于老板有一个关系，接到了某个项目，于是拉住了某个客户，小活不断，于是成立了公司。这是很多老板成立公司的原因。既然这类公司成立就没有目标，其目的就是认识几个人多拉一些项目多赚一些钱，所以如何复制模式，他们其实关注性也不大。原因很明白，就是自己不认识的客户，要想打入这个单子，很难，每个客户庙前都有N多关系户。对于自己有关系的客户，也就那么多个，有多大关系就能做多大的摊子，那就尽量从现有客户中持续做项目。维护好客户关系是最重要的。这类模式非常常见，并不是你这个行业特殊。<br /><br />    老板的生活已经趋向于小康稳定，而你呢？你还在挣工资。你也在一线客户那里天天呆着，要么你把老板的客户抢过来你做，要么为了你自己工作能轻快些，你必须自己给自己找方法。<br /><br />    我的朋友说，抢过来不可能。自己虽然天天在第一线和客户天天在一起，关系也处的不错。但现在人先认的是钱，后认的是感情。而老板给他们这帮人都持续吃喝玩乐送东西分回扣，自己只是一个干苦力的。自己只能找方法。但你说的方法是针对一个公司的变革，不是针对我个人而言的，所以不适用。我想有一个方法能帮助我自己的方法，你帮我想想。<br /><br />    我想了想我过去写过的文章，确实是，自己一直从事职业经理人操盘产品研发管理，也统管咨询、实施、培训、支持，但都是在公司管理的层面上看问题分析问题解决问题，而没有从一个个体上去思考。而中国，大量像我这样的朋友，他们需要帮助，而我写的却是公司层面的，无法帮助他们，所以他们老说我的文章空洞、理想。<br /><br />    我说，咱们俩一起分析解决。也是给大量像我朋友这样辛苦的人带个福音。<br /><br />    咱们首先先说一下你想达到什么效果。<br /> <br />    我朋友说：我现在在这里待的很烦，出差时间太长了，我就想早点回家。<br /><br />    那你什么地方费时间了，需要2-3个月在客户现场？<br /><br />    我朋友说： 嗯，我看完你的那篇文章，我也做了一下反思和总结。我感觉有三个方面特别费时间：客户需求，数据准备，报表制作。<br /> <br />    一去客户那里，你是见不到客户老板的，也是看不到用户的，你主要面对的是客户信息科的人。他们一开始要求你先做演示，看看是否符合他们本企业使用。在这个演示过程中，就不断提出需求让你修改。而且，你不修改完，他们没法接受你以下的演示，说想象不出后来的样子，对着你画的界面图想象以后的功能变化，有点纸上谈兵的感觉。而且，往往演示的时候必须信息科科长在，否则底下的科员都做不了主，演示了也是白演示。而信息科科长却老不在。而他们上班时间也极为规律，该下班时立马下班，根本不加班。所以边演示变修改再边演示。好容易修改完了，也演示完了，时间一俩个星期就过去了。<br /><br />    信息科算是通过了，就需要录入基础数据了。问题又来了。现在大部门企业都已经上过一套软件了，可能是Foxpro的，也可能是PB的。人家要求你把数据倒进新系统中，但是一看过去的数据，都乱七八糟的，过去上线都是没经验，后来也用的乱了，积腋成疾了。现在要导入，真是要把垃圾输入，得出来的也是垃圾。你苦口婆心的说服让他们重新录入，但是他们一看都好几千条，不想录入，让你能导多少导多少，然后在基础上再维护。这一松口不要紧，你不仅忙活了一个多星期写各种SQL导数据，而且往往旧系统也没有文档，数据结构需要你自己理解，理解有误也是你的事。好容易导完了，再维护，发现数据是通过SQL导入的，在界面上却不能维护，因为很多校验都是写死在程序里的，而不是约束在数据库。磕磕碰碰，自己边后台修改数据，边让他们信息科维护。他们信息科首先先检验导进去的数据对不对，没有填写齐的字段填写齐。然后把没有导进去的数据录入进去。然后再打印出来，统一对一遍，看看哪些数据录入的有错误。这样折腾，一个月，22天工作日就过去了，用户还没培训呢。<br /><br />    第二个月开始用户培训了，但一培训就发现了问题。用户的需求和信息科所的需求，根本不是一码事。原来一个企业，信息科也和业务科室是两张皮，就和在软件公司一样，开发部和销售部是两张皮。于是，用户和信息科开始吵架，各说各的道理，谁都在维护自己的利益。而且用户部门有业务在身，也不可能天天大部分时间泡在IT讨论上面，开会不来人，或者要来人也来了个小兵充数，根本起不了决定，还提自己的意见，过几天开会，用户部门的主任来开会，又把需求再推翻。业务部门主任是站在主任的层次上看IT管理， 而业务部门科员是站在自己轻松使用的角度上提需求，而信息科是为了自己以后维护着想。不断的讨论不断的推翻不断的扯皮。<br /><br />    讨论扯皮推翻再讨论再修改。终于消停了。开始培训了。但问题来了，用户上机一操作，发现基础数据很多不是平常现实那样的。计算机数据过去就和现实数据脱离了，现在想借新系统上线再回到计算机管理上。于是，一边培训一边修改数据，有人报告数据错误就修改。而培训没有文档，培训也没有课程，培训也没有专业训练。培训如何层层开展，培训如何组织，都不知道。反正就老哥一个被订在这里了，只能这么上手了。人没有来齐，也得开始。等来了再重新讲一次。一次不会，再讲一次。有人年龄大打字不熟练，有人看不清屏幕，需要调整大字。一调整，界面发生错位了。有人不会用鼠标双击和单击，有人不会控制打印机。过去是UCDOS系统，还没用过WINDOWS的，用不惯。从基础培训起吧。否则怎么办呢？人家不上线用起来，人家不给验收结项啊，尾款回不来啊。<br /><br />    用户也培训完了，该上线了，就需要初始化库存了。先得现实盘点，然后再录入计算机，还必须一边得继续营业。于是，真实库存和计算机库存肯定对不上去。由于品种太多，所以只能一批批盘点一批批录入。<br /><br />    由于操作不熟练，特殊业务不知道如何处理，只能瞎处理。处理完后发现不对，想冲抵回去。没有冲抵功能，只能修改数据库中的数据。<br /><br />    由于前期修改，根本没有测试，就是老哥自己一个人改。改完了有时候烦了连自己都不想测试。于是上线用着用着就不能运行了，需要当时就立即修改，中午晚上的连续作战紧急解决，否则第二天一早还需要开门迎客。<br /><br />    好容易业务录入了，但是报表不对。一检查，原来是前段时间录入的非法业务数据造成，功能没想到没拦住。怎么办？偷偷自己修改数据，然后使报表平账。过段时间，发现报表又不平了，发现还是非法数据进入造成。怎么进来的呢？想不明白。只好蹲点现场，直到客户都运行正常了才能走人，算是上线成功。<br /><br />    这个累呀，两三个月都是紧着过的。好不容易回来休息会，另一个项目就要启动了，就这么几头能干活的蒜，老板笑着脸让你去。于是，遭遇再次上演，日子就是这么过来了，一月又一月，一年又一年。顶不住的就跑路。<br /><br />    我听完了我的朋友的诉苦。我说咱们一件件事情的排查。<br /><br />    第一件事，边演示边修改，还得信息科长在，还得他拍板。这段时间的浪费如入缩短。我过去也作过灯塔客户的实施，我过去一去了客户那里，并没有一开始就这么做。我先是调研此次项目组的人员构成、能力、职责、上线时间、用户计算机能力、用户部门对上一套系统的最突出的抱怨，信息科对上一套系统的最突出的抱怨，现在还有哪些系统在持续运行，上一套系统用户部门和信息科觉得哪里好，上一套系统的功能结构和操作流程。这样，我就确定了我该如何开展项目实施。这就是项目调研阶段。人往往很眷恋自己已经习惯的事情。而且人的想法，人的能力，各个部门的利益冲突，人和人的私人关系和恩怨，都有助于项目的推进。亚洲人做事，需要面上的和面下的都得下功夫。纯粹都是正式的或者都是不正规的，都无法做好一个项目。我会在项目调研后，重新建议项目组人员构成、职责、流程、项目阶段时间、各方面负责人、本项目的最突出要解决的前5个目标问题。<br /><br />    人常说，上下同欲者胜，庙算者胜。你一开始必须界定好项目的边界和目标和执行标准和责任人，否则大家谁都想管或者谁都不管，大家没有目标，或者大家各有各的目标，肯定无法项目很好的推进。<br /><br />    有了目标，责任人、标准、时间计划，就要按照这个目标来分解做。基础数据的校验，需要用户参与先来校验原有系统的数据。不要认为用户现有这套系统就没有问题。如果没有问题，企业也不会用你这套来代替他现有这套。所以校验现有基础数据很有必要。没有的数据，先让他们做准备，但你要书面把要准备的规范写好交给要参与的各个用户，而且要做好培训工作，不能讲讲就认为他们理解了。有了的数据，需要校验。地基打好，才能上面很快盖房子。而且，信息科和用户对老系统很熟悉，校验数据比你快的多，而且准确的多。只有经过他们的确认，你可以导数据，也可以不负责导数据。其实，基础数据，虽然多，但只要有5-10个人，2-3天就能录入完毕。比你导更快更准确。<br /><br />    在用户嚷嚷需求的时候，一定要以系统目标为约束。因为每个人看法不一样，站的利益角度不一样，每个人的计算机应用水平也不一样，所以每个人都有看法。你让百家争鸣，而且什么需求都可以提，没有目标没有边界，就让你一个人修改，那么你结果不会好而且你会心身疲惫，你会很快就厌烦了项目。吃力不讨好，就是方法不对。需求，一定要围绕时间阶段和目标为约束，大家要一个目标。<br /><br />    还有你刚才讲到的没有培训方法、培训文档、培训素质，说明必须要有专人来做培训。这块是项目实施非常重要而且工作量大的一块。这才是真正的项目实施。项目实施不是让你来修改需求来了。培训做不好，上线会出一堆麻烦，软件再约束不强，报表就是平不了。而培养一个培训的人员还是容易的。如果想培养一个会协调推进来事的、会修改软件的、懂得业务需求的、会SQL语句导数的、会培训的，这样的专业神人确实很难。而且这样的神人一定不专业。所以，要带人，先要让他搞培训，而且让他编写针对不同用户的培训手册，有培训时间课程、培训规范、考试考核、模拟练习环境、模拟数据。这是这个培训专员可以做到的。<br /><br />    软件修改，尤其项目型软件，不修改是不太可能的。我不赞成在客户处修改软件。因为不仅仅你只会以事论事的修改，容易陷入到这家客户具体的需求中，而不会考虑其他客户的需求兼容，所以你修改的软件有很大局限性，最后形成只能一家维护一套代码，最后客户越多越累成本越高越不赚钱，被客户多而拖累死。而且你在现场那么多事情，那么多人打扰，你根本无心踏实下来修改软件，只想着赶快改完上线回家，你急躁，潦草，应付，软件质量就没法保证了。你想改变这种现状，你必须把需求整理好，交给在家里专门编写代码的程序员。你在现场，你也很懂业务，你和你本公司的程序员沟通肯定比客户沟通要顺畅的多。<br /><br />    这样，你在现场，你的任务就是当好一个项目经理，专门协调，控制，理顺，制定流程、规范、目标、时间，保证执行到位。现场还有培训专员分担你的培训工作，可以帮助你校验数据，测试功能。公司里还有专门coding的程序员分担你的开发测试工作，而且人家写的代码更加多家客户兼容使用，而且质量稳定性比你高。<br /><br />    只有专业分工合作，才能转成正规军。否则，你只能把自己熬倒了，心力交瘁，最后心灰意冷，跳槽而走。<br /><br />    从民兵，到武工队，到土八路，到正规军。这条路有好几个阶段。不能想着一步到位。现实情况也不容许我们一步到位。我们只能是能改进什么就改进什么，天天进步一点，我们就会大变样。<br /><br />    如果从心里就认为不可更改，直到心冷不想改进，那么我们永远不会进步。<br /><br />    为了我们自己心身愉快，我们也要进步。<br /><br />    记住，你是项目经理。你是这个项目的领头人。你决定这个项目的成败。<br /><br />    如果你连这个定位都没有，那么你什么都决定不了，你这个项目的成败只能随波逐流，那样你真的很失败了，你什么作用都没有，要你干吗
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/230149#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 14:35:01 +0800</pubDate>
        <link>http://www.javaeye.com/topic/230149</link>
        <guid>http://www.javaeye.com/topic/230149</guid>
      </item>
      <item>
        <title>结合Maven2进行J2EE项目构建</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://orpheus.javaeye.com">orpheus</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/230265" style="color:red;">http://www.javaeye.com/topic/230265</a>&nbsp;
          发表时间: 2008年08月19日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>一.背景</strong><br />Maven2 的基本原理很简单，采用远程仓库和本地仓库以及  pom（project object model）.xml  ，将  pom.xml  中定义的  jar  文件从远程仓库下载到本地仓库，各个应用使用同一个本地仓库的  jar  ，同一个版本的  jar  只需下载一次，而且避免每个应用都去拷贝  jar  。如图  1  。同时它采用了现在流行的插件体系架构，只保留最小的核心，其余功能都通过插件的形式提供，所以在执行  maven  任务时，才会自动下载需要的插件。这个特性也为客户系统的升级带来的很大的方便，客户每次升级的时候可以使用maven的远程部署功能自动下载最新的系统组件（jar），并重新打包部署，很大程度的减少的系统升级的工作量。<br />理解Maven的原理，可以参考 Pear ――ＰＨＰ扩展与应用库（ the PHP Extension and Application Repository ），其原理非常类似，都有一个官方库，都是微内核，通过网络将需要的文件下载到本地，通过官方仓库将相应的类库进行统一管理。<br />     Maven2的基本安装方法网上很多，就到<a href="http://maven.apache.org" target="_blank">http://maven.apache.org</a>下载一个最新版，解压后即可，如果需要在命令行运行，还需要设置一些环境变量，网上的资料很多，这里就不多说了。总之，安装成功后当你在命令行下执行maven -version后正确显示当前maven的版本即可。<br />     我们在项目中结合maven的进行开发的主要思路：<br />   1.建立支持Maven2的开发框架，框架中结合了一些项目功能和工具类，并且此框架本身是一个eclipse工程，支持使用eclipse IDE的开发，并通过CVS可进行团队协作。<br />   2.在Maven2的pom.xml中制定开发框架的依赖包，并建立依赖包的团队管理本地服务器，使团队中的包依赖得到统一管理。<br />   3.每日下班后，在构建服务器上每日从cvs上下载各个团队开发人员的代码，统一进行集成构建和测试。由于是每日构建，所以发现的bug可及时反馈给开发人员进行修正，避免了一般开发过程中的bug长时间遗留的情况。<br /><br /><strong>二.实施过程</strong><br /><br />为了实现上述思路，我们分几步实施：<br /><br /><strong>1.首先需要构建一个系统的开发框架</strong>，<br />    我们有两种方式构建，<br />    其一是从零开始构建全新的框架，进入commond line，cd 到一个目录 ，执行<br /> <br /> <br /><pre name="code" class="java">mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp</pre><br /><br />执行完毕后接下来cd 到项目目录my-webapp下，执行<br /><pre name="code" class="java">mvn package
mvn eclipse:eclipse
</pre><br /><br />之后，打开eclipse，到其目录下导入项目，并手动编辑pom.xml文件，设定指定的jar包，比如加入一个jwebunit的jar包，我们需要在pom中添加一段：<br /><pre name="code" class="java">&lt;dependency>
            &lt;groupId>jwebunit&lt;/groupId>
            &lt;artifactId>jwebunit&lt;/artifactId>
            &lt;version>1.2&lt;/version>
            &lt;scope>test&lt;/scope>
            &lt;exclusions>
                &lt;exclusion>
                    &lt;groupId>rhino&lt;/groupId>
                    &lt;artifactId>js&lt;/artifactId>
                &lt;/exclusion>
            &lt;/exclusions>
        &lt;/dependency></pre><br /><br /><br />其中指定了包的名称，版本，使用的范围域等，pom.xml设置方式网上也是一堆一堆的，具体的可以自己搜搜。同时我们也可以使用maven2在 eclipse中的插件进行编辑，很方便，就不用记住那些该死的标签了。插件下载地址 <a href="http://m2eclipse.codehaus.org" target="_blank">http://m2eclipse.codehaus.org</a> /update，将这个url填入到eclipse的Help-》Software Updates->find&install中新建一个插件下载地址的对话框中即可下载。<br />这种方式是完全自定义一个全新的工程后再进行框架搭建，比较累，尤其是添加依赖包的时候，需要根据自己的项目需要一个一个添加，很烦人，所以我们使用的第二个方法就直接找了一个现成的，到 Appfus 的网站<a href="http://appfuse.org/" target="_blank">http://appfuse.org/</a> 根据项目需要下载了一个项目框架作为原型，我们使用的是appfuse-light-webwork-ibatis- 1.8.2（webwork2.26,spring2.0,ibatis2.0），如果你使用的是其他的的技术，如 struts2，hibernate....直接到网站上下载一个相应的框架即可。appfuse框架使用maven2作为基本构建工具，其中自带的 pom.xml也替开发人员写好了，中所定义的依赖包可满足一般的开发需要，如需要自己指定的包，那么直接在其pom.xml中添加即可。要将这个框架作为eclipse工程使用，需要在解压后的框架目录下执行：<br /><br /><pre name="code" class="java">mvn eclipse:eclipse -DdownloadSources=true</pre><br /><br /><br />这个命令会将工程将框架转换为eclipse工程，并从远程下载jar包到本地仓库（window下是(C:\Documents and Settings\${username}\.m2\repository），之后执行：<br /><br /><pre name="code" class="java">mvn -Declipse.workspace=&lt;path-to-eclipse-workspace> eclipse:add-maven-repo</pre><br /><br /><br />其中path-to-eclipse-workspace是本机的eclipse的worksapce的路径。执行后maven会在eclipse中建立一个M2_REPO环境变量，并将其中所有的jar包引入到工程中，完全自动化，十分方便。<br />     打开eclipse修改开发中的环境变量（我们项目中使用了Myeclipse插件），找到相应的工程，发现框架中已有一些代码，这是appfuse提供给开发人员的示例代码，我们可以按照自己以前项目的积累进行对框架进行完善，形成一套自己的开发框架，之后设置工程环境变量，在该项目中右键 ->Myeclipse->add web capabilities->指定该工作空间下的Src/main/webapps作为WEB工程的根路径，并指定修改JAVA Build Path中<br /><pre name="code" class="java">src/main/java
src/main/resource
src/test/java
</pre><br />的三个soucrefolder的outputpath 为scr/main/webapp/WEB-Inf/class，这样设置的目的是便于开发人员在本地进行部署测试，否则按照appfuse原有的工程设置是不能进行顺利部署的。<br />至此，我们已经将Maven2结合到项目中，一开始可能对目录结构有些不适应，毕竟这是maven提供的项目框架格式，可以修改为自己习惯的，但是不建议这样做。设置完成后，cd到项目路径下，运行<br /><pre name="code" class="java">mvn test
mvn package
mvn install</pre><br /><br /><br />三个命令，均成功后，可上传到cvs/svn上面去，共享给项目组人员，各开发人员可直接使用，但有可能M2_REPO环境设置路径不一样（C:\Documents and Settings\${username}\.m2\repository，毕竟不是所有人都把系统装在C盘），需要手动修改一下。<br /><br /><strong>2.建立开发团队内部仓库</strong><br />          为了便于团队的依赖包管理，我们不能全部使用官网的仓库，毕竟上面不具备我们项目开发所需要的所有的依赖包，所以我们需要为自己的团队建立一个内部仓库，可以自己管理所需的依赖包，建立一个内部仓库也十分简单（附录中我们会使用artifactory进行开发内部库建立）：<br /><br />首先需要一个 http server ，找台服务器装上 apache 就行。放一个空的 maven 目录到 htdocs 下，假设服务器 ip 为 192.168.0.1 ，确认能用 <a href="http://192.168.0.1/maven" target="_blank">http://192.168.0.1/maven</a> 访问到。<br /><br />copy 本地仓库的jar包到服务器：对于 windows xp 来说一般在 C:\Documents and Settings\ ％ username%\.m2 下，其中％ username ％为操作系统登录用户名。这时你可以看到 ${user.home}/.m2/ 下有个 repository 目录，里面有很多的项目相关 jar ，目录按 groupId/ artifactId/version 排好。把 repository 目录整个拷贝到 apache 服务器的 maven 目录下，如果需要官方缺少的 jar 或公司内部 jar ，仿照这个目录结构，做好 jar 放到 maven 目录下。或者把包copy到本地，运行：<br /><pre name="code" class="java">mvn install:install-file -Dfile=X:/path/mail-1.3.jar -DartifactId=javamail -Dversion=1.3.1 -Dpackaging=jar -DgroupId=javamail</pre><br /><br /><br /><br />开发人员要使用内部仓库，只需修改本地工程pom.xml ，在 repository 配置后加上：<br /><br /><pre name="code" class="java">&lt;repository>
      &lt;id>companyName&lt;/id>
      &lt;url>http:// ${ip}/maven&lt;/url>
&lt;/repository></pre><br /><strong><br />3.每日构建</strong><br />    为了保证项目质量，尽早的发现项目中的bug，我们需要每日对系统进行构建，这也是我们使用maven的初衷之一，maven的几个命令就可帮助我们完成这项任务，当然我们可以使用持续构建工具与maven结合实现定时自动构建。构建方式：<br /><pre name="code" class="java">mvn test
mvn package
mvn install</pre><br /><br />maven 会自动编译，测试，运行所有的testcase，这也要求我们的开发人员一定要按照规则编写单元测试代码，否则每日构建的意义就不大了。appfuse框架中提供了很好的单元测试代码，包括针对数据库层，业务逻辑层，web展示层等等，如果我们能很好的编写这些单元测试，那么对于系统后续的缺陷管理和控制是大有裨益的。<br /><br />构建完成后或构建时需要对最新版本的项目进行部署，便于次日安排测试人员进行测试，maven提供多多种部署方式，在pom.xml进行项目的部署配置，不同的部署方式根据协议的不同，配置方式也有所差异：<br />以文件方式部署<br />  <br /><pre name="code" class="java">&lt;project>
        [...]
        &lt;distributionManagement>
            &lt;repository>
                &lt;id>proficio-repository&lt;/id>
                &lt;name>Proficio Repository&lt;/name>
                &lt;url>file://${basedir}/target/deploy&lt;/url>
            &lt;/repository>
        &lt;/distributionManagement>
        [...]
    &lt;/project></pre><br /><br />以SSH2方式部署<br />  <br /><pre name="code" class="java">&lt;project>
        [...]
        &lt;distributionManagement>
            &lt;repository>
                &lt;id>proficio-repository&lt;/id>
                &lt;name>Proficio Repository&lt;/name>
                &lt;url>scp://sshserver.yourcompany.com/deploy&lt;/url>
            &lt;/repository>
            &lt;/distributionManagement>
        [...]
    &lt;/project></pre><br /><br /> 以SFTP方式部署<br /> <br /><pre name="code" class="java">   &lt;project>
    [...]
    &lt;distributionManagement>
        &lt;repository>
            &lt;id>proficio-repository&lt;/id>
            &lt;name>Proficio Repository&lt;/name>
            &lt;url>sftp://ftpserver.yourcompany.com/deploy&lt;/url>
        &lt;/repository>
    &lt;/distributionManagement>
    [...]
    &lt;/project></pre><br />以扩展SSH方式部署<br />   <br />目前为止上述3中方式已经被Maven包含，所以只要distributionManagement就可以了，但是使用扩展SSH命令部署的话你不仅需要配置distributionManagement还需要一个build extension，如下<br />   <pre name="code" class="java"> &lt;project>
        [...]
        &lt;distributionManagement>
            &lt;repository>
                &lt;id>proficio-repository&lt;/id>
                &lt;name>Proficio Repository&lt;/name>
                &lt;url>scpexe://sshserver.yourcompany.com/deploy&lt;/url>
            &lt;/repository>
        &lt;/distributionManagement>
        &lt;build>
            &lt;extensions>
                &lt;extension>
                    &lt;groupId>org.apache.maven.wagon&lt;/groupId>
                    &lt;artifactId>wagon-ssh-external&lt;/artifactId>
                    &lt;version>1.0-alpha-6&lt;/version>
                &lt;/extension>
            &lt;/extensions>
        &lt;/build>
        [...]
    &lt;/project></pre><br />    The build extension specifies the use of the Wagon external SSH provider, which does the work of moving your files to the remote server. Wagon is the general purpose transport mechanism used throughout Maven.<br /><br />以FTP方式部署<br />  <br /><pre name="code" class="java">&lt;project>
        [...]
        &lt;distributionManagement>
        &lt;repository>
            &lt;id>proficio-repository&lt;/id>
            &lt;name>Proficio Repository&lt;/name>
            &lt;url><a href="ftp://ftpserver.yourcompany.com/deploy&lt;/url>" target="_blank">ftp://ftpserver.yourcompany.com/deploy&lt;/url></a>
        &lt;/repository>
        &lt;/distributionManagement>
        &lt;build>
            &lt;extensions>
                &lt;extension>
                &lt;groupId>org.apache.maven.wagon&lt;/groupId>
                &lt;artifactId>wagon-ftp&lt;/artifactId>
                &lt;version>1.0-alpha-6&lt;/version>
                &lt;/extension>
            &lt;/extensions>
        &lt;/build>
        [...]
    &lt;/project></pre><br /><br />一旦你配置好了相应的POM你可以执行下列命令来开始部署：<br />mvn deploy<br /><br />同时也可通过执行一下命令生成此项目的站点报告，供项目参与人员使用。<br />mvn site<br /><br /><br /><strong>三. 结论<br /></strong><br />    maven的强大显而易见，有很多其他的特性本文没有提及，如对各类插件的支持，以及对项目模块划分和继承关系的管理，这些都是maven的特性，也是 maven对项目生命周期的详尽诠释，有兴趣深入的TX可以下载我在附件中提供的教程《Better Builds With Maven2》.同时我也提供我根据appfuse建立的一套项目框架，可在myeclipse环境下使用，大家可以共同探讨完善。<br /><br /><strong>附1：使用artifactory为Maven2团队开发建立内部开发仓库详解</strong><br />在真正使用Maven后是为团队进行定制，所以我们不应使用官网的开发库，应在本地建立一个内部开发库对团队的jar包进行管理，所以我们首先搭建一个内部库环境，除文章上面所述的搭建Apache服务器方法外，我们还可以使用artifactory(下载地址：<a href="http://www.jfrog.org/sites/artifactory /latest/" target="_blank">http://www.jfrog.org/sites/artifactory /latest/</a>)，一个很好的maven内部库的应用系统，下载后执行bin目录下的artifactory.bat命令即可。启动后可访问控制台http://内部库ip:8081/artifactory/验证服务是否成功启动。默认的用户名为admin，密码为password。artifactory最重要的是可配置第三方jar包，在deploy artifacts中加入并制定其groupId和artifactId即可<br />（不要忘记更改本地的pom.xml文件引入新加的jar包）。<br />在开发端我们需要更改全局配置文件setting.xml文件，将工程中setting.xml放入本地maven2->conf目录下，配置内部仓库的地址，只需要在setting.xml的mirrors元素中加入以下配置：<br /><pre name="code" class="java">&lt;mirror>
      &lt;id>emay local&lt;/id>
      &lt;mirrorOf>central&lt;/mirrorOf>
      &lt;name>emay local artifactory&lt;/name>
      &lt;url>http://内部库ip:8081/artifactory/repo&lt;/url>
    &lt;/mirror>
</pre><br />这里要注意的是，在加入这段代码后我使用的appfuse框架中自带的应用服务器tomcat6进行构建，不能正常运行，报tomcat出错，把这段去掉或者在pom.xml中将应用服务器改为tomcat5.5后运行正常。看来maven还是有不少bug需要改进。<br /><br />配置完成后再运行mvn install即可正常进行构建，maven会从本地内部库中寻找项目所依赖的jar包。运行mvn clean清除maven生成文件。<br /><br /><br /><br /><strong>附2：maven2命令大全</strong><br /><br />    validate，验证工程是否正确，所有需要的资源是否可用。<br />    compile，编译项目的源代码。<br />    test-compile，编译项目测试代码。<br />    test，使用已编译的测试代码，测试已编译的源代码。<br />    package，已发布的格式，如jar，将已编译的源代码打包。<br />    integration-test，在集成测试可以运行的环境中处理和发布包。<br />    verify，运行任何检查，验证包是否有效且达到质量标准。<br />    install，把包安装在本地的repository中，可以被其他工程作为依赖来使用<br />    deploy，在整合或者发布环境下执行，将最终版本的包拷贝到远程的repository，使得其他的开发者或者工程可以共享。 <br />    generate-sources，产生应用需要的任何额外的源代码，如xdoclet。
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/230265#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 22:14:44 +0800</pubDate>
        <link>http://www.javaeye.com/topic/230265</link>
        <guid>http://www.javaeye.com/topic/230265</guid>
      </item>
      <item>
        <title>当遭遇系统的切面功能时，如何去写user stories呢?</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fly-ever.javaeye.com">fly_ever</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/230912" style="color:red;">http://www.javaeye.com/topic/230912</a>&nbsp;
          发表时间: 2008年08月21日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这段时间在看如何实施敏捷开发方法，仔细看了如何写user story ,还有很多疑惑的地方希望得到各位的指导。<br />当写user stories时，如果一些功能是在用户描述每个功能时都会涉及到的，我暂且称为切面功能吧，<br />比如一个系统中的用户访问行为记录，权限设置功能等。<br />此时我们如何处理这些切面功能呢，是按用户的描述，把切面功能分别放入各个user stories中，<br />还是单独拿出来作为一个user stories来实现呢？<br />当然如果权限简单的话，可以融合到具体的各个user stories中，<br />如 <a href="http://www.javaeye.com/topic/53246" target="_blank">http://www.javaeye.com/topic/53246</a><br />这里讨论的，角色和权限比较简单，就可以把功能划分，并分别放入相应的user stories即可。<br />但是一个复杂的权限系统，需要对系统进行整体考虑，然后单独进行设计来实现，<br />这样的话，把这些切面功能放到各个user stories中显然是不合适的。<br />例如一个权限的例子：如果用户查看数据时，需要达到这样的控制，用户属于具体的一个省份，因此默认情况下用户只能查看所在省份的数据，但管理员可以看到所有省份的数据，同时管理员可以指定某些用户一些省份列表，使他们能查看多个省份的数据。<br />这种权限该如何写到user story中去呢？<br />还希望那些实践过user stories的兄弟们能够指导指导
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/230912#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Aug 2008 09:28:54 +0800</pubDate>
        <link>http://www.javaeye.com/topic/230912</link>
        <guid>http://www.javaeye.com/topic/230912</guid>
      </item>
      <item>
        <title>项目管理工具-streber中文资料-实践使用笔记 </title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://orpheus.javaeye.com">orpheus</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/230399" style="color:red;">http://www.javaeye.com/topic/230399</a>&nbsp;
          发表时间: 2008年08月20日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-size: small;"><strong>1.Streber背景介绍：</strong>
</span>
<br />
    Streber是一个基于WEB的在线项目协调工具，它融合了wiki的思想和项目协作管理机制，成为了一个适用于小型团队的可以贯穿真个项目生命周期的项目协作和管理工具。<br />
    Streber的出现的历史并不长，作者为德国人，网名pixtur，其产品原型为05年一个作者的在线office系统，在进行这个在线office系统开发工作当中，作者发现其思路可以很好的成为一个在项目开发的协调组织的工作平台。于是作者对原有产品的不断的修改和完善其在线协作理念，乃至到最后从原有产品中完全剥离出来成为独立的开源项目。<br />
    &ldquo;Streber&rdquo;在德语中意为是一个具有高度热情和经理旺盛的人，按我们白话说就是一得瑟的人....它是基于PHP开发的项目，目前的最高版本是 0.803，基于php5。同时Sreber是基于GPL开源协议，这点一定要注意，这意味着你如果使用其进行修改和发布也要遵循GPL协议，把你的修改的代码进行开源发布。</p>
<p><img src="http://zhangmeng.blog.51cto.com/attachment/200807/200807191216457710137.jpg" height="571" alt="Strber" width="993" />
<br />
                                                          图1-1<br />
Streber截图<br />
-----------------------------------------------------------------------------------------------------------------------<br />
<span style="font-size: small;"><strong>2.Streber特点概述：</strong>
</span>
<br />
1.基于wiki的方式<br />
    Streber中采用基于wiki的管理方式和语法，采用多人协作的方式进行项目的管理和文档的编写，项目中的任务和文档资源无论创建者是谁，其他人都可以方便的修改和完善，在这种方式下项目人员自由度很高，极大的提高了项目协作的效率，但需要求人员在遵守一定的项目规则下进行项目协作。基于wiki的思想更可以使知识管理与项目紧密的联合起来，不用再为项目搭建一套知识管理系统。<br />
2.简单而灵活项目管理协作系统<br />
    Streber类似于jira，也是面向issue的项目协作系统，使用方便，操作简单，系统中常用操作基本元素就是task（也称为issue）和 comment，并且可灵活进行运用，可以作为贯穿项目生命周期中的支持系统，也可以单独作为缺陷跟踪系统，甚至可以单独作为项目知识管理系统使用。<br />
3.label标签分类功能：<br />
    Streber中的任务类型可以是一般Task类型，DOC类型，bug类型，idel类型，<br />
feature类型，research类型，refactor类型等等，我们可以通过这些类型对任务进行表示和搜索。<br />
4.全面的角色及其权限分类<br />
    Steber中的默认角色按照一般项目类的角色分为项目成员，系统管理员，项目经理，开发人员，方案人员，测试人员，客户，受信客户，以及Guest集中角色，各个角色的默认权限不同，如有特殊情况，管理员可以为每个人定制权限。这些角色是系统自带的，如果要添加自己项目的权限，可以通过直接修改数据库数据实现。<br />
5.邮件通知和RSS支持<br />
    在项目中的每个task的辨变更和更新记录都会被详细的记录下来，从更改者的角度，这些在进行变更和任务更新的时候可以选择是否将更新邮件通知此此任务的相关干系人，保证信息的及时同步。 并且任务的相关联系人可以使用RSS的方式对项目的变更和更新记录进行订阅，实现主动获取变更信息的功能。<br />
6.替代sharepoint等项目门户网站功能<br />
    我们可以使用Streber代替项目门户的功能，可以将在各个项目中中Contact Info、Baselined Schedule、News元素放在项目主页上，使项目信息沟通全面通畅。Streber支持，英，德，法，西班牙，意大利等12种语言的系统界面，可惜的是目前还不支持中文的系统界面。<br />
-----------------------------------------------------------------------------------------------------------------------<br />
<br />
<strong><span style="font-size: small;">3.Streber应用介绍</span>
</strong>
<br />
3.1安装：<br />
   Streber的安装十分简单，简单分为以下几个步骤：<br />
1.环境准备：准备一个Mysql，一个Apache服务器，并从http://www.streber-pm.org/index.php?go=fileDownload&amp;file=6434下载一个Streber的最新版，然后直接copy到htdocs目录下。<br />
2.启动Apache，运行index.php。根据提示填写管理员用户名，密码，数据库地址，用户名，密码。<br />
3.删除安装目录下的install文件夹<br />
<br />
3.2应用：<br />
    使用过其他项目协作工具的人都会发现Streber的应用操作十分简单，它主模块分为Home，Project，People，Company几个部分，一般在进行项目开发的时候我们只会经常用到项目模块中的功能。<br />
<br />
3.2.1 Home：<br />
    在Home模块我们可以管理与自己相关的项目，任务，为添加评论，查看最近的任务更新列表，书签，和effort（人工管理）<br />
3.2.2 Project:<br />
    Projec是我们在进行项目协作的时候最为经常使用的模块，也是Streber系统的核心模块。在Project中我们可以进行项目的定义，项目中任务的分配，项目相关文档的撰写，项目后期缺陷的跟踪调试，项目进度控制，项目任务的变更和进度更新等等，所有项目的行为活动都是在这里进行定义。每个Project中针对项目的管理又细分为 Task，Topic，Milestone，Version，Files，Effors，Chages几个元素进行管理，为了便于理解，我们可以把所有这些元素都看为不同类型的task。当我们建立Project的时候，我们可以根据自己的需要设定是否保留这些元素。<br />
    Task：Streber中所有项目活动Streber中所有项目活动都是基于Task，不论这个Task可能是个开发任务，或是个Bug，又或者是一个说明文档，设计文档，可以说，它是类似JIRA中的 issue驱动，在Streber中的Task驱动。每个Task都有一个唯一的Streber中所有项目活动都是基于Task，不论这个Task可能是个开发任务，或是个Bug，又或者是一个说明文档，设计文档，可以说，它是类似JIRA中的issue驱动，在Streber中的Task驱动。每个 Task都有一个唯一的TaskID，通过这个TaskID会对应一个唯一的项目URL，这样，我们可以使用这个TaskID作为每次代码check-in的说明，说明此次check-in的目的，就不用写太多的commit日志了。Task的属性分为一下几种：<br />
      1.Task属性： Task中可以指定任务的Milestone（指定的为了实现某个Milestone所做的任务），任务的优先级，任务分配人员，目前的状态(new,open,block,done,approved,closed)，任务完成节点（如果本次无法完成，设定为下个版完成，如果本次可以完成，需要设定在哪个milestone完成的，或者可以不做设定），任务完成类型（如果是task则类型为done，如果为bug则类型为fixed，其他的根据任务类型依此类推）。<br />
      2.Task时间管理：预计正常完成时长，最坏情况下的完成时长（正常时间+buffertime），任务起始时间，任务结束时间。<br />
      3.Task描述:使用wiki格式。<br />
      4.Task显示：任务的缩写（显示在导航栏的名称），任务id（可根据任务所需自由设定，这个是由项目组设定的，比如ex-01）,任务的标签，供以后任务分类和搜索使用，其中包括Bug，Feature，Enhancement，Refactor，Research，Idea，Orgnaize，Wiki，Docu。<br />
    Topic：主题信息管理,Topic在项目中一般起到发布主题类的信息，可以是项目说明文档，项目会议记录，项目需求变更计划，项目内部新闻等等文档类信息，同样可作为项目知识管理的功能使用，比如代码规范，项目开发规范。<br />
     Milestone：里程碑计划管理，项目的里程碑管理，同Task设置类似，Milestone中可以设置负责人，时间管理，任务描述，显示描述，Milestone设置后可以与每个task进行关联，上面已经提到，每个task的目标都是要针对于某个具体的Milestone的，所以把Milestone看做是一个大的 Task，由无数小的task的集合形成。Streber的思想还是比较严谨的开发模式，具体的使用还是看各个项目了。<br />
     Version：版本计划管理,里面元素设定与Milestone和Task类似，我们在项目中可以把Version看做Milestone的父类，把Milestone看做Task的父类。在项目周期前期，按照这种方式，先设定Version，再设定这个Version中的Milestone，在设定每一个具体的 Task，给其指定所属的Milestone。<br />
     File：项目文件管理，与此项目有关的资源文件可以同一放在这里进行管理，与一般的在线系统类似，Streber的理念就是使平台达到能将项目周期活动都集中在此的目的，所以此功能虽然简单，但是还是相当有用的，我们可以把项目工具，框架，各类前期说明书等等文件都在此进行资源共享，统一管理。具体好处就不多说了。<br />
     Efforts：字面上的意思是人工管理，感觉其实就是在在项目任务中计算人员工作量的工具，在项目开发和人工绩效考核的时候应该有一定作用，同时Streber提供统计Efforts功能，但似乎这个功能还未完全完善，建议可以先不用使用。<br />
     Changes：变更记录，所有任务和文档的内容更新和状态更新以及评论添加都会在这里可以进行查看详细的信息记录<br />
<br />
 <br />
3.2.3 People: 人员管理 ，在这里设置项目人员信息，人员类型，默认的人员类型系统管理员，项目经理，开发人员，方案人员，测试人员，客户等项目基本干系人。我们在这里对项目中所有干系人进行管理，并设定相关人员所属的公司。个人认为在项目中，无论大小，上述的这些角色一定要尽量全员参与到系统的使用中来。不同的干系人具有不同的人员权限的设置，系统在初次安装之后只有管理员有用最高权限。权限设置比较简单，只有针对项目，人员，登陆，等相关权限，但对于一般的小型项目足够使用了。<br />
<br />
3.2.4 Companies:公司管理 在这里可设置公司信息，公司类型，公司类型可为<br />
一般客户，高活跃度客户，供应商，各做伙伴。在建立项目和建立人员的时候都可以设定所属公司。<br />
3.2.5 Search:搜索功能，在所搜的关键字前加入&lsquo;！&rsquo;可直接跳到最佳结果页面中。<br />
----------------------------------------------------------------------------------------------<br />
<strong><span style="font-size: small;">4.Streber在项目中的实践：</span>
</strong>
<br />
    我们基本上了解了Streber的功能，可以看出系统使用相对大型商业软件要简单的多，相对缺少了很多纷繁复杂的工作流程，细化流程和统计功能。但是对于中小型项目来说，Streber已经抓住了项目中的关键要素，只要使用方法得当，将项目管理思想很好的融合到工具中，Streber可以使一般项目的质量和开发过程得到一个很大层次的以高。下面就我在项目管理过程中的经验与结合Streber的一些实践方法分享出来，希望大家能提出宝贵意见并且能将自己在管理过程中的经验或使用工具的经验分享出来。<br />
<br />
4.1 建立新项目<br />
        建立新项目的时候，注意项目描述的重要性，项目描述是显示在项目首页最醒目的地方，所有的项目干系人每次进入项目的时候都会看到，在项目描述中将项目的目标和意义写好，稍微夸大也是允许的，要让让开发人员认识到他们所做的事情的重要程度，做到信息对称，我们的项目团队对项目的成功有共同的认识，使我们项目顺利完成的第一步。在项目关闭后，我们将项目总结再补充到项目描述之中，整个项目周期完成。<br />
<br />
4.2  建立干系人管理和沟通机制<br />
        包括客户，公司领导，开发人员，市场人员等和项目相关的一切人员，都在系统中设立相应的账号使各方人员均能参与其中。我们在其中一个项目中为客户开放阅读（RSS订阅）与编辑权限（编辑权限看情况而定），可以让其参与其中，增加客户的团队归属感，使其了解团队的各个方面，包括项目进度汇报，各类文档资料，潜在困难，资源需求，使其主动帮助项目向更好的方式发展。<br />
4.3   建立项目知识库<br />
        建立知识库的好处众所周知，知识库已经越来越成为现在软件项目过程中的一个重要组成部分。我们使用Project中的<br />
Topic功能实现项目中的知识库的功能。我们在知识库中记录项目的代码规范，测试用户编写，项目工具经验，页面设计规范，文档专业规范等一般基础性知识点，同时在一些项目中，可以直接在知识库中进行项目说明书，开发设计文档，项目风险列表等开发类文档。使用 Project中的Folder功能可以进行文档的分级显示和管理。<br />
<br />
4.4沟通管理<br />
     Streber本身就是一个很好的沟通管理工具，我们在项目中主要使用其作为一个被动信息共享平台。开发人员使用Topic功能进行针对项目周报和月报的撰写，具体方法可以让汇报与上面的知识管理使用不同的Folder，在汇报的folder中为每一个开发人员（使用姓名或员工编号）建立一个周汇报的 topic和一个月报的topic。客户，公司领导和项目其他相关人员可以通过邮件或者Streber的RSS功能定期或手动收取这些报告，以了解项目的进度。同时项目经理和高层领导可以在这些汇报中批示自己的意见建议，或鼓励或表扬，对于开发人员的开发热情是一种激励。<br />
     在Streber中，每个任务都有一个TaskID的唯一标识，我们利用这个ID与其他的项目协作工具关联起来，例如我们在每日编译后在Check in到代码库的时候可以将每人负责的的Taskid作为comment提交到代码库。这样每次的提交都会有一个具体的taskid任务与之对应，以后有问题可以根据taskid对代码版本进行针对性的复查，将版本与代码关联统一管理起来。<br />
 <br />
4.5任务流程和任务设置<br />
     任务分配和协作无疑是使用Streber最大的目的之一，在我们的项目实施周期，我们无论采用何种软件开发方式，最终都离不开以下几步： 计划任务（全体项目组人员）-》形成项目阶段界定（milestone，项目组全体成员）-》分析安排任务（全员讨论，项目助理在Project中登记任务）-》任务实施（项目组员打开任务，实施更新进度）-》完成任务，项目经理审核-》审核通过，项目助理关闭此任务。注意在进行任务分配和登记的时候注意任务一定是具体的，可以验证的。 Strber中的任务具有new，open，done，apprived，closed几个状态，我们对应任务在上述不同阶段使用不同的状态进行标示，同时任务在分配登记的信息只是任务的一些基本信息，描述，优先级，状态，类型（Label，新的开发任务可以为task或feather，如果是），至于任务的时间就需要和每个被分配人员商议讨论，最好由本人进行估算，之后再进行登记。<br />
     在项目实施过程中，注意要让团队成员养成每日对任务情况进行汇报的习惯，这个习惯如同每日编译和每日check in一样重要，目的是事project中的任务进度一定要反映最近的情况。具体的汇报方式可以使用评论的方式，每个成员对本人每日的工作在相应任务下面以 add comment(评论)方式加入简短的总结，并根据自己的任务完成情况更新项目情况，包括项目完成进度百分比，项目状态，如果遇到任务变更或突发实践也可以直接更改任务的周期，并最好在comment中说明一下。在任务完成并审核后，登记人员对任务进行关闭，关闭的时候需要选择此任务的关系原因，如果是新功能（feather）的task，直接选择done即可，如果是bug类型的任务，则需要选择fixed，其他类型可根据任务的状态和类型不同选择相应的关系状态。<br />
     <br />
     在缺陷跟踪方面，Streber中对缺陷的跟踪方式与任务一样，事实上这里的缺陷就是一种类型为BUG的任务，其发布方式和流程与其他任务没有太大区别，只需要注意task的类型，label的类型等设置即可。Tester（测试）在进行缺陷登记的时候，注意是否写清了Bug的重现步骤，并且保证所有的缺陷都是有登记的人进行验证后进行关闭。我们在登记缺陷的时候，也要写清楚这个缺陷的优先级，开发人员一定要保证在开发新功能前把所有严重的缺陷解决掉再开始新任务。<br />
<br />
-----------------------------------------------------------------------------------------------<br />
5.不适合使用Streber的情况：<br />
1.Streber官方网站上表明，本系统只适合1-40人的小型团队，的确，Streber没有商业软件的自动化流程，也没有其软件的功能细化程度高，但这个描述也有点儿太绝对了，还是要根据项目实际情况和管理体系来确定。<br />
2.Streber不是一个缺陷管理工具，它关注与项目的整个生命周期，同样也没有相应的二次开发的API和与CVS，SunVersion之间的插件。<br />
3.Streber不是一个纯wiki系统，不要把它当作WIKI系统使用，它的性能对于项目内部管理来说足够使用了，但是并没有加入太多的性能优化和缓存机制，所以把其当作内容管理系统来做是相当不明智的。<br />
-----------------------------------------------------------------------------------------------<br />
6.使用总结：<br />
在软件过程改进技术不断发展和进步的情况下，很多国内中小型企业的开发规范化和项目管理机制确一直滞留在4，5年前的样子，这样的情况对于企业和雇员的发展都具有很大的弊端。近年来市面上也出了很多项目协作和管理工具，例如有名的JIRA，Xplanner，版本控制工具svn，cvs等等。这些工具各有个的特点，关键使用工具不是目的，目的是要在工具辅助基础使用项目管理思想上最大限度的对项目进行控制，对软件构造过程进行不断持续的优化和改造，这样才能使软件企业和项目得到良性发展。本文在Streber上也是个大体的说明，strber中包括wiki的使用，任务的转接分派，项目元素的移动，权限的具体设置本文都没详细的进行阐述，我会在以后的相关文章中逐渐进行说明，由于streber的中文文档几乎没有，如果大家有相关的经验技术可以一同进行交流。<br />
-----------------------------------------------------------------------------------------------<br />
<strong><span style="font-size: small;">附录：WIKI语法初窥</span>
</strong>
<br />
WIKI语法适合进行多人协作文档和版本控制，由于streber基于WIKI的思想和语法进行设计，文档的编写使用都是WIKI的语法，所以本文简单介绍一下WIKI语法核项目中常用的语法，如在使用过程中需要wiki语法的进一步支持，可以到这里http://www.allwiki.com/wiki/Wiki查询。<br />
 <br />
标题（heading）<br />
== Top Level ==<br />
<br />
=== Second Level ===<br />
<br />
或者<br />
<br />
Top Level<br />
=========  &lt;-  3 or more '=' characters<br />
<br />
Second Level<br />
------------   &lt;- 3 or more '-' charaters<br />
列表（List）<br />
 <br />
# Numbered<br />
# Numbered<br />
代码框<br />
[ code from=&quot;index.php&quot;]<br />
some more code<br />
[ /code]<br />
 <br />
Email链接<br />
Send to mailto:zm@streber<br />
 <br />
表格（Tables）<br />
<br />
|Header |Header |<br />
|Cell |Cell |</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/230399#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Aug 2008 10:33:24 +0800</pubDate>
        <link>http://www.javaeye.com/topic/230399</link>
        <guid>http://www.javaeye.com/topic/230399</guid>
      </item>
      <item>
        <title>从软件质量想开去......</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gurudk.javaeye.com">gurudk</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/231393" style="color:red;">http://www.javaeye.com/topic/231393</a>&nbsp;
          发表时间: 2008年08月22日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          先插播一则广告，我建立一个圈子，讨论软件质量和开发效率，欢迎大家加入。<br /><a href="http://devmgr.group.javaeye.com/" target="_blank">http://devmgr.group.javaeye.com/</a><br /><br />本文想采用头脑风暴的方式，大家一起想影响软件质量的因素，便于我们采用QFD（质量机能展开）方法改进软件质量。<br />我先首先介绍一些软件的质量特性，就是“XX性”，参考McCall，boehm，iso9126模型，其它自己杜撰的。<br /><br /><strong>.正确性（correctness）<br />.可靠性（reliability）<br />.完整性（integrity）<br />.可用性（usability）<br />.效率性（efficiecy）<br />.可维护性（maintainability）<br />.可扩展性（extensibility）<br />.可测试性（testablity）<br />.互操作性（interoperablility）<br />.灵活性（flexibility）<br />.可重用性（reuseablility）<br />.可移植性（portablility）<br />.明确性（clarity）<br />.可修改性（modifiablity）<br />.可恢复性（resilience）<br />.可理解性（understandablity）<br />.有效性（validity）<br />.功能性（functionality）<br />.普遍性（generality）<br />.经济性（economy）<br />.透明性（transparency）<br />.合理性（rationality）<br />.可验证性（verificablity）<br />.可追踪性（traceability）<br />.简单性（simplicity）<br />.一致性（consistency）</strong><br /><br />以下是我的砖头，有些是客观的，有些是主观的，道行尚浅，欢迎继续拍砖：<br /><br /><strong>1）项目管理与计划（☆☆☆☆☆）</strong><br />  .进度计划，估算是否合理，满足合理性；<br />  .是否遗漏，满足完整性；<br />  .细分的任务是否明确，满足明确性和可追踪性；<br />  .是否建立了沟通机制，满足透明性。<br />  .里程碑是否明确，满足明确性和可验证性。<br />  项目计划和管理的不好，会直接影响软件质量。<br /><br /><strong>2）需求分析（☆☆☆☆☆）</strong><br />  .是否描述了所有需求，满足了完整性。<br />  .是否清晰阐述需求，满足明确性。<br />  .是否正确描述需求，满足正确性。<br />  .是否简单明了，不用副词和形容词，满足准确性和可理解性。<br />  .是否容易测试，满足可测试性。<br />  这是影响软件质量最大的因素。<br /><br /><strong>3）设计（☆☆☆☆）</strong><br />  .是否容易理解，满足可读性和可理解性。<br />  .数据库和架构是满足可扩展性。<br />  .数据库是否考虑到性能，满足可扩展性和效率性。<br />  .数据库的范式是否合理，满足合理性。 <br />  .架构是否考虑到性能问题，满足可扩展性和效率性。<br />  .架构是否考虑周到，满足完整性。<br />  .架构模块是否划分合理，满足可重用性。  <br />  .模块设计是否考虑性能问题，满足效率性。  <br />  .界面设计是否容易操作和使用，满足易用性和可用性。<br />  非常重要，会影响软件的性能，可用性。<br /><br /><strong>4) 测试（☆☆☆☆）</strong><br />  .测试用例是够合理覆盖业务流程，满足完整性。<br />  .测试策略是否制定，满足经济性。<br />  确保软件能够履行职责，直接影响软件质量。<br /><strong><br />5) 编码实现与集成（☆☆☆☆☆）</strong><br />  .编码是否考虑了性能问题，满足对设计的可追踪性；<br />  .编码是否进行测试，满足性能和功能的可验证性，功能的合理性。<br />  .代码是否规范，满足可读性，可理解性和可维护性。<br />  .代码是够满足可扩展性。<br />  .代码意图是够明确，满足明确性。<br />  .代码命名是否合理，满足一致性。<br />  .是够进行单元测试和持续集成，满足效率性，正确性，有效性。<br />  实现好不好，影响功能符合性，修改的可维护性。<br /><strong><br />6) 技术评审（☆☆☆☆）</strong><br />   .预审质量是够合格，满足充分性。<br />   .评审方式（桌查，轮查，走查，审查）选择是够合理，满足合理性。<br />   .评审人员是够选择合格，满足合理性。 <br />   .评审缺陷是否记录，满足可追踪性。<br />   .评审检查表是否合理，满足可验证性。<br />  <br /><strong>7) 沟通（☆☆☆☆）</strong><br />   .是够满足及时性，有效性。<br />   .是够满足充分性，确保理解一致。<br />   .需求分析和客户沟通不好，需求就会不明确。<br />   .开发和需求，设计人员沟通不好，就会错误的去实现功能，造成浪费。<br />   <br /><strong>8) 培训（☆☆☆）</strong><br />   通过培训，可以使人获取用于工作的技能，从而间接影响软件质量。<br />   .需求分析培训。<br />   .架构设计培训。<br />   .数据库设计培训。<br />   .模块设计培训。<br />   .界面设计培训。<br />   .单元测试培训。<br /><br /><strong>9) 管理（☆☆☆☆）</strong><br />   .配置管理，满足可追踪性，可恢复性，可维护性。<br />   .质量保证，满足可执行性。<br />   .制度，制度合理，人积极性高，间接影响软件质量。<br />   管理得好，效率高，间接影响软件质量。<br /><br /><strong>10)人（☆☆☆☆☆）</strong><br />   .IQ，逻辑思维能力强，能够透彻理解需求，分析条理清楚，直接影响软件质量。<br />   .EQ, 有毅力，自律，勇气，遇到问题不退缩，间接影响软件质量。<br />   .TQ, 是否好好利用时间，提高个人工作效率，间接影响软件质量。<br />   .领导，好的领导可能会影响一批人，能够使团队凝聚在一起，从而直接影响软件质量。<br />   .技术水平高低，对技术的熟悉程度，直接影响软件质量。<br /><br /><strong>11)公司（☆☆☆）</strong><br />   .是否有好的氛围，轻松，有利于发挥个人能力，高效率的工作，直接影响软件质量。<br />   .是否奖罚分明，影响心情，直接影响软件质量。<br />   .是否有重视质量的文化，不用说，直接影响软件质量。<br />   .职责是否清楚，满足明确性，如果一个人什么都做，什么都做不精，职责不清，间接影响软件质量。<br /><br /><strong>12)客户（☆☆☆☆）</strong><br />   .客户信息化程度高，IT素养高，容易沟通，间接影响软件质量。<br />   .客户积极配合，进行阶段软件演示，提交问题，间接影响软件质量，这个非常重要。<br /><br /><strong>13)方法学（☆☆☆）</strong><br />   .采用迭代开发，分阶段交付，增强了反馈，充分沟通。间接影响软件质量。<br />   .方法学选择缺乏指导，会间接影响软件质量。<br />   <br />     <br />回帖原则：<br /><br />如果是新的主题，请继续我的标号，主题尽可能简短，分条阐述和软件质量的关联。<br />如果是补充，指出原标号和标题，进行补充。<br /><br />权当一个游戏罢了。
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/231393#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 22 Aug 2008 02:34:03 +0800</pubDate>
        <link>http://www.javaeye.com/topic/231393</link>
        <guid>http://www.javaeye.com/topic/231393</guid>
      </item>
      <item>
        <title>关于代码库结构解析</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wanggcw.javaeye.com">wanggcw</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/231283" style="color:red;">http://www.javaeye.com/topic/231283</a>&nbsp;
          发表时间: 2008年08月21日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"><span style="font-size: small;">一般而言，代码库的目录结构如下：<span lang="EN-US"></span></span></span></p>
<p class="MsoNormal" align="center" style="margin: 0cm 0cm 0pt; text-align: center;"><span lang="EN-US" style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt; mso-no-proof: yes;"></span><span lang="EN-US" style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US" style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"><span style="mso-tab-count: 1;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;">有的时候，也会把<span lang="EN-US">release</span>目录命名为<span lang="EN-US">tag</span>，之所以按照这样的目录结构来命名是有缘由的，下面是我个人的一些理解，供参考。<span lang="EN-US"></span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US" style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"><span style="mso-tab-count: 1;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;">任何一个项目<span lang="EN-US">/</span>产品都会经历一个从无到有的过程，在这个过程中，我们会使用<span lang="EN-US">Trunk</span>这个目录，当产品达到发版要求时，我们会将发版那一个点的代码做一个<span lang="EN-US" style="color: red;">Tag</span><span lang="EN-US">,</span>放到<span lang="EN-US">release/tag</span>目录（由于项目不同，其目录结构也会有所差异），这是一个静态的点。比如，当<span lang="EN-US">GCL2008</span>发版时，我们会做一个<span lang="EN-US">Tag,</span>以捕捉<span lang="EN-US">625</span>的环境一部分（这里只包括源码，最好打版本的脚本也能够在这里），并没有开发环境（比如<span lang="EN-US">Dephi</span>）。<span lang="EN-US"></span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US" style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"><span style="mso-tab-count: 1;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;">当同时需要开发两个版本或对源码的改写不是那么确定时，我们就需要做一个<span lang="EN-US" style="color: red;">Tag</span>到<span lang="EN-US">Branch</span>，其实这个<span lang="EN-US">Branch</span>的作用与<span lang="EN-US">Trunk</span>类似，也是一个动态，代码会在这里不断演进。比如<span lang="EN-US">GSP</span>的升级，因为有很多不确定因素，所以我们需要做一个<span lang="EN-US">Branch,</span>以防止不确定性问题的发生对项目造成的影响，如果没有发生问题，我们还可以将其合并到主干（<span lang="EN-US">Trunk</span>）版本上。<span lang="EN-US"></span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US" style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"><span style="mso-tab-count: 1;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;">大家可能认为<span lang="EN-US">Branch</span>、<span lang="EN-US">Tag</span>是一样的，最容易理解就是<span lang="EN-US">Tag</span>是一个静态的过程，而<span lang="EN-US">Branch</span>是一个动态的过程，代码是一个不断演进的过程。<span lang="EN-US"></span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US" style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"><span style="mso-tab-count: 1;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;">对于配置管理员而言可以解决一下几个问题：<span lang="EN-US"></span></span></span></p>
<p class="MsoListParagraph" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1;"><span lang="EN-US" style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 微软雅黑;"><span style="mso-list: Ignore;"><span style="font-size: small;">1、</span><span style="font: 7pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"><span style="font-size: small;">版本发布环境一部分的备份（这里只针对源代码和<span lang="EN-US">Build</span>脚本）；<span lang="EN-US"></span></span></span></p>
<p class="MsoListParagraph" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1;"><span lang="EN-US" style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 微软雅黑;"><span style="mso-list: Ignore;"><span style="font-size: small;">2、</span><span style="font: 7pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"><span style="font-size: small;">对于后期的用户反馈以及补丁制作提供了有力支持（<span lang="EN-US">Branch</span>）；<span lang="EN-US"></span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt;"><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 10.5pt;"><span style="font-size: small;">以上我对配置库目录结构进行了解析（在这里并没有包含版本管理的思想），下面我就对<span lang="EN-US">SVN</span>的版本管理做一个简单的介绍，利用<span lang="EN-US">Log</span>日志，我们可以轻松的记录下什么时间发布了什么样的版本，这个信息对于补丁的管理是十分有好处的。<span lang="EN-US"></span></span></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/231283#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Aug 2008 17:36:39 +0800</pubDate>
        <link>http://www.javaeye.com/topic/231283</link>
        <guid>http://www.javaeye.com/topic/231283</guid>
      </item>
      <item>
        <title>QA真的能保证质量吗？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuqiang.javaeye.com">liuqiang</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/228519" style="color:red;">http://www.javaeye.com/topic/228519</a>&nbsp;
          发表时间: 2008年08月15日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 24pt; mso-char-indent-count: 2.0;"><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">我最早接触</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">是去年在一家大型制造型企业实习的时候，在这种企业中有两类人最</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">NiuBility</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">，一种是保安，搞的和特种部队似的，一种就是</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">人员，相当于现在的城管，非常的威风。</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;"> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="mso-spacerun: yes;">&nbsp; </span></span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">经过一段时间的了解发现这个公司非常的重视的</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">，当时实行的是全面质量管理，</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">具有非常大的权力，可以随时随地对各级经理的工作进行审查。进一步了解发现其实</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的作用其实是非常的大的，我有大量的一手资料表明实行全面质量管理和引入</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">后，公司产品的质量确实有很大的提升，</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">在日常工作确实可以发现很多不符合流程的东西，减少很多不必要的损失。总之</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">给我留下的印象是蛮好的。</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;"> <br /></span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp; 最后在一家</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">IT</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">研发企业工作后，也接触了点</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">CMMI/QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">工作，开始我对</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的态度是非常的积极的，但最后发现引入</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">后，我们的软件产品质量并没有提升，而且我们做了大量的</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">工作却并没有收到预期的效果，我反思后觉得有以下原因困扰我们实行</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的地方：</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;"> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="mso-spacerun: yes;">&nbsp;</span></span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">一个是按</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">CMMI</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的说法，</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">主要是检查过程的执行是否符合要求，那么并不能直接作用于产品，只能通过保证过程来间接的保证质量，对于制造型企业，很多东西是依赖于机器化的流水线作业，而对于软件企业来说很多东西很难规程化，人的因素总是琢磨不定的，所以即使过程执行的很完美，但过程所产生的东西不见得同样是完美的。</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;"> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">还有一个变通的做法是，弱化对过程的检查，强化对工作产品的检查，比如对设计</span><span style="font-size: 12pt;"><span style="font-family: Times New Roman;"> </span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">编码</span><span style="font-size: 12pt;"><span style="font-family: Times New Roman;"> </span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">测试等各方面做深入的走查，那么这就要对</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">人员的要求非常的高，要求对软件开发的各个环节有很深的认识与经验，但是公司也不大可能会把有这种能力的人放到</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的岗位，很多公司的做法是把新手推到</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的岗位，所以</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">检查难免会走形式化的路线。</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;"> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">那么到底如何保证的质量呢？我的一点不成熟的看法是主要由项目经理来保证，理由是做一个项目其实是项目经理对各个环节最了解，也具有一定的管控能力，但这又涉及到一个客观的问题，谁也不知道这个项目经理是不是有很强的自我纠错的能力，</span><span lang="EN-US" style="font-size: 12pt;"><span style="font-family: Times New Roman;">QA</span></span><span style="font-size: 12pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的理念其实也是想借助于独立的第三方来做客观的审查，但是，我还是认为给予项目经理足够的信任，让他来对质量负责更加实际点。</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/228519#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 15 Aug 2008 21:20:25 +0800</pubDate>
        <link>http://www.javaeye.com/topic/228519</link>
        <guid>http://www.javaeye.com/topic/228519</guid>
      </item>
      <item>
        <title>部署服务器的注意事项。</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://superxielei.javaeye.com">superxielei</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/230261" style="color:red;">http://www.javaeye.com/topic/230261</a>&nbsp;
          发表时间: 2008年08月19日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这次的嘉华理财网，要最终交付给北京的客户，而且服务器是集群环境，在最后的测试阶段，两地部署出现了很多困难。<br />首先对于集群的数据库最好不要使用全库同步，最好是只同步项目使用的数据库就可以了，有一次因为北京测试同步，在从库添加了一个数据库，我们做的是单向同步，主库无法同步从库数据，最后造成数据库无法启动，只好删库重新建立，丢失了一些测试数据。在测试阶段这样的问题也许无所谓，但是一定在真实运行情况下出现此类情况，那就是无法原谅的错误了。<br />还要注意将两边的环境配置尽量一致，有一次因为两边的ftp账号和密码不相同，调试了很久才发现问题，浪费了很多时间，还有数据库账号和密码等，都要注意。<br />linux操作系统还要注意权限问题，这个linux真实麻烦~~<br />还有就是尽快编写部署脚本，部署的初期没有编写部署脚本，每次都手动的复制啊，粘贴啊~~集群5台服务器，给我们的项目部署人员累的够呛。<br />对于数据库的sql脚本也是要尽量完整，不能拖拉。
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/230261#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Aug 2008 21:50:59 +0800</pubDate>
        <link>http://www.javaeye.com/topic/230261</link>
        <guid>http://www.javaeye.com/topic/230261</guid>
      </item>
      <item>
        <title>这样的公司是去还是留?</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lxzjsj.javaeye.com">lxzjsj</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/228561" style="color:red;">http://www.javaeye.com/topic/228561</a>&nbsp;
          发表时间: 2008年08月16日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我们公司是一个小公司,公司在06年7月份成立的,当时包括我在内共有三个人,都是公司刚成立就进来的.我们做的第一个公司产品是协同办公,当时大家以前没有做过协同办公项目,需求是老板提出的,老板只是简单的描述下做成什么样子,然后大家就开始动手做.采用架构jsp+struts+jdbc,做了一段时间后,把老板所描述的样子开发出来了,也没有美工,UI看起来也很烂,我唯一的感觉就是大家技术还太弱,但是这个系统主要模块手机短信发送,通讯录,考勤,权限,任务管理,人员管理,组织管理等都开发出来了.只是我们技术的局限性导致代码比较乱,页面也不好看.<br />   再后来,老板提出来一些新需求,新需求的变化,改动量非常大,原来的表设计上也不合理,业务逻辑代码和显示层耦合度太高.由于老板对编码不了解,而且需求不断的变化,一有时间大家就讨论,讨论完了又没有形成文档,有很多时候在实际中都不知道在说什么,站在老板的角度,说白了他就是客户.   <br />   在这段时间中,由于需求的不断变化,把我们几个开发人员都搞烦了,因为都知道没有一个把握全局的,能够控制需求的人,大家开发起来真的很累,我们三个之中,有一个把握技术的,但我们三个都不管需求,因为需求是老板提出的,老板并没有把所有需求列出来,只是想到的就说了,并让开发人员开始做.然后就这样一直修修补补,后来有一个同事辞职回老家了,当时我也提出辞职,在和老板的谈话,使我更进一步了解了老板下一步计划,具体我给忘了,都是去年的事了.后来我想了想还是不走了,另一个原因就是老板人待员工很好,和老板相处就和朋友一样,没有给人一种上下级的感觉,我相信公司以后会好起来的.<br />   由于需求的变化,目前架构已经不满足,存在很多局限性,最后在不断的讨论后,大家一致认为在现有代码上改,越改越乱,还不如重新开发,采用SSH架构,使整个架构分层清晰,易于以后维护改动.老板找了个朋友,在另一个公司做技术总监的,把他们公司的SSH技术框架带过来给我们讲了下,然后我开始研究SSH架构,并在搭建了开发环境,然后我们在新框架上重新开发协同系统。我每天有时间就研究javascript和css,重新开发的协同系统我希望UI的表现更好点，就不断学习研究，每天都很晚下班。剩下的另一个同事也提出辞职也走了。<br />   公司就剩下我一个人，但是我坚信在不断的努力下，公司会慢慢步入正轨，越来越好。由于换了新架构，老板也重新整理了他的需求，他对这个协同的定位，不仅仅是针对一个企业的，可以挂在公网上，多个公司之间协同，那么他在设计表的时候就要考虑到多个公司。这次我重新定义页面的css,整个页面换套样式， 为了能够和老板更好的沟通需求，我先把一些模块的静态页面写出来，然后我给老板说，最终是这个样子，看是否有改进的地方。等老板确认后，我才实现具体功能。同时又招一个人，我们几乎把原来所有的模块基本功能都实现了。老板的需求做了些改动，主要是人员这块，人员共涉及到四个表：用户表，员工表， 人员基本信息表，通讯录表，老板提出在页面上用户表一条记录任意关联到其余三个表，当然不是乱关联，其余三个表也是可以分别关联到其它三个表，这种就形成十二种关系要处理，为什么这样呢？老板说：“比如现在通讯录表中有一条记录，我想把他转换成用户，那么我就建条用户记录，把这个用户和他的通讯属性关联起来。”，刚才我说了，多公司，老板的意思是：假如张三，既在A公司上班，又在B公司上班，假如都用的是我们的系统，那么张三在A公司时，A公司添加了张三的基本信息；B公司也给张三建立个用户，但发现张三的基本信息已经存在，并确认是同一个人，那么张三本人可以将他在B公司的用户同A公司的那个基本信息关联起来，反正是一个人。这里面有很多细节问题，导致这块逻辑越做越乱，我认为根本的原因就是老板把这里需求逻辑搞乱了，他都理不清，更给别人说不明白。这块就花了很时间。<br />    好不容易做了那么多jsp页面和代码，老板觉得前台和后台服务端交互应该采用xml,因为以后有可能搞C/S客户端，最后还是给改成XML了，我写的jsp页面废了，我又学习xsl，采用xsl和xml转换成html方式显示出来。老板同时提出新的需求，不论表单还是列表显示的字段不是固定的，不能写死，我只能做通用的xsl，页面都是从数据表中取字段拼装成xml，前面xsl动态解析，这个也花了不少时间，但总算出来了。老板又想后台采用反射机制，所有的增，删，改，查都用同一个类同一个方法，有特殊的处理不了的，就增加特殊的类的方法。但实际中对业务逻辑处理有很多不一样，如果觉得一样，那只是些最基本的增删改查方法，就是这些最基本的方法，在业务处理中还是有很多不一样的地方，仔细想下就知道，显然对业务逻辑处理通用方法不太现实。<br />    不断提出新需求，老板在这段时间也学习了Java编程，设计权限控制到每个表的每条记录每个字段，页面显示的表单可以随意定制，后面Pojo利用hibernate配置一对一或一对多关系，关键是我觉得他都不明白，现在做给你说一对一关系，过两天又成了一对多关系。还有一个类，定义十几个属性，这十几个属性主要是权限字，在每个表中都有，然后他这个类的属性一变，每个表的权限字都得变，70个表哪。<br />    其它我就不一一列举了...,一年多，项目没出来，也不是天天在公司白坐，基本都是老板提出需求，然后开发人员开发，越搞越乱，最后不了了之，老板又有新的想法，又重复前面日子。<br />    总之，需求的任意灵活，不考虑复杂度，不考虑现有技术人员实现难度，不考虑开发周期，一直按他的想像在设计。<br />    我都不知道这个项目什么时候能出来，从去年7月份到现在，不断在设计，不断在改需求，开发实现编码，又不断改需求，到现在最基本的模块都没出来，前面提到的招的一个人也走了，他说在公司呆了四个月，就一直在改人员模块，改表，改pojo，改烦了，他给老板提出辞职，说：没成就感!<br />   确实，何尝不是没成就感，我早就改烦了，现在对项目一点激情都没有，没有激情就没有效率!这段时间每天就是撞钟，我再怎么调整我的心态，我都调整不过来，感觉的确很烦，我甚至开始厌恶这样上班。<br />   总结了下：<br />     1.老板待人很好，这是不可否认的。<br />     2.老板频繁改需求和设计，很好理解，他只要有这个想法不管现实不现实，他认为利于以后扩展；从商业角度来  说，市场空间大。但是老这样，不出东西也不是一回事。<br />     3.频繁改动不出东西，使开发人员没成就感，没激情没效率。<br />     4.过段时间又有个想法，我都怕了<br />     5.无论如何，不管老板是怎么想的，我改烦了，一年多了，不出东西，极度郁闷<br />     造成目前这种情况我认为就是，不注重控制需求，频繁变化，因为又不是给客户做项目，公司自己开发产品，没有时间概念，当然需求分析任何人都不可能一次分析完美的，但是他的想法，每次对整代码都伤筋动骨，改动量非常大。没有制定有效计划方案，就这样浪费了大量时间。<br />     不管最终选择去留，我还是要感谢公司，让我也学到了不少东西!<br />     欢迎大家针对这种情况，提出个人想法。
          <br/>
          <span style="color:red;">
            <a href="http://mcpssx.javaeye.com/topic/228561#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 16 Aug 2008 04:45:42 +0800</pubDate>
        <link>http://www.javaeye.com/topic/228561</link>
        <guid>http://www.javaeye.com/topic/228561</guid>
      </item>
  </channel>
</rss>
