??xml version="1.0" encoding="utf-8" standalone="yes"?> 久久综合九色综合久99,久久99国产一区二区三区,国产福利电影一区二区三区,免费久久久久久久精http://www.shnenglu.com/apollo/category/958.html  p知情重醉q知酒浓   花开pl是I?   ~䆾不停留像春风来又?   女h如花׃?/description>zh-cnMon, 19 May 2008 19:12:49 GMTMon, 19 May 2008 19:12:49 GMT60初ؓ目l理的经验与大家分nhttp://www.shnenglu.com/apollo/articles/10106.htmlW笑?/dc:creator>W笑?/author>Sat, 15 Jul 2006 13:03:00 GMThttp://www.shnenglu.com/apollo/articles/10106.htmlhttp://www.shnenglu.com/apollo/comments/10106.htmlhttp://www.shnenglu.com/apollo/articles/10106.html#Feedback0http://www.shnenglu.com/apollo/comments/commentRss/10106.htmlhttp://www.shnenglu.com/apollo/services/trackbacks/10106.htmlq一天终于来CQ你从一个一U开发h员被提拔为项目经理。也怽一直在期盼Q也怽心里q忐忑不安,也许q是你的职业发展选择Q也怽只是不情愿的{应老板“试一下”。不哪U情况,可能你ƈ没有目和h员管理及领导的教育背景或者培训经历?/p>

领导和管理(q两者是不同的)q非单的与Dilbert
的老板背道而驰Q译者注QDilbert 是一个OMh物,以“拥有”一个“白痴老板”而著Uͼ。当你计划如何做好项目管理时Q考虑采取以下列出的行动。也怽惛_的事情很多,但下面的q些会帮助你集中到那些能提高效率Q你自己的效率和团队的效率)的事情上?/p>

讄优先U?/p>

你要着手的W一件大事很可能是有意识的讄你作为项目经理的优先U。尽你可能因ؓ各种原因q需要很大程度上参与软g的开发,但除此之外,你还有一些新的职责。很多新ȝ目l理都摆׃了技术的诱惑Q以致忽略了目成员向自己寻求的帮助?/p>

富有效率的项目经理知道,他们最高优先的是为项目成员提供服务。这些服务包括:指导和教Ԍ处理冲突Q提供资源,讄目目标和优先{等Q适当时也要提供技术指对{我发现Q把自己视ؓ为成员工作,而非监工是很有h(hun)值的。不你正在做或者将要做多重要的事,来你q儿L帮助的项目成员应该有“非屏蔽中断?Q译者注Q非屏蔽中断是一个硬件术语,此处意即最优先的)优先U?/p>

你第二优先的是让你所在组l的客户满意。作Z个项目经理,如果你不再涉品的一U开发,也许你很有直接的机会可以让客户满意。但你必Mؓ你的目成员创造一个环境,使得他们在这个环境下工作Q可以最有效的满_L(fng)需求。这是项目经理的一个重要职能?/p>

你第三优先的是你自己的事情。可能是一个与目有关的技术问题(当然也是你感兴趣的)Q也可能是你的老板要你做的某g事。但当这些事与上面两个较高优先冲突Ӟ你要做好延后处理的准备?/p>


你最低优先的是那些纯_取(zhn)你的老板的事情。在一个正常的l织Q非Dilbet 式的l织Q中Q如果你做好了前面所说的更重要的三g事情Q你的老板已经是非常惊喜了。尽ƈ非每个h都那么幸q可以在一个“正常”的l织工作Q但q是努力做好q三件最重要的事。把注意力放在尽可能的帮助下属富有效?-
q且快乐-- 上,而不是取(zhn)于那些“上面”的人?/p>

分析你的技能差?/p>

初ؓ目l理Q通常你会意识C在领导和理技能方面的差距Q除非你已经个新职位做了充分准备。你有很强的技术背景,可能q也是提拔你领导技术团队的一个原因,但你q需要一些其他的技能。你需要客观的评h(hun)自己的长处和短处Qƈ且着手羃?yu)自q差距?/p>

做Y件的人常常被认ؓ~Z的交际能力。你需要加Z的h际处理能Q诸如调解矛盾、说服他人、“推销”自己。你需要应付一些不惛_付的场面Q比如解雇你的下属、在q度上“讨仯价”、ؓ争取下属的W效“吵架”?/p>

伴我开始经理职涯的是們֐QListeningQ技能的评Q我觉得很有价倹{一U开发时Q往往我们都有qh的精力来表达自己的技术观炏V但作ؓ理人员Q更需要一U包容和聆听的工作风格和交流方式。然后,从“听”的位置走到“说”的位置Q你需要提高你的演ԌPresentationQ技能。如果你对在公众场合演讲感到不适,你需要接受一些专门的演讲培训。这对你今后的工作很有好处?/p>

作ؓ一个项目经理,协调他h的工作、计划和跟踪目、必要时q行目回溯q取纠正措施等{都是你的职责。可能的话,接受有关目理的培训,学习(fn)如何讄优先U、如何主持高效的会议、如何明白无误的沟通等{技能;多看一些项目管理和风险理的书c和杂志Q比如Project Management Institute 的月刊《PM Network》(译者注Q你也可以从《PMT 评论》获得大量有价值的软g目知识Q。你q可以从SWCMMQY件能力成熟度模型Q中扑ֈ很多有关软g目理的有用徏议?/p>


定义?质量?/p>

管l大多数人都认真对待质量Q也想生产出优质的品;但是Q有兌Y件质量的定义仍存在很大争议,比如高质量是“够好”还是更为经典的质量观点--“无~陷”。ؓ了领g的团队走向成功彼岸,你需要花些时间和你的下属以及客户一h明确Q对于他们,质量意味着什么?/p>

你的下属和客h不同的两帮hQ他们很可能对质量没有一致的看法Q也容易抱有不同的目的。如果客户很交货期,那他很可能没有耐心听程序员解释Z么需要额外的旉L查每一行代码。如果客L(fng)重的是Y件的可靠性,那他在增加功能和减少B(ti)ug之间多半会选择后者。如果客户习(fn)惯了老版本的键盘操作Q那他很会Ҏ(gu)的图形操作界面感兴趣?/p>

在我曄负责的一个项目中Qؓ了更好的了解客户的质量要求,我D办了一ơ开攑ּ讨论会(Open ForumQ,除了目成员和客户参加外Q我q客L(fng)上司们一h参加讨论。这ơ讨论很有h(hun)|因ؓ我们发现很多原有的想法是和客L(fng)正的质量需求背道而驰的。了解这些想法的差异Q得我们可以把力量集中在让客户满意的事情上Q而不是放在让“开发满意”的事情上?/p>

软g质量通常被理解ؓ合乎规格说明Q满_户需求,以及在文档和代码中尽量少的缺PDefectQ等{,q些都是比较“经典”的定义。“六西格码质量”(Six-sigma QualityQ译者注Q是一U质量标准及相应的质量管理方法)为缺陷密度(Defect DensityQ和/ 或失效率QFrequency of FailureQ设定了一个很高的标准Q但是,它没有涉及质量的其他斚wQ比如交货期、可用性、特性集和性能h比等{。无论我们是作ؓ生者还是消费者,我们都希望品的质量在所有这些方面都是尽量高的,但事实上Q我们总要在其中做出权衡和选择?/p>

我们在需求阶D就考虑Q对于客户哪些质量特性是重要的,q把它们列D出来Q比如,交互性、正性、易学性等Q。然后,我们找来一些关键的客户代表Q请他们对这些质量特性打分。这P我们可以掌握哪些质量特性是最主要的,哪些是次要的Q从而就可以有的攄Qؓq些质量Ҏ(gu)而优化设计?/p>

我听说的更有意思的一UY件质量定义是“客户回来的Q但产品没有”(the customer comes back, but the product does notQ。和你的下属以及客户一起定义合适的质量目标Q一旦定义了Q则要不遗余力的成这些目标而努力。也要以w作则,以高标准要求自己。记住这句话Q?“非完美不争取,非卓不满”(Strive for perfection; settle for excellenceQ?/p>

表嘪q步

表扬和奖励项目成员的成W是很重要的激励方式。你要把建立奖励计划Recognition ProgramQ视为头{大事,除非你已l有了适当的奖p划。奖励既可以是象征性的奖状、证书,也可以是实实在在的奖品和现金。发奖时记得_“感谢?zhn)的帮助”,或者“祝贺?zhn)完成?..”。还要记得奖q范围不要局限在你的目l内部,客户代表和一些向你提供特别帮助的目l外部h员也是要考虑的?/p>

奖励计划不仅需要你投入一笔钱,也需要你多动动脑Q想想以何种方式奖励。和你的下属多交,了解他们在乎什么样的奖励。要把奖励活动变成团队文化的一部分。另外,试“隐形”的奖励Q让你的下属明白你是真的知晓他们所做的贡献Qƈ且对此心存感Ȁ?/p>


前R之鉴Q后事之?/p>

你负责的目很可能是半途接手的Q而且你的前Q做的q不怎么好;或者,虽然是新目Q但从前有类似的目完成Q当然有成功的,也有p|的。不是哪种情ŞQ你作ؓ目的负责hQ应该花些时间分析以往的成功经验和p|教训。你要了解这些项目曾l出现过什么问题,以此避免自己重蹈覆辙。失败是成功之母Q但你没有太多的Zp|Q所以你要多从别人的p|中学?fn)?/p>

不要戴着有色眼镜ȝ以往的项目,或许某个你不喜欢的家伙出色的完成了他的项目,你当然可以把q归lؓq气或者oq,但如果你客观的分析,或许更有助于你的成功?/p>

你也需要客观的去评仯己完成的一些项目(如果有的话)Q了解自q团队I竟强在哪里Q弱在何处。事实上Q每个完成的目都要q行目回顾QPost-project ReviewQ,有时q种ȝ式的目回顾也叫做“开验”(PostmortemQ。注意项目回不是ؓ了追I谁的责任,发现问题、剖析问题是Z以后做得更好。你可以采取头脑风暴的做法,鼓励目l成员各抒己见。另外,q种目回顾也可以扩展到目q行中,在每个大的阶D늻束时都进行回?/p>

除此之外Q你需要了解被软g业界普遍认可的最?jng)_践(Best practiceQ。在SteveMcConnell 的《Rapid Development》(Microsoft PressQ?996Q中介绍?7 个最?jng)_践和36 个Y件开发的“经典”问题。此书曾获Jolt AwardQ是一个很好的学习(fn)L(fng)。当你想把一些好的方法、工具和程引入C的项目中Ӟ其他人可能会排斥、反对,甚至抵制Q而这恰恰是你的职责所在,你要让项目成员明白ؓ什么要q样做,q且保他们不折不扣的执行。在你的团队内部Q也会生一些最?jng)_践,所以你要采取一些措施,促在项目成员之间交和采纳q些实践?/p>

讄改进目标

当你回顾了以往的项目,q且定了“质量”的含义Q你需要设立一些短期的和长期的改进目标。只要可能,q些目标应该是可以量化的Q这样你可以通过一些简单的指标来衡量自己是否在朝着q些目标前进?

举个例子Q你发现以往的项目由于需求多变而经常g后,于是Q你可以讄一个半q的目标Q力求将需求的E_性提?0%。这L(fng)一个目标要求你每周每月做实际的工作Q统计需求的改变敎ͼ查明需求的来源和改变的原因Q采取措施来控制改变。这很可能将改变你与那些需求更改者的交往方式?lt; br>
你的q些目标和指标构成了软g程改进的一部分。尽流E改q常被h指责为“官僚作风”的体现Q但事实上,每个团队都能扑ֈ一些可以改q的地方。如果你停留在一贯以来的做事Ҏ(gu)上,你最好不要指望能获得比以前更好的l果?/p>

改进程的原因通常有两个:U正错误和预防错误。你要把_֊集中到威胁或者可能威胁项目成功的因素上;带领你的团队一起分析你们目前做法的长处和短处,以及所面(f)的威胁?/p>

我自q团队ql过一ơ两阶段的头脑风暴练?fn),以此来确认提高我们的产量和质量的障碍。在W一阶段Q参与者将自己惛_的障写在即时脓(chung)上,每张x贴写一个想法;然后Q协调者就把这些即时脓(chung)攉hQƈq行分类Q于是我们得C若干大的分类Q我们就把这些分cd在一张大的白U怸?lt; br>
在第二阶D,同样q是q些参与者,针对前面写的障碍Q把惛_的克服方法写到即时脓(chung)上,q且_脓(chung)到相应的分类上。经q进一步的讨论和分析,我们得以把这些障细化,q且获得了一pd可操作的应对Ҏ(gu)?/p>

讄可度量的、可争取的目标将集中你ؓ改进程而付出的努力。你要和你的队员们一起定期检视改q的l果。记住流E改q的目的是ؓ了项目和公司的成功,而不是ؓ了满书本上的条条框框。把程改进当成目来操作,有自qq度、投入和产出。否则,程改进L得不到应有的重视Q最l被琐碎的日常工作而没?/p>

不要急于求成

本文所的一些做法将帮助你这个项目管理的新手和你的团队取得更大的成功Q随着你每天面临的工作压力Q你或许会为又一个“苟延残喘”者,但是Q你要始l明白你肩负的一个Q务(可能也是你获得成功的ZQ,那就是Ş成你的团队文化和一套做事的Ҏ(gu)Q这是一个长期的d。你不可能一下子把想做的事都做到Q你可以Ҏ(gu)自己的处境有所选择Q从容上路?/p>

你好运Q?/p>

]]>
张瑞敏管理箴a100句 理无小?/title><link>http://www.shnenglu.com/apollo/articles/9505.html</link><dc:creator>W笑?/dc:creator><author>W笑?/author><pubDate>Thu, 06 Jul 2006 11:40:00 GMT</pubDate><guid>http://www.shnenglu.com/apollo/articles/9505.html</guid><wfw:comment>http://www.shnenglu.com/apollo/comments/9505.html</wfw:comment><comments>http://www.shnenglu.com/apollo/articles/9505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/apollo/comments/commentRss/9505.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/apollo/services/trackbacks/9505.html</trackback:ping><description><![CDATA[ 1、管理者要是坐下,部下ph下了? <p>  2、管理就是行动?/p><p>  3、管理就是树(wi)立榜栗?/p><p>  4、高层管理不{于高高在上?/p><p>  5、管理者必进行问题管理,而不是危机管理?/p><p>  6、干部怕的是不知道自己怕什么?/p><p>  7、没思\的领g想互动,没控制力的领g敢互动?/p><p>  8、干部怎样对待问题??00%地落实责任,即“见C见h”的原则。每?%的问题都可以转化?00%的责任,100%的责Mh?/p><p>  9、干部怎样对员?创造一个充满活力的氛围?/p><p>  10、干部怎样对市?创与闯。既要创新、创?又要有闯劌Ӏ冲劌Ӏ?/p><p>  11、干部怎样对待理?(zhn)性和韧性?/p><p>  12、干部的目标:做超U领|即你的领导水qC能够让下属在没有领导的时候仍能够正常工作。Ş成有zd的员工,有合力的l织?/p><p>  13、干部是事业成|的关键?/p><p>  14、如果你或你的部门没有了上升的空_也将失去生存I间?/p><p>  15、终端的问题是领导的问题?/p><p>  16、看不出问题是最大的问题?/p><p>  17、重复出现的问题是作风上的问题?/p><p>  18、部下素质低不是你的责QQ但是不能提高部下的素质是你的责仅R?/p><p>  19、观念不变原地{Q观念一变天地宽?/p><p>  20、管事先hQ管人带作风?/p><p>  21、渐q就是守旧。所以经营理念创斎ͼp反渐q,必须一步到位?/p><p>  22、不只做一颗螺丝钉Q要l营一部机器?/p><p>  23、先画靶子再打枪?/p><p>  24、特D论是l问题放行?/p><p>  25、“立d”是奔着有预的目标立刻?“想想看”是没有预算的闭门造R?br /><br />  26、开发的是市不是品?/p><p>  27、市场目标的定不是以个力ؓ限,而是以用h意度为准?/p><p>  28、对市场目标的确定就是以在市Z有竞争力增gؓ标准?/p><p>  29、带动全球经增长的火R头减速ƈ不意味着所有的车厢都减速?/p><p>  30、零增长不等于零需求?/p><p>  31、有效供l才能创造出市场?/p><p>  32、v?dng)h只有创业没有守业?/p><p>  33、v?dng)国际化战略能否成功Q主要是靠每一个v?dng)h的国际化Q有了每一个h的国际化才能保证尔集团的国际化?/p><p>  34、企业竞争力的实现取决于创新的细?yu)——SBU?/p><p>  35、企业核心竞争力是获取用户资源的能力?/p><p>  36、一个企业的竞争力是看一个企业的员工是增值的资q是负债?/p><p>  37、要以秒单位?/p><p>  38、客L(fng)要求不等于客L(fng)需求?/p><p>  39、造势产品输入的是用户的需求,输出的是用户的满意?/p><p>  40、企业一旦站立到创新的浪上Q维持的办法只有一个,是要持l创新?/p><p>  41、要持箋造势Q就要把企业做成一条流动的沟뀂源头是创新的SBUQ河的终Ҏ(gu)用户的满意度Q即对企业忠诚的用户?/p><p>  42、把每位员工l营成创新的SBUq不断经营出高素质的人才的决定性因素就是管理者能否经营自我?/p><p>  43、成为SBU的四个要素是:市场目标、市场定单、市场效果、市场报酬?/p><p>  44、SBU具体的体现就是速度和创新?/p><p>  45、经营企业就是要l营人,l营人首先要重人?/p><p>  46、止谤莫如自修。战胜非议的唯一途径是战胜自我?/p><p>  47、挑战目标首先要挑战自我?/p><p>  48、工作要化,不要单化?/p><p>  49、求Z如求己?/p><p>  50、“想q与不想qy是有没有责L问题Q是“d”的问题;“会q与不会qy是“才”的问题Q但是不会干是被动的Q是按照别h的要求去q?“能q与不能qy是创新的问题,卌不能不断提高自己的目标?/p><p>  51、没有市场定单的理者就是不要管理的理?没有市场定单的员工就是不q工作的员工Q责M在员工n上,而在于管理?没有市场定单的工作就是无效工作?/p><p>  52、决胜在l端?/p><p>  53、流E再造就是先要再造h?/p><p>  54、企业内部管理革命是Z创造企业外部的市场?/p><p>  55、不是因为有些事情难以做刎ͼ我们才失M斗志Q而是因ؓ我们失去了斗志,那些事情才难以做到?/p><p>  56、我们所有的质量问题Q都是h的问题,讑֤不好是h不好;雉件不合格是h不合?我们所有发展不h的问题都是思\问题Q不是缺人是~思\;不是~Zg是缺思\?/p><p>  57、企业发展的I间无限大,企业与用L(fng)距离无限?/p><p>  58、有价值的定单是企业发展的永恒的主题,企业要发展必L定单而且是有价值的定单?/p><p>  59、质量无止境Q企业无边界Q名牌无国界?/p><p>  60、“一站到位”的服务Q“一到底”的程?/p><p>  61、员工齐心,理用心Q对用户真心?/p><p>  62、企业生命之?wi)的土壤是用戗?/p><p>  63、企业做到极_满用户需求,无有他奇Q只是本然?/p><p>  64、要在国际市场竞争中取胜Q第一是质量,W二是质量,W三q是质量?/p><p>  65、质量不打折、服务不打折、信誉不打折?/p><p>  66、质量一ơ就做对?/p><p>  67、有~陷的品就是废品?/p><p>  68、在一个管理好的企业内部没有激动h心的事情发生?/p><p>  69、管理的关键不在于知而在于行?/p><p>  70、没有定单就没有目标Q没有目标就没有工资?/p><p>  71、盘?gu)z资产首先要盘活人?/p><p>  72、在别h否定自己之前先自我否定?/p><p>  73、只有自己才能打倒自己?/p><p>  74、突破自我,H破思维定势Q突破昨天?/p><p>  75、智力比知识重要Q素质比智力重要Q觉(zhn)比素质更重要?br /><br />  76、创新的目标是创造有价值的定单;创新的本质是创造性的破坏Q破坏所有阻创造有价值定单的枷锁;创新的途径是创造性的模仿和借鉴Q即借力?/p><p>  77、监控就是爱护,委Q是信Q?/p><p>  78、观念创新就是目标创斎ͼ目标创新是提出别h认ؓ不可能达到的目标Qƈ用创新的办法实现它?/p><p>  79、每个中高񔽎理人员只有自己先找到市场才能找到市Z竞争的方向?/p><p>  80、不能用职能理的手推职能管理的山?/p><p>  81、永q战战兢兢,永远如薄冰?/p><p>  82、职能签字是事先没有市场目标的签字,事先无h负责的签字。用L(fng){֭才是有效的签字?/p><p>  83、用L(fng)钞票才是企业的选票Q用L(fng)口碑才是企业的金杯?/p><p>  84、只有真正实C问题清零和买断损失,才能卖出有h(hun)值的定单?/p><p>  85、要效果Q不要借口?/p><p>  86、没有思\没有出路?/p><p>  87、D一U而万目张Q失一万事毁?/p><p>  88、管理无事?/p><p>  89、物以旉消灭I间Q商以I间消灭旉?/p><p>  90、什么是不简?能够把简单的事千N都做对,是不简?什么不Ҏ(gu)?大家公认的非常容易的事情认真地做好,是不容易?/p><p>  91、图难于其易Qؓ大于其细?/p><p>  92、把不可能变成可能?/p><p>  93、昨天的成功l验与辉煌可能是明天成功的阻?/p><p>  94、要做到实事求是Q有两点很重?其一是能不能实事求是Q即思维方式的改变问?其二是敢不敢实事求是Q即思想境界的提高问题?/p><p>  95、解x效管理,首先要在思想观念上树(wi)立以几何U数L高工作效果的信心;其次Q要有创新是无止境的观念Q创新的I间存在于每个地斏V每个h、每件事上?/p><p>  96、一切结Z生在调查研究之后;在调查研I中Q如果找不出原因和解军_法就不能放过?/p><p>  97、抓理肯定要数Q但如果数抓数Q最后连C得不刎ͼ或者只抓到一个假数。抓好提高h的素质工作,数自然会产生;不抓人的工作Q数׃来差Q不能见C见h?/p><p>  98、以Zؓ本的理是理人员的创新精?/p><p>  99、真正的人才是在L实现自我的机遇?/p><p>  100、市场是每个人的上?/p><img src ="http://www.shnenglu.com/apollo/aggbug/9505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/apollo/" target="_blank">W笑?/a> 2006-07-06 19:40 <a href="http://www.shnenglu.com/apollo/articles/9505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>熟练人员~码http://www.shnenglu.com/apollo/articles/9504.htmlW笑?/dc:creator>W笑?/author>Thu, 06 Jul 2006 11:39:00 GMThttp://www.shnenglu.com/apollo/articles/9504.htmlhttp://www.shnenglu.com/apollo/comments/9504.htmlhttp://www.shnenglu.com/apollo/articles/9504.html#Feedback0http://www.shnenglu.com/apollo/comments/commentRss/9504.htmlhttp://www.shnenglu.com/apollo/services/trackbacks/9504.html熟练人员l过多年的积累加上自qCodeSnip的ȝQ基本不用额外再查找资料。而一般的开发h员在开发过E中会花?0-20%旉L找资料?/div>
?
熟练人员注意代码复用Qƈ且时L意重构和抽取公用代码。一般开发h员是代码h拷去完成功能?/div>
?
熟练人员非常注意查找Q定位,标签{各U快捷键的用,定位查找方便快捷QIDE环境也根据习(fn)惯定义到最方便状态?/div>
?
熟练人员~码前先思考清楚整个流E,在头脑或U张上规划好整个实现方式和方法函数的划分。一般h员想到哪里写到哪里?/div>
?
熟练人员写了50行以上或更多代码才Debug一两次Q一般h员写了几行代码就要Debug多次Q完全通过Debug来验证代码正性?/div>
?
熟练人员注重代码的质量,单元试和可l护性,注重各种业务逻辑的验证和边界条g的校验。一般h员只注重单功能的单完成?/div>
?
熟练人员提交试的代码BUG很少Q返工工作量很小。一般开发h员由于自不完善BUG较多Q造成大量的返工工作量?/div>
?
熟练人员合理分配自己的时_规划好每天工作Q务,开发过E各位专注。一般开发h员一心多用,边开发边聊Q?/div>
?
熟练人员善于知识的ȝ和积累,形成自我的知识库和经验库?/div>
?
熟练人员善于发现问题Q分析不自我持l改q。一般h员在外力q预侠被动改q?/div>
?
熟练开发h员开发重点已l专业到对业务的深刻理解Q一般开发h员考虑的是开发上~程的语a和工兗?/div>
?
熟练人员善于从各U媄响自己开发效率的因素中挤旉Q善于用各U辅助开发工兗而一般h员则不善于这Uȝ?/div>

]]>怎样成ؓ优秀的Y件模型设计者?http://www.shnenglu.com/apollo/articles/8744.htmlW笑?/dc:creator>W笑?/author>Tue, 20 Jun 2006 05:30:00 GMThttp://www.shnenglu.com/apollo/articles/8744.htmlhttp://www.shnenglu.com/apollo/comments/8744.htmlhttp://www.shnenglu.com/apollo/articles/8744.html#Feedback0http://www.shnenglu.com/apollo/comments/commentRss/8744.htmlhttp://www.shnenglu.com/apollo/services/trackbacks/8744.html                    来自Qblog   雪茶技?/font>

我们期待自己成ؓ一个优U的Y件模型设计者,但是Q要怎样做,又从哪里开始呢Q?

下列原则应用到你的软g工程中,你会获得立杆见媄的成果?

1. 比技术重?

你开发Y件是Z供别Z用,没有Z用的软g只是没有意义的数据的集合而已。许多在软g斚w很有成就的行家在他们事业的初期却表现q_^Q因Z们那时侯主要精力都集中在技术上。显Ӟ构gQcomponentsQ,EJBQEnterprise Java BeansQ和代理QagentQ是很有的东西。但是对于用h_如果你设计的软g很难使用或者不能满他们的需求,后台用再好的技术也于事无补。多q旉到Y仉求和设计一个用户能很Ҏ(gu)理解的界面上?

2. 理解你要实现的东?

好的软g设计人员把大多数旉p在徏立系l模型上Q偶?dng)写一些源代码Q但那只不过是ؓ了验证设计过E中所遇到的问题。这他们的设计方案更加可行?

3. 谦虚是必ȝ品格

你不可能知道一切,你甚臌很努力才能获得够用的知识。Y件开发是一复杂而艰巨的工作Q因Y件开发所用到的工具和技术是在不断更新的。而且Q一个h也不可能了解软g开发的所有过E。在日常生活中你每天接触到的新鲜事物可能不会太多。但是对于从事Y件开发的人来_每天可以学习(fn)很多C西(如果愿意的话Q?

4. 需求就是需?

如果你没有Q何需求,你就不要动手开发Q何Y件。成功的软g取决于时_在用戯求的旉内完成)、预和是否满用户的需求。如果你不能切知道用户需要的是什么,或者Y件的需求定义,那么你的工程注定会失败?

5. 需求其实很改变,改变的是你对需求的理解

Object ToolSmiths公司Q?a >www.objecttoolsmiths.comQ的Doug Smith常喜Ƣ说Q“分析是一门科学,设计是一门艺术”。他的意思是说在众多的“正”分析模型中只存在一个最“正”分析模型可以完全满x个具体问题的需要(我理解的意思是需求分析需要一丝不苟、精的完成,而设计的时候反而可以发挥创造力和想象力 - 译者注Q?

如果需求经常改动,很可能是你没有作好需求分析,q不是需求真的改变了?

你可以抱怨用户不能告诉你他们惛_C么,但是不要忘记Q收集需求信息是你工作?

你可以说是新来的开发h员把事情搞得一团糟Q但是,你应该确定在工程的第一天就告诉他们应该做什么和怎样d?

如果你觉得公怸让你与用户充分接触,那只能说明公司的理层ƈ不是真正支持你的目?

你可以抱怨公司有兌Y件工E的理制度不合理,但你必须了解大多同行公司是怎么做的?

你可以借口说你们的竞争Ҏ(gu)的成功是因ؓ他们有了一个新的理念,但是Z么你没先惛_呢?

需求真正改变的情况很少Q但是没有做好需求分析工作的理由却很多?

6. l常阅读

在这个每日都在发生变化的产业中,你不可能在已取得的成׃陉太久?

每个月至读2?本专业杂志或?本专业书c。保持不落伍需要付出很多的旉和金钱,但会使你成ؓ一个很有实力的竞争者?

7. 降低软g模块间的耦合?

高耦合度的pȝ是很隄护的。一处的修改引v另一处甚x多处的变动?

你可以通过以下Ҏ(gu)降低E序的耦合度:隐藏实现l节Q强制构件接口定义,不用公用数据结构,不让应用E序直接操作数据库(我的l验法则是:当应用程序员在写SQL代码的时候,你的E序的耦合度就已经很高了)?

耦合度低的Y件可以很Ҏ(gu)被重用、维护和扩充?

8. 提高软g的内聚?

如果一个Y件的模块只实C个功能,那么该模块具有高内聚性。高内聚性的软g更容易维护和改进?

判断一个模块是否有高的内聚性,看一看你是否能够用一个简单的句子描述它的功能p了。如果你用了一D话或者你需要用类似“和”、“或”等q词Q则说明你需要将该模块细化?

只有高内聚性的模块才可能被重用?

9. 考虑软g的移植?

UL是Y件开发中一具体而又实际的工作,不要怿某些软g工具的广告宣传(比如java 的宣传口号write once run many ? 译者注Q?

即仅仅对Y件进行常规升U,也要把这看得和向另一个操作系l或数据库移植一样重要?

记得?6位WindowsUL?2位windows的“乐”吗 Q当你用了某个操作pȝ的特性,如它的进E间通信(IPC){略Q或用某数据库专有语a写了存储q程。你的Y件和那个特定的品结合度已l很高了?

好的软g设计者把那些Ҏ(gu)的实现细节打包隐藏v来,所以,当那些特性该变的时候,你的仅仅需要更新那个包可以了?

10. 接受变化

q是一句老话了:唯一不变的只有变化?

你应该将所有系l将可能发生的变化以及潜在需求记录下?以便来能够实现Q参见“Architecting for Change”,Thinking Objectively, May 1999Q?

通过在徏模期间考虑q些假设的情况,你就有可能开发出_强壮且容易维护的软g。设计强壮的软g是你最基本的目标?

11. 不要低估对Y件规模的需?

Internet 带给我们的最大的教训是你必须在Y件开发的最初阶D就考虑软g规模的可扩充性?

今天只有100人的部门使用的应用程序,明天可能会被有好几万人的l织使用Q下月,通过因特|可能会有几百万Z用它?

在Y件设计的初期Q根据在用例模型中定义的必须支持的基本事务处理,定软g的基本功能。然后,在徏造系l的时候再逐步加入比较常用的功能?

在设计的开始考虑软g的规模需求,避免在用L(fng)H然增大的情况下Q重写Y件?

12. 性能仅仅是很多设计因素之一

x软g设计中的一个重要因?-性能Q这好象也是用户最兛_的事情。一个性能不佳的Y件将不可避免被重写?

但是你的设计q必d有可靠性,可用性,便携性和可扩展性。你应该在工E开始就应该定义q区分好q些因素Q以便在工作中恰当用。性能可以是,也可以不是优先最高的因素Q我的观Ҏ(gu)Q给每个设计因素应有的考虑?

13. 理接口

“UML User Guide”(Grady BoochQIvar Jacobson和Jim Rumbaugh ,Addison Wesley, 1999Q中指出Q你应该在开发阶D늚早期定义Y件模块之间的接口?

q有助于你的开发h员全面理解Y件的设计l构q取得一致意见,让各模块开发小l相对独立的工作。一旦模块的接口定之后Q模块怎样实现׃是很重要了?

从根本上_如果你不能够定义你的模块“从外部看上M是什么样子”,你肯定也不清楚模块内要实C么?

14. 走近路需要更长的旉

在Y件开发中没有捷径可以走?

~短你的在需求分析上q旉Q结果只能是开发出来的软g不能满用户的需求,必须被重写?

在Y件徏模上每节省一周,在将来的~码阶段可能会多花几周时_因ؓ你在全面思考之前就动手写程序?

你ؓ了节省一天的试旉而漏掉了一个bugQ在来的维护阶D,可能需要花几周甚至几个月的旉M复。与其如此,q不如重新安排一下项目计划?

避免走捷径,只做一ơ但要做对(do it once by doing it rightQ?

15. 别信赖Q何h

产品和服务销售公怸是你的朋友,你的大部分员工和高层理人员也不是?

大部分品供应商希望把你牢牢l在他们的品上Q可能是操作pȝQ数据库或者某个开发工兗?

大部分的N和承包商只关心你的钱q不是你的工E(停止向他们付?gu)ƾ,看一看他们会在周围呆多长旉Q?

大部分程序员认ؓ他们自己比其他h更优UQ他们可能抛弃你设计的模型而用自己认ؓ更好的?

只有良好的沟通才能解册些问题?

要明的是,不要只依靠一家品或服务提供商,即你的公司Q或l织Q已l在建模、文档和q程{方面向那个公司投入了很多钱?

16. 证明你的设计在实践中可行

在设计的时候应当先建立一个技术原型, 或者称为“端到端”原型。以证明你的设计是能够工作的?

你应该在开发工作的早期做这些事情,因ؓQ如果Y件的设计Ҏ(gu)是不可行的,在编码实现阶D|论采取什么措施都于事无补。技术原型将证明你的设计的可行性,从而,你的设计更Ҏ(gu)获得支持?

17. 应用已知的模?

目前Q我们有大量现成的分析和设计模式以及问题的解x案可以用?

一般来_好的模型设计和开发h员,都会避免重新设计已经成熟的ƈ被广泛应用的东西?
http://www.ambysoft.com/processPatternsPage.html 收藏了许多开发模式的信息?

18. 研究每个模型的长处和q

目前有很多种cȝ模型可以使用,如下图所C。用例捕L(fng)是系l行为需求,数据模型则描q支持一个系l运行所需要的数据构成。你可能会试囑֜用例中加入实际数据描qͼ但是Q这对开发者不是非常有用。同P数据模型Ҏ(gu)qY仉求来说是无用的。每个模型在你徏模过E中有其相应的位|,但是Q你需要明白在什么地方,什么时候用它们?

19. 在现有Q务中应用多个模型

当你攉需求的时候,考虑使用用例模型Q用L(fng)面模型和领域U的cL型?

当你设计软g的时候,应该考虑制作cL型,序图、状态图、协作图和最l的软g实际物理模型?

E序设计人员应该慢慢意识刎ͼ仅仅使用一个模型而实现的软g要么不能够很好地满用户的需求,要么很难扩展?

20. 教育你的听众

你花了很大力气徏立一个很成熟的系l模型,而你的听众却不能理解它们Q甚xp-qؓ什么要先徏立模型都不知道。那么你的工作是毫无意义的?

教给你开发h员基本的建模知识Q否则,他们会只看看你画的漂亮图表,然后l箋~写不规范的E序?

另外Q?你还需要告诉你的用户一些需求徏模的基础知识。给他们解释你的用例(uses case)和用L(fng)面模型,以他们能够明白你要表达Cѝ当每个人都能用一个通用的设计语a的时候(比如UML-译者注Q,你的团队才能实现真正的合作?

21. 带工L(fng)?c)q是?c)?

你给我CAD/CAM工具Q请我设计一座桥。但是,如果那桥徏成的话,我肯定不惛_W一个从桥上q的人,因ؓ我对建筑一H不通?

使用一个很优秀的CASE工具q不能你成Z个徏模专Ӟ只能使你成ؓ一个优UCASE工具的用者。成Z个优U的徏模专安要多q的U篏Q不会是一周针Ҏ(gu)个h(hun)值几千美元工L(fng)培训。一个优U的CASE工具是很重要Q但你必d?fn)用它Qƈ能够使用它设计它支持的模型?

22. 理解完整的过E?

好的设计人员应该理解整个软gq程Q尽他们可能不是精通全部实现细节?

软g开发是一个很复杂的过E,q记得《object-oriented software process》第36늚内容吗?除了~程、徏模、测试等你擅长工作外Q还有很多工作要做?

好的设计者需要考虑全局。必M长远考虑如何使Y件满用户需要,如何提供l护和技术支持等?

23. 常做试Q早做测?

如果试对你的Y件来说是无所谓的Q那么你的Y件多半也没什么必要被开发出来?

建立一个技术原型供技术评审用,以检验你的Y件模型?

在Y件生命周期中Q越晚发现的错误难修改Q修Ҏ(gu)本越昂贵。尽可能早的做测试是很值得的?

24. 把你的工作归?

不值得归档的工作往往也不值得做。归档你的设惻I以及Ҏ(gu)设想做出的决定;归档软g模型中很重要但不很明昄部分?l每个模型一些概要描qC使别人很快明白模型所表达的内宏V?

25. 技术会变,基本原理不会

如果有h说“用某U开发语a、某个工h某某技术,我们׃需要再做需求分析,建模Q编码或试”。不要相信,q只说明他还~Zl验。抛开技术和人的因素Q实际上软g开发的基本原理?0世纪70q代以来没有改变过。你必须q定义需求,建模Q编码,试Q配|,面对风险Q发布品,理工作人员{等?

软g建模技术是需要多q的实际工作才能完全掌握的。好在你可以从我的徏议开始,完善你们自己的Y件开发经验?

以鸡汤开始,加入自己的蔬菜。然后,开始n受你自己的丰盛晚吧?/p>

]]>
三个代表http://www.shnenglu.com/apollo/articles/8588.htmlW笑?/dc:creator>W笑?/author>Thu, 15 Jun 2006 05:36:00 GMThttp://www.shnenglu.com/apollo/articles/8588.htmlhttp://www.shnenglu.com/apollo/comments/8588.htmlhttp://www.shnenglu.com/apollo/articles/8588.html#Feedback0http://www.shnenglu.com/apollo/comments/commentRss/8588.htmlhttp://www.shnenglu.com/apollo/services/trackbacks/8588.html

   说道“三个代表”,Ua是拿来吸引眼球的Q俺准备q篇Blog能够l俺的访问数目提升一下,鹅滴啊。闲话少说书归正传,让我们来看看到底是那三个代表Q?strong>代表客户的利益、代表员工的利益、代表公司的利益?/font>

      没有利益的事情是不会有hd的,只是不同的时间、地炏V空间和人员Q利益的定义和取舍不同。资本论里面把利益这个东西描q的相当清楚。在q里提出q个“利益”其实是惛_调一个网l和相关性。一个项目的存在有q三方的利益互相挂钩在一?当然q有一方的利益没有说在q里Q我会在本文的最后一D阐q第四个代表?/font>

W一个代表:客户的利?/strong>

      “ؓ客户考虑的同时就是ؓ企业的生存考虑”这是鹅多年前提出的一个口P一个Y件品是一个空z的东西Q大安是在IZ楼阁Q从无到有的dQ只是画q个圆的时候客户告诉你了一个方的框Ӟ然后q你是否能够画一个圆出来Q是椭圆q是正圆Q还是一个不规则的多边ŞQ?Q?/font>

      软g产品不同于修楼和盖房子,q是一个很Ua的空惛_冥想的智力活动的l晶。这个结晶没有生前大家都只能互相描q这个结晶的样子Q然后互相在脑v中YYZ个Ş象,q个大家包括所有hQ客戗设计h员、需求h员、编码h员等{。一直到完工拿这个结晶给客户Q客户左看三圈,右看三圈。哎呀呀Q好像不是我要的那个样子Q你们怎么做成q样呢?Q?于是大家重新合计了一下,回去再修改了一下这个结晶再拿给客户Q客L(fng)了一下:嗯,好像是这个样子。不要高兴太早了Q过几天你又被客户叫q去了:你们弄出来的q个东西不好用,会去再改?.. ... ... ...嗯,我想加一些功?.. ... ...

      Q我不知道我写到q里的时候各位看官有没有兴趣l箋看下去,虽然俺写的不是很累,好歹你也l鹅一点Face抢一个沙发嘛Q)

      如我上面描述的那P一个Y仉目的大概情况是q样Q按照那本Y件工E的书里面所说或许可以同那个什么“螺旋式上升”挂钩;但是q种螺旋不是目理人员愿意看到的:目周期加长Q成本增加等{,很多问题产生Q当然有些螺旋是始终避免不了的)?/font>

      软gq个东西始终不同于修房子QhcM居以来有了几千q的修房子的l验Q而Y件开发管理的q程从整个hcd来说也不q几十年Q再来到中国也真正不q几q。中国h都喜Ƣ热闹,那里热闹q那里Q也喜欢一步登天,考,好歹中国人飞天也是这么几q的事情Q大家急个P.

      说了一点废话,我有Ҏ(gu)؜乱和偏题了,其实我的x是一个项目管理h员不能只Z完成目而完成项目。项目管理h员要真正为客戯虑Qؓ客户解决问题Q站在客L(fng)角度考虑问题Q从客户的角度来看这个正在进行中的Y仉目,把客L(fng)需求变为管理h员的需求(把自己变为客户h员)Q拿q些需求去完善和要求项目。这h能真正保证这个项目是客户要的Q才能保证客户用v来不会有生ӆ感。才能避免一些螺旋的产生Q主动解决问题比消极应战好。如果项目管理h员不能把自己攑֜客户的位|,对于软g的要求始l都是存在一定差距的?/font>

     W二个代表:代表员工的利?/font>

      我一直有些看法:软g产品不是试出来的,他是刉出来的Q测试只是辅助手Dc保证Y件品质量的非常重要因素是一个团队。Y件是一个智力性的产品Q而蝲体就是hQ项目管理的人?/font>

      在我看来Q根据我q么多年l验Q,最能表达Y件质量的是h员的U极性、主动性。hq种动物是非常有惰性的Q而且依附性比较强Q很多时候都是得q且q;但是当这U动物对什么感兴趣的时候这U最能燃烧小宇宙?/font>

     而一个项目管理h员要做的是协调和沟通,提高他们的积极性和d性,取得他们的信任,了解他们对于自己价值的体现。有正对性的l他们提供相应的利益服务?/font>

     其实大部分智力性h员一般需要的是两个方面:一U被需要认可的价|一U被金钱认可的h(hun)倹{前者需要导向,q个导向没有什么好说的Q我认ؓ不同的管理h员方法不一栗后者分Z个方面工资和目奖金Q工资这块我׃多说了,我说的是目奖金问题Q?/font>

     q记得大锅饭不,没有目奖惩制度的项目就是一个大锅饭Q做好做坏一个样Q质量问题很严重Q没有项目奖惩制度就是对于项目确可控制的细节,目理人员手中无权Q就~少控制手段。管理,卌,又要理。项目管理h员手里必要有权啊,有h事权Q胦权。胡萝卜没有Q大也没有哪能做什么事???

     大家出来混其实都是؜口饭吃,所以根本就是一个钱Q钱啊。一个项目的利益分配Ҏ(gu)必须让项目h员认可,否则攚w目就是一个松散型的项目:质量问题、进度问题、沟通问?.. ...



]]> Y件系l分析的Ҏ(gu)和策?/title><link>http://www.shnenglu.com/apollo/articles/8567.html</link><dc:creator>W笑?/dc:creator><author>W笑?/author><pubDate>Wed, 14 Jun 2006 13:51:00 GMT</pubDate><guid>http://www.shnenglu.com/apollo/articles/8567.html</guid><wfw:comment>http://www.shnenglu.com/apollo/comments/8567.html</wfw:comment><comments>http://www.shnenglu.com/apollo/articles/8567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/apollo/comments/commentRss/8567.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/apollo/services/trackbacks/8567.html</trackback:ping><description><![CDATA[ <dl class="ReadArticle"> <dt> <strong> <font size="4">Y件系l分析的Ҏ(gu)和策?</font> </strong> </dt> <dd class="ArticleInfo">                          来自QSawin    </dd> <dd class="ArticleContent"> <p>当一个Y仉目摆在h们面前时Q进行系l的分析是首当其冲的,正如我们的一句古?三思而后行。因此,无论做Q何事都应考虑是否有意义以及它的可行性。在q去Qh们将“Y件”与“程序”、“开发Y件”与“编E序”划{号Q粗略的q行估计和设计Y件品势必会影响软g的质量和生效率。然而现在,随着信息化业的发展QY件企业的增多,其是当面对一些大中型的Y仉目,对Y件生命周期的各个环节q行pȝ详细的分析将更加重要,而且会提高Y件的质量和效率?/p> <p> <strong>一、Y件系l开?br /></strong>无论动物、植物,作ؓ一个完整的事物,都有它的生命周期、或者说它的轨迹。作为先q高U技的?--软g产品,自然也不例外。这期间,要经q一pd的过E?例如,开发者首先要考虑它的可行?是否能坚军_前问题或是将来是否能有更大的发展,当然要有详细的规划和设计,要Ş成书面的文档记录下来,以便开发员之间的交。其ơ关键的是能否满用L(fng)需?因ؓ判断开发出来的软g是否成功的标准之一是看它有无实用性。之后便是一pd的实?例如E序设计,pȝ试,以及接下来的后箋工作---l护与修改工作?br />软g生命周期的各个环节将软gpȝ开发大致分为四个阶D,用图C的方式表现出来即通常所说的“瀑布模型”,如图Q?/p> <p> <strong>二、系l分?/strong> <br />pȝ分析是Y件生命周期的一个关键环节,其目标是对计算机应用系l的需求{化成实际的物理实现。然而实际面太多Q增加了软g分析的复杂度Q那么究竟在pȝ分析的过E中需要考虑那些因素呢?</p> <p>1、系l目的。在考虑pȝ目的Ӟ应更多的侧重于系l的最l目标考虑Q因Z个系l不可能在最初就是完的Q要为系l留些余地?br />2、系l参与者。在整个目中,要考虑有哪些方面参与了pȝQ这些参与者h可能在系l徏设中起重要作用,他们采取什么样的态度会对系l有一定的影响。另外,q要了解各参与者的初衷是什么?br />3、明的评h(hun)标准。最好从参与的各斚w都进行考虑Q要知道他们对这个系l是否有一个明的评h(hun)标准?br />4、系l开发计划的完善度。计划表要有明确的阶D,每一阶段要有详细的完成计划,以及寚wD完成情况进行的评h(hun)?br />当然q有很多因素值得考虑Q可以根据面对的目的不同而改?譬如与Y件开发h员的交流{等?/p> <p> <strong>三、开发内?/strong> <br />开发Y件系l最为困隄部分Q就是准说明开发什么。这需要在开发的q程中不断的与用戯行交与探讨,使系l更加详?准确C。这需要确定用h否需要这L(fng)产品cd以及获取每个用户cȝ需求。需求类型包括三? </p> <p>1、业务需求(business requirementQ反映了l织机构或客户对pȝ、品高层次的目的要求,它们在项目视图与范围文档中予以说明?br />2、用户需?user requirement) 文档描述了用户用品必要完成的Q务,q在使用实例文档或方案脚本说明中予以说明?br />3、功能需?functional requirement)定义了开发h员必d现的软g功能Q得用戯完成他们的Q务,从而满了业务需求?br />MQ无论是商业性或非商业目的的产品Q都应具备完整的说明?以避免发生状冉|引v不必要的损失?/p> <p> <strong>四、分析设计和pȝҎ(gu)<br /></strong>在考虑完各斚w的实际因素后Q就要对目q行M的分析设计。简单的ԌM设计需要确定的内容应当包括Q?/p> <p>1、系l需要实现哪些功能;<br />?2、开发用什么YӞ在什么样的硬件环境;<br />3、需要多hQ多时_ <br />4、需要遵循的规则和标准有哪些?</p> <p>一般情况下Q在M设计出来后,需要给客户一个系l的Ҏ(gu)。如果在客户需求不是十分明的情况下提交方案,往往和实际制作后的结果会有很大差异。所以应该尽量取得客L(fng)理解Q在明确需求ƈM设计后提交方案,q样对双斚w有益处。而方案则应包括以下几个部分: </p> <p>1.客户情况分析Q?<br />2.pȝ需要实现的目的和目标; <br />3.pȝ各个模块与结构;<br />4.使用软gQ硬件和技术分析说明; <br />5.开发时间进度表Q?<br />6.l护Ҏ(gu)Q?<br />7.制作费用?/p> <p>MQM设计阶段是以比较抽象概括的方式提Z解决问题的办法;而详l设计阶D늚dQ也是把解法具体化。详l设计主要是针对E序开发部分来说的Q但q个阶段的不是真正编写程序,而是设计出程序的详细规格说明。这U规D明的作用很类g其他工程领域中工E师l常使用的工E蓝图,它们应该包含必要的细节,例如Q程序界面、表单、需要的数据{,E序员可以根据它们写出实际的E序代码Q而至于后l的工作,有E序员来完成~写E序,pȝ试员来完成试,q有之后的维护和修改?/p> <p> <strong>五、运用策?br /></strong>伟h有治国的{略,商h有致富的财\,巧妇有理家的本领,鹤发童颜的老h有长生的U诀。在q行软g开发系l分析时Q也要本着一些策略:</p> <p>1Q“简单—复杂—简单”。这是技术型分析人员l常到的情况,认ؓ分析出错l复杂的关系Q花哨的图表才能昄出分析水q高Q其实,分析l常要经??复杂-?的过E,前一个简单表Cؓ分析人员"认ؓ?Q随着分析的深入,原以为简单的问题会越来越复杂Q最后,l过概括、消化、分解,使得需求简单明了?br />2QY件复用技术。新开发的软gQ要从一开始就考虑其可演化性,以便以后的再工程和构件提取。随着软g复用技术的不断发展Q从头开始的软g大量减少Q用的遗pȝ相应增多,q就避免了重复的工作,使得已完善的模块遗传下去?br />3Q模块化概念。模块化可以增强pȝ的独立性,使耦合度降低,实现“高内聚-松耦合”。对于模块的内部Q光度集中,而模块与模块间的联系相对减少Q这样ɾpȝ各模块独立的q行q{?/p> <p>M雄才伟略的h都能U观全局,有一览众山小之气。若x的成果必然要有对事物q行ȝ分析的能?q就包括是否着g长远利益,是否能对其很好的理掌控。系lƈ不是单的计算Z替手工劳作的一U方式,它是一U高于现实的理模式。因?pȝ分析是Y件开发过E中必不可少的一个环节,它ؓ高质量Y件品的开发奠定了基础?</p> <p> </p> </dd> </dl> <img src ="http://www.shnenglu.com/apollo/aggbug/8567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/apollo/" target="_blank">W笑?/a> 2006-06-14 21:51 <a href="http://www.shnenglu.com/apollo/articles/8567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>普通开发h员与软g工程师的区别http://www.shnenglu.com/apollo/articles/8543.htmlW笑?/dc:creator>W笑?/author>Wed, 14 Jun 2006 05:13:00 GMThttp://www.shnenglu.com/apollo/articles/8543.htmlhttp://www.shnenglu.com/apollo/comments/8543.htmlhttp://www.shnenglu.com/apollo/articles/8543.html#Feedback0http://www.shnenglu.com/apollo/comments/commentRss/8543.htmlhttp://www.shnenglu.com/apollo/services/trackbacks/8543.html普通开发h员与软g工程师的区别Q?/p>

Ҏ(gu)1Q?/strong>

A、普通开发h员:

掌握了计机基础知识Q?br />熟?zhn)计算源,学会了编E语aQ喜Ƣ卖弄技巧,喜欢比较~程语言的优劣;
以能~出某种Ҏ(gu)功能的程序ؓ荣,不懂原理Q不求甚解;
喜欢个h开发,不重视文档编写;

B、Y件工E师Q?/strong>

计算机基知识扎实Q?br />掌握两门以上~程语言Q很停留在表面比较~程语言的优劣;
以编写出用户满意的高质量软g?br />懂得个h开发和团队开发的利弊Q文档规范,齐全?/p>

Ҏ(gu)2Q?/strong>

A、普通开发h员:


只重视功能的实现Q不重进度和质量的把握?br />怕被“管”得太死Q动不动p限制了思\Q没有发挥空间?br />不喜Ƣ做试工作Q认为测试低Z{,从来没有做过试工作?br />只根据自q爱好学习(fn)技术;

B、Y件工E师Q?/strong>

懂得在进度、质量(功能Q和成本之间q?br />懂得规范的目的在于重用,重用有利于提高效率和集中_֊创新?br />认ؓ试工作比编码更h战性,自己l常为同伴的代码做白盒测试?br />Ҏ(gu)企业目的需求和自己发展目标的共同点选择学习(fn)内容和方向;

Ҏ(gu)3Q?/strong>

A、普通开发h员:

认ؓ别hE序很差Q不喜欢看别人的代码Q?br />总认己比业务专家q更理解需求?br />目开始时Q喜Ƣ说:“没问题QSO EASY”?br />目大大延期Ӟ喜欢_“设计太烂,没法~程”?/p>

B、Y件工E师Q?/strong>

喜欢为同事走查代码,q以此获得学?fn)他Z点的ZQ?br />懂得自己只是可能比业务专家更懂编E?br />目开始时Q喜Ƣ问:“那是什么?q是Z么?”?br />目大大延期Ӟ喜欢_“我Z么就没想到…”?br />



]]>
80Q?0效率法则”的人力制度http://www.shnenglu.com/apollo/articles/8000.htmlW笑?/dc:creator>W笑?/author>Wed, 31 May 2006 15:06:00 GMThttp://www.shnenglu.com/apollo/articles/8000.htmlhttp://www.shnenglu.com/apollo/comments/8000.htmlhttp://www.shnenglu.com/apollo/articles/8000.html#Feedback0http://www.shnenglu.com/apollo/comments/commentRss/8000.htmlhttp://www.shnenglu.com/apollo/services/trackbacks/8000.html
  80Q?0效率法则(the 80Q?0 principle)Q又UCؓ帕篏托法则、帕累托定律、最省力法则或不q原则?

 

  早在19世纪末,帕篏托研I英国h的收入分配问题时发现Q大部分财富向部? Z辏V还发现某一部分人口占Mh口的比例Q与q一部分人所拥有的胦富的份额Q具有比较确定的不^衡的数量关系。而且Q进一步研I证实,q种不^衡模式会 重复出现Q具有可预测性。经学家把q一发现UCؓ“帕累托收入分配定律”,认ؓ是“帕累托最引h注目的A(ch)献之一”?/font>

  理学家从帕累托的研I中归纳Z一个简单的l果Q如?0Q的人占?0Q的 C会财富Q由此可以预, 10Q的人所拥有的胦富ؓ65Q,5Q的Zn有的财富?0Q。管理学家看重的是这一l果体现的思想Q即不^衡关pd在的定性和可预性。正如里查d· U克有一个精彩的描述Q“在因和果、努力和收获之间Q普遍存在着不^衡关pR典型的情况是:80Q的收获来自20Q的努力Q其? 80Q的力气只带?0Q的l果。?/font>

  MQ?0Q?0效率法则”告诉h们一个道理,卛_投入与出、努力与收获、原因和l果之间Q普遍存在着不^衡关pR少的投入,可以得到多的产出Q小的努力,可以获得大的成WQ关键的数Q往往是决定整个组l的效率、出、盈亏和成|的主要因素?/font>

  ?0Q?0效率法则”所内涵的理念和规律q用于组lh力资本管理活动之中,理者必Lh力资本用的Ҏ(gu)性,以及提高人力资本使用效率的重要性与可行性?/font>

  首先Qh力资本的存在形式和作用方式不同于物力资本。h力资本以Zؓ载体。用权M只能间接控制Q无法直接支配。运用权Mh怹的唯一性。h力资本的使用效率Q完全由载体个h力_努力的供l决定?王徏民,2001Q?Q?001Q?2)

  其次Qh力资本是最重要的生产要素。不仅因为生产的可持l发展对人力资本要素需求的比例不断扩大Q而且其中非h力资本要素的使用也完全取决于人力资本?/font>

  W三Qh力资本完全可以通过理方式的改变而提高用h(hun)值和价倹{在一U“游? 规则”下默默无闻的“^怹辈”,在另一U规则下却有可能成ؓd遐迩的栋梁之才。“游戏规则”就是制度,卌定或影响M行ؓ的正式和非正式规则。制? 是资本,是生产力的创造者。通过构徏或创新管理制度,完全有可能提高组l中人力资本的生产力?/font>

   W四Q?0Q?0效率法则”适用于h力资本管理。实践表明,一个组l的生效率和未来发展,往往军_于少?比如20Q?关键性的人才。对一个股份制企业l织而言Q从董事会的角度考虑Q关键h才一般包括以下h员:

  (1)CEO、CFO{高U的理人员Q?/font>

  (2)开发、生产、营销、h力资源等重要部门l理或项目负责hQ?/font>

  (3)高研究与开?R&D)人员Q?/font>

  (4)h创造发明高U技能型人力资本的技术、工艺及制度设计人员Q?/font>

  (5)其他极具发展潜力的高素质员工?/font>

  Z此,如何构徏?0Q?0效率法则”的l织人力资本理制度十分有意义。下面五行动徏议,供h力资本决{者和理者参考,也许可助一臂之力?

  一、精挑细选,发现“关键少数”成?/font>

  所谓发现“关键少数”成员,实际上是要发现“关键的”h力资本。h力资本无色无 呟뀁无形无态、无影无t,本来难以“发现”,更何冉|对特定组l具有关键作用的人力资本?Z扑ֈ合适h选,许多l织不仅要支付发现成本,而且q得冒因 “招聘失败”而导致h(hun)值损q风险。一般而言Q所选h员职位越高,所付成本或所冒风险越大。招聘CEO、CFO{“最关键”的高񔽎理人员Q可以委托专? “猎头公?Head Hunter)”进行。ؓ此需要付出的服务费可达所获h才年薪的25Q,甚至35Q。尽费用不低,但对l织来说q是比亲自操作来得方ѝ保险、便宜? 2002q??月间Q国内媒体“爆炒”了“哈?jng)博士年薪百万落h办高校”,不到三个月因怀疑“博士n份有假”及“沟通困䏀等原因被解聘的新闻。假? 校方(׃外事译学院)和“哈?jng)博?陈琳)”动机纯正,那么Q这件事可以看作是“招聘失败”的一个典型案例。由此给双方带来的损失,要大于用“猎 头”服务的成本。CEO、CFO{以下层ơ“关键少数”,主要以组l中的h力资源部门在内部市场和外部市场“发现”ؓ丅R有多种Ҏ(gu)与技术可供参考。申? 表考察、测试、面谈是三种常见的方法。能力测试、操作技能测试、n体技能测试、h格测试、兴测试、成测试、工作样本测试等Q是常用的测试类型。招聘面 谈需要经q准备、实施、评C道程序。面谈的Ҏ(gu)有非l构化、半l构化和l构化等多种cd?

  然而,即ɾl过了多道程序、用了多种Ҏ(gu)与技术精挑细选,也不能保证每ơ招? 均万无一失,更不能保证所甄选的员工日后个个U心如意。好在普遍实行试用期和短期合同聘用制度,可以比较有效地降低甄选失误的成本。保证“关键少数”的? 选质量,除了依赖正式规则Q还需要注意避免认识上的误区。D例来_像大才出自名校、选h用h唯名校是举,是目前许多企业和事业组l深陷其中的误区。古 语说得好Q“夜光之珠,不必Z孟|之河Q盈握之壁,不必采于昆仑之山。?南朝宋·刘义庆《世说新语¯语?q开才\Q招贤纳士,才是寻获“关键少 数”的正确选择?/font>

  二、千锤百|打造核心成员团?/font>

  发现“关键少数”成员十分重要,但更重要的,是把“关键少数”整合v来,从中选择核心成员Q徏立决{、管理、创新工作团?teams)?/font>

  建立团队Q就是要把“每个h的能力、经验、态度和h(hun)gl在一P创造出一个内 容丰富的l构。”团队结构具有紧密、完整、协调特征,通常可以产生大大优于L个体或松散群体之和的效率或力量。因而,在日激烈和国际化的竞争环境中, 团队正逐步成ؓl济和社会活动主的工作方式?/font>

  一个组l的存在与发展,取决于多U内生与外生变量。但是,在决{、管理和创新三个最重要的环节诏d队精,落实团队工作机制Q无论对于企业组l还是事业组l,都是成功的必要条件?/font>

  团队决策是第一步。“一a堂”、“家长制”、“一把手说了”,是小农经性质 的决{方式。这U方式,不止行于计划经时期,时至今日Q在竞争机制、h(hun)格制度和权力ql构未建立或不完善的国有垄断部门、事业单位、私营企业、官 僚化的“群众团体”中Q甚臛_一些学术团体中Q仍然普遍存在着决策权高度集中的现象。决{权高度集中Q效率损失通常在所隑օQ资产流q概率必然大大? 加?/font>

  明晰产权边界Q徏立权力结构^衡的决策团队Q实行团队决{,是组l成功的最优选择?/font>

  同样Q在生要素交易、生产作业、品营销、h力资源等理环节Q团队工作方? 的收益必然大于非团队方式。技术、工Z产品创新Q是l织核心竞争力的军_因素。在知识分类全面_化和力_分工高度专业化的今天Q单打独斗、闭门造RQ? 最l只能以p|告终。配|优质h力资本,建立高效率研?R&D)团队Q强化合作博弈机Ӟ是组l实现创新的必然选择?/font>

  三、锻炼培训,提高“关键少数”成员的竞争?/font>

  核心竞争力是l织在激烈的市场竞争中获胜的必要条g。竞争环境的变化Q要求组l? 不断调整和强化核心竞争力。组l的核心竞争力,表面上看Q是体现在品开发、性能改进和生产成本节U等一pdq程中的领先技术与工艺Q但实际上,应该是创 造、掌握和(?q用技术与工艺的hQ即l织中“关键少数”成员所h的h力资本?/font>

  人力资本有自学习(fn)功能和用的价值增值性。但是,人力资本的自学习(fn)zdQƈ不一 定沿着l织所希望的方向发展,使用价值的增加也不一定能够满组l发展的需要。因此,Z保持、扩大或者赢得生存与发展I间Q组l必采取措施,不断提高 “关键少数”成员组l专用性h力资本的竞争力?/font>

  专用性h力资本,可以通过挑战性实际工作的“锻炼”和专用性技能的“培训”两? 途径来获得。在ȝ与培训过E中Q应该注意发挥“皮格马力翁效应 (Pygmalion effect)”的作用Q即要相信、鼓励、支持、肯定受训员工。常对他们说Q你?你能做到!你一定会成功!事实证明Q此法可以大大激励员工取得显著的? 训W效?

  在锻g培训q程中,更应该注意成本—收益分析,争取收益最大化。如果h力资? 产权关系定、边界明晰、用权和收益权的实现有保证Q就可以放Q“马太效应”,即更强;如果l织对于其所投资人力资本的用权、收益权实现没有? 分把握,那么Q就应该在强化h力资本权关pȝ同时Q注意采取分散投资策略,避免“把鸡蛋攑֜一个篮子里”——把ȝ与培训的Z集中于某一位或某几位员 工。因Zh力资本质量越好、品位越高,容易成为“猎头公司”的目标Q流q可能性越大。而一旦流失,ɾl织的投资付怸。而且Q还有可能发生泄露组 l技术或商业U密的情况,使组l蒙受更大损失?/font>

  投资“关键少数”成员的人力资本是必要的Q但需要徏立有效的收益权实现机Ӟ? 止h员流失所带来的损失。在目前的条件下Q投资方与被投资方自愉K择Q签U投?与接受组l安排的出国q修、在职专向技能培训的成员事先{订合约)QU? 使用Q违U赔偿,应该是组l维护收益权的最佳选择?/font>

  四、有效激励,强化“关键少数”成员的工作动力

  按照人力资本产权理论家的观点Q组l通过市场交易招募到员工,是获得了在合U期 内以一定代价用员工h力资本的权利。获得了使用权,q不意味着可以随心所Ʋ地使用人力资本Q就能够享受Ch力资本带来的效用。h力资本由唯一的主? (载体本h)直撩控制、具体操作,M载体之外的权利主?包括所有权M)Q只能间接利用。要x较充分地利用人力资本的h(hun)值和使用价|必须使得载体 本h感受到有强度的激励,产生努力工作的动力?/font>

  Ȁ励根源于需要。当行ؓM的需要未满Ӟ׃出现心理紧张Q进而在w体内 生内驱力Q去L能够满需要的目标。目标一旦找刎ͼ需要得到满I心理紧张卛_消除。然而,人的需要是无限的,旧的需要得到满I新的、更高层ơ的需? ׃产生。需要的层次高Q满的隑ֺ大Q激q因素复杂?/font>

  “关键少数”成员的需要非同一般,按照亚伯拉罕·马斯z?Abraham Maslow)的需要层ơ理?Hierarchy of Needs Theory)Q应该是辑ֈ最高和ơ高层次的需要——自我实现需要和重需要。因此,只有提供满q两U需要的条g或机会,才可能生有效激励。这些条? 或机会主要包括:

  (1)获得荣誉、提升地位、受到尊重;

  (2)分n决策权、管理权Q?/font>

  (3)q修、提高业务水qI

  (4)定的、o人满意的个h职业发展计划Q?/font>

  (5)发挥潜能、实CZh(hun)倹{?/font>

  五、优胜劣汎ͼ动态管理“关键少数”成员团?/font>

  对组l中的“关键少数”成员和由“关键少数”成员构成的团队Q要实行动态管理,卛_行优胜劣汰制度?/font>

  保持l织员工的流动性十分必要。有二位国学者,从理Z对员工流动的必要性作 了较有说服力解释。一位是心理学家勒温(KQLewin)。他提出了“场论”,认ؓ个h的工作W效BQ是个h的能力和条gPQ以及个人所处环境E(个h? “场?的函敎ͼB=f(PQE)。个Z环境之间一般L一个从怺“适应”到“不适应”的发展q程。由于个人无法左右环境,环境通常也不会因为少C 发生改变,因此Q当适应E度下降至不适应E度Ӟ新的环境无论对于个hq是l织都是最佳选择。另一位是卡兹(Katz)。他在大量调查统计的基础上提 Z“组l寿命学说”。他发现Q?Q??q是U研l织的最?jng)_龄区。期_U研人员之间信息沟通水qx高,成果最多。之前,“新面孔”之间交有限;? 后,“老相识”之间“老话”连。信息沟通水q下降,l织成果必然减少。解决问题的办法是人员?gu)动。数q流动一ơ,一生流??8ơ是合理选择?/font>

  “流水不腐,h不蠹”。以l效考核Z据,对“关键少数”成员群体和核心成员团队实行末位淘汰制或者按比例(比如5Q~10Q?淘汰Ӟ同时Q不断发现、引q优U成员。这是维持组lh力资本活力,q进而保持组l核心竞争力的必要条件?/font>



]]>
《写量好软g?5条体会》暨{案ZThttp://www.shnenglu.com/apollo/articles/7903.htmlW笑?/dc:creator>W笑?/author>Tue, 30 May 2006 13:48:00 GMThttp://www.shnenglu.com/apollo/articles/7903.htmlhttp://www.shnenglu.com/apollo/comments/7903.htmlhttp://www.shnenglu.com/apollo/articles/7903.html#Feedback0http://www.shnenglu.com/apollo/comments/commentRss/7903.htmlhttp://www.shnenglu.com/apollo/services/trackbacks/7903.html如何用正的Ҏ(gu)来写量好的Y件的75条体?/a>》的blogQ后来他又给Z相应的回{:《七十五条》的解释 。而我亦给Z我自q{案Q有些不错,有些差强人意Q有些则非常不了。ؓ便于比较Q我的答案附在了MVM{案的后面?

1. 你们的项目组使用源代码管理工具了么?
MVM : 应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS?br />郁也?/strong> : 公司使用的是VSSQ在|上与朋友玩的就是CVS了?


2. 你们的项目组使用~陷理pȝ了么Q?br />MVM : 应该用。ClearQuest太复杂,我的推荐是BugZilla?br />郁也?/strong> : 嫌BugZilla安装太费事,界面太简陋,我选择的是Jira的破解版?/p>

3. 你们的测试组q在用Word写测试用例么Q?br />MVM : 不要用Word写测试用例(Test CaseQ。应该用一个专门的pȝQ可以是Test ManagerQ也可以是自己开发一个ASP.NET的小|站。主要目的是Track和Browse?br />郁也?/strong> : 用WordQ而且试工作很是不上台面Q中国Y件的通病Q所以我们公怹没少得了犯)?/p>

4. 你们的项目组有没有徏立一个门L(fng)站?
MVM : 要有一个门L(fng)站,用来放Contact Info、Baselined Schedule、News{等。推荐Sharepoint Portal Server 2003来实玎ͼ15分钟搞定。买不vSPS 2003可以用WSS (Windows Sharepoint Service)?br />郁也?/strong> : 没有Q不q看你这么介l,回头试试厅R?/p>

5. 你们的项目组用了你能买到最好的工具么?
MVM : 应该用尽量好的工h工作。比如,应该用VS.NET而不是Notepad来写C#。用Notepad写程序多半只是一U炫耀。但也要考虑到经费,所以说是“你能买到最好的”?br />郁也?/strong> : 我一向认为所谓的Notepad开发是自虐狂的不良嗜好。我们用EclipseQ不要钱的,但我认ؓ是java开发最好的工具了?/p>

6. 你们的程序员工作在安静的环境里么Q?br />MVM : 需要安静环境。这Ҏ(gu)端重要,而且要保证每个h的空间大于一定面U?br />郁也?/strong> : 看来q位兄台是看qh件了Q可惜我们公司的办公环境只能说是一般,极ؓ一般?/p>

7. 你们的员工每个h都有一部电(sh)话么Q?br />MVM : 需要每Z部电(sh)话。而且?sh)话最好是带留a功能的。当Ӟ上这么一套带留言?sh)话pȝ开销不小。不q至每Z部电(sh)话要有,千万别搞得经常有人站h喊:“某某某?sh)话”。《h件》里面就强烈谴责q种做法?br />郁也?/strong> : 你果然看了h件了Q但误清Ş式吧Q那是美国,q是中国Q“中国国情”四个字会噎M的,现在的实际情冉|很多公司都不让用QQQMSNQ肯定包括我们公怺Q?/p>

8. 你们每个人都知道Z问题应该找谁么?
MVM : 应该知道。Q何一个Feature臛_都应该有一个OwnerQ当ӞOwner可以l箋Dispatchl其他h?br />郁也?/strong> : 我们知道L谁,但这不代表就能解决问题?/p>

9. 你遇到过有h说“我以ؓ…”么Q?br />MVM : 要消灭“我以ؓ”。Never assume anything?br />郁也?/strong> : 我也l常说“我认ؓ”,其在我验证之前。当Ӟ我会考虑Ҏ(gu)?/p>

10. 你们的项目组中所有的人都坐在一起么Q?br />MVM : 需要。我反对Virtual TeamQ也反对Dev在美国、Test在中国这U开发方式。能坐在一起就最好坐在一P好处多得不得了?br />郁也?/strong> : 需要,很多问题不是面对面的话,q真无法解决Q或是有时候面寚w更能开拓思\Q也能更好地交互?/p>

11. 你们的进度表是否反映最新开发进展情况?
MVM : 应该反映。但是,应该用Baseline的方法来理q度表:l护一份稳定的ScheduleQ再l护一份最新更攏VBaseline的方法也应该用于其它的Spec。Baseline是变更管理里面的一个重要手Dc?br />郁也?/strong> : q是我一直很头疼的问题,如何l护一个有效的q度表不亚于M一个模块的开发啊?/p>

12. 你们的工作量是先由每个h自己估算的么Q?br />MVM : 应该让每个h自己估算。要从下而上估算工作量,而不是从上往下分z。除非有其他原因Q比如政MQ务工期固定等?br />郁也?/strong> : 可惜我们的Q务多是政MQ务,工期固定的就像螺丝钉?/p>

13. 你们的开发h员从目一开始就加班么?
MVM : 不要q样。不要一开始就搞疲x。从目一开始就加班Q只能说明项目进度不合理。当Ӟ一些对日Y件外包必d天加班,那属于剥削的范畴?br />郁也?/strong> : 我们加班是很多是因ؓ资源的到位晚D的,无可奈何。谁都知道问题的所在,谁都找不到解决问题的Ҏ(gu)?/p>

14. 你们的项目计划中Buffer Time是加在每个小d后面的么Q?br />MVM : 不要。Buffer Time加在每个Q务后面,很容易轻易的p消耗掉。Buffer Time要整D늚加在一个Milestone或者checkpoint前面?br />郁也?/strong> : 我们量q么做了?/p>

15. 值得再多׃些时_?5%做到100%?br />MVM : 值得Q非常值得。尤其当目后期人困马乏的时候,要坚持。这会给产品带来质的区别?br />郁也?/strong> : 我们多是在客L(fng)D下完成那最后的5%的。而且100%q不代表OverQ而是另一?00%的开始,成就了一个完的恶性@环?/p>

16. 登记新缺hQ是否写清了重现步骤Q?br />MVM : 要。这属于Dev和Test之间的沟通手Dc面寚w沟通需要,详细填写Repro Steps也需要?br />郁也?/strong> : l对要,理由同上?/p>

17. 写新代码前会把已知缺陯决么Q?br />MVM : 要。每个h的缺陷不能超q?0个或15个,否则必须先解册的bug才能l箋写新代码?br />郁也?/strong> : 没别的说的,一定要?/p>

18. 你们对缺L(fng)轻重~急有事先的约定么Q?br />MVM : 必须有定义。Severity要分1??Q约定好Q蓝屏和Data LostSev 1QFunction ErrorSev 2Q界面上的算Sev 3。但q种U定可以Ҏ(gu)产品质量现状适当q行调整?br />郁也?/strong> : 知道需要,但是做的相当不够Q需要努力改q?/p>

19. 你们Ҏ(gu)见不一的缺h三国会议么?
MVM : 必须要有。要有一个明的决策q程。这cM于CCB (Change Control Board)的概c?br />郁也?/strong> : 要由最后拍板的。而且不能陷入争论的惔淖?/p>

20. 所有的~陷都是q记的人最后关闭的么?
MVM : Bug应该由O(jin)pener关闭。Dev不能U自关闭Bug?br />郁也?/strong> : 同意?/p>

21. 你们的程序员厌恶修改老的代码么?
MVM : 厌恶是正常的。解x法是l织Code ReviewQ单独留出时间来。XP也是一个方法?br />郁也?/strong> : Code ReviewQ我们老板不喜Ƣ?/p>

22. 你们目l有Team Morale Activity么?
MVM : 每个月都要搞一ơ,吃饭、唱歌、Outing、打球、开卡丁车等{,一定要有。不要剩q些钱?br />郁也?/strong> : q点l对不会的Q至我带过的团队的凝聚力还是不错的?/p>

23. 你们目l有自己的Logo么?
MVM : 要有自己的Logo。至应该有自己的Codename?br />郁也?/strong> : 没想q,今天头要搞个我们部门的文化衫Q我强烈反对了。不qLogo可以考虑?/p>

24. 你们的员工有印有公司Logo的T-Shirt么?
MVM : 要有。能增强归属感。当ӞT-Shirt要做的好看一些,最好用80支的来做。别没穿几次q破烂烂的?br />郁也?/strong> : 哦,前一个我说了Q我反对了。我不喜Ƣ千Z面的感觉?/p>

25. ȝ理至每月参加次目l会?br />MVM : 要的。要让team member觉得高层xq个目?br />郁也?/strong> : 好像是个不可能完成的d。不知别的公司如何?/p>

26. 你们是给每个Dev开一个分支么Q?br />MVM : 反对。Branch的管理以及Merge的工作量太大Q而且Ҏ(gu)出错?br />郁也?/strong> : 反对Q管理困难,也没有必要,可以加Lable?/p>

27. 有h长期不Check-In代码么?
MVM : 不可以。对大部分项目来_最多两三天应该Check-In?br />郁也?/strong> : 不可以,我每天都监控VSS的?/p>

28. 在Check-In代码旉填写注释了么Q?br />MVM : 要写的,臛_一两句话,比如“解决了Bug No.225”。如果往高处拔,q也做“配|审计”的一部分?br />郁也?/strong> : 要写Q?/p>

29. 有没有设定每天Check-In的最后期限?
MVM : 要的Q要明确Check-In Deadline。否则会Build Break?br />郁也?/strong> : 没有Q整合就是个明确的Deadline了?/p>

30. 你们能把所有源码一下子~译成安装文件吗Q?
MVM : 要的。这是每日编译(Daily BuildQ的基础。而且必须要能够做成自动的?br />郁也?/strong> : 当然Q我不喜Ƣ出现源码和cL件不匚w?/p>

31. 你们的项目组做每日编译么Q?br />MVM : 当然要做。有三样东西是Y仉?产品开发必备的Q?. bug management; 2. source control; 3. daily build?br />郁也?/strong> : 臛_目负责做?/p>

32. 你们公司有没有积累一个项目风险列表?
MVM : 要。Risk Inventory。否则,下个目开始的时候,又只能拍脑袋分析Risk了?br />郁也?/strong> : 没有。也是一个需要考虑的内宏V?/p>

33. 设计简单越?br />MVM : 简单越好。设计时候多一句话Q将来可能就带来无穷无尽的烦恹{应该从一开始就勇敢的砍。这叫scope management?br />郁也?/strong> : 不同意,q度单就成了陋了。而且什么样的叫单?没有一个量的界定。设计是需要让别h看明白的?/p>

34. 量利用现有的品、技术、代?br />MVM : 千万别什么东襉K自己Coding。BizTalk和Sharepoint是最好的例子Q有q两个作为基Q可以把L(fng)提高很多。或者可以尽量多用现? 的Control之类的。或者尽量用XMLQ而不是自己去Parse一个文本文Ӟ量用RegExpQ而不是自׃头操作字W串Q等{等{。这是“Y 件复用”的体现?br />郁也?/strong> : 同意Q我的原则是Q有E_的,l过实践验证的开源组件或产品的话Q绝对不再自己搭炉灶?/p>

35. 你们会隔一D|间就停下来夯实代码么Q?br />MVM : 要。最好一个月左右一ơ。传adq初Windowsl在Stevb的命令下停过一个月增强安全。BtwQ“夯”这个字念“hang”,W一声?br />郁也?/strong> : 肯定做了Q不q可能ƈ不是有意识地d的?/p>

36. 你们的项目组每个人都写Daily Report么?
MVM : 要写。五分钟够了,?0句话左右Q告诉自己小l的Z天我q了什么。一则ؓ了沟通,二则鞭策自己Q要是游手好闲一天,自己都会不好意思写的)?br />郁也?/strong> : q是公司的规定。也是少有的能让我支持的规定?/p>

37. 你们的项目经理会发出Weekly Report么?
MVM : 要。也是ؓ了沟通。内容包括目前进度,可能的风险,质量状况Q各U工作的q展{?br />郁也?/strong> : 也是公司的规定?/p>

38. 你们目l是否至每周全体开会一ơ?
MVM : 要。一定要开会。程序员讨厌开会,但每个礼拜开会时间加h臛_应该?时。包括team meeting, spec review meeting, bug triage meeting。千万别大家闷头写code?br />郁也?/strong> : 要,臛_q点我们实施的还可以?/p>

39. 你们目l的会议、讨论都有记录么Q?br />MVM : 会前发meeting request和agendaQ会中有责主持和记录Q会后有责发meeting minutesQ这都是effective meeting的要炏V而且Q每个会议都要Ş成agreements和action items?br />郁也?/strong> : 有记录,最后要形成会议U要的?/p>

40. 其他部门知道你们目l在q什么么Q?br />MVM : 要发一些Newsflashl整个大l织。Show your team’s value。否则,当你坐在甉|里面Q其他部门的人问Q“你们在q嘛”,你回{“ABC目”的时候,别h全然不知Q那U感觉不太好?br />郁也?/strong> : 我们公司的项目开始时要求所有的技术骨q坐在一赯审的Q别人想不知道都难?/p>

41. 通过Emailq行所有正式沟?br />MVM : Email的好处是免得抵赖。但也要避免矫枉q正Q最好的Ҏ(gu)是先用电(sh)话和当面_然后Email来确认?br />郁也?/strong> : 很少使用EmailQ更多是当面解决问题Q毕竟都在一个办公室?/p>

42. 为项目组建立多个Mailing Group
MVM : 如果在AD+Exchange里面Q就建Distribution List。比如,我会建ABC Project Core TeamQABC Project Dev TeamQABC Project All TestersQABC Project Extended Team{等。这样发起Email来方便,而且能让该收到email的h都收到、不该收C被骚扰?br />郁也?/strong> : 没有q个条gQ这个更应该Ҏ(gu)目l的规模来进行吧?/p>

43. 每个人都知道哪里可以扑ֈ全部的文档么Q?br />MVM : 应该每个人都知道。这叫做知识理QKnowledge ManagementQ。最方便的就是把文档攑֜一个集中的File ShareQ更好的Ҏ(gu)是用Sharepoint?br />郁也?/strong> : 所有需要的开发文档都攑֜一个统一的地方,q是规定?/p>

44. 你做军_、做变化Ӟ告诉大家原因了么Q?br />MVM : 要告诉大家原因。Empower team member的手D之一是提供够的informationQ这是MSF一开的几个原则之一。的如此,tell me why是h之常情,tell me why了才能有understanding。中国h做事喜欢搞限Ӟ限制信息Q似乎能够看到某一份文件的人就是有w䆾的h。大错特错。权威、权力,不在? 是不是能access information/dataQ而在于是不是掌握资源?br />郁也?/strong> : Ҏ(gu)们来_需做变化时Q也是临时会议的需要进行的时候?/p>

45. Stay agile and expect change
MVM : 要这栗需求一定会变的Q已l写好的代码一定会被要求修改的。做好心理准备,对change不要抗拒Q而是expect change?br />郁也?/strong> : q点只能说谈何容易。希望能做到吧?/p>

46. 你们有没有专职的软g试人员Q?br />MVM : 要有专职试。如果h手不够,可以peer testQ交换了试。千万别自己试自己的?br />郁也?/strong> : 我们都知道需要,可是往往实际情况差强人意?/p>

47. 你们的测试有一份ȝ计划来规定做什么和怎么做么Q?br />MVM : q就是Test Plan。要不要做性能试Q要不要做Usability试Q什么时候开始测试性能Q测试通过的标准是什么?用什么手D,自动的还是手动的Q这些问题需要用Test Plan来回{?br />郁也?/strong> : 知道需要,可实际情况同46?/p>

48. 你是先写Test Case然后再测试的么?
MVM : 应该如此。应该先设计再编E、先test case再测试。当Ӟ事情是灵zȝ。我有时候在做第一遍测试的同时补上test case。至于先test case再开发,我不喜欢Q因Z?fn)惯Q太ȝQ至于别人推荐,那试试看也无妨?br />郁也?/strong> : 臛_目前的习(fn)惯和你类|来打算试试TDD?/p>

49. 你是否会为各U输入组合创建测试用例?
MVM : 不要Q不要搞边界条gl合。当心组合爆炸。有很多test case工具能够自动生成各种边界条g的组合——但要想清楚Q你是否有时间去q行那么多test case?br />郁也?/strong> : 不会Q没那个_֊先?/p>

50. 你们的程序员能看到测试用例么Q?br />MVM : 要。让Dev看到Test Case吧。我们都是ؓ了同一个目的走Ch的:提高质量?br />郁也?/strong> : 当然能够Q项目中所有的东西都是对大安明的?/p>

51. 你们是否随便抓一些h来做易用性测试?
MVM : 要这么做。自q自己写的E序界面Q怎么看都是顺眼的。这叫做审美疲劳——臭的看久了也就不臭了,不方便的怹了也׃(fn)惯了?br />郁也?/strong> : 我是非常推荐q样的测试的Q很多时候,客户也会参与q来?/p>

52. 你对自动试的期望正么Q?br />MVM : 别期望太高。依我看Q除了性能试以外Q还是暂时先忘掉“自动测试”吧Q忘掉WinRunner和LoadRunner吧。对于国内的软g试的现状来_只能“矫枉必过正”了?br />郁也?/strong> : 从不期望?/p>

53. 你们的性能试是等所有功能都开发完才做的么Q?br />MVM : 不能q样。性能试不能被归到所谓的“系l测试”阶Dc早早Ҏ(gu)Q早L升天?br />郁也?/strong> : 同意Q非常同意?/p>

54. 你注意到试中的杀虫剂效应了么Q?br />MVM : 虫子有抗药性,Bug也有。发现的新Bug来少是正常的。这时候,最好大家交换一下测试的areaQ或者用用看其他工具和手法,又会发C些新bug了?br />郁也?/strong> : 同意?/p>

55. 你们目l中有h能说Z品的当前整体质量情况么?
MVM : 要有。当老板问vq个产品目前质量如何QTest Lead/Manager应该负责回答?br />郁也?/strong> : q当然是TL/PM的活了?/p>

56. 你们有单元测试么Q?br />MVM : 单元试要有的。不q没有单元测试也不是不可以,我做q没有单元测试的目Q也做成功了——可能是侥幸Q可能是大家都是熟手的关pR还是那句话QY件工E是非常实践、非常工E、非常灵zȝ一套方法,某些Ҏ(gu)在某些情况下会比另一些方法好Q反之亦然?br />郁也?/strong> : 我同意,虽然我们做的很不好?/p>

57. 你们的程序员是写完代码就扔过墙的么?
MVM : 大忌。写好一块程序以后,即便不做单元试Q也应该自己先跑一跑。虽然有了专门的试人员Q做开发的Z不可以一Ҏ(gu)试都不做。微软还有Test Release Document的说法,E序太烂的话Q测试有权踢回去?br />郁也?/strong> : q样的选手是要挨骂的?/p>

58. 你们的程序中所有的函数都有输入查么Q?br />MVM : 不要。虽然说做输入检查是write secure code的要点,但不要做太多的输入检查,有些内部函数之间的参C递就不必查输入了Q省点功夫。同L(fng)道理Q未必要l所有的函数都写注释。写一部分主要的就够了?br />郁也?/strong> : 更多的时候是在最外面q行查。太多的查没有意义?/p>

59. 产品有统一的错误处理机制和报错界面么?
MVM : 要有。最好能有统一的error messageQ然后每个error message都带一个error number。这P用户可以自己Ҏ(gu)error number到user manual里面ȝ看错误的具体描述和可能原因,像SQL Server的错误那栗同PASP.NET也要有统一的Exception处理。可以参考有关的Application Block?br />郁也?/strong> : 有,q也是j2ee 的规范了?/p>

60. 你们有统一的代码书写规范么Q?br />MVM : 要有。Code Convention很多Q搞一份来发给大家可以了。当Ӟ要是有FxCopq种工具来检查代码就更好了?br />郁也?/strong> : 有,首先是IDE的format工具Q然后是Checkstyle之类的检查工具在每天的day build之前使用?/p>

61. 你们的每个h都了解项目的商业意义么?
MVM : 要。这是Vision的意思。别把项目只当成工作。有时候要想着自己是在Z国某某行业的信息化作先驱者,或者时不时的告诉team memberQ这个项目能够ؓ某某某国安门每q节省多多百万的U税人的钱,q样有动力了。^凡的事情也是可以有个崇高的目标的?br />郁也?/strong> : 刚才说了Q我们的目的每个部分对每个人都是透明的?/p>

62. 产品各部分的界面和操作习(fn)惯一致么Q?br />MVM : 要这栗要让用戯得整个程序好像是一个h写出来的那样?br />郁也?/strong> : 需要,q也是规范的一部分?/p>

63. 有可以作为宣传亮点的Cool Feature么?
MVM : 要。这是增强团队凝聚力、信心的。而且Q“一俊遮百丑”,有亮点就可以掩盖一些问题。这P对于客户来说Q会感觉产品从质量角度来说还是acceptable的。或者说Qcool feature或者说亮点可以作ؓ质量问题的一个事后I补措施?br />郁也?/strong> : 同意Q我前一个项目的界面风格Q被客户定ؓ其它目的参考标准了^_^?/p>

64. 可能羃短品的启动旉
MVM : 要这栗Y件启动时_Start-Up timeQ是客户Ҏ(gu)能好坏的第一印象?br />郁也?/strong> : 需要,另外一斚wQ等待对我们开发方也是一U折?/p>

65. 不要q于注重内在品质而忽视了W一眼的外在印象
MVM : E序员容易犯q个错误Q太看重性能、稳定性、存储效率,但忽视了外在感受。而高层经理、客h相反。这两方面要兼顾Q协调这些是PM的工作?br />郁也?/strong> : q也是我在最q的目中{变最大的斚w?/p>

66. 你们Ҏ(gu)详细产品功能说明书做开发么Q?br />MVM : 要这栗要有设计才能开发,q是必须的。设计文档,应该说清楚这个品会怎么q行Q应该采取一些讲故事的方法。设计的时候千万别ȝ节,别钻到数据库、代码等具体实现里面去,那些是后面的事情Q一步步来不能着急?br />郁也?/strong> : 我更喜欢q代Q你的设计是Ҏ(gu)需求,而需求是来自客户Q而客戗。。永q不变的是变化?/p>

67. 开始开发和试之前每个人都仔细审阅功能设计么?
MVM : 要做。Function Spec review是用来统一思想的。而且Qreviewq以后Ş成了一致意见,来再也没有人可以说“你看,当初我就是反对这么设计的Q现在吃苦头了吧?br />郁也?/strong> : 要做Q而且要求每个人都提出意见Q这是开发工作开始之前,开始之后,我更們֐于“一a堂”了?/p>

68. 所有h都始l想着The Whole Image么?
MVM : 要这栗项目里面每个h虽然都只是在刉一片叶子,但每个h都应该知道自己在刉的那片叶子所在的?wi)是怎么样子的。我反对软g蓝领Q反对过分的把Y件制造看成流水线、R间。参见第61条?br />郁也?/strong> : 我也同样反对“Y件蓝领”,一向唾弃这个学院派刉的名词。我们采取的方式也同样可以参?1?/p>

69. Dev工作的划分是单纯U向或横向的么?
MVM : 不能单纯的根据功能模块分Q或者单U根据表现层、中间层、数据库层分。我推荐q么做:首先Ҏ(gu)功能模块分,然后每个“层”都有一个Owner来Review所有h的设计和代码Q保证consistency?
郁也?/strong> : 同意?/p>

70. 你们的程序员写程序设计说明文档么Q?br />MVM : 要。不q我听说微Y的程序员1999q以前也不写。所以说Q写不写也不是绝对的Q偷懒有时候也是可以的。参见第56条?br />郁也?/strong> : 做的不够Q我们从来没写过?/p>

71. 你在招h面试时让他写一D늨序么Q?br />MVM : 要的。我最喜欢让h做字W串和链表一cȝ题目。这U题目有很多循环、判断、指针、递归{,既不偏向q于考算法,也不偏向q于考特定的API?br />郁也?/strong> : 我认Z更能看Z个h的实际情c?/p>

72. 你们有没有技术交讲座?
MVM : 要的。每一两个C拜搞一ơ内部的Tech Talk或者Chalk Talk吧。让l员之间分n技术心得,q笔花钱送到外面d训划?br />郁也?/strong> : 同意Q也在着手准备启动?/p>

73. 你们的程序员都能专注于一件事情么Q?br />MVM : 要让E序员专注一件事。例如说Q一个部门有两个目?0个hQ一U方法是?0个h同时参加两个目Q每个项目上每个人都?0%旉Q另一U方法是5 个h去项目AQ?个h去项目BQ每个h?00%在某一个项目上。我一定选后面一U。这个道理很多h都懂Q但很多领导实践h把属下当成可以L拆分? 资源了?br />郁也?/strong> : 我也懂,可实际情冉|Q现在有4个项目和我有兌?/p>

74. 你们的程序员会夸大完成某工作所需要的旉么?
MVM : 会的Q这是常见的Q尤其会在项目后期夸大做某个change所需要的旉Q以ơ来抵制change。解决的Ҏ(gu)是坐下来慢慢,掉E序员的逆反心理Q一起分析,q把估算旉的颗_度变小?br />郁也?/strong> : 会的Q就我在上报工作量的时候也会夸大的。对下,我采取的措施同你Q上面对我,采取的措施是打折?/p>

75. 量不要用Virtual Heads
MVM : 最好不要用Virtual Heads。Virtual heads意味着resource is not secureQshared resource会降低resource的工作效率,Ҏ(gu)增加出错的机会,会让一心二用的人没有太多时间去review spec、review design。一个dedicated的hQ要两个只能投入50%旉和精力的人。我是吃q亏的:7个part time的testerQ发现的Bug和干的活Q加hq不如两个full-time的。参见第73条?3条是针对E序员的Q?5条是针对 Resource Manager的?br />郁也?/strong> : 我想说的?3?/p>

]]>
E序开发团?--团队_?(?http://www.shnenglu.com/apollo/articles/7690.htmlW笑?/dc:creator>W笑?/author>Fri, 26 May 2006 05:26:00 GMThttp://www.shnenglu.com/apollo/articles/7690.htmlhttp://www.shnenglu.com/apollo/comments/7690.htmlhttp://www.shnenglu.com/apollo/articles/7690.html#Feedback0http://www.shnenglu.com/apollo/comments/commentRss/7690.htmlhttp://www.shnenglu.com/apollo/services/trackbacks/7690.html 
混了q么多年Q从 BOSS 们口中听到的最多的教诲词语估计是“团队精”了Q尽部?/span> BOSS 实际上ƈ不了解什么是团队_Q但他们了解中国革命的最l成功是M开“团l就是力量”这句出自伟Z口的话语Q中华民族历来都h勤劳、团l的优秀品质Q小时候在农村P看到很多团结的现象,家属里的兄弟姐妹无论qx如何地大吵大闹动刀动枪Q但一旦外部力量比如别的家属R犯到本家属,他们会不从前,团结hQ一致对外,q有一个村对另一村,qx不管大家有什么矛盾,对另一村时都会团结hQ共同面Ҏ(gu)人,所以农村里l常发生打群架的宏大场面Q一个胡同对另一个胡同的孩Q一个村的对另一村的人,场面混ؕQ男奌少Q刀光棍影,q飞扬Q声势浩大,老谋子什么时候有I来拍一部诸如此c题材的?sh)媄Q说不定在奥斯卡颁奖大会上能扬眉吐气一把,呵呵?/span>

 


回到E序开发团体的话题Q在以前的工作过E中Q我有时会发C个很怪的现象Q一个程序由一个程序员开发时Q程序员L敯了事Q效果较差,如果׃个h来开发,他们又经常性地互相推诿Q效果也不好Q由三个或更多的E序员负责时Q效果更差,永无成事之日Q真是让人烦|q不是程序员的技术问题,而更多的是管理问题,比如不科学的分工Q或q分个h的责任,或程序员之间的性格冲突{原团,D团队如同一盘散沙,没有凝聚力,q是可怕的事情Q直接的l果是目的彻底失败?/span>


 


那么如何避免发生以上的情况,如何形成的团队精,提高团队的凝聚力Q让团队发挥更大的力量呢Q?/span>


 


要Ş成出色的团队_Q我觉得应在工作团队中达C下几个方面的一_


 


W一Q?span style="FONT: 7pt 'Times New Roman'">   在目标上达成一_


 


我们都喜Ƣ交一些志同道合的朋友Q因为志不同道不合的人,让我们很难沟通与交流Q也很难在思想上有火花冒出Q共同的目标是一U意境,在程序开发团队中Q只要有一名程序员与团队的目标不致Q那么该团队的整体水q_受到影响Q这U媄响不仅仅来自于这个程序员本nQ而也来自于团队内部其他程序员的W效下降,在心理上Q其它程序员总能感觉到团队内部的分歧或者某个同伴漠不关心的态度Q因此,Z实现团队目标的一_最好的办法莫过于让E序l自已来定其目标,q样做的好处有:首先Q在目标的制定时的广泛参与,可以保目标能被大家充分理解Q而不是某?/span> LEADER 的个为;另外Q目标制定的q程使团队中的每个程序员可以有机会对共同的目标做出公开的承诺,提高目标的可接受性,增加目标的清晰程度。团队成员即E序员广泛也参与到目标的制定、讨论,让他们感受到自已在团队中的重要性,以及团队的成功就是他们自已的成功Q以后不论遇CQ何困难,他们都会团结一_勇往直前?/span>


 


W二Q?span style="FONT: 7pt 'Times New Roman'">   共同承担责QQ?/span>


 


建立一个环境,使每个团队成员在q个环境中都感到自已应对团队的W效负责,除了勇于承担自已的那部分责QQ而敢于承担团队的共同责QQ遇到问题或困难Ӟ勇于接受挑战Q而不是互相推诿,q样Q团队的目标才能l箋前进?/span>


 


W三Q?span style="FONT: 7pt 'Times New Roman'">   一位值得重的团队领|


 


在实际工作中Q遇C名糟p的ȝ要比扑ֈ一名出色的E序Ҏ(gu)得多。在我前些的~程工作中,我的部分领导是通过外部力量而Q命的Q比如老板觉得那个搞市场或搞工E或搞行政的人很能干Q就z他来做E序团队?/span> LEADER Q事实上他们可能了解一些规范化的玩意,但ƈ不具备ؓ了在开发团队中实施自已的媄响所必需的能力,q种 LEADER 往往喜欢不懂装懂Q手提长鞭高高在上,p一个不可一世的军官那样发号施oQ不难想象,极少E序员会服他听他Q一U最典型的反应就是“消极怠工”,严重的还会造成 LEADER ?/span> PROGRAMMER 的冲H,以致于有一方辞职不q了Q多般是E序员,呵呵Q因此程序开发团队的 LEADER 最好是一位具有优U的开发能力和理能力的资q序员Q他不仅仅得到团队中E序员的敬或崇拜,而且他也可借助自已的专业判断力量,来支撑自已作为领D的CQ基于对开发技术与程的了解,他会Ҏ(gu)E序员的特点q行U学分工Qƈ在开发过E中作出正确的判断与决策?/span>


 


W四Q?span style="FONT: 7pt 'Times New Roman'">   关系融洽Q?/span>


 


团队成员之间应该优势互补、性格互补、相互支持、善于沟通,彼此之间坦诚相待、相互信任,q勇于表达自我,q样的团队就会齐心协力,成ؓ一个强有力的集体?/span>


 


       阿蒙从事E序开发工作数q_庆幸曑֜若干的团队中工作Qƈ学到了许多的知识Q体会了很多的感动,感谢q去每一位与我努力奋斗过的程序员Q尽我们中的很多hȝ惌很远很远Q但只要怿自已Q相信团队,执着q努力着Q未来一定会更好Q祝朋友们五一玩得开心快乐!



]]>装变化http://www.shnenglu.com/apollo/articles/encapsulation.htmlW笑?/dc:creator>W笑?/author>Thu, 23 Feb 2006 06:52:00 GMThttp://www.shnenglu.com/apollo/articles/encapsulation.htmlhttp://www.shnenglu.com/apollo/comments/3441.htmlhttp://www.shnenglu.com/apollo/articles/encapsulation.html#Feedback0http://www.shnenglu.com/apollo/comments/commentRss/3441.htmlhttp://www.shnenglu.com/apollo/services/trackbacks/3441.html

软g设计最大的敌hQ就是应付需求不断的变化。变化有时候是无穷的Q于是项目开发就在反复的修改、更C无限期地延迟交付的日期。变化如(zhn)在头顶的达摩克斯之剑,令许多Y件工E专家一{莫展。正如无法找到解册Y件开发的“银弹”,要彻底将变化扼杀在摇之中,看来也是不可能完成的d。那么,U极地面对“变化”,Ҏ(gu)是可取的态度。于是,极限~程QXPQ的倡导者与布道者Kent Beck提出要“拥抱变化”,从Y件工E方法的角度Q提Z应对“变化”的解决Ҏ(gu)。而本文则试图从Y件设计方法的角度Q来探讨如何在Y件设计过E中Q解x来可能的变化Q其Ҏ(gu)是——封装变化?/SPAN>

设计模式是“封装变化”方法的最佳阐释。无论是创徏型模式、结构型模式q是行ؓ型模式,归根l底都是L软g中可能存在的“变化”,然后利用抽象的方式对q些变化q行装。由于抽象没有具体的实现Q就代表了一U无限的可能性,使得其扩展成Z可能。所以,我们在设计之初,除了要实现需求所讑֮的用例之外,q需要标定可能或已经存在的“变化”之处。封装变化,最重要的一点就是发现变化,或者说是寻扑֏化?/SPAN>

GOF对设计模式的分类Q已l嘪显了“封装变化”的内涵与精髓。创建型模式的目的就是封装对象创建的变化。例如Factory Method模式和Abstract Factory模式Q徏立了专门的抽象的工厂c,以此来封装未来对象的创徏所引v的可能变化。而Builder模式则是对对象内部的创徏q行装Q由于细节对抽象的可替换性,使得来面对对象内部创徏方式的变化,可以灉|的进行扩展或替换?/SPAN>

至于l构型模式,它关注的是对象之间组合的方式。本质上_如果对象l构可能存在变化Q主要在于其依赖关系的改变。当然对于结构型模式来说Q处理变化的方式不仅仅是装与抽象那么简单,q要合理地利用承与聚合的方法,灉|地表辑֯象之间的依赖关系。例如Decorator模式Q描q的是对象间可能存在的多种l合方式Q这U组合方式是一U装饰者与被装饰者之间的关系Q因此封装这U组合方式,抽象Z门的装饰对象昄正是“封装变化”的体现。同样地QBridge模式装的则是对象实现的依赖关系Q而Composite模式所要解决的则是对象间存在的递归关系?/SPAN>

行ؓ型模式关注的是对象的行ؓ。行为型模式需要做的是对变化的行ؓq行抽象Q通过装以达到整个架构的可扩展性。例如策略模式,是可能存在变化的{略或算法抽象ؓ一个独立的接口或抽象类Q以实现{略扩展的目的。Command模式、State模式、Vistor模式、Iterator模式概莫如是。或者封装一个请求(Command模式Q,或者封装一U状态(State模式Q,或者封装“访问”的方式QVisitor模式Q,或者封装“遍历”算法(Iterator模式Q。而这些所要封装的行ؓQ恰恰是软g架构中最不稳定的部分Q其扩展的可能性也最大。将q些行ؓ装hQ利用抽象的Ҏ(gu),提供了扩展的可能?/SPAN>

利用设计模式Q通过装变化的方法,可以最大限度的保证软g的可扩展性。面对纷J复杂的需求变化,虽然不可能完全解军_为变化带来的可怕梦,然而,如能在设计之初预见某些变化,仍有可能在一定程度上避免未来存在的变化ؓ软g架构带来的灾难性伤実뀂从此点看,虽然没有“银弹”,但从软g设计Ҏ(gu)的角度来看,设计模式也是一枚不错的“铜弹”了?BR>

考虑一个日志记录工兗目前需要提供一个方便的日志APIQ得客户可以轻村֜完成日志的记录。该日志要求被记录到指定的文本文件中Q记录的内容属于字符串类型,其值由客户提供。我们可以非常容易地定义一个日志对象:

public class Log

{

       public void Write(string target, string log)

{

       //实现内容;

}

}

当客户需要调用日志的功能Ӟ可以创徏日志对象Q完成日志的记录Q?/SPAN>

Log log = new Log();

log.Write(“error.log? “log?;

然而随着日志记录的频J用,有关日志的文件越来越多,日志的查询与理也变得越不方ѝ此Ӟ客户提出Q需要改变日志的记录方式Q将日志内容写入到指定的数据表中。显Ӟ如果仍然按照前面的设计,h较大的局限性?/SPAN>

现在我们回到设计之初Q想象一下对于日?/SPAN>API的设计,需要考虑到这L(fng)变化吗?q里存在两种设计理念Q即渐进的设计和计划的设计。从本例来分析,要求设计者在设计初就考虑到日志记录方式在未来的可能变化,q不Ҏ(gu)。再者,如果在最开始就考虑全面的设计,会生设计上的冗余。因此,采用计划的设计固然具有一定的前瞻性,但一斚w对设计者的要求q高Q同时也会生一些缺陗那么,采用渐进的设计时Q遇到需求变化时Q利用重构的Ҏ(gu)Q改q现有的设计Q又需要考虑未来的再一ơ变化吗Q这是一个见仁见智的问题。对于本例而言Q我们完全可以直接修?/SPAN>Write()Ҏ(gu)Q接受一个类型判断的参数Q从而解x问题。但q样的设计,自然要担负因为未来可能的再一ơ变化,而导致代码大量修改的危险Q例如,我们要求日志记录到指定的Xml文g中?/SPAN>

所以,变化是完全可能的。在旉和技术能力允许的情况下,我更們֐于将变化对设计带来的影响降低到最低。此Ӟ我们需要封装变化?/SPAN>

在封装变化之前,我们需要弄清楚I竟是什么发生了变化Q从需求看Q是日志记录的方式发生了变化。从q个概念分析Q可能会D两种不同的结果。一U情形是Q我们将日志记录的方式视ZU行为,切的说Q是用户的一U请求。另一U情形则从对象的角度来分析,我们各U方式的日志看作不同的对象,它们调用接口相同的行为,区别仅在于创建的是不同的对象。前者需要我们封装“用戯求的变化”,而后者需要我们封装“日志对象创建的变化”?/SPAN>

装“用戯求的变化”,在这里就是封装日志记录可能的变化。也是_我们需要把日志记录行ؓ抽象Z个单独的接口Q然后才分别定义不同的实现。如图一所C:


change01.jpg
图一Q封装日志记录行为的变化

如果熟?zhn)设计模式Q可以看到图一所表示的结构正?/SPAN>Command模式的体现。由于我们对日志记录行ؓq行了接口抽象,用户可以自由地扩展日志记录的方式,只需要实?/SPAN>ILog接口卛_。至?/SPAN>Log对象Q则存在?/SPAN>ILog接口的弱依赖关系Q?/SPAN>

public class Log

{

       private ILog log;

       public Log(ILog log)

       {

              this.log = log;

       }

       public void Write(string target, string logValue)

       {

              log.Execute(target, logValue);

       }

}

我们也可以通过装“日志对象创建的变化”实现日?/SPAN>API的可扩展性。在q种情况下,日志会根据记录方式的不同Q被定义Z同的对象。当我们需要记录日志时Q就创徏相应的日志对象,然后调用该对象的Write()Ҏ(gu)Q实现日志的记录。此Ӟ可能会发生变化的是需要创建的日志对象Q那么要装q种变化Q就可以定义一个抽象的工厂c,专门负责日志对象的创建,如图二所C:


change02.jpg
图二Q封装日志对象创建的变化

图二?/SPAN>Factory Method模式的体玎ͼ由抽象类LogFactory专门负责Log对象的创建。如果用户需要记录相应的日志Q例如要求日志记录到数据库,需要先创徏具体?/SPAN>LogFactory对象Q?/SPAN>

LogFactory factory = new DBLogFactory();

当在应用E序中,需要记录日志,那么再通过LogFactory对象来获取新?/SPAN>Log对象Q?/SPAN>

Log log = factory.Create();

log.Write(“ErrorLog? “log?;

如果用户需要改变日志记录的方式为文本文件时Q仅需要修?/SPAN>LogFactory对象的创建即可:

LogFactory factory = new TxtFileLogFactory();

Z更好地理解“封装对象创建的变化”,我们再来看一个例子。假如,我们需要设计一个数据库lgQ它能够讉K微Y?/SPAN>Sql Server数据库。根?/SPAN>ADO.Net的知识,我们需要用如下的对象Q?/SPAN>

SqlConnection, SqlCommand, SqlDataAdapter{?/SPAN>

如果仅就Sql Server而言Q在讉K数据库时Q我们可以直接创些对象:

SqlConnection connection = new SqlConnection(strConnection);

SqlCommand command = new SqlCommand(connection);

SqlDataAdapter adapter = new SqlDataAdapter();

如果在一个数据库lg中,充斥着如上的语句,昄是不合理的。它充满了僵化的坏味道,一旦要求支持其他数据库Ӟ原有的设计就需要彻底的修改Q这为扩展带来了困难?/SPAN>

那么我们来思考一下,以上的设计应该做怎样的修改?假定该数据库lg要求或者将来要求支持多U数据库Q那么对?/SPAN>ConnectionQ?/SPAN>CommandQ?/SPAN>DataAdapter{对象而言Q就不能具体化ؓSql Server的对象。也是_我们需要ؓq些对象建立一个承的层次l构Qؓ他们分别建立抽象的父c,或者接口。然后针对不同的数据库,定义不同的具体类Q这些具体类又都l承或实现各自的父类Q例?/SPAN>Connection对象Q?/SPAN>


change03.jpg
图三Q?/SPAN>Connection对象的层ơ结?/SPAN>

我ؓConnection对象抽象了一个统一?/SPAN>IConnection接口Q而支持各U数据库?/SPAN>Connection对象都实CIConnection接口。同L(fng)Q?/SPAN>Command对象?/SPAN>DataAdapter对象也采用了怼的结构。现在,我们要创建对象的时候,可以利用多态的原理创徏Q?/SPAN>

IConnection connection = new SqlConnection(strConnection);

从这个结构可以看刎ͼҎ(gu)讉K的数据库的不同,对象的创建可能会发生变化。也是_我们需要设计的数据库组Ӟ以现在的l构来看Q仍然存在无法应对对象创建发生变化的问题。利用“封装变化”的原理Q我们有必要把创建对象的责Q单独抽象出来Q以q行有效地封装。例如,如上的创建对象的代码Q就应该׃门的对象来负责。我们仍然可以徏立一个专门的抽象工厂c?/SPAN>DBFactoryQƈ由它负责创徏ConnectionQ?/SPAN>CommandQ?/SPAN>DataAdapter对象。至于实现该抽象cȝ具体c,则与目标对象的结构相同,Ҏ(gu)数据库类型的不同Q定义不同的工厂c,cd如图四所C:


change04.jpg
囑֛Q?/SPAN>DBFactory的类?/SPAN>

囑֛是一个典型的Abstract Factory模式的体现。类DBFactory中的各个Ҏ(gu)均ؓabstractҎ(gu)Q所以我们也可以用接口来代替该类的定义。?/SPAN>DBFactorycȝ各个具体c,则创建相对应的数据库cd的对象。以SqlDBFactorycMؓ例,创徏各自对象的代码如下:

public class SqlDBFactory: DBFactory

{

       public override IConnection CreateConnection(string strConnection)

       {

              return new SqlConnection(strConnection);

       }

       public override ICommand CreateCommand(IConnection connection)

       {

              return new SqlCommand(connection);

       }

       public override IDataAdapter CreateDataAdapter()

       {

              return new SqlDataAdapter();

       }

}

现在要创?/SPAN>Sql Server数据库的相关对象Q就可以利用工厂cL获得。首先,我们可以在程序的初始化部分创建工厂对象:

DBFactory factory = new SqlDBFactory();

然后利用该工厂对象创建相应的ConnectionQ?/SPAN>Command{对象:

IConnection connection = factory.CreateConnection(strConnection);

ICommand command = factory.CreateCommand(connection);

׃我们利用了封装变化的原理Q徏立了专门的工厂类Q以装对象创徏的变化。可以看刎ͼ当我们引入工厂类后,ConnectionQ?/SPAN>Command{对象的创徏语句中,已经成功地消除了其与具体的数据库cd怾赖的关系。在如上的代码中Qƈ未出?/SPAN>Sql之类的具体类型,?/SPAN>SqlConnection?/SPAN>SqlCommand{。也是_现在创徏对象的方式是完全抽象的,是与具体实现无关的。无论是讉K何种数据库,都与q几行代码无兟뀂至于涉及到的数据库cd的变化,则全部抽象到DBFactory抽象cM了。需要更改访问数据库的类型,我们也只需要修改创建工厂对象的那一行代码,例如?/SPAN>Sql Servercd修改?/SPAN>OraclecdQ?/SPAN>

DBFactory factory = new OracleDBFactory();

很显Ӟq样的方式提高了数据库组件的可扩展性。我们将可能发生变化的部分封装v来,攑ֈE序固定的部分,例如初始化部分,或者作为全局变量Q更可以这些可能发生变化的地方Q放到配|文件中Q通过d配置文g的|创徏相对应的对象。如此一来,不需要修改代码,也不需要重新编译,仅仅是修?/SPAN>xml文gQ就能实现数据库cd的改变。例如,我们创徏如下的配|文Ӟ

<appSettings>

       <add key=”db?value=”SqlDBFactory?>

</appSettings>

创徏工厂对象的代码则相应修改如下Q?/SPAN>

string factoryName = ConfigurationSettings.AppSettings[“db”].ToString();

//DBLib为数据库lg的程序集Q?/SPAN>

DBFactory factory = (DBFactory)Activator.CreateInstance(“DBLib?factoryName).Unwrap();

       当我们需要将讉K的数据库cd修改?/SPAN>Oracle数据库时Q只需要将配置文g中的Valueg改ؓ?/SPAN>OracleDBFactory”即可。这U结构具有很好的可扩展性,较好地解决了未来可能发生的需求变化所带来的问题?/SPAN>



]]> ҹƷþþþþ| ҹ91þø| wwwԾþþcom| þùƷ-Ʒ| þù鶹91| þòӰ| ھƷþþӰԺ| þþƷһ| 91ƷùۺϾþ| þ̳| ޵һƷƷþ | 97Ʒ˾þþô߽| ҹŷƷþþþþþ| þ99׾Ʒ| vaþþþ| þþþþ˸߳ӰԺ| þĻһ| þùƷþþƷ| 99þùۺϾƷ鶹| պþ| þۺ༤| ݺݾþ| ݺݾþۺ| þþƷAAƬһ| ޹þþۺ| þþþ޾Ʒһ| þþžѸƵ| ɫav˾þô߽ӰԺ | ձþþþĻ | ݺɫɫݺݺۺϾþ| ݺݾþŷר| 鶹Ʒþþþþþ99| ھƷŷþþƷ| վþþ| ŷۺϾþþ| þþƷһ| ޾ƷҾþþþþ| Ⱦþۺ| aѹۿþav| þþþAVרվ| Ʒþ99|