??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲午夜精品久久久久久浪潮,国产精品青草久久久久婷婷,亚洲级αV无码毛片久久精品http://www.shnenglu.com/flyinghare/archive/2013/08/22/202699.html会飞的兔?/dc:creator>会飞的兔?/author>Thu, 22 Aug 2013 06:21:00 GMThttp://www.shnenglu.com/flyinghare/archive/2013/08/22/202699.htmlhttp://www.shnenglu.com/flyinghare/comments/202699.htmlhttp://www.shnenglu.com/flyinghare/archive/2013/08/22/202699.html#Feedback0http://www.shnenglu.com/flyinghare/comments/commentRss/202699.htmlhttp://www.shnenglu.com/flyinghare/services/trackbacks/202699.html几个软g研发团队理的小问题

最q在与一位ȝ理交的时候,他谈C们公司的软g研发理Q说Q?#8220;我们公司最大的问题是项目不能按时完成,总要一拖再拖?#8221;他问我有什么办法能改变q个境况。从q样一个问题开始,在随后的交谈中,又引Z一q串在Y件研发管理中的遇到的问题Q包括:

 

. 现有代码质量不高Q新来的开发h员接手时宁愿重写Q也不愿意看别h留下?#8220;?#8221;代码Q怎么办?

. 重构会造成回退Q怎样避免Q?/strong>

. 有些开发h员水q相对不高,如何保证他们的代码质量?

. 软g研发到底需不需要文档?

. 要求提交代码前做Code ReviewQ而开发h员不做,或敷衍了事,怎么办?

. 当有开发h员在开发过E中遇到NQ工作无法l,因而拖延进度,怎么解决Q?/strong>

. 如何提高开发h员的主观能动性?

 

其实Q每个Y件研发团队的理者都面(f)着或曾l面临过q些问题Q也都有着自己的管?#8220;套\”来应对这些问题。我把我?#8220;套\”再此i叨i叨?/p>

 

1. 目不能按时完成Q总要一拖再拖,怎么改变Q?/strong>

 

找解军_法前Q当然要先知道问题ؓ什么会出现。这位ȝ理说Q?#8220;M不断地有需求要改变和新需求提出来Q原来的开发计划不得不廉?#8221;原来如此。知道根源,当然解决办法也就有了Q那是“敏捷”。敏捷开发因其P代(IterativeQ和增量QIncrementalQ的思想与实践,正好适合“需求经常变化和增加”的项目和产品。在我讲qC敏捷的一些概念,特别是Scrum的框架后Qȝ理也表示了对“敏捷”的认同?/p>

 

其实仔细xQ这里面q有一个非常普遍的问题。对于品的交付旉或项目的完成旉Q往往由高U管理层Ҏ(gu)市场情况决策和确定。在很多软g企业中,q些决策者在决策时往往忽略了一个重要的参数Q那是团队的生产率QVelocityQ。生产率需要量化,而不?#8220;拍脑门子”感觉出来的。敏捷开发中有关于如何估生产率的方法。所以用敏P在估品交付时间或目完成旉Ӟ是相对较准确的。Scrum创始Z一的Jeff Sutherland_他在一个风险投资团队做敏捷教练Ӟ团队中的资深合伙Z向所有的待投资企业问同一个问题:“你们是否清楚团队的生产率Q?#8221;而这些企业都很难做出明确的答复。Y件企业要想给产品定一个较实际的交付日期,首先要弄清楚自q软g生率?/p>

 

2. 现有代码质量不高Q新来的开发h员接手时宁愿重写Q也不愿意看别h留下?#8220;?#8221;代码Q怎么办?

 

q可能是很多软g开发工E师都有q的体验Q在接手别h的代码时Q看不懂、无法加新功能,M码读的头疹{这说明什么?排除接手Z人水q的因素Q这说明旧代码可L、可扩展性比较差。怎么办?q时Q也?dng)R构是一U两全其的办法。接手h重构代码Q既能改善旧代码的可L和可扩展性,又不至于因重写代码带来的旉上的风险?/p>

 

从接手h心理的角度看Q重构还有一个好的副作用Q就是代码重构之后,接手得那些原来的“?#8221;代码被修Ҏ(gu)己引以自豪的新成。《Scrum敏捷软g开发》的作者Mike Cohn写到q:“我的奛_们画了一q特别o叹的C后,她们会将它从学校带回Ӟq想把它展示在一个明昄位置Q也是冰箱上面。有一天,在工作中Q我用C++代码实现了某个特别有用的{略模式的程序。因为我认定冰箱门适合展示我们引以的Q何东西,所以我将它放上去了。如果我们一直对自己工作的质量特别自豪,可以骄傲地将它和孩子的艺术品一样展C在冰箱上,那不是很好吗Q?#8221;所以这个积极的促进作用Q将使得接手人感觉修改的代码是自q了,而且期望能够扑ֈ更多的可以重构的东西?/p>

 

3. 重构会造成回退Q怎样避免Q?/strong>

 

重构实很容易造成回退QRegressionQ。这Ӟ重构会vC其初L(fng)反的作用。所以我们应该尽可能多地增加单元试。有些老品,旧代码,可能没有或者没有那么多的单元测试。但我们臛_要在重构前,增加对要重构部分代码的单元测试。基于重构目的的单元试Q应该遵循以下的原则Q见《重构》第4章:构筑试体系Q:

- ~写未臻完善的测试ƈ实际q行Q好q对完美试的无等待。测试应该是一U风险驱动行为,所以不要去试那些仅仅d一个值域的访问函敎ͼ应ؓ它们太简单了Q不大可能出错?/p>

- 考虑可能出错的边界条Ӟ把测试火力集中在哪儿。扮?#8220;E序公敌”Q纵容你心智中比较促狭的那一部分Q积极思考如何破坏代码?/p>

- 当事情被公认应该会出错时Q别忘了查是否有异常如期被抛出?/p>

- 不要因ؓ“试无法捕捉所有Bug”Q就不撰写测试代码,因ؓ试的确可以捕捉到大多数Bug?/p>

- “花合理时间抓出大多数Bug”要好q?#8220;I尽一生抓出所有Bug”。因为当试数量辑ֈ一定程度之后,试效益׃呈现递减态势Q而非持箋递增?/p>

说到《重构》这本书Q其实在每个重构Ҏ(gu)中都?#8220;作法QMechanicsQ?#8221;一D,在重构的实践中按照上面所q的步骤q行是比较稳妥的Q同时也能避免很多不l意间制造的回退出现?/p>

 

4. 要求提交代码前做Code ReviewQ而开发h员不做,或敷衍了事,怎么办?

 

如果每个开发h员都是积极主动的QCode Review的作用能落到实处。但如果不是呢?团队理者需要一些手D促使其有效地进行Code Review。首先,我们采用的Code Review?UŞ式,一是Over-the-shoulderQ也是2个h座在一P一个hԌ另一个h审查。二是用工具Code Collaborator来进行。无论哪UŞ式,在提交代码时Q必L明关于审查的信息Q比如:审查者(ReviewerQ的名字或审查号QReview IDQCode Collaborator自动生成Q,每天׃名专职h员来查Checklist中的每一条,看是否有人漏写这些信息,如果发现会提醒提交的上。另外,某段提交的代码出问题Q提交者和审查者都要一h解决出现的问题,以最大限度避免审查过E敷衍了事?/p>

 

博主Inovy在某个评的很形象Q?#8220;木(没)有赏|的制度Q就是带到厕所的报U,看完可以用来擦屁股了?#8221;没有奖惩制度作保证,当然上面的要求没有什么效力。所以,当有人经怸审查提交,或审查时不负责QQ它的W效评定就会因此低一点,而W效的评分是跟每年工资涨落挂钩的。说白了Q可能某个h会因为多ơ被查出没有做Code Review提交代码,而到q底加薪时比别h涨500块钱?/p>

 

5. 软g研发到底需不需要文档?

 

软g研发需要文档的起原可能?U,一是比较原始的Q需要文档是Z当开发h员离职后Q企业需要接手的Ҏ(gu)文档了解他所接手的代码或模块的设计。二是较高层ơ的Q企业遵从ISO9001质量理体系或CMMI?/p>

 

对于W一U,Ҏ(gu)可能来自于两个方面:

- 原开发h员设计编码水q不高,其代码可L较差?/p>

- 设计思想和代码只有一个h了解Q此Z旦离职,无h知道其细节?/p>

在编码前写一些简单的设计文档Q有助于理清思\Q尤其是辅以一些UML图,在交时也是有好处的。但同时Q我们也应该提高开发h员的~码水^增加其代码的可读性,比如增强其变量命名的可读性、用一些被大家所了解的设计模式来替代按自己某些独Ҏ(gu)\~写的代码、增加和改进注释{等Q以减少不必要的文档。另外推行代码的集体所有权QCollective OwnershipQ,避免某些代码只被一个h了解Q这样可以减以此ؓ目的而编写的文档?/p>

 

对于W二U,情况有些复杂。接触过敏捷开发的人都知道《敏捷宣a》中?#8220;可以工作的Y件胜于面面俱到的文档”。接触过CMMI开发或者ISO9001质量理体系的h知道它们Ҏ(gu)档的要求是多么的高。它们看h水火不相宏V但是,它们的宗旨是一致的Q即Q构建高质量的品?/p>

 

对于敏捷Q用手写用h事来记录需求和优先U的Ҏ(gu)Q以及在白板上写ȝ非正式设计,是不能通过ISO9001的审核的Q但当把它们复印、拍照、增加序受保存后Q可以通过审核。每ơ都是成功的Daily Build和Auto Test报告无法证明它们是否真正被执行ƈ真正成功Q所以不能通过ISO9001的审核。但d一个断ap|Q类似assert(false)的断aQ的试后,则可以通过审核?/p>

 

CMMI与敏捷也是互补的Q前者告诉组l在M条款上做什么,但是没有说如何去做,后者是一套最?jng)_cSCRUM之类的敏h法也被引入过那些已通过CMMI5U评估的l织。很多企业忘C最l目标是改进他们构徏软g及递交产品的方式,相反Q它们关注于填写按照CMMI文档描述的假想的~陷Q却不关心这些变化是否能改进q程或品?/p>

 

所以敏捷开发在q程中只~写够用的文档,和以“信息的沟通、符合性的证据以及知识׃n”作ؓ主要目标的质量体pL档要求ƈ不矛盾。在实践中,我们可以按以下方法做Q在实现SCRUM的同ӞW合审核和评估的要求Q?/p>

 

- 制作格式良好的、被l化的、被保存的和能跟t的Backlog。复印和照片同样有效?/p>

- 监需要的文档工作也放入Backlog。除了可以确保它们不被忘讎ͼq能使监要求的成本是可见的?/p>

- 使用查列表,以向审核员或评估员证明活动已执行。团队对“完成”的定?Definition of “Done”)可以很容易{变ؓ一份检查列表?/p>

- 使用敏捷目理工具。它其实是开发程序和记录的电(sh)子呈现方式?/p>

 

总而言之,软g研发需要文档(但文档的形式可以是多U多L(fng)Q用Word写的文字式的文g是文档,用VisioȝUML图也是文档,保存在Quality Center中的试用例也是文档Q,同时我们只需写够用的文档?/p>

 

6. 当有开发h员在开发过E中遇到NQ工作无法l,因而拖延进度,怎么解决Q?/strong>

 

q也是个帔R到的问题。如果管理者对于某个工E师的具体问题进行指|׃陷入q度微观理的境地。我们需要找到宏观解军_法。一Q我们基于Scrum?#8220;团队有共同的目标”q一规则Q利用前面提到的集体所有权Q当出现q些问题Ӟ用团队中所有可以用的力量来帮助其摆脱困境Q而不是Q其他手旁观。当然这里会牉|到W效评定的问题Q比如:提供帮助的h会觉得,他的帮助无助于自qW效评定的提高Qؓ什么要提供帮助。这需要h力资源部门在使用Scrum开发的团队的W效评CQ尽量消除那些們֐个h的因素,q要包含团队协作的因素,q泛听取个方面的意见Q更频繁地评估W效等{?/p>

 

二,即动用所有可以用的力量Q如果某个难题真的无法逾越Qؓ了减不能按时交付的风险Q品负责h应当站出来,q有所作ؓ。要么重新评估Backlog的优先Q无法l箋的Backlogq一点交付,先做一些相对较低优先的BacklogQ以保证整体交付旉不至于g长;要么减少部分功能Q给出更多的旉L克难题。M逾越技术上隑օ会团队的生产率下降Q品负责h必须作出取舍?/p>

 

7. 有些开发h员水q相对不高,如何保证他们的代码质量?

 

当然首先让较有经验的人Review其要提交的代码,q几乎是所有管理者会做的事。除此之外,理者有责Q帮助q些人(也包括水q高的人)提高水^Q他们可以看一些书Q上|看资料Q读别h的代码等{,途经q是很多的。但问题是你如何去衡量其是否真正有所收获。我们的l验是,在每q大U?月䆾为每个工E师制定整个q度的目标,每个人的目标包括产品上的Q技术上的,个h能力上的{??V半q后和一q后Q要做两ơPerformance ReviewQ目标是否实玎ͼ也会跟W效评定挂钩。我们在制定目标Ӟ遵@SMART原则Q即Q?/p>

 

SpecificQ明的Q:目标应该按照明确的结果和成效表述?/p>

MeasurableQ可衡量的)Q目标的完成情况应该可以衡量和验证?/p>

AlignedQ结盟的Q:目标应该与公司的商业{略保持一致?/p>

RealisticQ现实的Q:目标虽然应具挑战性,但更应该能在l定的条件和环境下实现?/p>

Time-BoundQ有旉的)Q目标应该包括一个实现的具体旉?/p>

 

比如Q某个h制定?#8220;初步掌握本地化技?#8221;的目标,他要定实现旉Q要描述学习(fn)的途经和步骤,要通过技术施加到公司现有的品中Qؓ公司产品的本地化/国际?全球化作一些探索,q制作Presentationl团队演CZ的成果,q准备回{其他h提出的问题。团队还Z配合其实现目标,l织Tech Talk的活动,供大家分享每个h的学?fn)成果。通过q些手段Q提高开发h员的自学兴趣Qƈ逐步提高开发h员的技术水q?/p>

 

8. 如何提高开发h员的主观能动性?

 

提高开发h员的主观能动性,不了激励机制。不能让开发h员感刎ͼ5q以后的他和现在比不会有什么进步。你要让他感C所从事的是一个职业(CareerQ,而不只是一份工作(JobQ。否则,他们是不会主动投入到工作中的。我们的l验是提供一套职业发展的框架。框架制定了2cd展道路,理c(Managerial PathQ和技术类QTechnical PathQ,6个职业别(1-3U是Entry/AssociateQIntermediateQSenior?U管理类是Manager/Senior ManagerQ技术类是Principal/Senior Principal?U管理类是Director/Senior DirectorQ技术类是Fellow/Architect?U是Executive ManagementQ。每个别都?3个方面的具体要求Q包括:范围QScopeQ、跨职能QCross FunctionalQ、层ơ(LevelQ、知识(KnowledgeQ、指|GuidanceQ、问题解冻IProblem SolvingQ、递交成果QDelivering ResultQ、责LQResponsbilityQ、导师(MentoringQ、交(CommunicationQ、自学(Self-LearningQ,q作监督QOperational OversightQ,客户响应QCustomer ResponsivenessQ。每q有2ơ提高别的ZQ开发h员一旦具备了升的条Ӟ他的Supervisor会提出甌Q一旦批准,他的头衔随之提高Q薪水也会有相对较大提高。从而每个开发h员觉?#8220;有奔?#8221;Q自然他们的主观能动性也提高了?/p>

 

上面?#8220;套\”涉及了Y件研发团队管理中的研发过E、技术实c文档管理、激励机制等一些方面。但只是?ji)牛一毛,研发团队理늛的内容还有很多很多,q需要管理者在不断探烦和实늚道\上学?fn)和掌握?/p>

转自Q?a >http://www.cnblogs.com/wanghui9072229/archive/2011/03/18/1988477.html

]]>
配置理的精?/title><link>http://www.shnenglu.com/flyinghare/archive/2013/08/09/202429.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Fri, 09 Aug 2013 03:32:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2013/08/09/202429.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/202429.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2013/08/09/202429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/202429.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/202429.html</trackback:ping><description><![CDATA[<div style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 12px; line-height: normal; background-color: #67a10f;"><div><h3><span style="font-size: 20px; font-family: 微Y雅黑, 黑体, Arial, Helvetica, sans-serif;">配置理的精?/span>  </h3><p clearfix="" nbw-act="" fc06"="" style="zoom: 1; margin: 0px 0px 20px; padding: 0px; color: #3e6700; line-height: 20px;"><span style="float: left;"><span style="margin: 0px 2px;">2012-05-30 18:00:46</span><span style="margin: 0px 2px;">|  分类Q?/span> <a m2a"="" title="配置理" style="cursor: pointer; text-decoration: none; color: #e6ff82;">配置理</a> <span id="$_blogTagTitle" style="margin: 0px 2px;">|  标签Q?/span><span id="$_blogTagInfo" style="color: #e6ff82;"><a m2a"="" style="cursor: pointer; text-decoration: none; color: #e6ff82;">配置理</a>  <br /></span></span><span fc07="" ztag"="" style="float: right; color: #a5d857;"><span style="margin: 0px 2px;">|</span><span fc03"="" id="$_fontswitch" style="color: #e6ff82; position: relative; cursor: default;">字号</span></span><span pnt="" fc03"="" id="$_blog_subscribe" style="cursor: pointer; float: right; color: #e6ff82;"> <a style="cursor: pointer;">订阅</a></span></p></div></div><div style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 12px; line-height: normal; background-color: #67a10f;"></div><div style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 12px; line-height: normal; background-color: #67a10f;"></div><div fc05="" fc11="" nbw-blog="" ztag="" js-fs2"="" style="line-height: 25px; word-wrap: break-word; color: #02540a; margin: 15px 0px; padding-top: 5px; padding-bottom: 5px; overflow: hidden; font-family: Arial, Helvetica, simsun, u5b8bu4f53; background-color: #67a10f;"><p style="margin: 0px 0px 10px; padding: 0px;">配置理的精?nbsp;<br />贝尔实验室先q技术研I   姜v?/p><p dir="ltr" style="margin: 0px 0px 10px; padding: 0px;">       随着国内软g业的崛v和成熟,软g配置理来得到重视。可以说QY件业要想更好的发展,没有软g配置理的支持是不可能的。手工作坊式的Y件开发模式将会成为历Ԍ如何把国外成熟的软g配置理理论和经验消化吸Ӟq而应用到国内软g开发中成为国内Y件业q在眉睫的Q务了?nbsp;<br />       软g配置理是管理和技术相l合的一门学U。应该说QY仉|管理理论难以理解是光以实늚原因。本文试从基本概늚角度来探讨这门对软g开发具有重要意义的领域?/p><p dir="ltr" style="margin: 0px 0px 10px; padding: 0px;"><br />什么是配置理 <br />       在Y件开发中Q变更是不可避免的。从某种角度上讲QY件开发过E就是一个变更的q程。有些变更是有益的,是具有创造性的Q但是,也有些变更是有害的,D混ؕ的。正像James Bach ȝ的那P <br />        <strong>我们为变更所困扰Q因Z码中的一个极的混ؕ可能带来产品的大的故障,但是Q他也能够修复大的故障或启用奇妙的新能力。我们ؓ变更所困扰Q因为某个喜Ƣ恶作剧的单个开发者可能破坏掉目Q但是,一些奇妙的思想也源自那些喜Ƣ恶作剧的h员?nbsp;</strong><br />        因此Q如何管理这些变更是一个Y件开发能否成功的关键。简a之,软g配置理是理变更的过E,它诏I着几乎软g的整个生命周期。成功的配置理pȝ可以提高产品的质量、项目开发效率,而且最大限度的减少对个?#8220;英雄”式h员的依赖?nbsp;<br />        管配置理QConfiguration Management Q这个概念被提出有几十年了,但是Q业内还没有一个全面而权威的定义。Configuration 的意思是“使成?#8221;Q它来源于拉丁语的com-Q表C?#8220;?#8221;或?#8220;一?#8221;Q和figurate ( 形成) 。它q有一个意思是“l成部g或元素的相对排列”。因此,配置理QConfigurationManagement Q指的是理l成部g或者元素的相对排列?nbsp;<br />        配置理的概忉|自于g领域Q美国国防部最早用了配置理的概c我们知道一枉机的构成非常复杂Q比如机头、机w、机和机尾{。不同型号飞机的各个部分是不能随便组装的。因此,我们只有把相匚w的部件组装在一P才能构成了一个功能完备的飞机整体。随着技术的提高Q各个部件可能还要进行功能改善,我们q要使得不同版本的部件能够正无误组合在一赗?nbsp;<br />准确地说Q?nbsp; <br />       配置理是对产品q行标识、存储和控制Q以l护其完整性、可q溯性以及正性的学科?nbsp;<br />从上面的描述Q我们知道,配置理的基本单位是配置VY仉|项可以是:</p><ul dir="ltr" style="margin: 5px 0px 5px 40px; padding: 0px;"><li><div style="margin-right: 0px;"> 与合同、过E、计划和产品有关的文档和数据</div></li><li><div style="margin-right: 0px;">源代码、目标代码和可执行代?/div></li><li><div style="margin-right: 0px;">相关产品Q包括Y件工兗库内的可复用Y件、外购Y件及用户提供的Y?/div></li></ul><p dir="ltr" style="margin: 0px 0px 10px; padding: 0px;"> <br />  ?#8220;哲学”意义上讲Q配|管理记录配|项的三个方面: <br /></p><ul dir="ltr" style="margin: 5px 0px 5px 40px; padding: 0px;"><li><div style="margin-right: 0px;">从哪里来Q此可归结为WWW 的问题,QWhoQ谁创徏的?QWhenQ什么时间创建的Q(WhyQؓ什么创建此配置?</div></li><li><div style="margin-right: 0px;">当前在哪里?此项U录配置当前的存储位置以及状态?/div></li><li><div style="margin-right: 0px;">到哪里去?通过配置控制来把配置?#8220;l装”到正的版本中去?/div></li></ul><p dir="ltr" style="margin: 0px 0px 10px; padding: 0px;"> <br />       配置可以是大粒度的Q也可以是小_度的。如果跟t个别需求,那么不必要把整个需求规D明文档定义ؓ一个配|项Q可以把每个需求定义ؓ配置;如果把Y件开发工具也攑օ配置理pȝQ那么把配置定义ؓ文gU就不合适了Q只需要跟t开发工L(fng)版本Q即把整个配|工具定义ؓ一个配|项p够了?nbsp;<br />       而言之,配置可以是文gU粒度的Q也可以使文件版本_度的。当Ӟ_度小理的成本越高,但是配置的精度也p高?nbsp;<br />一个完整的SCMpȝ要具有三个核心功能:配置标识、版本控制、变更控制、配|状态统计和配置审核。其中变更控制包括基U管理、变更请求管理、构建管理和发布理。如下图所C?nbsp;<br /><br />下面Q我们来具体理解q些概念?nbsp;<br /> <br /><strong>配置标识 </strong><br />       配置标识是识别产品的结构、品的构g及其cdQؓ其分配唯一的标识符Q也是_每一个配|项要有一个唯一标识。一般说来,标识包括两个斚wQ一是文件名Q二是版本,可用如下一个二元组来标识:< 文g名,版本> 。每个项目首先要定一套命名规则,例如Q采?#8220;pȝ.子系l?模块.文g”的方式,</videoConference/audio/compressing/m a in.c , 2.1>是一个唯一标识?nbsp;<br /> <br /><strong>版本控制 </strong><br />       版本控制是对在软g开发过E中所创徏的配|对象的不同版本q行理Q保证Q何时候都能取到正的版本以及版本的组合。当前,q方面典型的工具有如VSS 和CVS ?/p><p dir="ltr" style="margin: 0px 0px 10px; padding: 0px;"><br /><strong>变更控制 </strong><br />       在Y件开发过E,要生许多变_比如Q配|项、配|、基Uѝ构建的版本、发布版本等。对于所有的变更Q都要有一个控制机Ӟ以保证所有变更都是可控的、可跟踪的、可重现的。对变更q行控制的机构称为变更控制委员会QChange Control BoardQ简U?br />CCB Q。变更控制委员会要定期召开会议Q对q期所产生的变更请求进行分析、整理,q做出决定。而且要遵循一定的变更机制?nbsp;<br />  <br />下面是一个典型的变更机制Q?nbsp; <br /><strong>变更h理 </strong><br />       变更h理是对变更请求(Change RequestQ简UCRQ进行分cR追t和理的过E来实现的?nbsp;<br />       变更的v源有两种Q功能变更和~陷修补QBug-FixQ。功能变更是Z增加或者删除某些功能。缺陷修补则是对已存在的~陷q行修补?nbsp;<br />       对变更请求的有效理可以提高产品理的透明度,l理可以清楚的知道当前品的q展情况Q比如有多少个新产生的CRQ已l解决了多少CR{等Q有利于l理做出正确的决{?nbsp;<br /> <br /><strong>基线理 </strong><br />       基线是指l过正式评审和批准,可作Z一步工作的基准的一个配|。Y件开发过E中Q无论是需求分析、设计、测试都需要在完成时徏立基U,以作Z一步工作的基础?/p><p dir="ltr" style="margin: 0px 0px 10px; padding: 0px;">       通过基线理可以使用戯够通过寚w当版本的选择来组成特定属性(配置Q的软gpȝQ这U灵zȝ“l装”{略使得配置理pȝ象搭U木似的使用已有的积木(版本Q组装成各种各样、不同功能的模型?nbsp;<br />       基线的变更需要一个严格的程Q需要提出申Pl过审批Q然后才能进行?nbsp;<br /><strong>构徏理 </strong><br />       在做构徏Ӟ我们需要首先取出正的配置Q然后再做构建。我们可以利用基U,可以取出某个基线的所有配|项Q也可以利用配置理pȝ的构建功能直接在工作I间内做构徏?nbsp;<br />       构徏理需要配|管理工L(fng)支持?nbsp;<br /><strong>发布理 <br /></strong>       软g产品的每个版本都是一l配|项Q源代码、文档、数据)的集合。D个例子来_我们要发布Y件的32.6 版本Q那么我们就要把源代码、文档、数据中所有应该包含到q个版本中的正确配置Ҏ(gu)出?nbsp;<br />       所以如何管理每个版本中包含哪些配置Ҏ(gu)非常重要的?nbsp; <br /><strong>状态报?nbsp;<br /></strong>状态报告要回答所?W 的问题: <br />WhatQ发生了什么事Q?nbsp;<br />WhoQ谁做的此事Q?nbsp;<br />WhenQ此事是什么时候发生的Q?nbsp;<br />WhyQؓ什么做此事Q?nbsp;<br />状态报告要能够报告所有配|项以及变更h的状态,通过量化的数据和报表反映目开发进度的状态?nbsp;<br /><strong>配置审核 </strong><br />       配置审核要审查整个配|管理过E是否符合规范,配置Ҏ(gu)否与需求一_记录正确Q配|的l成是否h一致性等{。比如,需求分析文档提交后Q需要由一个由相关人组成的组q行正式评审Q只有通过了评审才能基U化。对于源代码也一P一般说来,每行代码都要q行评审QReviewQ,只有通过评审才能交由试人员q行试?nbsp;<br /><strong>实施配置理的好?nbsp;</strong><br />       我们知道软g有三个要素:旉、预和质量。一个成功的软g是要在限定的时间内Q不过预算Q交付符合质量要求的产品。真正实施配|管理后Q我们会对品的开发过E进行有效的控制Q可以加快开发进度,降低开发成本,保证产品的质量?nbsp;<br /><strong>产品l理可以得到什么好处呢Q?/strong> <br /></p><ul dir="ltr" style="margin: 5px 0px 5px 40px; padding: 0px;"><li><div style="margin-right: 0px;">准确掌握目的开发进度。配|管理系l可以提供详的状态报告,例如当前pȝ有多个BugQ所有Bug 的状态如何?已经解决了多B(ti)ugQ?/div></li><li><div style="margin-right: 0px;">了解目l成员的工作负荷、工作效率以及工作质量。例如,我们可以知道当前分配l每个成员的工作量,每个成员已完成的工作量,每个成员未通过正式评审的工作比例等{?/div></li><li><div style="margin-right: 0px;">减少人员?gu)动所带来的媄响。每个成员的所有变_包括文档、代码的增删都是可追t的Q而且对于变更的原因、描qC都有记录。这P一旦成员离开Q其它成员就可以在最短的旉里接手?/div></li><li><div style="margin-right: 0px;"> 有效提高q程理Q配|管理生的许多数据可作为管理者度量项目的依据?/div></li></ul><p dir="ltr" style="margin: 0px 0px 10px; padding: 0px;"><br /><strong>开发h员和试人员可以得到什么好处呢Q?/strong></p><ul dir="ltr" style="margin: 5px 0px 5px 40px; padding: 0px;"><li><div style="margin-right: 0px;"> 提交的代码被有效保存Q开发h员再也不用花费精力去保存各个版本了?/div></li><li><div style="margin-right: 0px;"> 提高团队的协作效率。开发h员之间以及开发h员和试人员之间可以有效的沟通,大家都互相知道其它h的工作状态?/div></li><li><div style="margin-right: 0px;"> 提高修复~陷的效率。可以依据Bug 发现的版本,q速重建环境,重现BugQ快速定位代码,扑ևҎ(gu)?/div></li><li><div style="margin-right: 0px;">职责清楚QQ务明。每一步的工作都是Z某一基线的,比如Q设计文档是依据基线化了的需求分析文档,q样一旦出现问题,可以找出问题出在什么地斏V?/div></li></ul><p dir="ltr" style="margin: 0px 0px 10px; padding: 0px;"><br /> <br />      当然Q实施配|管理的好处q不止这些。Y仉|管理作Y件开发的基石Q它提供了一个协作开发的环境Q只有大家共同遵守配|管理规范,互相协作才能保证目的成功?nbsp;<br /> <br />l束?nbsp;<br /> <br />       配置理本n无论从理论和实践都在不断丰富和发展。例如,配置理应用?#8220;知识?#8221;的管理就产生?#8220;内容理”q一新的领域。配|管理提供的状态报告和数据l计也ؓ软g度量提供了决{依据。配|管理ؓ目理提供了各U监控项目进展的视角Qؓ目l理切掌握目q程提供了保证。配|管理也为开发h员提供了一个协作的q_Q在此^CQ大家能够更有效率的交流和协作。可以说Q配|管理是软g开发的基石Q?nbsp;<br />       配置理q年来在中国得到了极大的认可Q可以毫不夸张的_没有配置理Q就谈不上Y件开发,p不上软g质量Q就谈不上Y件业的发展。随着软g业规模的扩大Q配|管理的实施不是要不要的问题Q而是什么时间、如何实施的问题了?nbsp;<br />参考文献: <br />Babich, W.A., Software Configura tion Management, Addison-Wesley, 1986. Peter H. Feiler, Configuration Management Models in Commercial Environment, CMU/SEI-91-TR-7, 1991.4 <br /> <br />作者简介:2000q在北方交通大学获工学士学位。现供职于朗讯科技Q中国)有限公司贝尔实验室先q技术研IQ从事配|管理系l的研究和开发,有四q多的配|管理领域开发、咨询、培训经验?/p></div>转自Q?a >http://blog.163.com/wangdan10799@126/blog/static/10230093201243054322378/</a><img src ="http://www.shnenglu.com/flyinghare/aggbug/202429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2013-08-09 11:32 <a href="http://www.shnenglu.com/flyinghare/archive/2013/08/09/202429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>公司技术管理角度看C++游戏E序员发?/title><link>http://www.shnenglu.com/flyinghare/archive/2012/09/10/190141.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Mon, 10 Sep 2012 11:03:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2012/09/10/190141.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/190141.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2012/09/10/190141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/190141.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/190141.html</trackback:ping><description><![CDATA[<p style="text-indent: 21pt; margin-top: 5pt; layout-grid-mode: char;" align="center"><span style="font-family: "宋体"; font-size: 10.5pt;yes";"><strong>公司技术管理角度看C++游戏E序员发?/strong></span></p><p style="text-indent: 21pt; margin-top: 5pt; layout-grid-mode: char;" align="center"><span style="font-family: "宋体"; font-size: 10.5pt;yes";"><strong>H3D,2008</strong></span></p><p style="text-indent: 21pt; margin-top: 5pt; layout-grid-mode: char;" align="left"><span style="font-family: "宋体"; font-size: 10.5pt;yes";">2011补充Q?q是一?008q的老文章。发q里原因?Q一来本blog没有。二来这文章最后一部分关于某个E序员个Zh(hun)值的预测Q部分应验。这位程序员军_出来单干后,很容易拿C大笔投资?某种意义上,q笔׃表着q位技术h员和其团队的价倹{是在公司还是出来创业,与本文无兟뀂也无所谓。从一个技术员角度出发Q提高自q能力和视野与l验才是提升实现自己价值的道\?/span></p><p style="text-indent: 21pt; margin-top: 5pt; layout-grid-mode: char;" align="left"> </p><p style="text-indent: 21pt; margin-top: 5pt; layout-grid-mode: char;"><span style="font-family: "宋体"; font-size: 10.5pt;yes";">q是我多q来招聘培训游戏E序员的一Ҏ(gu)法。一直想汇M下。主要目的是Z更好的对公司新进C++E序员进行培训,q且建立h戏程序员培训Q发展,成才Q成为核心骨qԌ理层,期权收益人等一整套体系。因为对于MMO游戏制作来讲Q解军_C++技术队伍,是保证合DY件的基础之一?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">我在的H3D Studio核心技术h员和游戏制作理人员全部是SMTH BBS游戏制作版成员。从99q开始截止BEGINER的历ȝ主都在H3D STUDIO里工作过。在q里我把具体的培训以及技术队伍组建的内容LQ只和大家聊聊关于游戏程序员切n利益相关的事?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">另外q不是居高(f)下来评判什么事情。我本h也不是多么高U的技术h员或者管理h员。只是坚持做一件事情年头很长教训很多而已。所以有些体验。文中所有评判其他结构或人水q低Qƈ不是说我本h水^有多高。不要误会?</span></p><p> </p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold;yes";"> 1</span> <span style="font-family: "宋体"; font-size: 10.5pt; font-weight: bold;yes";">QC++游戏E序员现?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">中国C++E序?00Q都是自学的。因Z国几乎没有象L(fng)C++培训机构。大安知道C会培训是赚׃ؓ主要目的。能在那里成才是个大q气。也不象JAVA有SUN公司一手推行。中国大学教育里也根本没有C++教学。关于C/C++基础评知识Q只是让学生入门。但对于实际的C++软g工程应用Q大学课本知识实跉|义不大。最重要的是Q大学里没有合格的C++老师。编E是门技术,叫手Z行。而大学是搞科研的Q多的是U学Ӟ靠出PAPER教科凭职UCؓ生。ƈ不是技术员。没?0万行以上代码l验和成功Y仉目经验的人,很难教出中高UC++E序员?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">游戏制作业对C++E序员的要求是比较高的。比一般行业Y仉很多。因ZQ何一个MMO都是个中大型软g目。日使用人次辑ֈ几十万上百万Q同时用h数几十万在线的大型网l多Z互YӞ集成了超q十几项专业领域~程技术的软gQ想不大都不行?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">另外Q中高C++E序员能力一般都很强。因为都是自学成才,q需要较高智商,很强的自学能力,解决问题能力Q和克服困难的毅力。但是这Uh才在游戏行业里h数ƈ不多。抛开凤毛麟角具备整体大型软g架构能力的高Uh才不谈。能够承担独立模块开发,具备独立解决问题的能力,写出在空_性能Q可l护性等几个斚w辑ֈ要求的C++E序员,也是很难扑ֈ的。而具备这些能力,同时又具备一些专业领域技术的人(囑Ş引擎Q网l引擎,{)Q更加稀?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">所以,即便是大游戏公司Q对于C++游戏E序员的需求,也是永远不能够得到满뀂而已l在公司工作的C++E序员,不经q短?个月Q长?q的ȝQ也无法真正胜Q独当一面的C++游戏E序开发工作?</span></p><p style="margin-top: 5pt; layout-grid-mode: char;"><span style="font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold;yes";">2</span> <span style="font-family: "宋体"; font-size: 10.5pt; font-weight: bold;yes";">QMMO游戏开发对C++游戏E序员要?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">前面提到Q所有MMO游戏都是中大型Y件。Y件占用空_E_性,性能Q可l护性等各项衡量软g质量的指标,对MMO游戏软g的要求都非常严格。远大于普通行业Y件。这U规模和银行pȝcM。而客L(fng)和Y仉辑比一般的商业软g又要复杂很多倍。这p求Y件编写h员具备较高的E序~写素质?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">游戏软g中,解决好Y件工E部分,只是目?/3。另外两部分是策划和术/音频。从l验来看Q需求变更对于MMO游戏软gQ不是偶然事Ӟ而是一UMMO游戏软g开发的基本属性。游戏Y件投入大Q周期长Q风险高。MMO市场变化也大Q交互电(sh)子游戏发展迅速。游戏Y件必面对外界变动。又因ؓ开发周期长Q所以Y仉求变动成Z软g开发的一U基本属性。犹如复杂性是软g工程的一基本属性一栗?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">q导致游戏Y件的开发充满了不确定性。交互娱乐不同于商业应用。娱乐是属于理性和感性之间的领域。而C++开发面对就??的二元世界逻辑。这两个领域存在着不可调和的矛盾。这U情况,对C++游戏E序员提Z更高的要求?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">首先Q基本C++知识QC/C++q用技能,必须极其扎实。ƈ不是游戏软g开发用C么^时书本上很难得到的知识点或者技能点。游戏C++开发的知识体系和技能体p,利用现有C++书籍可以满뀂比如《C++ PAORGRAMMING LANGUAGE》《C++ PRIMER》《EFFECT C++》《MORE EFFECT C++》等。但是在开始游戏编E之前,把这些书本吃透ƈ且实늆l的人,非常N到。当然能够真做到q点的hQ已l是个中高C++E序员了。我曄遇到q一个,毕业工作不久去了GOOGLE </span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">其次Q对于面向对象的深入理解。是非常重要的。熟l掌握C/C++语法Q编E技巧,只是满了C++游戏E序员一部分要求。而面向对象观늚深刻理解Q会为大型C++目开发带来翻天覆地的变化?有时候,在一?0Z上ƈ行开发的C++游戏目中,面向对象Ҏ(gu)会成为救命稻草。《设计模式》以及《设计模式解析》相关的书籍Q也是必修课?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">最后,好技术h员的本质是自大的。这属于正常。但是如果这U习(fn)性媄响了自nl箋提高和团队合作。以及媄响了其成为技术管理者和目技术核心时Q那么这U技术h员的自n价g大打折扣?如果早日过自命不凡q一养I扩大眼界Ql在l合素质上提高。在技术管理能力,架构能力上提高,其自wh(hun)值才会l增ѝ落到实处,是待遇和n家增ѝ?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">׃游戏开发的本质是团队开发。Q何时候,只有对一个团队有价值的技术h员,其本w的价值才有可能得以体现?</span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold;yes";">3</span> <span style="font-family: "宋体"; font-size: 10.5pt; font-weight: bold;yes";">Q成长和技术发展\U?</span></p><p><span style="font-family: "宋体"; font-size: 10.5pt;yes";">一般技术h员发展有几个阶段 </span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";">1</span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">Q具备独立开发局部功能的能力 </span></p><p><span style="font-family: "宋体"; font-size: 10.5pt;yes";">比如为某个UI~写逻辑接口函数。ؓ某个LOGIN对话框编写自l制控g{?</span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";">2</span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">Q具备独立开发和d某个功能模块的能?</span></p><p><span style="font-family: "宋体"; font-size: 10.5pt;yes";">比如为游戏增加一个小型逻辑功能模块?</span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";">3</span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">Q具备独立设计ƈ开发某个系l的能力 </span></p><p><span style="font-family: "宋体"; font-size: 10.5pt;yes";">比如设计和开发AUTOPATCH pȝ </span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";">4</span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">Q具备解x术难题,设计架构的能?</span></p><p><span style="font-family: "宋体"; font-size: 10.5pt;yes";">比如开发网l同步仿真系l,开发一个中大型游戏制作工具 </span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";">5</span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">Q具备整体架构,理Q协调其他h共同开发一个大pȝ的能?</span></p><p><span style="font-family: "宋体"; font-size: 10.5pt;yes";">客户端主E,服务器主E,引擎ȝ{?</span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";">6</span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">Q技术director </span></p><p><span style="font-family: "宋体"; font-size: 10.5pt;yes";">制定技术发展方向,技术团队徏立,技术管理等 </span></p><p> </p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">在迈向每个阶D늚q程中,伴随的都是巨大的工作量和工程压力。有时候是跨越1q的p|{等。在公司目不成功时转换单位Q重新开始,或者l做为核心团队留在公司l从新的Z做vQ都是好的办法。但关键是吸取经验教训,量多学多练。ƈ且结合自w长处发展。当Ӟ游戏制作人员Q最好还是依靠一个核心团队。成为核心团队的一员?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">能够辑ֈW三档的E序Q已l是公司不可~少的h才了。但往往E序员自w对自己的认识,和公司对其的认识Q有时候会有差异。我到q一些hQ脑子好用,写东西很快。各U技术都有涉猎。但L不放心让他独立开发设计某个系l。哪怕是相对独立的工兗也会被搞得一塌糊涂。要后面Z停擦屁股。可自己q觉着自己水^很高。这Uh躁Q眼高手低,不愿意细致周全的做好一件完整的事。所以就可以看到他不停的x跛_Q可在新公司的职位也没有见多么提高。公叔R帔R视交l一个程序员一件事Q他是否能完_考虑周全的把事情做完。哪怕时间长一点,也不能不做完。这会给工程带来致命的后果?</span></p><p style="margin-top: 5pt; layout-grid-mode: char;"><span style="font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold;yes";">4</span> <span style="font-family: "宋体"; font-size: 10.5pt; font-weight: bold;yes";">Q发展待?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">从自w经验出发谈一下公司是怎么考虑技术员工待遇的?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">前面提到?档,_略了划分了待遇水^。其实到了第三档Q你的待遇已l是q个行业所军_的了。而不是某个公司决定的。因为游戏业大量~Zq样的C++E序员。如果具备这个水qI在几个大城市游戏公司扑ֈ工作q不难。大公司提升慢,q有我这U不到百模的公司要。所以行业h(hun)格才是公司要考虑的。如果给了QY仉目的C++E序员流׃带来较大影响。但l的多,其实是C++E序员自q价值增长瓶颈。如果几q下来一直以己水q_该拿q么高,l果C一家整体技术水qx较高的企业,׃d?c)。这个时候再放低心态去重新开始,Ҏ(gu)术员来讲是件很艰难的事了?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">在目前游戏行业技术水qx遍较低的情况下,哄抬E序员工资水q_E序员自w好处也不会很大。就一个新手本来拿几千的水qIl他1万。他Ҏ(gu)׃会知道自己到底有多少水。一q下来也多拿了3Q?万h民币。可耽误的是学习(fn)Q媄响了心态。而那些心态好Q知道努力方向的技术h员,q个3Q?q后如果有拿期权和股权的ZQ比那些一开始虚高的人,w家׃知道高多倍了?</span></p><p> </p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">下面再谈谈我个h在招聘C++E序的体会?</span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";"> 1 </span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">做ؓC++E序员,成长周期比较ѝ如果是新手Q代码量于2万,没有做过大型目的)Q会考察3炏V是否踏实肯ȝQ有无责dQ以及是否够聪明。如今,满q三点的人其实不多?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">责Q心是人品Q决定了是否对公司有贡献。这是最重要的。有些h其实很自U。这Uh对公司A(ch)献是负数。而且到头来,自n价g很难h。因为技术是要靠游戏的商业成功体Ch(hun)值的。要取得商业成功Q就需要一个团队ؓ一件事付出。是否踏实决定了能学会多技术知识。关于智商,我是最q?q才意识Ch的智商确实有很大差别。干E序q行Q智商必越高越好。否则前途不大?</span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";"> 2 </span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">如果是有q?Q?qC++E序l验的hQ应考察的是人品Q是否自大,是否有合作意识,是否x频繁?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">首先q是责Q心。太自私Q太q惻I时刻把自己利益看成最重要的hQ到哪里都不会受Ƣ迎。无Z技术有多好?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">然后考察的是是否自大。h最Ҏ(gu)自大的时候,往往是对一门技术已l入门,取得一定的成。但是眼界还没有开阔,没有领略到这个领域真正深入的技术知识。周围缺好技术的人。这个时候,技术h员都Ҏ(gu)自大。适度的自信和自大是允许的。但是目IZ切就完蛋了,说明q个技术h员的提升I间很小? </span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">合作意识是游戏开发的关键。包括交能力,思考和解决问题的思维方式。一个喜Ƣ独来独往的技术h员,在游戏团队里是个很可怕的事情。因为游戏Y件不是一个h能够完成的事情。由于逻辑复杂Q需要各U专业技术领域知识,需求变动频J。每一步都需要团队通力配合。缺乏这U意识,或者对团队开发不适应有抵触的技术h员,在游戏开发领域存?gu)zȝ希望不大?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">做ؓ一个C++E序员,x频繁的历是很致命的。做C++旉长的人都知道。进入一个庞大的C++软g工程本n需要不时间。经q培训,目熟?zhn)Q在为项目做贡献Q这个时间短不了。如果一个hl常xQ说明他一直没有踏实在一个项目里深入做过核心的东ѝ或者做p|一个马上跑掉。这Uh公司不敢要?</span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";"> 3 </span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">对于有专Ҏ(gu)能的E序员,比如囑ŞE序员。C++只要入门有培训空间即可。但对专业要求比较高。应该是已经在某个技术领域钻研比较深?当然最后在公司q是得成Z用C++熟练的高U程序员。因ZQ何专业领域的技术如果要应用到工E中Q还必须用C++做工兗?</span></p><p><span style="font-family: "Times New Roman"; font-size: 10.5pt;yes";"> 4 </span> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">好的C++游戏E序员,其实不容易找。如果他q得好,早就成ؓ目核心成员。如果项目不错,自n待遇也会很好很稳定。不需要通过一般应聘渠道应聘。不是被拉到公司做核心技术拿期权Q就是自己创业?</span></p><p> </p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">q里我打个比斏V网易有个云风。大安知道他是大话西游2的客L(fng)ȝ。他是中国第一个做开源C++游戏引擎的h。开放了一整套C++游戏引擎代码。这是他大学时做的。毕业后ȝ易。有了^収ͼ做成了中国历史上最成功的MMO之一。做为游戏技术h员,他的价值可以说已经是很高的了。到底有多高Q我们都不好瞎说什么具体数字。但可以q么刨析一下?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">一个经验丰富的C/C++E序员。有q中国自ȝ发在U过百万游戏的成功项目经验。目前有|易出钱让其独立领导队伍搞引擎和游戏产品已经?q。这L(fng)一个历,l验Q本w就价值很高。他在Q何公叔R可以扑ֈq薪几十万的工作。如果他具备理才能。哪怕就是项目管理,或者技术管理能力。对于一个上市公司,他能做出的A(ch)献,应该用百?q量U来衡量。如果他能找C个商业h士,负责舉|Qƈ且自己具备一定商业能力,独立创业。吸引的天风险投资也得几千万(否则做不了事Q当Ӟ。如果品能做成Qn家到辑և千万是很自然的事?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">我相信中国游戏程序员水^Q运气,发展I间比他高的Z多。那么我们可以拿他做个标杆?</span></p><p> <span style="font-family: "宋体"; font-size: 10.5pt;yes";">我知道很多h不服他。不q这里说的问题ƈ不是关于他本人的。也不需要对他本人做什么服不服的评判。做Z个社会的人,不是靠能写多行代码Q代码多么优雅水q_么高来衡量n家的。从q点_技术没有{化ؓ成功商业产品之前Q它的h(hun)gؓ0。做为技术h员,C会衡量他h(hun)值的标准Qƈ不是要去阅读代码是否质量优越速度飞快。而是看他能ؓ一个成功商业品或者公司发展做出多A(ch)献。这个道理,几年前我q不太明白。而且我做Z个技术h员,怿多数技术员同胞(yu)们都不太可能从根儿上理解和认同这个看法。这里不是评判水qI而是评判价倹{你的h(hun)g表了你能够拿到的待遇。这个不是某个老总说了算Q某个公司说了算Q而是取决于h均GDP和当前行业发展水qI行业销售额的。我惌个道理也适用于所有游戏制作相关h员。搞制作的都是技术h员?/span></p>转自Qhttp://www.cnblogs.com/puzzy3d/archive/2011/11/02/2232672.html<img src ="http://www.shnenglu.com/flyinghare/aggbug/190141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2012-09-10 19:03 <a href="http://www.shnenglu.com/flyinghare/archive/2012/09/10/190141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跑步的好?/title><link>http://www.shnenglu.com/flyinghare/archive/2012/05/15/174954.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Tue, 15 May 2012 03:36:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2012/05/15/174954.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/174954.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2012/05/15/174954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/174954.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/174954.html</trackback:ping><description><![CDATA[<span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">1.告别臃肿w材?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">许多人开始跑步就是因为减肥,跑步实减肥的最好运动方式,跑步每分钟比起其他运动燃烧更多的卡\里?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">2.防止你的骨骼Q肌肉退化?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">我们的骨骼是和你的n体需求相互协调的。长期坐在显C器前的我们让我们的骨骼来脆弱。而长期的Q经常的q动会你的骨骼保持健康。更q一步说是防止我们w体内部老化的更快。经常的高强度锻|例如跑步Q被证明可以促进Z荷尔蒙的生长Q荷?dng)蒙是那些名hZ看v来更q轻而持l注的药剂?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">3.抉|疄 </span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">跑步可以降低得中风和乌癌的风险。经常的跑步已经成ؓȝ寚w些容易引发或在已l处在早期的骨质疏松Q糖病Q高血压病人的ȝ?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">4.l持q提高M的n体水q?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">跑步是是Z可以采取的最好的ȝw体的运动。它可以提高胆固?降低血液凝块的危险Q锻g?0%的经常处于闲|状态的肺。跑步还可以通过增加你的淋巴l胞(yu)来增Z的免疫力?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">5.让你更加自信?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">慢跑像其他一些单动一P它可以增Z的自信心。跑步让你完成一ơ又一ơ的试Q让你变得更强大Q更加肯定自己。他让你真实的越q某个山峎ͼI过某个障碍.在意识到你的w体已经更加强壮Q更加有用,你会得到被赋予力量和自由的感觉。自信更是那些通过跑步成功的减肥ƈ得到自己心中理想w材的跑步者的宝贵财富?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">6.放松自己Q减d力?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">慢跑可以转移聂注意力Q沐在路旁的风景中Q你的烦g定会消失D尽?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">长跑适合那些正处在一堆头|gh的烦心事的h。还有比在两个小时的长跑中,清理的的头脑、舒~自q经更好的主意了吗?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">如果你此时觉得异常压抑,何不快跑一下呢Q之后你会一个好的心情?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">7.著名?#8220;跑步者高C?#8221; </span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">包括释放压力Q慢跑被证明提高你的心态。跑步,特别在户外和旅行?会w体释放一U物质让你生一U幸愉(zhn)感Q跑步者高C验)或者就是快乐的感觉。跑步已l被采用了多q来ȝ临床抑郁症,上瘾{。更的压力Q更的压抑Q更的疲劳Q更的混ؕQ经q一D|间的l常跑步Q病人很快就有了变化。跑步让他们有了注意的对象,让他们看C除了他们消极的状态和沉h的事务,q有一些美好的东西的存在?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">8.ȝ你的头脑?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">像对你的w体有所帮助一P跑步同样对你的头脑很有帮助。通过在跑步中克服一pd的障,你学会了专注和决?在经历那些你几乎要放弃的长跑或其他项目后你会发现Q你在跑步过E中产生的意志和体魄的增你在其他斚w有着同样的专注和军_?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">9.增强合作_?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">又是一个非常值得d的好处。这点好处或许让很多人感到惊奇,因ؓZ认ؓ跑步不可能得到这U益处,仅仅׃跑步是单动。但是跑步确实有时涉及到互相合作。旅行跑步,特别是在那些路况不好的地方,需要极大的合作意识。这些\面经怼有一?障碍如石头、灌木让跑步q行的很困难?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">10.随时随地Q简单?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">不是很多的运动可以在M地方Q几乎不需要设备的。我敢肯定古代希腊h会争辩说甚至是鞋子和衣服也不需要。今天,我们只是需要一双好点的跑步鞋然后就可以出发了。从市中心到郊区,整个世界的地方等待你的探索。经常出差吗Q你的旅行箱里肯定会有空间来装你的运动鞋的。这个世界就是你的健w房Q去再次发现它吧?nbsp;</span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">Here are some tips for how to make running a practice: </span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">Be consistent in your running program. Plan your weekly workout schedule and stick to it. This will teach you persistence. </span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">Know which focuses you'll use during every run. This will teach you planning and mindfulness, and improve your mind/body connection. </span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">Constantly practice relaxing your muscles. This will help to relieve tension and train you to relax no matter what activity you're doing. </span><br style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; " /><span style="color: #111111; font-family: Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff; ">At the end of your run, spend a few minutes doing an "end-of-run review." Ask yourself how well you did with keeping your focuses, how your body felt during the run. What did you come away with that will help your next run? Then, the next time you go out for a run, you'll have something to work on that you brought forward from your last run. In this way you'll build a healthy, growing and sustainable running program. </span> <br />转自Q?a >http://www.douban.com/group/topic/20749798/</a><img src ="http://www.shnenglu.com/flyinghare/aggbug/174954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2012-05-15 11:36 <a href="http://www.shnenglu.com/flyinghare/archive/2012/05/15/174954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何成ؓ?0倍效率”开发?/title><link>http://www.shnenglu.com/flyinghare/archive/2011/12/28/162963.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Wed, 28 Dec 2011 01:10:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2011/12/28/162963.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/162963.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2011/12/28/162963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/162963.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/162963.html</trackback:ping><description><![CDATA[<div><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>DQBrad Feld的一文?/strong><a target="_blank" style="color: #015fb6; text-decoration: none; "><strong>The Rise of Developeronomics</strong></a><strong>中提C“10倍效率的开发者(10x developerQ?#8221;的概念(伟大的开发者的效率往往比一般的开发者高很多Q而不只是一点点Q,Adam Loving在读了之后受到启发,q向多位大牛QBen Sharpe、Collin Watson和Jonathan LockeQ询问如何成?#8220;10倍效率的开发?#8221;Q最后得C以下的答案?/strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>1. 只做需要做的工?/strong></p><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 20px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: left; background-color: #f8fafd; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">使用敏捷Ҏ(gu)Q?/li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">全心全意做UX设计Q?/li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">沟通第一Q?/li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">~码也许不是解决问题的办法;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">q早的优化是一切罪恶的Ҏ(gu)Q?/li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">选择最单的解决Ҏ(gu)?/li></ul><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>2. 站在巨h的肩膀?/strong></p><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 20px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: left; background-color: #f8fafd; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">使用开源框Ӟ</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">使用z语aQ如HAML、Jade、CoffeescriptQ;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">不要做重复的事情Q不要重新发明轮子)Q?/li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">利用包管理器来进行公共和U有代码分配Q?/li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">不要d巨头Q如微YQ的摆布而修复库中的一个BugQ?/li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">不要让你的雇主g学习(fn)Q?/li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; ">自主学习(fn)qؓ自己讑֮新的目标?/li></ul><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>3. 了解数据l构和算?/strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">如果你不知道什么时候应该用快速排序、不懂L认O(n2)E序、不会写递归函数Q你无法成?0倍效率的开发者。用多U语a你才能清楚不同的框架是如何解决相同问题的。尽可能M解底层命令(plumbingQ,以便能够作出明智的决定(Web框架是怎么存储session状态的QCookie到底是什么?Q?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>4. 不要怕买工具Q它可以节省你的旉</strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">Ben_“昨天我花50元C一个位囑֭体工P它帮我节省的旉成本l对过200元?#8221;</p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>5. 集中注意?/strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">不要整天开着你的?sh)子邮g、Twitter、Facebook{,在工作时它们最化或关掉它们,戴上x。Tiny hack_“即不听音乐我也戴着x工作Q这样便不会有h打扰到我?#8221;</p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>6. 早q且l常性地q行代码重构</strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">有时Q你不得不放弃漂亮的代码转而去L真正寚w目有用的代码Q但没关p,如果你的现有目中有q样的代码,最好的方式便是不要看它Qƈ重构?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>7. 只管d</strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">你的业余项目分享到<a target="_blank" style="color: #015fb6; text-decoration: none; ">Startup Weekend</a>中。在我开始{到Unix和Ruby on Rails上之前,我买了一台MacQ用Windows虚拟了一q时间做.NET目?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>8. 挑选一个编辑器Qƈ掌握?/strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">高效开发者喜Ƣ用文本~辑器胜qIDE~辑器,因ؓq样可以学到更多东西。无Z么情况,量使用键盘快捷键,因ؓ熟练使用一件工L(fng)前提是熟(zhn)它?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">在选择~辑器时Q认真考虑q挑选最好的QEmacs或VimQ,因ؓ它们是通用的。其ơ,挑选你的首选^台最支持的。用宏Q不断地写代码;使用 Mac上的TextExpander为整个段落创建快h式;使用Visual Studio或SublimeText的自动补齐功能;使用支持按行/列分割窗口的~辑器,q样你便能同时看到单元测试和代码Q或模型、视图)?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">一定要x楚后再写代码。Adam_“我有朋友在一个大目l里工作Q他们组里最高效的程序员是一个高位截瘫用嘴叼着子敲代码的人,他L在写代码之前惛_很仔l且很少出错?#8221;</p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>9. 整洁的代码胜qy妙的代码</strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">要想让其他h能够L你的代码Q尽量用最的代码来完成Q务。遵循DRYQDon't repeat yourselfQ的原则Q用明定义的对象和库Q将d分解成小而简单的代码Dc?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>10. 潜意识是强大的工?/strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">d10分钟往往可以解决一个问题。控制编E时_l自׃个多姿多彩的生活Q劳逸结合能让你在工作时更高效、更愉?zhn)。当Ӟ即便是上了年U的E序员也知道Q以最的旉完成最高效的工作是成ؓ10倍效率开发者的必要条g?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">作ؓ一个程序员Q我觉得在职业生涯中最好的一件事儿就是从?sh)脑前站hQ去拜访那些在某一领域有所建树(wi)的h们?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>11. 推动自n和团队进?/strong></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">重视批评Q以包容的态度接受批评q提升自己是非常重要的事情。没有这个基Q你不可能成Z个高效的开发者。一位智者曾l说q:“聪明的h善于从自q错误中学?fn),而智慧的人善于从别h的错误中学习(fn)?#8221;</p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">英文Q?a target="_blank" style="color: #015fb6; text-decoration: none; ">adamloving</a></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">译文Q?a target="_blank" style="color: #015fb6; text-decoration: none; ">ITeye</a></p><div style="text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: #f8fafd; "></div></div><img src ="http://www.shnenglu.com/flyinghare/aggbug/162963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2011-12-28 09:10 <a href="http://www.shnenglu.com/flyinghare/archive/2011/12/28/162963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> TFS: 回滚变更?/title><link>http://www.shnenglu.com/flyinghare/archive/2011/06/16/148752.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Thu, 16 Jun 2011 00:43:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2011/06/16/148752.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/148752.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2011/06/16/148752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/148752.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/148752.html</trackback:ping><description><![CDATA[<font class="Apple-style-span" face="verdana, sans-serif"><span style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">团队首次使用TFS开发,很快侉K要用回滚功能,l果虽然扑ֈ?#8220;获取特定版本”?#8220;历史”功能Q却不知如何回滚。最后在msdn上找C文章,如下。没惛_居然是用如此手动的方?#8230;…<br /><br /><div>如何Q回滚变更集</div><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "></p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">虽然变更集是记录的永久部分,从技术上无法撤消或移除,但?zhn)仍然可以通过使用以下q程有效?#8220;回滚”变更集。此q程是更正签入错误的常用Ҏ(gu)?/p><div><table width="100%"><tbody><tr><th align="left"><img alt="Note" src="http://i.msdn.microsoft.com/ms194956.note%28zh-cn,VS.80%29.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " />注意</th></tr><tr><td><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">以下步骤针对单个<span style="line-height: 21px; ">file</span>Q但对于一l文件来_此过E也是相同的?/p></td></tr></tbody></table></div><h3>q原为文件以前的版本</h3><div><ol style="margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 35px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">在源代码理资源理器中Q右击要回滚其变更集的文Ӟ然后单击上下文菜单中?#8220;获取特定版本”?/p></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">?#8220;获取”对话框中Q选择文g以前的版本,然后单击“获取”。有x多信息,请参?a id="ctl00_rs1_mainContentContainer_ctl01" style="text-decoration: none; color: #336699; ">如何Q检索变更集中文件的旧版?/a>?/p></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">当此文g已位于?zhn)的工作区中之后,叛_此文Ӟ然后单击上下文菜单中?#8220;{և以进行编?#8221;?/p></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">再次叛_此文Ӟ然后单击“{օ挂v的更?#8221;?/p></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">?#8220;{օ - 源文?#8221;对话框中Q选择文gQ然后单?#8220;{օ”?/p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">随即出现“解决冲突”对话框?/p></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">单击“解决”以打开“解决版本冲突”对话框?/p></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">选择“攑ּ服务器更?#8221;?/p></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">单击“定”?/p><div><table width="100%"><tbody><tr><th align="left"><img alt="Note" src="http://i.msdn.microsoft.com/ms194956.note%28zh-cn,VS.80%29.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " />注意</th></tr><tr><td><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">若要在放弃服务器更改之前复查(zhn)的军_Q可以单?#8220;比较”以同时查看服务器和本地副本?/p></td></tr></tbody></table></div></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">?#8220;解决冲突”对话框中Q单?#8220;关闭”?/p></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">在源代码理资源理器中Q右?yn)LӞ然后单击“{օ挂v的更?#8221;?/p></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">?#8220;{օ - 源文?#8221;对话框中Q单?#8220;{օ”?br /><br /><br />转自Q?a >http://blog.csdn.net/Gildor/archive/2008/08/27/2840288.aspx</a></p></li></ol></div></span></font><img src ="http://www.shnenglu.com/flyinghare/aggbug/148752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2011-06-16 08:43 <a href="http://www.shnenglu.com/flyinghare/archive/2011/06/16/148752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Studio TFS 团队目和集合指?/title><link>http://www.shnenglu.com/flyinghare/archive/2011/05/12/146255.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Thu, 12 May 2011 05:52:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2011/05/12/146255.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/146255.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2011/05/12/146255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/146255.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/146255.html</trackback:ping><description><![CDATA[     摘要: Visual Studio TFS 团队目和集合指?Willy-Peter Schaub ?nbsp;Mike Schimmel ?nbsp;MSDN 杂志 文章Q?#8220;Visual Studio TFS 分支和合q指?#8221;(msdn.microsoft.com/magazine/gg598921) 中,Visual Studio ALM Ra...  <a href='http://www.shnenglu.com/flyinghare/archive/2011/05/12/146255.html'>阅读全文</a><img src ="http://www.shnenglu.com/flyinghare/aggbug/146255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2011-05-12 13:52 <a href="http://www.shnenglu.com/flyinghare/archive/2011/05/12/146255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VSTS在实战中的应用系列(二)http://www.shnenglu.com/flyinghare/archive/2010/10/12/129605.html会飞的兔?/dc:creator>会飞的兔?/author>Tue, 12 Oct 2010 06:28:00 GMThttp://www.shnenglu.com/flyinghare/archive/2010/10/12/129605.htmlhttp://www.shnenglu.com/flyinghare/comments/129605.htmlhttp://www.shnenglu.com/flyinghare/archive/2010/10/12/129605.html#Feedback0http://www.shnenglu.com/flyinghare/comments/commentRss/129605.htmlhttp://www.shnenglu.com/flyinghare/services/trackbacks/129605.html万事开头难。每个项目的L(fng)都是从项目规划开始做赗因此怎样d好规划对于项目意义重大。在VSTS中,目规划的含义与我们普通开发过E中所讲的规划的ƈ不是很相同。在VSTS中规划的内容主要分ؓ三项Q区域和q代的划分、工作项定义?/div>
 
首先Q我们必ȝ道什么是区域和P代?一般说来,我们要想完整的把握项目,׃从好几个角度去观察和控制它。因ZQ何项目本w都是高度复杂的和关联的事物l合而成。这意味着我们很难从单个角度就能将目观察清楚。在普通过E中我们把这U角度称?#8220;视点”Q而在VSTS中这个视点被叫做“区域”。看到这里,我们可能会有个冲动,自然的认为全面考察目最好的办法是全角度去看问题。但如果那样做,我们׃失去寚w目至关重要那部分的聚焦。因此我们需要规划出我们感兴的视点Q以便能ؓC多的_֊投入到这些对目来说非常重要的区域里厅R?/div>
 
在这个项目中Q我可以随心所Ʋ的规划多种视点来。但Z提高效率以及增加成功性?#8220;软g工厂”模式提出了两U最常用的区域:软g工程视点的和目理视点。因为所有的软g目最l的目的都是以可q行的程序的形式存在Q因此工E视Ҏ(gu)保证目成功的重要区域。而我们品的质量却与目理密切相关Q而质量也是保证成功的一个重要因素。因此项目管理视点也是我们关注的重要区域。而这两个大的视点只是军_了我们如何去x我们的项目。是一U类似原则性的东西Q若惌实,q须补充更多和更l的子视点,以这两个区域做进一步的l化。下图是我对q个目的区域进行的规划?/div>
 
 
可以看出从工E角度来_我关心的软g的架构方面的划分QUI、应用服务层、通用服务层、数据层Q代表了为实现客户和商业上不同的价值所付出的努力。比如,׃UI层密切与用户利益相关Q那么可能这个区域下的众多工作要和客户一起完成,或者需要请更加专业的用户体验专家来做。而通用服务层可能还需要服务公司其它项目。而基于这L(fng)商业价|很可能这个区域下的工作将除过考虑本项目自w的设计要求外,q需要考虑一些其它项目上的额外设计要求。这些重要的东西Q都需要在我们划分的观点中得到体现。项目管理区域下的几个子区域Q则代表了我们ؓ了项目保证质量而在开发过E中所采取的努力。在定义好区域后Q我们通过区域与P代的l合Q就能帮我们定位某个工作Ҏ(gu)处的位置和性重要程度?/div>
 
再来看Y件P代。假讄在要发布一个新版本的Y件系l。我们计划通过三次q代q程Q完成整个Y件的发布Q因此我们定义的q代如下图的Ş式:
 
每一个P代过E都包括一个完整的发布程。每一个P代过E也都生成一个完整的软g版本。在三次q代q程完成之后Q我们就得到一个可以发布的最l版本?/div>
 
另一个规划中的重要方面,是工作的定义。这部分比较复杂Q因此放在后一章中做详l说明?br>

转自Q?a >http://zhanghonglin.blog.51cto.com/314914/61453


]]>VSTS在实战中的应用系列(一Q?/title><link>http://www.shnenglu.com/flyinghare/archive/2010/10/12/129604.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Tue, 12 Oct 2010 06:26:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2010/10/12/129604.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/129604.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2010/10/12/129604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/129604.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/129604.html</trackback:ping><description><![CDATA[<div>中国武术的基本训l方法就是套路和招式。但是如果将q些套\和招式直接应用到实战当中去,其结果必是吃亏落|的结局。这是因为招式和套\存在的目的是用来Z(fn)武的人提供可供学?fn)的形式上的指南。套路中的每招每式都用来训练实际作战时可能用到的基本技能和技巧。因此对q些技能及技巧的掌握而不是对动作招式的简单重复,才是在实战中克敌制胜的真正重要的因素?/div> <div> </div> <div>VSTS是个关于软g生命周期理的工L(fng)合。它可以被认为是MSFҎ(gu)论和各种目理工具的大集成。MSF软gq程Y件开发分为四个阶D:规划、计划、开发、稳定。而VSTS集合里的工具则ؓq四个阶D늚实现提供了Y件上的基。可以看出,q里重要的中心都是直指开发过E而不是工兗但事实上许多h却反光而行之,他们只是单的使用VSTS中提供的那些工具Q把VSTS当VSS的数据库版来使用。这是十分不正确的,花很大代P此品h(hun)gԌ《)d和以前相同的事情Q就得好好想想真的有必要L变它吗?正如前边讲到武术出现的情况一PVSTS的威力不在于它的工具合集里的那些工具Q而在于这些工L(fng)互配合对于团队组l对Ҏ(gu)Z的支持,那才是它的神?/div> <div> </div> <div>此次我打用一pd文章Q围l一个项目DemoQ说明一些我对VSTS使用上的认识。当然对VSTS产品的理解我自然是比不上微Y的品专家和技术支持了Q论开发方法论我也比不q那些资q“PMP”们。但我也有自q优势Q那是自己既在搞项目管理又在搞微Y产品的技术支持。这使得我有Z能将微Y的品应用到目实践当中厅R最重要的是Q我的确xL(fng)来写些什么?/div> <div> </div> <div>关于我所介绍的项目,其来源是公司研发体系某部门的一ơCMMI实践需要。这个部门的领导人很希望规范自己团队软g版本发布的流E。传l的Ҏ(gu)需要投入一定的人力Q专门针Ҏ(gu)E进行管理和控制。这样就出现两方面的问题Q首先是q些人究竟是什么角Ԍ他们是否是开发专家、或者是试专家、或者是程理专家。否则他们怎么拥有理整个程的权利和能力Q其ơ,无数ơ的实践明这U做法大都是凶多吉少的?/div> <div> </div> <div>在这U情况下Q部门领gh扑ֈ我,希望得到一个由q程自动理zd的办法。很q运Q微软正好有ZVSTS的解x案。这个解x案包中提供一U叫做MSF的过E管理理论,而这U理论借助VSTS工具合集里的各种工具Q实C自动化管理过E中各类zd的问题。比如WIT实现的是目计划的跟t与理、TFVC实现了版本控制、FXCOP实现了代码的优化、TF Build实现了构建管理、For Test版本则实C试理?/div> <div> </div> <div>Z如此多的好处Q部门领gh{应让我做一ơ内部的POCQ有效性验证)q程。ƈl了我需求-一张流E图Q?/div> <div><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/flyinghare/liucheng.jpg" width=560 height=409></div> <div> </div> <div>q是个很标准的流E,因此我猜想用VSTS实现它应该不是g很难做的事情。OKQ那么就让我们在下一章中开始动手做吧?/div> 转自Q?a >http://zhanghonglin.blog.51cto.com/314914/61140</a> <img src ="http://www.shnenglu.com/flyinghare/aggbug/129604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2010-10-12 14:26 <a href="http://www.shnenglu.com/flyinghare/archive/2010/10/12/129604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mantis1.2.3 + xampp1.6.0 安装和配|?/title><link>http://www.shnenglu.com/flyinghare/archive/2010/09/25/127583.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Sat, 25 Sep 2010 02:37:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2010/09/25/127583.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/127583.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2010/09/25/127583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/127583.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/127583.html</trackback:ping><description><![CDATA[<p>      目前 xampp 的最新版?1.7.3 Q但发现该版本搭?mantis l常会导?mantis 首页无法响应Q发?httpd q程无法释放内存Q和q里描述的现象一P<a ><u><font color=#800080>http://bbs.51testing.com/viewthread.php?tid=281964</font></u></a>Q?br><br><br>      l过反复试验Q发?xampp1.6.0 ?mantis 完美l合Q目前还未发C用问题。美中不住的是,xampp1.6.0 ?windows server 2008 企业版下QWindows Server 2003 也一PQ无法正的安装、卸载服务,只好按照如下q回的办法进行解冻I<br><br>     先将 xampp1.7.3 安装?c 盘,用图形界面的控制台安装服务(apache ?mysqlQ,然后Q将?c:\xampp 改名?c:\xampp1.7.3Q(改名前需要停?apache ?mysql 服务Q?br>     现在安装 xampp1.6.0 ?c 盘,q将 mysql 的配|文?nbsp;<span> my.conf </span><span>拯一份,改名?/span><span> my.iniQ然后在操作pȝ的服务管理中启动 apache ?mysql 服务。(注意Q不要?xampp1.6.0 提供的图形界面启动服务)</span></p> <br><br>     安装后,我的 mantis 配置文g如下Q?br><br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">    $g_hostname </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> 'localhost'</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    $g_db_type </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> 'mysql'</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    $g_database_name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> 'bugtracker'</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    $g_db_username </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> 'root'</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    $g_db_password </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> '****'</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">        <br>    $g_user_login_valid_regex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> '/^.+$/i'</span><span style="COLOR: #008000">;</span><span style="COLOR: #008000"> //'/^([a-z\d\-.+_ ]+(@[a-z\d\-.]+\.[a-z]{2,4})?)$/i';</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    $g_graph_font             </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> 'chinese_gbk'</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    $g_default_language      </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> 'chinese_simplified'</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    $g_validate_email        </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> OFF</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    $g_send_reset_password    </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> OFF</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    $g_default_timezone     </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> 'Asia/Shanghai'</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    $g_session_validation     </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> OFF</span><span style="COLOR: #008000">;<br></span><span style="COLOR: #000000">    <br>    $g_delete_bug_threshold </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> MANAGER</span>;<br>   <span style="COLOR: #000000"> $g_allow_no_category  = ON;</span></div> <br><br>参考文献:<br>  <p style="MARGIN: 0in; FONT-FAMILY: 宋体; COLOR: #666666; FONT-SIZE: 8pt"><a ><u><font color=#800080>http://bbs.51testing.com/viewthread.php?tid=281964</font></u></a><br> </p> <p style="MARGIN: 0in; FONT-FAMILY: 宋体; COLOR: #666666; FONT-SIZE: 8pt"><a ><u><font color=#800080>http://blog.sina.com.cn/s/blog_56cbcff901009w6h.html</font></u></a><br> </p> <p style="MARGIN: 0in; FONT-FAMILY: 宋体; COLOR: #666666; FONT-SIZE: 8pt"><a ><u><font color=#800080>http://www.boofee.net/flyingbamboo/archives/242</font></u></a><br> </p> <p style="MARGIN: 0in; FONT-FAMILY: 宋体; COLOR: #666666; FONT-SIZE: 8pt" lang=zh-TW><a ><u><font color=#800080>http://cwlin0416.wordpress.com/2007/04/15/integrating-mantis-with-ldap/</font></u></a><br> </p> <p style="MARGIN: 0in; FONT-FAMILY: 宋体; COLOR: #666666; FONT-SIZE: 8pt"><a ><u><font color=#800080>http://www.dlresearch.cn/xtykc/?p=42</font></u></a></p> <img src ="http://www.shnenglu.com/flyinghare/aggbug/127583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2010-09-25 10:37 <a href="http://www.shnenglu.com/flyinghare/archive/2010/09/25/127583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>L道讉K地址中的zentaohttp://www.shnenglu.com/flyinghare/archive/2010/09/19/127072.html会飞的兔?/dc:creator>会飞的兔?/author>Sun, 19 Sep 2010 07:16:00 GMThttp://www.shnenglu.com/flyinghare/archive/2010/09/19/127072.htmlhttp://www.shnenglu.com/flyinghare/comments/127072.htmlhttp://www.shnenglu.com/flyinghare/archive/2010/09/19/127072.html#Feedback0http://www.shnenglu.com/flyinghare/comments/commentRss/127072.htmlhttp://www.shnenglu.com/flyinghare/services/trackbacks/127072.html

按照我们的安装步骤部|禅道之后,讉K路径中还会有zentao之类的\径,肯定有朋友问Q怎样把其L呢?其实很简单,我们一h配置下?/p>

要想Lzentao的访问\径,需要部|虚拟主机?/p>

  1. 扑ֈapache的配|文Ӟ不同的系l,光|文件位|不同。windows一般在apache/conf下面。linux一般在/etc/apache或?etc/httpd下面?nbsp;
  2. 扑ֈ虚拟L配置文g。有的apache是单独分出来的一个vhost.conf。有的则是直接写在httpd.conf中?
  3. 扑ֈ虚拟L配置文g之后Q配|下面的代码Q?br><VirtualHost *:80>
    ServerName pms.zentao.net #换成你具体的域名?/span>
    DocumentRoot /home/www/zentaopms/www/ #换成具体的zentao下面的www目录?/span>
    <Directory />
    Options FollowSymLinks
    AllowOverride All
    </Directory>  
    </VirtualHost>
  4. 修改zentao的配|文Ӟconfig/my.php。将其中的webRootҎ(gu) /
    $config->webRoot = '/';  
  5. 重新启动apache?br>


转自Q?a >http://www.zentao.net/help-read-79186.html


]]>Team Foundation Server 权限http://www.shnenglu.com/flyinghare/archive/2010/09/03/125791.html会飞的兔?/dc:creator>会飞的兔?/author>Fri, 03 Sep 2010 06:45:00 GMThttp://www.shnenglu.com/flyinghare/archive/2010/09/03/125791.htmlhttp://www.shnenglu.com/flyinghare/comments/125791.htmlhttp://www.shnenglu.com/flyinghare/archive/2010/09/03/125791.html#Feedback0http://www.shnenglu.com/flyinghare/comments/commentRss/125791.htmlhttp://www.shnenglu.com/flyinghare/services/trackbacks/125791.html阅读全文

]]>
软g工厂?/title><link>http://www.shnenglu.com/flyinghare/archive/2010/08/29/125195.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Sun, 29 Aug 2010 12:50:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2010/08/29/125195.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/125195.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2010/08/29/125195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/125195.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/125195.html</trackback:ping><description><![CDATA[<div> <div>发布日期 : 11/4/2004<span> | </span>更新日期 : 11/4/2004</div> <p>Jack Greenfield</p> <p>Microsoft Corporation</p> <p><strong>摘要Q?/strong>要介l?Microsoft 开发Y件工厂这U方法的动机。所谓Y件工厂就是指Z支持某种特定应用E序的快速开发而配|的开发环境。Y件工厂从逻辑上讲是软g开发方法和实践的下一个发展阶Dc然而,通过引入产业化模式,软g工厂势必会改变Y件行业的现状?</p> <h3 id=EPAA>扩大软g开发的规模</h3> <p>从目前的情况来看QY件开发的速度~慢、代价高昂而又极易出错Q常怼生出存在大量缺L(fng)产品Q在可用性、可靠性、性能、安全以及其他服务质量方面造成严重的问题?/p> <p>Ҏ(gu) Standish Group [Sta94] 的统计,国公司每年投资U?175,000 个Y件开发项目,投资额约?2,500 亿美元。这些项目中只有 16Q?能够在预内按计划完成。另?31Q?的项目主要由于质量问题而被取消Q经损q?810 亿美元。另?53Q?的项目^均超出预?189Q,l济损失Uؓ 590 亿美元。完成的目q_只实C原来规划的功能的 42Q?/p> <p>q些数字客观地印证了我们Ҏ(gu)l验所做出的判断,那就是Y件开发是一劳动密集型的业,它创造每一元的h(hun)值所消耗的人力资本过了我们对于一个现代化行业的期望倹{?/p> <p>当然Q除了这些缺点以外,软g开发的成果昄为消费者带来了巨大的h(hun)|正如需求增长的长期势所表明的那栗但qƈ不意味着消费者已l非常满意,不管是对我们提供的YӞq是Ҏ(gu)们提供Y件的方式。这只是说明他们实看好软g的前景,愿意承担巨大的风险和损失Q以此来获得软g所带来的好处。然而,正如软g开发的外包来受Ƣ迎所表明的,q种情况昄不是最好的Q因为它g不能推动软g行业在Y件开发方法和实践斚w作出重大的改变?/p> <p>在过dq中Q生产率只获得了有限的提高,最重要的原因可能是采用了字节编码的语言、模式和灉|的方法。除了这些进步,我们开发Y件的Ҏ(gu)与十q前没有什么不同。我们的Ҏ(gu)和实践实际上没有太大的改变,相应的成本和风险同样也没有太大的改变?/p> <p>然而,q种情况p被改变。据预测Q全球对软g的M需求将在下一个十q中以数量的速度增长Q这是由于受到全球经中的新生力量(例如中国的崛P的推动,以及׃新的应用cdQ例如商业集成和d信息U学Q和新的q_技术(例如 Web 服务、移动设备和产品Q而软g在社会基l构中的作用日益加大?/p> <p>如果软g开发能力没有相应的增长Q那么十q后势必出现M软g开发能力大大低于M需求的局面。当Ӟ如果市场力量能够自由q作Q这U情况不会真正出玎ͼ因ؓ受到启发的Y件提供商出于个人利益而提供够多的Y件来满q种需求?/p> <div><a href="#mainSection"><img border=0 alt="" src="http://i.msdn.microsoft.com/dynimg/IC170569.gif"></a><a href="#mainSection"><font color=#1364c4>q回首</font></a><br></div> <h3 id=EOAA>再次面对新的挑战</h3> <p>那么Q怎样才能提供_多的软g开发能力呢Q不用太多的分析可以看出,必须对Y件开发的Ҏ(gu)和实践进行显著的改变?/p> <p>因ؓ行业的生产能力取决于合格开发h员的数量以及开发h员的工作效率Q因此提高行业生产能力的Ҏ(gu)是,或者l采用现有的Ҏ(gu)和实践而投入更多的开发h员,或者保持相当数量的开发h员而采用不同的Ҏ(gu)和实c?/p> <p>管q去十年间培育v来的学徒制似乎已l成功地增加了合格开发h员的数量q提高了开发h员的q_水^Q但臛_有两个理由可以说明学徒制不大可能使Y件行业的生能力满预期的需求水qI </p> <ul> <li> <p>l验告诉我们Q没有什么比拥有一些杰出的E序员更重要。杰出开发h员比y脚开发h员的工作效率高一千倍,但蹩脚开发h员的数量也几乎是杰出开发h员的一千?[Boe81]?</p> </li> <li> <p>Brooks [Bro95] 指出Q增加项目h数最l会D辚w收入减少。通过招募和培训新开发h员而获得的生能力逐渐下降?</p> </li> </ul> <p>因此解决问题的出路应是改变我们的Ҏ(gu)和实c我们必通过各种途径提高开发h员的工作效率?/p> <div><a href="#mainSection"><img border=0 alt="" src="http://i.msdn.microsoft.com/dynimg/IC170569.gif"></a><a href="#mainSection"><font color=#1364c4>q回首</font></a><br></div> <h3 id=ENAA>创新曲线与模式{?/h3> <p>作ؓ一个行业,我们从一开始就需要共同面对这U情cY件开发的历史是一个与复杂和变化作斗争的过E,时而盈利时而亏损,随着时代的进步而生更多的需求。虽然仅仅半个世U就取得了不辉煌的成WQ然而道路ƈ不^坦。相反,软g开发一直沿着著名的创新曲U模式在前进Q如?1 所C?[Chr97]?/p> <p><img alt="" src="http://i.msdn.microsoft.com/dynimg/IC158595.gif"></p> <div><strong>?/strong><strong> 1</strong><strong>Q?/strong>创新曲线</div> <p>典型的情冉|Q一个不q箋的创Cؓ一个新的技术时代奠定基。新基础之上的发展一开始是快速的Q但随着基础的稳固和成熟Q发展速度逐渐慢下来。最后,q个基础失去了l创新的能力Q达到发展的峰。同Ӟ另一个不q箋的创Cؓ另一个新技术时代的到来奠定基础Q于是上q模式得以重复。Kuhn UCq基为模式,U它们之间的转变为模式{?[Kuh70]。模式{变发生在需要改变现状以l箋前进的交汇时刅R我们现在正处在q样一个交汇时刅R?/p> <div><a href="#mainSection"><img border=0 alt="" src="http://i.msdn.microsoft.com/dynimg/IC170569.gif"></a><a href="#mainSection"><font color=#1364c4>q回首</font></a><br></div> <h3 id=EMAA>提高抽象水^</h3> <p>在历史上Q模式的转变曄成功地提高了开发h员的抽象水^Qؓ在^台和语言中获得知识ƈ重复利用知识提供了强大的概念。例如,在^台方面,我们从批处理开始,l历了终?L、客h/服务器、个、多层系l和企业应用集成Q再到异步、松散耦合的服务。在语言斚wQ我们从数字~码语言开始,l历了汇~语a、结构化语言和面向对象的语言Q再到字节编码的语言和模式,q可以看作是Z语言的抽象。Smith ?Stotts Ҏ(gu)q步作了意味深长的ȝ [SS02]Q?/p> <p><em>~程的历史是在体pȝ构抽象方面的一U锻点{在每个时代Q语a设计人员通过ȝ上一代的l验教训创造出l构Q然后体pȝ构设计师使用q些l构创造出更复杂,更强大的抽象?/em></p> <p>他们q指出,新的抽象一般先出现在^CQ然后移植到语言中。我们现在的情况是,Z语言的抽象已q远落后Zq_的抽象。换句话_现在是工兯q落后于q_。我们现在正在用最新的q_技术(例如Q通过采用配乐法编写服务,我们现在能够使位于这个星球上M位置的多个企业间的进E自动化Q,但我们仍然在手动~写每个应用E序Q好象这是首选的Ҏ(gu)一栗我们从的具体概念Q例如@环、字W串和整敎ͼ入手来创造大的抽象概念(例如保险索赔和证怺易)。我们勤勤恳恳一丝不苟地工作Q将上百万小的相x代码片段和资源组合在一P形成巨大而复杂的l构。如果半g行业也采用类似的做法Q他们需要用手焊接晶体管来徏立v支持q些应用E序的巨大而复杂的处理器。相反,他们通过l装UCؓ特定用途集成电(sh)?(ASIC) 的预定义lgQ用如?2 所C的工具来完成实现?/p> <p><img alt="" src="http://i.msdn.microsoft.com/dynimg/IC113902.gif"></p> <div>?2Q基?ASIC 的设计工?</div> <p>N我们不能采用cM的方式来实现软g开发的自动化吗Q当然能Q而且实际上我们已l在q样做。例如,数据库管理系l通过 SQL 实现数据讉K自动化,提供了诸如数据集成和独立性等优点Q数据驱动的应用程序更易于创徏和维护。与此类|W(xu)idget 框架?WYSIWYG ~辑器得创建和l护囑Ş用户界面更容易,提供了诸如设备独立性和可视化组装等优点。仔l分析这些做法,我们可以发现一个反复出现的模式?</p> <ul> <li> <p>在给定问题领域开发出大量pȝ之后Q我们ؓ该领域确定一l可以重复利用的抽象Q然后我们制订一l模式,规定如何使用q些抽象?</p> </li> <li> <p>然后我们开发一个运行时Q例如框架或服务器)Q将q些抽象和模式代码化。这P我们可以通过对运行时所定义的组件实例化、调整、配|和l装Q从而在该领域中创徏pȝ?</p> </li> <li> <p>然后我们定义一U语aq创建支持该语言的工P例如~辑器、编译器和调试器Q,使组装过E自动化。这样可以帮助我们对不断变化的要求做出快速响应,因ؓ部分实现已经完成Q而且可以L地加以修攏V?</p> </li> </ul> <p>q就?Roberts ?Johnson [RJ96] 所描述的著名的“语言框架”模式。一个框架可以按数量U降低开发一个应用程序的成本Q但只用一个框架则很困难。一个框架定义一U具有某U典型体pȝ构的产品Q例如应用程序或子系l)Q这些品可以通过各种方式q行完善和专门化的处理,以满不同的要求。将每种产品的要求映到框架中绝不是一个小问题Q通常需要借助于体pȝ构设计师或高U开发h员的专业技能。通过使用语言表达式捕获各U要求,然后生成框架完成代码Q基于语a的工具可以自动完成此q程?/p> <div><a href="#mainSection"><img border=0 alt="" src="http://i.msdn.microsoft.com/dynimg/IC170569.gif"></a><a href="#mainSection"><font color=#1364c4>q回首</font></a><br></div> <h3 id=ELAA>实现软g开发的产业?/h3> <p>在其他行业,提高生能力的途经是从手工作业q渡到机械生产。在手工作业阶段Q所有品都是由个h或小l从无到有制造出来的Q而在机械生阶段Q各U品通过l装多家供应商生产的可重复利用的lgq速生产出来,在这个过E中Q许多机械琐的d都是由机器自动完成的。这些行业对工艺、设计和包装q行标准化,借助产品U实现系l性重复利用,q过供应铑ֈ担成本和风险。现在已有部分行业可以实现大规模定制Q根据需求快速而经地刉出各种产品Q以满不同客户的特定要求?/p> <div><a href="#mainSection"><img border=0 alt="" src="http://i.msdn.microsoft.com/dynimg/IC170569.gif"></a><a href="#mainSection"><font color=#1364c4>q回首</font></a><br></div> <h3 id=EKAA>软g能够实现产业化吗Q?/h3> <p>Z对Y件与实物之间的类比进行过热烈的讨论。这些业化模式能够应用于Y件行业吗Q难道Y件行业没有因其品性质的不同而比其他行业Ҏ(gu)吗?Peter Wegner 对它们之间的异同ȝ如下 [Weg78]Q?/p> <p><em>软g产品在某些方面与传统工程学科中的有Ş产品Q如桥梁、徏{物和计机Q存在相g处。但也存在某些重要的区别Q得Y件开发与众不同。由于Y件是逻辑概念而非实物Q因此其成本集中在开发过E中而不是生产过E中。又因ؓ软g不会损Q因此其可靠性取决于逻辑质量Q如正确性和E_性)而非物理质量Q如度和韧性)?/em></p> <p>有些讨论实物的生与Y件的开发比?#8220;Ҏ(gu)与桔?#8221;。理清这些困扰的关键是理解生产和开发之间的不同Q以及规模经与范围l济的不同?/p> <p>Z获得投资回报Q必d最大可能重复利用那些可重复利用的组件而不仅仅是收回开发成本,无论是直接通过降低成本Q还是间接通过降低风险、羃短进入市场的旉或改q质量来实现。从投资角度Ԍ可重复利用的lg属于金融资。由于ؓ使组件可重复利用而耗费的成本通常非常高,很难辑ֈ可获利的重复利用E度Q因此需要有一U系l的Ҏ(gu)来实现重复利用。这通常包括定一个要开发多个系l的领域Q找领域中重现出现的问题Q开发出一套解册问题的集成生产资产,然后这些资产应用到在该领域中开发系l的q程中?/p> <div><a href="#mainSection"><img border=0 alt="" src="http://i.msdn.microsoft.com/dynimg/IC170569.gif"></a><a href="#mainSection"><font color=#1364c4>q回首</font></a><br></div> <h3 id=EJAA>规模l济与范围经?/h3> <p>pȝ性重复利用可以同时生规模经和范围l济的效应。这两种效应在其他行业广Zh知。尽二者都是通过集中而非单独生多个产品来减时间和降低成本q提高品质量,但二者在产生q些优点的方式上却存在着不同?/p> <p>当集中而非单独生一个设计的多个相同实例Ӟ׃生了规模l济Q如?3 所C。规模经可能出现在生机器螺钉{品时Q在q种生q程中,可以使用机床{生产资产生产出多个相同的品实例。工E师通过一U资源密集的q程Q称为开发)完成设计与最初的实例Q称为原型)。然后通过另一个由机器?或低成本力_力完成的q程Q称为生产)创造出更多实例Q称为复制品Q,以满_场需要?/p> <p><img alt="" src="http://i.msdn.microsoft.com/dynimg/IC44325.gif"></p> <div>?3Q规模经?/div> <p>范围l济通过集中而非单独生多个怼但不同的设计和原型而实玎ͼ如图 4 所C。例如在汽R刉业Q多个相g不同的汽车设计通常是通过l合子部Ӟ如底盘、R体、内部装饰及传动装置Q的现有设计来开发的Q而不同的Ƒּ或型号通常是通过改变现有设计中的某些功能Q如发动机和装饰水^Q来产生的。换a之,可以使用相同的方法、工艺、工具和材料设计出多个相g不相同的产品Qƈ制作出相g不相同的原型。商业徏{同样如此,很少看到多桥梁或多q摩天大楼采用同一U设计。但商业建筑领域存在一个有的现象Q即每个成功的设计通常只会产生一两个实例Q因而规模经几乎从未真正实现过。在汽R刉业Q通常会从成功的设计生出许多不同的实例,通过复制每个原型Q范围经与规模l济形成互补Q如?4 所C?/p> <p><img alt="" src="http://i.msdn.microsoft.com/dynimg/IC15362.gif"></p> <div>?4Q范围经?/div> <p>当然QY件无Z汽R刉还是与商业建筑之间都存在重要区别,但它们常常有着怼的地斏V?</p> <ul> <li> <p>在诸如用h面品之cȝ市场中,操作pȝ和工作效率应用程序等产品通过复制形成扚w生QY件行业呈现出规模l济的特点,如同在汽车制造业中一栗?</p> </li> <li> <p>而在诸如企业用户产品之类的市ZQؓ获得竞争优势而开发的商业应用E序很少能够q行扚w生QY件仅呈现围经的特点Q如同在商业建筑领域中一栗?</p> </li> </ul> <p>现在我们可以清楚地看到苹果与桔子之间的区别了。将实物行业的生产与软g开发进行比较未免有些天真。不是软gq是实物Q在Mcd的开发中L规模l济效果都是没有意义的。但是,我们却可以期待Y件开发的产业化能够带来范围经的效果?/p> <div><a href="#mainSection"><img border=0 alt="" src="http://i.msdn.microsoft.com/dynimg/IC170569.gif"></a><a href="#mainSection"><font color=#1364c4>q回首</font></a><br></div> <h3 id=EIAA>产业化会带来什么样的结果?</h3> <p>假设可以在Y件行业实C业化Q那么结果将会是什么样子呢Q当Ӟ在事情发生之前我们不可能切地知道。但是,我们可以Ҏ(gu)软g行业的发展道路以及其他行业业化后的情Ş作出合理的推。显Ӟ软g开发永q不会简单到懒h们所希望的那U纯机械化的E度。相反,满全球需求的关键是不要再把杰出开发h员的旉费在机械琐的d上。我们必d一切努力更好地利用q些E有资源,不要再让他们把时间花费在手动构造因Z一个主要^台版本的出现或者市场条件的变化而致使行业需求改变进而导致短短几个月或几q内需要维护甚x换掉的最l品上?/p> <p>实现此目的的Ҏ(gu)之一是为开发h员提供各U途经Q他们能够自q知识转化成可供他人重复利用的资。这个目标是否遥遥无期?有些模式已经表现出重复利用知识的有效性,管利用E度不高。下一步是使用语言、框架和工具自动生成模式化的应用E序Q从而实C~程到自动化的飞?/p> <p>半导体开发ؓ软g开发实C业化后的情Ş提供了预演。这q不是说软glg很快p?ASIC 那样易于l装QASIC 是经q封装和接口技术领域二十年的创新和标准化而开发出来的产品。但另一斚wQY件开发可能用不了 20 q。Y件开发的优势在于只需要处理比特,而半g行业q需要承担组件实现所需的物理材料工E的额外负担。与此同Ӟ比特所固有的短寿特性也如数字知识权保护等带来了难题,正如我们在电(sh)影和音乐行业所看到的那栗?/p> <div><a href="#mainSection"><img border=0 alt="" src="http://i.msdn.microsoft.com/dynimg/IC170569.gif"></a><a href="#mainSection"><font color=#1364c4>q回首</font></a><br></div> <h3 id=EHAA>l论</h3> <p>本文描述了Y件行业在利用现有Ҏ(gu)和实跉|面对预期需求上的无能ؓ力。这里只对许多问题进行了要叙qͼ无疑会引发读者寻求证据或更多详细的讨论。要获得更详l的讨论Q请参阅此书 Software Factories: Assembling Applications with Patterns, Models, Frameworks and ToolsQ此书的作者ؓ Jack Greenfield ?Keith ShortQ由 John Wiley and Sons 出版Cև版。有兌l信息,也可以访?<a ><font color=#1364c4>http://msdn.microsoft.com/architecture/overview/softwarefactories</font></a> ?<a ><font color=#1364c4>http://www.softwarefactories.com/</font></a>Q这里提供了各种文章Q介l了L从手工作业向机械生转换的长期问题、帮助行业克服这些问题的重大创新以及集成了重大创新的软g工厂Ҏ(gu)?/p> <p><strong>版权声明</strong></p> <p>© 版权所?2004 Jack Greenfield?#169; 部分版权所?2003 Jack Greenfield ?Keith ShortQ已?Wiley Publishing Inc. 获准再版。保留所有权利?/p> <p><strong>参考资?/strong></p> <ol> <li> <p>[Boe81] B Boehm.Software Engineering Economics.Prentice Hall PTR, 1981</p> </li> <li> <p>[Bro95] F Brooks.The Mythical Man-Month.Addison-Wesley, 1995</p> </li> <li> <p>[Chr97] C Christensen.The Innovator's Dilemma, Harvard Business School Press, 1997</p> </li> <li> <p>[Kuh70] T Kuhn.The Structure Of Scientific Revolutions.The University Of Chicago Press, 1970</p> </li> <li> <p>[RJ96] D Roberts and R. Johnson. Evolving Frameworks:A Pattern Language for Developing Object-Oriented Frameworks.Proceedings of Pattern Languages of Programs, Allerton Park, Illinois, September 1996</p> </li> <li> <p>[SS02] J. Smith and D Stotts.Elemental Design Patterns – A Link Between Architecture and Object Semantics.Proceedings of OOPSLA 2002</p> </li> <li> <p>本图利用 Virtuoso® Chip Editor ?Virtuoso® XL Layout Editor 生成Qƈ得到?Cadence Design Systems, Inc. 的许可?#169; 版权所?2003 Cadence Design Systems, Inc.。保留所有权利。Cadence ?Virtuoso ?Cadence Design Systems, Inc. 的注册商标?/p> </li> <li> <p>[Sta94] The Standish Group.The Chaos Report.http://www.standishgroup.com/sample_research/PDFpages/chaos1994.pdf</p> </li> <li> <p>[Weg78] P Wegner.Research Directions In Software Technology.Proceedings Of The 3rd International Conference On Software Engineering. 1978</p> </li> </ol> <p><strong>作者简?/strong><strong></strong></p> <p>Jack Greenfield ?Microsoft 公司负责开发企业框架和工具的体pȝ构设计师。他曾担?Rational Software Corporation 公司 Practitioner Desktop Group 组的主要体pȝ构设计师Q他q是 InLine Software Corporation 公司的创始h和首席技术官。他曑֜ NeXT 开发了企业对象框架Q现在称?Apple Web Object。他是著名的演讲者和作家Q同时他q对 UML、J2EE 及相关的 OMG ?JSP 规范做出q很大A(ch)献。他拥有 George Mason University 物理学学士学位。可通过 <a href="mailto:jackgr@microsoft.com"><font color=#1364c4>jackgr@microsoft.com</font></a> ?Jack 获得联系?</p> <p> </p> <div><a href="#mainSection"><img border=0 alt=q回首 src="http://i.msdn.microsoft.com/dynimg/IC170569.gif"></a><a href="#mainSection"><font color=#1364c4>q回首</font></a></div> <br><br>转自Q?a >http://msdn.microsoft.com/zh-cn/library/aa480032.aspx</a></div> <img src ="http://www.shnenglu.com/flyinghare/aggbug/125195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2010-08-29 20:50 <a href="http://www.shnenglu.com/flyinghare/archive/2010/08/29/125195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决无法更改本地文g夹与 TFS 目之间映射的问?/title><link>http://www.shnenglu.com/flyinghare/archive/2010/06/22/118443.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Tue, 22 Jun 2010 02:40:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2010/06/22/118443.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/118443.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2010/06/22/118443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/118443.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/118443.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 13px; LINE-HEIGHT: 22px; FONT-FAMILY: Arial; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px">问题说明Q更换了一台新?TFS 服务器,旧的 TFS 服务器停止用。但从客L(fng) VS2008 q接到新的服务器Qƈ下蝲源码到本地原来工作的文gҎ(gu)Q出现错误提C,说本地文件夹已被映射C旧的服务器上Q不能从新服务器获取源码。通过源代码管理-工作区管理,把跟旧服务器相关的所有工作区w删掉后,仍出现此提示? <p style="FONT-SIZE: 13px; BACKGROUND-IMAGE: url(http://hi.baidu.com/xiaoheilong/css/lb/gray_line.gif); MARGIN: 10px 0px 0px; LINE-HEIGHT: 22px; TEXT-ALIGN: justify; background-origin: initial; background-clip: initial">    解决办法Q?br>在文?C:\Documents and Settings\当前用户\Local Settings\Application Data\Microsoft\Team Foundation\2.0\Cache\VersionControl.config 中,<br>Qvista ?C:\Users\当前用户\AppData\Local\Microsoft\Team Foundation\2.0\CacheQ?br>~存了本地文件夹到旧服务器的一些映关p,只要把跟旧服务器相关?ServerInfo 节点删掉Q问题即可解冟?/p> <p style="FONT-SIZE: 13px; BACKGROUND-IMAGE: url(http://hi.baidu.com/xiaoheilong/css/lb/gray_line.gif); MARGIN: 10px 0px 0px; LINE-HEIGHT: 22px; TEXT-ALIGN: justify; background-origin: initial; background-clip: initial">转自Q?span style="FONT-SIZE: medium; LINE-HEIGHT: normal; FONT-FAMILY: 微Y雅黑; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px"><a >http://hi.baidu.com/xiaoheilong/blog/item/1cf703467acce8006a63e57d.html</a></span></p> </span> <img src ="http://www.shnenglu.com/flyinghare/aggbug/118443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2010-06-22 10:40 <a href="http://www.shnenglu.com/flyinghare/archive/2010/06/22/118443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微Y不怕面试题公开http://www.shnenglu.com/flyinghare/archive/2010/04/22/113259.html会飞的兔?/dc:creator>会飞的兔?/author>Thu, 22 Apr 2010 09:12:00 GMThttp://www.shnenglu.com/flyinghare/archive/2010/04/22/113259.htmlhttp://www.shnenglu.com/flyinghare/comments/113259.htmlhttp://www.shnenglu.com/flyinghare/archive/2010/04/22/113259.html#Feedback0http://www.shnenglu.com/flyinghare/comments/commentRss/113259.htmlhttp://www.shnenglu.com/flyinghare/services/trackbacks/113259.htmlhttp://www.4oa.com/office/748/940/941/200712/156538.html
微Y不怕面试题公开“挑战”是U密武器 

微Y一直把公司的面试问题视为秘密,但天下没有绝对的U密?#8220;什么能l你快乐Q?#8221;?#8220;你认为做事情是完还是速度重要Q?#8221;?#8220;如果微Y惌按照你的选择投资500万美元,你会选择什么业务?”q类普通问题,q里׃赘言了,现在只选择脑筋急{弯?#8220;圈套”题、创造力试{等Q让我们来一H微软的面试U密?br style="word-wrap: break-word; word-break: break-all; ">
微Y智力题从哪儿?nbsp;

逻辑题目是微?6h自助厅里流行午休闲谈话的一部分。微软的竞争_认ؓ能够提出“?#8221;?#8220;有效”问题是一件很“?#8221;的事情?br style="word-wrap: break-word; word-break: break-all; ">
许多微Y的难题带有传奇色彩。据说有一ơ史蒂夫·鲍尔默和另一位微软高官正在慢跑时看到了一个下水道盖子Q便随口问道Q?#8220;Z么下水道盖子是圆形的Q?#8221;另一个h灉|一动道Q?#8220;哟,q可是一个面试的好问题?#8221;q个故事可能是真有其事,然而,几乎可以肯定鲍尔默ƈ不是W一个提Z水道盖子q个问题的h。实际上微Y公司的面试智力题都在一些智力题汇编书或者一些以智力题ؓ主要内容的网站上出现q,微Y只不q是l它?#8220;化了?#8221;而已?br style="word-wrap: break-word; word-break: break-all; ">
问题

在不使用天^的情况下Q你怎样U出一架喷气式飞机的重量?

Z么镜子里的媄像左右颠倒而不是上下颠倒?

Z么你在宾馆里一打开热水龙头有热水出来?

MQM巧克力是怎样做出来的Q?br style="word-wrap: break-word; word-break: break-all; ">
你在船上Q把一只箱子抛hQ水q面会升高还是下降?

世界上有多少钢琴调音师?

国有多加油站Q?br style="word-wrap: break-word; word-break: break-all; ">
每小时有多少密西西比x过新奥?dng)良Q?br style="word-wrap: break-word; word-break: break-all; ">
一个曲球场里的冰有多重?

如果你能够搬走美?0个州中的M一个,你会搬走哪一个?

地球上有多少个这L(fng)点:往南走1公里Q往东走1公里Q再往北走1公里Q你能回到原来的出发点吗Q?br style="word-wrap: break-word; word-break: break-all; ">
一天中钟表的指针重叠多次Q?br style="word-wrap: break-word; word-break: break-all; ">
q克和托德两Z共有21元。迈克的钱比托d?0元Q每个h各有多少钱?在你的答案中不能有分数?br style="word-wrap: break-word; word-break: break-all; ">
一般说来,曼哈的?sh)话册要d次才能扑ֈ你想要找的h名?

你会怎样设计比尔·盖茨的ʎ室?

你怎样设计一个由计算机控制的微L炉?    

“挑战”是U密武器

微Y以及其他许多公司在面试中都有一?#8220;U密试武器”Q这个秘密武器通常被称?#8220;挑战”。我的一个朋友没有通过微Y的面试,面试后我与他p了晚。他抱怨说Q?#8220;我恨死那个主考官了,他简直是个蠢货。他q皮亚诺公理q样的基知识都不懂!”我的q位朋友Ҏ(gu)感到愤怒,因ؓ他觉得之所以面试搞砸是因ؓq个主考官Ҏ(gu)谈话的话题的无知造成的?br style="word-wrap: break-word; word-break: break-all; ">
l果实情是什么呢Q他所甌的职位是目l理Q这是一个负责设计Y件而不是编E工作的职位Q因此这个职位需要做很多说服性的工作。项目经理要和一有着很强逻辑思维能力、但~ZC交技巧的E序员打交道Q这需要一U特别的才能。要惛_一名项目经理,你需要具备的独特能力是:说服Z接受那些你认为正的事实。而这基本上就是你的日常工作。你必须是耐心和友好的Q这是目l理职位对一个h的素质的基本要求?br style="word-wrap: break-word; word-break: break-all; ">
“挑战”的最早版本出现在口头q行的斯坦福-比奈智商试。测试的人可能给Z列题目:

我们都知道,水能够把水中的鱼托v来,那么请回{这个问题:如果我们有一个桶只有半桶_把桶攑ֈ天^上,水和桶刚好重45公斤。然后把一?公斤的鱼放进桉Q现在总重为多?

大多数成qh都会?5??0公斤。主持测试的时候可能会问道Q?#8220;q怎么会是正确的呢Q你知道水是会把鱼托h的?#8221;Ҏ(gu)曑ֆ道:“如果被测试的Z断地改变{案Q然后说我觉得答案应该是50公斤但ƈ不确定,那么得分为零?#8221;只有在被试者利用逻辑q正确{案q行辩护Qƈq箋挫|两次“挑战”Q答案才会被认ؓ是正的?br style="word-wrap: break-word; word-break: break-all; ">
q些问题gq不针对智力一cȝ事情做出试Q但是毫无疑问,应用q种“诡辩”试的公司很重视q种试的结果。根据斯波斯基的说法Q在微Y情Ş如下Q在整个面试q程中,你引导应聘者说Z些完全肯定、毫无争议的正确{案。然后你?#8220;{一下,{一?#8221;Q再故意和他׃分钟的反调,直到他们能够充分证明自己{案的正?br style="word-wrap: break-word; word-break: break-all; ">
“懦弱的应聘者会选择攑ּQ这L(fng)人绝对不会被录取。好的应聘者会设法通过某种Ҏ(gu)来说服你。他们会搬用一整套戴尔·卡耐基(DaleCarnegie)的做法来说服你,他们可能会说?#8216;可能是我误解你了’q样的话Q但他们L坚持自己的立场。这L(fng)人,录用?br style="word-wrap: break-word; word-break: break-all; ">无答案的公开试题

微Y寚w试问题的公开虽不乐意Q但也很无奈。早在互联网出现之初Q这些试题就已经有所公开了?br style="word-wrap: break-word; word-break: break-all; ">
20世纪90q代早期Q克里斯·塞尔?ChrisSells)在DevelopMentor公司面试。在面试快结束的时候,一位公司的创始道:“好的Q你被录用了。但是再问你一个微软公司在面试时常帔R到的问题——ؓ什么下水道盖子是圆形的Q?br style="word-wrap: break-word; word-break: break-all; ">塞尔斯回{说Q?#8220;没问题,如果你先回答了这个问题,我再来回{你的问题——ؓ什么消防员的背带是U色的?
q位公司创始人对此哑口无a?br style="word-wrap: break-word; word-break: break-all; ">
q次l历促塞尔斯开始收集微软的面试问题?996q他创徏了一个网站,q开始把自己听说的试题张贴在|上?br style="word-wrap: break-word; word-break: break-all; ">
南加利福g大学学生柯朗·邦d拉帕?KiranBondalapati)和他的几个朋友一起参加了微Y的一ơ面试。邦h帕提把问题整理出来,形成了自q“微Y面试题库”。还有另外一些其他网站提供类似的服务Q例如,4guysfromRolla.com|站?#8220;微Y面试问题”和迈克尔·普赖?MichaelPryor)?#8220;技术面试问?#8221;(|站里包含各U各L(fng)试题Q不只是微Y的面试试??br style="word-wrap: break-word; word-break: break-all; ">
你可能认为微软对自己公司的面试问题被公开十分恼怒,事实q不完全是这栗邦h帕提和塞?dng)斯都听说过微Y人力资源部门的h指点员工在初ơ担M考官时到他们的网站上参考参考?br style="word-wrap: break-word; word-break: break-all; ">
当然Q应聘者也可以利用q些|站为面试预先准备,但塞?dng)斯和邦h帕提的网站都不提供或者很提供问题的{案。邦h帕提有一ơ就接到了一个朋友的朋友打来的紧急电(sh)话,当时是参加微软面试的前夜Q她正在万豪酒店。她面前摆着一大堆从邦h帕提|站上打印出来的东西Q但是没有一个问题有定的答案,Ҏ(gu)要邦h帕提告诉奏V?br style="word-wrap: break-word; word-break: break-all; ">
塞尔斯收到许多公司的?sh)子邮gQ他们也惌“像微软一h?#8221;。那么问题在哪儿呢?他们也需要知道问题答案,而塞?dng)斯的网站把{案都略M。塞?dng)斯_“我L回答Q如果你们不知道{案Q就不应该在面试旉q些问题。这往往使他们恼成怒?/span>


]]>
在敏捷开发中采用演进式架构设?/title><link>http://www.shnenglu.com/flyinghare/archive/2010/04/07/111836.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Wed, 07 Apr 2010 02:42:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2010/04/07/111836.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/111836.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2010/04/07/111836.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/111836.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/111836.html</trackback:ping><description><![CDATA[转自Q?a >http://www.phpchina.com/?action_zendinfoview_itemid_34567.html</a><div><span style="color: rgb(23, 115, 180); font-family: arial, Tahoma, 'Lucida Grande', 'Lucida Sans Unicode', 宋体, 新宋? verdana, sans-serif; font-size: 12px; line-height: 21px; "><div id="yeiuomw" class="rct" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; font-weight: bold; font-size: 16px; background-image: url(http://www.phpchina.com/images/zend/ptbg.jpg); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; width: 505px; color: rgb(26, 128, 200); line-height: 28px; height: 27px; background-position: initial initial; background-repeat: no-repeat no-repeat; "><span id="26egiky" class="rctl" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; word-wrap: break-word; ">在敏捷开发中采用演进式架构设?/span></div><div id="4c8yyoi" class="rcc" style="margin-top: 10px; margin-right: auto; margin-bottom: 10px; margin-left: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; line-height: 19px; "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  在敏捷开发过E中Q我们还需要对pȝ架构q行设计?事实上,Martin Fowler在《Is Design Dead?》一文中已经l出了答案,那就是我们同样不能忽略对pȝ架构的设计。与计划性的设计(Planned Design)不同Q我们需要演q式的设?Evolutionary Design)。在敏捷开发的生命周期中,我们通过每一ơP代来丰富与更新我们的设计Ҏ(gu)Q以使其最大限度地W合客户对系l的需求。这里所指的需求,包括功能性需求和非功能性需求?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  在Agile Journal四月刊中QIBM's Methods Group的敏捷专家Scott W. Ambler详细地阐qC在敏捯境中的架构设计方法,他提Z所?#8220;架构预测(Architectural Envisioning)”的方法,以应Ҏ(gu)捷开发中逐步演进的架构设计过E?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  Scott指出Q敏h型驱动开?Agile Model Driven DevelopmentQAMDD)明确地包括了初始需求分析与架构建模Q这个过E发生在敏捷目开发的W?ơP代中。所谓第0ơP代,q当于目的热w活动,是项目得以启动的基础。在此P代期_团队需要充分地理解目的范_甄别可行地技术策略。这个阶D|能够攉到的信息有助于你对整个目最初的_略估计Q以制定合适的目计划Q从而获得启动项目的资金与够的支持?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  敏捷模型驱动开发的生命周期如下图所C:</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  <img height="331" alt="" src="http://dev.yesky.com/imagelist/2009/078/7uiuhsuj4h68.jpg" width="500" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; border-right-width: 0px; border-right-style: initial; border-right-color: initial; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; "></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  Ҏ(gu)图中所C,在每ơP代的初期Q制定的q代计划都应该包括徏模的工作。在此期_可以召开建模的头脑风暴会议,讨论pȝ的功能特征,q思考实现这些特征的高层设计{略。大多数敏捷团队都会通过试驱动开?TDD)定需求与设计的细节?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  通过Ҏ(gu)构的预测Q可以在目早期q行一些高层次的架构徏模,以助于团队与关键利益相关人商讨系l采取的技术策略。这一行ؓ的关键目标是识别出架构策略,而不是撰写如׃般堆U的文档Q从而得你能够快速完成架构徏模。其中的H门是量保持单。开发者不需要对大量的细节进行徏模,而只需要够即可。如果你正在~写用例Q意味着你只需要以标注形式列出用例的要点就_好了。如果你正在寚w域徏模,可以直接在白板上l图Q或者用CRC卡片。你的目的在于对信息的共享与交流Q而不是编写细致的文档?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  如果采用架构预测的方式,你需要对哪些内容q行建模?Scott在文中指出有如下四部分内定w要徏模:</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  技术图表。例如UML部v图。这些图表有助于开发者预主要的<a class="fllink" target="_bank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; color: rgb(7, 81, 154); text-decoration: none; font-style: normal !important; "><font color="#000000" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">软g</font></a>和硬件组Ӟ包括你需要访问的旧系l和<a class="fllink" target="_bank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; color: rgb(7, 81, 154); text-decoration: none; font-style: normal !important; "><font color="#000000" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">数据?/font></a>Q系l有可能会与它们q行交互?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  用户交互程图。通过分析用户交互的主要页?外观和报告,对系l的UIq行架构设计。如果在q行架构设计的时候不考虑用户交互界面Q就可能存在潜在危机Q那是你构建的pȝ不是利益相关人所希望看到的。请CQUI才是最l用户用的pȝ?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  领域图。在最初的架构建模中,一个重要的l成部分是对领域的高层徏模。模型可以非常微,只需要捕获主要的业务实体Q以及它们之间的关系。有的h可能认ؓ领域模型应该属于需求徏模的一部分Q而不是架构徏模。但正如上图所C,q两者在W?ơP代中是ƈ发进行的?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  变更情Ş。就是在架构U需求中描述可能的技术或业务变更Q而这些变更需要在未来能够提供支持。变更情形要求你考虑架构的扩展能力,但ƈ不是q度构徏你的pȝ。因Z只是要考虑׃变更所造成的媄响,以确保你构徏的系l还能够正常工作?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  架构建模是诏I于整个目周期的,因此q些图表是在项目结束时形成的整体文档的基础。由于你事先明确架构是演q的Q因此就不必承担架构设计在项目早期必?#8220;正确无误”的压力,而只需要在当前形势下保证够好可以了。Scott使用白板和草E纸{简便工P勑֋些模型的初始版本。当Ӟ如果团队成员h熟练的徏模技巧,也可以用专门的建模工具。这一以体现架构设计的敏h,与长篏牍的传统架构设计方式q然不同?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  对于q样一U架构设计方式,熟?zhn)传统架构设计方式的架构师普遍不以为然。Scott对这一看法l与了强有力的反驟뀂他架构设计场景分ZU类型。第一U是架构师熟(zhn)系l架构设计所必需的技能与l验。既然你已经熟?zhn)了这些内容,当然没有必要作出完整的设计了。你只需要在白板上体C的架构设计,保证团队的每个h都能够按照相同的体系架构q行实现可以了?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  W二U场景是架构师对相关技巧与l验完全不知。此Ӟ仍然只需要作量的初始徏模即可。因Z~Z_的知识来完成l致而又全面的架构设计,反而会因ؓ了解不够而导致错误,从而增加项目的风险Qƈ且阻了目的进度?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  W三U场景则是架构师熟?zhn)部分知识。这U情形也是团队开发中最常见的场景。在q种情况下,可以耗费几天旉作出一个初始的架构建模Q以验证pȝ可能存在的风险,q制定可能策略以减轻风险可能造成的后果。你可以实现一些可工作的代码来验证架构。徏模在q种情况下是非常有意义的Q因为它使得你可以定义一个一致的技术愿景,为团队成员所分nQƈ对系l的主要问题q行思考?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  当你的团队成员是分散在各地时Q或者当团队非常庞大Q下面分为多个小l时Q这U初始的架构建模p够带来无与u比的价倹{它有助于在团队成员之间建立一个公q愿景Q更重要的是它能够识别出分离的组?子系l,以及q些lg的初始接口。一旦识别出q些耦合度较低的lg或子pȝQ就能够合理地对团队q行分组Qƈ保证组之间设计与实现的一致性?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  Scott指出Q所谓的“架构预测”能够提供如下价|</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  提高生?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  降低技术风?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  减少开发时?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  增强沟?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  可׾~的敏捷软g开发?/p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; ">  需要明的是,q样的一U架构预方式,正好W合敏捷开发P代的需要。在目开发早期,对系l整体进行一ơ高层次的概览,q对关键业务需求进行甄别与分析Q划分合理的pȝ模块Q有助于在P代开发中为团队成员徏立一个统一的标准与目标。而在每次q代q程中,团队可以对本次q代期间的功能进行深入的架构建模Q然后通过TDD充分理解需求,Ҏ(gu)块的l节q行设计与实现。这是敏h构设计的核心操作原理Q它与敏捷开发原则是一脉相承的?/p></div></span></div><img src ="http://www.shnenglu.com/flyinghare/aggbug/111836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2010-04-07 10:42 <a href="http://www.shnenglu.com/flyinghare/archive/2010/04/07/111836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>架构设计的方法学http://www.shnenglu.com/flyinghare/archive/2010/04/07/111834.html会飞的兔?/dc:creator>会飞的兔?/author>Wed, 07 Apr 2010 02:37:00 GMThttp://www.shnenglu.com/flyinghare/archive/2010/04/07/111834.htmlhttp://www.shnenglu.com/flyinghare/comments/111834.htmlhttp://www.shnenglu.com/flyinghare/archive/2010/04/07/111834.html#Feedback0http://www.shnenglu.com/flyinghare/comments/commentRss/111834.htmlhttp://www.shnenglu.com/flyinghare/services/trackbacks/111834.html阅读全文

]]>
议软g架构设计要点http://www.shnenglu.com/flyinghare/archive/2010/03/22/110292.html会飞的兔?/dc:creator>会飞的兔?/author>Mon, 22 Mar 2010 06:25:00 GMThttp://www.shnenglu.com/flyinghare/archive/2010/03/22/110292.htmlhttp://www.shnenglu.com/flyinghare/comments/110292.htmlhttp://www.shnenglu.com/flyinghare/archive/2010/03/22/110292.html#Feedback0http://www.shnenglu.com/flyinghare/comments/commentRss/110292.htmlhttp://www.shnenglu.com/flyinghare/services/trackbacks/110292.htmlhttp://tech.it168.com/a2009/0417/272/000000272586.shtml

    如何更好地进?a title=软g style="COLOR: #000000" target=_blank>软g架构设计Q这是Y件工E领域中一个永恒的重点话题。过d十年来,国际软g工程界在软g架构设计斚w已经获得了长_展,大量图书、文章和文献记蝲了这斚w的成熟经验与成果。Y件架构设计往往是一仉常复杂的工作Q涉及到很多l节和方斚w面,可探讨的话题也非怹多。囿于篇q限Ӟ以下只能Ҏ(gu)W者个人理解,遴选出软g架构设计的个别要点,l合当前行的敏捯Y件工E思想Q与大家分n一下自己在软g架构设计斚w的心得和体会?/p>

    架构军_成|

    软g架构是Y件品、Y件系l设计当中的Ml构和主要矛盾。Q何Y仉有架构,哪怕一D늟的HelloWorldE序。Y件架构设计的成|军_了Y件品和pȝ研发的成败。Y件架构自w所h的属性和特点Q决定了软g架构设计的复杂性和隑ֺ?/p>

    q几q流行一个说法(理谚语Q:“l节军_成|”Q这句话其实只说对了一半。细节确实很重要Q很多项目、品就输在l节的执行上。一斚wQ战术细节固然很重要Q但另一斚wQ战略全局也同样重要,对应的我们可以说Q?#8220;战略军_成|”。战略性失败,好比下一盘围,局部下得再漂亮、再凌厉Q如果罔֤盘,己方q空都不够了Q还有官子(l节Q获胜的Z吗?必然是中盘告负?/p>

    cM圎ͼ正确的Y件架构设计,应该既包括战略全局上的设计Q也包括战术l节Q关键\径)上的设计。有一U错误的观点认ؓQY件架构设计只要分分层和包Q画一个大体的轮廓草图Q就完事了。这U?#8220;U怸谈兵”型的架构师行为是非常有害的。事实上Q既然Y件架构是软g建筑的主体结构、隐蔽工E、承重墙和要害部位,那么软g架构也必然要落实到实际的法和代码,不但要有实现代码Q还要包括对q部分架构进行测试的代码Q以保证获得高质量的、满_U功能和非功能质量属性要求的架构。除了完成概c模型设计外QY件架构师一定要参与实际的编码、测试和调试Q做一位真正的hands-on practitionerQ这已经成ؓ了敏捯Y件工E所倡导的主文化?/p>

    两个架构

    我们在日常的软g产品和系l开发中Q实际上会遇CU、两个部分的软g架构Q即待开发的应用部分的Y件架构(U?#8220;应用架构”Q,以及既有的基q_部分的Y件架构(U?#8220;基础架构”Q。这两部分架构之间是互ؓ依赖、相辅相成的关系Q它们共同组成了整个软g产品和系l的架构?/p>

    基础架构的例子包括:.NET和J2EE{主的基础q_和各U公共应用框Ӟ由基库API、对象模型、事件模型、各U开发和应用的扩展规则等内容l成。我们只有熟(zhn)基架构的构造细节、应用机理,才能有效地开发出高质量、高性能的上层应用。然而,开发一个面向最l用L(fng)软g应用pȝ和品,仅仅掌握一般的计算机高U编E语a知识和基q_架构、API的用知识显然是不够的,我们q需要根据客户应用的cd和特点,在基架构之上Q设计出W合用户要求的高质量应用软g?/p>

    熟?zhn)OOA、OOD抽象建模技术、设计原则以及架构模式和设计模式{等Ҏ(gu)技术,不但有助于我们更好地理解和利用基q_架构Q也有助于我们设计开发出更高质量的应用Y件架构?/p>

    风险驱动、敏捯P代的架构设计与开?/strong>

    软g架构随着软g产品和系l的生命周期而演化,其生命期往往过了一个项目、一ơ发布,甚至有可能长达数q之久,因而Y件架构无论对于客戯是开发商来说都是一Ҏ(gu)光要的资?/p>

    软g架构的设计应该遵循什么样的开发过E?或者说Q有没有更好的、成熟的软g架构设计和开发过E?回答是,21世纪的Y件架构设计应该优先采用敏捯P代的开发方式和Ҏ(gu)。与传统做法不同Q敏捯P代开发主张Y件架构采用演q式设计Qevolutionary designQ,一个Y件品或pȝ的架构是通过多次q代Q乃臛_ơ发布,在开发生命周期中逐步建立和完善v来的?/p>

    好的软g架构不是一y而就的。在架构设计开发过E中Q我们应该尽量避免瀑布式思维Q通过一?#8220;架构设计阶段”来完成系l的架构设计乃至详细设计Q然后再Ҏ(gu)架构囄和模型,?#8220;~码实现阶段”按图索骥q行架构的编码与实现。这U传l做法的错误在于认ؓ软g架构是囄上的模型Q而不是真正可以高质量执行的源代码。几十年的Y件工E实践表明,没有l过代码实现、测试、用L(fng)认过的架构设计,往往会存在着不可靠的臆想、猜和q度设计、过度工E,极易造成费和返工,D较高的失败率?/p>

    风险是Q何可能阻和D软g产品/pȝ研发p|的潜在因素和问题。Y件架构是软g产品和系l研发的主要矛盾和主要技术风险,软g架构的质量决定了整个软gpȝ和品的质量。不定性往往是Y件架构设计当中一U最大的潜在风险。因此,软g架构的设计与开发应该遵循风险驱动的原则Q在整个开发生命周期内臛_至终l护一张风险问题清单,随着q代的前q,Ҏ(gu)风险的实时动态变化,首先化解和处理最主要的架构风险,再依ơ化解和处理ơ要的架构风险?/p>

    架构设计的可视化建模

    软g架构设计的难度源于Y件设计问题本w的复杂性,一个复杂的软gpȝ往往存在大量复杂的、难于被人类所理解的细节和不确定因素。抽象与建模是hc自诞生以来已掌握的理解复杂事物的Ҏ(gu)Q因而hcL从事的Y件设计工作本质上也是一个不断徏模的q程。我们可以通过各种抽象的模型和视图Q从各个不同层次、宏观和微观的角度来理解复杂的Y件架构,以保证作出正和有效的设计?/p>

    有h认ؓQ?#8220;软g架构是源代码(source codesQ?#8221;以及“源代码就是设?#8221;。这U说法其实是片面的。什么是真正的YӞ我们知道Q最l可以在?sh)脑上执行的真正的Y件其实是二进制代??Q借助~译器我们把高~程语言译成底层的汇编语言、机器语a{,没有直接、完整地看到二进制程序在CPU上的实际q行状况QruntimeQ,Z大多只能通过各种调试工具、窗口视囄方式来间接地动态观察这些真正的软g的运行片Dc因此,Java、C#、C++ {等设计Ӟdesign timeQ源代码在本质上也是一U模型,虽然是一U经处理后可执行的静态模型,但显然它们ƈ不是真实软g和Y件架构的全部。可见,源代码模型(有时也叫实现模型Q与UML模型其实都是软g架构的一U模型(逻辑反映Q,差别在于抽象层ơ的不同。完整的软g架构Q徏{)不仅仅包括源代码Q实现模型)Q还包括了需求模型、分析模型、设计模型、实现模型和试模型{等许多模型QY件架构本w就是一l模型的集合?/p>

    UML、SysML是当前国际上行的Y?pȝ架构可视化徏模语a。在~写实际的代码之前,利用包图、类图、活动图、交互图、状态图{等各种标准囑ŞW号对Y件架构进行徏模,探讨和交各U可行的设计Ҏ(gu)Q发现潜在的设计问题Q保证具体编码实C前抽象设计的正确性,被实践证明是一U非常有效和高效、敏L(fng)工作方式?/p>

    架构设计的重?/strong>

    重用QReuseQ是在Y件工E实践中获得高效率、高质量产品和系l开发的一U基本手D和主要途径Q通过有组l的、系l和有效的重用,我们往往可以获得10倍率以上的效率提升。而一个优U的、有长久生命力的软g架构Q比方主的一些框架YӞQ其本n或其lg被重用的ơ数多Q其体现的h(hun)gp大?/p>

    软g重用有各U不同的范围、层ơ、粒度和cdQ从函数重用、类重用、构?lg重用、库QAPIQ重用,到框枉用、架构重用、模式重用,再到软g设计知识、思想的重用等{,重用的效能和效果各有不同?/p>

    软g工程l过几十q的发展Q已l积累了大量的Y件架构模式和设计模式Q它们记载、蕴藏了大量成熟、已l验证的软g设计知识、思想和经验。我们^时对各种基础q_、主框架和API的应用和调用Q本w就是一U最为普遍的重用形式。而一个优U、成熟的软g研发l织Q必然会在日常开发中注意攉各种软g设计知识和经验,建立和维护基于架构模式和设计模式{内容的软g重用知识库,U极d和频J地q用各种软g模式来解军_际工E问题?/p>

    框架QFrameworkQ是一cd有高可重用度的YӞ针对某一cd用或领域Q它们具有非常灵zȝ、高度可扩展的Y件架构。那么,如何才能设计出可重用的Y件架构或其组Ӟ借助于OOA、OOD{抽象分析和设计技术是一U重要的Ҏ(gu)。h们在实践中发玎ͼ往往抽象的东西Q其适应面也pq,可重用度也就高Q相反,具体的东西Q其适应面也pH,可重用度也就低。重用,意味着充分利用现成、既有的东西、成果来解决新问题或重复的问题,?#8220;不变”?#8220;万变”。在软g架构设计中,应该d地区分Y件架构中?#8220;不变”?#8220;可变”之处Q系l地理好这些稳定点和变化点以适应未来的变化,q也是提高Y件架构重用度、获得高质量框架设计的一U重要方法?/p>

    架构设计的权?/strong>

    与其它所有工E行业一P软g工程本质上也是一门讲I权衡的U学和艺术。Y件架构设计的最难之处往往在于如何在各U相互竞争、矛盄制约条g之下Q作出y妙的最x衡。Y件架构设计的权衡水^Q也是最能体现Y件架构师的设计经验、能力和技巧的地方?/p>

    在Y件开发和软g架构的设计过E中Q从选择q_Q到选择语言Q选择框架Q选择设计模式Q选择工具…{等Q我们无时不刻都需要权衡,对各U候选项作出合理评判。在架构师带领下QY件研发团队往往q需要对q期目标与远期目标、质量与速度和效率、质量与成本、功能与性能、灵zL与复杂?#8230;{等许多彼此矛盾的设计选项、因素和U束q行l致、小心和理性的权衡?/p>

    理性权衡意味着U学决策。进行有效的架构设计权衡Q离不开U学的方法,也就是如何运用定量分析和定性分析相l合的方法、因果逻辑和根源分析等{技术,扑ֈ最l的甜点QSweet SpotQ。许多时候,能否在很短的旉内作速、果断而正的U学权衡与取舍决{,构成了一个Y件研发团队核心竞争能力的一部分?/p>

]]>
软g开发的d分解http://www.shnenglu.com/flyinghare/archive/2010/03/15/109746.html会飞的兔?/dc:creator>会飞的兔?/author>Mon, 15 Mar 2010 08:23:00 GMThttp://www.shnenglu.com/flyinghare/archive/2010/03/15/109746.htmlhttp://www.shnenglu.com/flyinghare/comments/109746.htmlhttp://www.shnenglu.com/flyinghare/archive/2010/03/15/109746.html#Feedback0http://www.shnenglu.com/flyinghare/comments/commentRss/109746.htmlhttp://www.shnenglu.com/flyinghare/services/trackbacks/109746.htmlhttp://www.javaeye.com/topic/5746

说到d分解Q肯定就得说说WBS了。下Ҏ(gu)摘自|上的一D对WBS的介l:

目分解l构一般采用WBSQWorks Breakdown StructureQ方法,其步骤如下:
1Q工E项目的l构分析
目的MQ务是完成定的技术系l(功能、质量、数量等Q的工程Q完成这个Q务是通过许多互相联系、互相媄响、互怾赖的工程zd实现的?
2Q工E项目结构分析的主要工作
Q?Q工E项目的l构分解?
Q?Q项目单元的定义?
Q?Q项目单元之间逻辑关系的分?
3Q项目结构分?
对一个项目进行结构分解,通常按系l分析方法,q到细Q由M到具体,׃而下地将工程目分解成树(wi)型结构。结构分解的l果有:①树(wi)型结构图②项目结构分析表?
4Q项目结构分解过E?
Q?Q将目分解成单个定义的且Q务范围明的子部分(子项目)?
Q?Q研Iƈ定每个子部分的特点和结构规则,它的执行l果以及完成它所需的活动,以作q一步的分解?
Q?Q将各层ơ结构单元(直到最低层的工作包Q收集于查表上,评h(hun)各层ơ的分解l果?
Q?Q用pȝ规则Q将目单元分组Q构成系l结构图Q包括子l构图)?
Q?Q分析ƈ讲分解的完整性,如有可能让相关部门的专家或有l验的h参加Qƈ听取他们的意见?
Q?Q由决策者决定结构图Qƈ作相应的文g?
Q?Q在设计和计划过E中定各单元的Q特别是工作包)说明文g内容Q研Iƈ定pȝ单元之间的内部联pR?
5Q项目结构分解方?
Q?Q以产品l构q行分解?
Q?Q按q面或空间位|进行分解?
Q?Q按功能q行分解?
Q?Q按要素q行分解?
Q?Q按目实施q程q行分解?/span>

用WBS对Y件开发项目进行Q务分解,我觉得主要是从两个方向进行分解:横向分解Q对问题域进行拆分)和纵向分解(对实现过E进行拆分)?
《PMPQProject Management Professional Study Guide》里辚w用的是U向优先的拆分方法?
而清华的那本《项目管理核心教E与PMP实战》比较ؕQ他丄两个例子都是Ua的纵向分解,而他附录里的案例却是Ua的横向分解。@_@
我比较偏向于横向优先的拆分?
因ؓU向拆分通常意味着一个线性的q程Q而横向的分解通常更利于P代开发和FDD?

q行d分割时应当注意Q务之间关于知识和技术的耦合E度Q以及Q务内关于知识和技术的内聚E度Q以减少目内耗?
量做到低耦合Q以降低Ҏ(gu)员之间交的依赖E度Q让大多数成员(需要把握全局的骨q成员除外)无需考虑太多J杂的、不相干的东西;量做到高内聚,让成员可以尽量发挥他的能力以及已l获得的目相关信息?
q些考虑很重要,但是却常常被忽略掉?

对于划分好的dQ要仔细地分析它的难点和工作量,q些东西都是d分配必须的约束条件?
一定要l合技术含量、相关知识的学习(fn)隑ֺ来深入考虑Q切不可以表面数据(代码?|/功能Ҏ(gu)Q来评估?


d分割完毕之后Q就可以开始Q务分配?
d分配的d?span style="COLOR: red">减少对交的依赖
?

对于不同的h来说Q同一个Q务的隑ֺ是不相同的?
因此要调整Q务分配,让合适的人做合适的工作Q减整体难度?
分配q程中,量把高耦合的Q务分l同一个成员,避免把过多过琐碎的无关Q务分l同一个成员?
此外Q分配Q务时Q还应当把Q务相应的知识/技术要点列表,q同其他d资料一h交给成员Q以便成员能够提前做好准备,做到胸有成竹Q以避免不必要的技术风险?

如果工作量实在太大,或是工期要求太紧Q不得不把高耦合d甚至同一d分给多个成员负责Q这时候就要特别注意成员间工作相关知识的同步、信息的交流的问题。选择几个没有l怨的人,让这几个人坐在一起工作,p使他们方便地交流?

如果׃成员调度、个度、需求变更、以前遗漏的d或者某U不可抗力等原因Q而不得不更改d分配Q这时候一定要考虑如何最大化地利用项目h员已l做q的工作、已l获得的目相关信息Q尽量减Q务更改而引L(fng)交流、培训和再教育花贏V?

]]>
微Y软g开发过E与团队模型http://www.shnenglu.com/flyinghare/archive/2010/03/12/109483.html会飞的兔?/dc:creator>会飞的兔?/author>Fri, 12 Mar 2010 01:53:00 GMThttp://www.shnenglu.com/flyinghare/archive/2010/03/12/109483.htmlhttp://www.shnenglu.com/flyinghare/comments/109483.htmlhttp://www.shnenglu.com/flyinghare/archive/2010/03/12/109483.html#Feedback0http://www.shnenglu.com/flyinghare/comments/commentRss/109483.htmlhttp://www.shnenglu.com/flyinghare/services/trackbacks/109483.htmlhttp://www.iteer.net/modules/doc/article.php?storyid=735

软g开发过E模型比?
  微Y是世界上最大的软g公司Q但微Yq没有通过CMM认证Q不使用RUPQ也不用XP。微软有自己的Y件开发过EPCM。他们之间有什么区别?有什么共同点Q微软是否有从CMM、TSP、PSP中取长补短?而中国Y件企业又如何从这些林林Lȝ开发过E模型中选取适合自己的方法?CMM真的对中国Y件企业有帮助么?来听听微软资深项目经理的现n说法吧?
  源代码管理与每日~译
  源代码控?Source ControlQ又U源代码理、版本控制、Y仉|管理等)和每日编?Daily BuildQ又UNightly Build、持l集成等)是Y件开发过E中最重要的方法,也是实施其他各种程的必d(例如变更理、缺L(fng)理、自动测试等)?
  上兵伐谋Q微软品规划方?
  好的L(fng)是成功的一半,只有正确的制定品开发策略,才能使品在推向市场后被用户接受Q在交付客户后o客户满意。在q个专题中,(zhn)将了解到微软如何策划新软g的特性、进行市研、了解和分析客户需求、收集用户反馈等?
  发布零缺陯YӞ~陷理
  Bug理是Y件开发中非常重要的一个环节。在大型的商业Y件开发中Q没有Bug理是不可想象的。Bug理在微软的软g开发流E中同样起到举轻重的作用,无论是Windows、Officeq样大型的YӞq是内部使用的各U各L(fng)工PBug的管理都贯穿于整个开发流E的始终?
  单元试
  随着软g产品复杂度的增加Q越来越多的软g公司开始重视单元测试,意识到单元测试的重要性。单元测试在微Y开发流E中同样是非帔R要的一个环节。本专题结合微软的.NET技术,对单元测试的Ҏ(gu)和工兯行详l的介绍Q帮助?zhn)建立起单元测试的程?
  微YE序l理
  E序l理在微软品开发的“三架马R”中具有非帔R要的作用Q在软g行业Q只有微软设有该职位。在本专题中Q将概要阐述微YE序l理产生的原因、命,重点阐述应该具备什么样的优U品质Q以及程序经理的职业发展之\?
  撰写功能规格?
  功能规格书是微Y开发流E中又一独具特色的内宏V在整个开发过E中起到非常重要的作用,开发团队中每一个成员的工作都将以功能规gZ据。一份详而实用的功能规格书可以确保整个开发团队向着l一的目标努力,不会出现偏差?
  撰写设计规格?
  设计规格书是功能规格书到最l品实C间的桥梁Q它把电(sh)影剧本变成分镜头脚本Q把抽象的功能描q变成程序员的设计语a。本专题介l设计规g的写法,它与“概要设计”?#8220;详细设计”的区别和联系Q它到底要写到多详细Q是否要定义所有的cL口和伪代?#8230;。这些问题都在本专题中得到解答?
  q度跟踪与控?
  开发一个合理的、实施性强的进度表Qƈ对它q行有效的跟t和控制Q在目理中非帔R要。本专题介绍微Y制定q度表的步骤及方法,同时介绍了对q度表进行有效跟t和控制的基本技能?
  理需求与设计变更
  在Y件的~写q程中,变更是不可避免的。变更得开发团队成员之间的沟通难度增加,如果在变更之前没有做q很好的分析Q变更实现没有被记录Qƈ且没有向需要知道变更的人报告变化,那么目l就会生؜乱,l果是降低软g产品的质量,提高软g成本。本专题介绍变更理的关键概念和程Q同时分析了实现有效变更控制的关键,q将剖析微Y开中的变更理实例Q帮助?zhn)制订一个清楚的Q简单适用的变更规则,q且帮助(zhn)用好它,辑ֈ增进团队成员之间的了解,提高软g质量Q降低开发风险和成本的目的?
  软g开发中的项目管?
  客户的需求永q在改变Q项目可利用的资源永q不够,目的进度永q会延后Q这是项目管理永恒的话题。本主题从目理的专业知识体pd手,贯穿微Y目理的成功经验,与?zhn)共同探讨目理中永存的三个话题Qƈ分n微Y目理的十大成功法则以及科学高效的理Ҏ(gu)、管理技术和理工具?
  软g性能试
  使用压力工具1性能试。有效的性能试的最l目的是帮助产品提高性能Q让产品响应更快、容量更大、占用资源更。按照本专题所介绍?#8220;计划、准备、执行、分析、提?#8221;五步Ҏ(gu)Q能够让(zhn)在正确了解客户Ҏ(gu)能的需求的基础上,有目的的了解pȝ的性能问题、有的放矢的扑ֈ瓉、立竿见q提高性能?
  软g试自动化实?
  使用自动化测试工?自动化测试。本专题不谈具体工具Q而是与?zhn)分n微Y的心得体会,让?zhn)亲眼看到微Y产品l如何将自动化测试运用自如,让?zhn)了解自动化ƈ不神U,你马上就能够在自己项目中q用Q让(zhn)了解自动化试q不?#8220;银弹”Q帮助?zhn)消除?zhn)的领导和客户对自动化测试的不正的期望倹{本专题能帮助你更好的进行自动化试Q而不仅仅是一个工L(fng)实用者?
  用户界面设计
  优秀的Y件界面和|站设计L让用h觉到处处手。但我们也常能看C些缺乏设计的界面虽然堆满了控件却仍然不便使用Q一些效果华丽的|站好看却不实用。怎么让你的品的界面既美观大方又方便易用Q怎么让你的系l界面看上去更专业?本专题介l的用户界面设计的原则?zhn)一定要了解?
  易用性测?
  本专题将介绍微YҎ(gu)的易用性实验室和易用性测试,以及如何通过易用性测试(zhn)的产品更易学、易用,用户拿到产品不必看用h册就会用?
  团队~码制胜{略
  如果没有好的团队~码Ҏ(gu)Q一个程序员是龙Q一程序员是虫。微软是如何大量的优秀E序员组lv来,让个人的技能和团队合作l合hQ编写出可靠、易诅R高质量的代码?

]]>
软g的架构与模式之经典架构模式简?/title><link>http://www.shnenglu.com/flyinghare/archive/2010/01/05/104803.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Tue, 05 Jan 2010 02:46:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2010/01/05/104803.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/104803.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2010/01/05/104803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/104803.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/104803.html</trackback:ping><description><![CDATA[<p>转自Q?a >http://dev.yesky.com/387/2012387.shtml</a><br><br>  Ҏ(gu)<a class=bluekey target=_blank><font color=#204890>Linda</font></a> Rising的《Pattern Almanac》一书,已知的架构模式有七十多种。这是一个只多不的l计Q其中包括了很多通常认ؓ是设计模式的模式Q比如BridgeQFacadeQInterpreterQMediator{模式通常认ؓ是设计模式,但是在许多情况下Q也可以作ؓ架构模式出现Q因此也常常被当作架构模式?br><br>  <strong>Layers架构模式</strong><br><br>  ?a class=bluekey target=_blank><font color=#204890>攉</font></a>到用户对软g的要求之后,架构设计开始了。架构设计一个主要的目的Q就是把pȝ划分成ؓ很多"板块"。划分的方式通常有两U,一U是横向的划分,一U是U向划分?br><br>  横向划分系l按照商业目的划分。比如一?a class=bluekey target=_blank><font color=#204890>书店</font></a>的管理系l可以划分成货、销售?a class=bluekey target=_blank><font color=#204890>库存</font></a>理、员工管理等{?br><br>  U向划分则不同,它按?a class=bluekey target=_blank><font color=#204890>抽象</font></a>层次的高低,系l划分成"?Q或叫Layer。比如一个公司的内网理pȝ通常可以划分成ؓ下面的几个Layer:<br><br>  一、网,也就是用L(fng)面,负责昄数据、接受用戯入;<br><br>  二、领域层Q包括JavaBean或者COM对象?a class=bluekey target=_blank><font color=#204890>B2B</font></a>服务{,装了必要的商业<a class=bluekey target=_blank><font color=#204890>逻辑</font></a>Q负责根据商业逻辑军_昄什么数据、以及如何根据用戯入的数据q行计算Q?br><br>  三、数据库Q负责存储数据,按照查询要求提供所存储的数据?br><br>  四、操作系l层Q比如Windows NT或者Solaris{?br><br>  五、硬件层Q比如SUN E450服务器等<br><br>  有h把这ULayer叫做TierQ但是Tier多带?a class=bluekey target=_blank><font color=#204890>物理</font></a>含义Q不同的Tier往往位于不同的计机上,ql连接v来,而Layer是纯_w辑的概念,与物理划分无兟?<br><br>  Layers架构模式的好处是Q?br><br>  W一、Q何一层的变化都可以很好地局限于q一层,而不会媄响到其他各层?br><br>  W二、更Ҏ(gu)容纳新的技术和变化。Layers架构模式容许M一层变更所使用的技?br><br>  <strong>Fa?ade架构模式</strong><br><br>  外部与一个子pȝ的通讯必须通过一个统一的门面(FacadeQ对象进行,q就是Facade模式?br><br>  C的Y件系l都是比较复杂的Q设计模式的d是协助设计师处理复杂系l的设计?br><br>  设计师处理复杂系l的一个常见方法便是将?分而治?Q把一个系l划分ؓ几个较小的子pȝ。但是这样做了以后,设计师往往仍然会发C个子pȝ内仍然有太多的类型要处理。而用一个子pȝ的用端往往只关注一些特定的功能Q却要同时与子系l内部的许多对象打交道后才能辑ֈ目的Q请见下面的对象图?br><br> <table width="90%" align=center border=0> <tbody> <tr> <td> <div align=center><img src="http://image.tianjimedia.com/imagelist/05/06/a87695fj2vm9.gif" border=0><br>?、Facade架构模式的结构图?/div> </td> </tr> </tbody> </table> <br>  q就是一U不便,它得系l的逻辑变得不必要的复杂Q维护成本提高,复用率降低?br><br>  用一个范例说明,中国<a class=bluekey target=_blank><font color=#204890>大陆</font></a>?a class=bluekey target=_blank><font color=#204890>医院</font></a>便是一个子pȝQ按照部门职能,q个pȝ可以划分为挂受门诊、划仗化验、收银、取药等。看病的病h要与q些部门打交道,如同一个子pȝ的用端与一个子pȝ的各个类型打交道一P不是一件容易的事情?br><br>  首先病h必须先挂P然后门诊。如果医生要求化验,病h必须首先划h(hun)Q然后缴ƾ,才能到化验部门做化验。化验后Q再回到门诊室,误下面的对象图?br><br> <table width="90%" align=center border=0> <tbody> <tr> <td> <div align=center><img src="http://image.tianjimedia.com/imagelist/05/06/ho315ggk8hk0.jpg" border=0><br>?、描q病人在医院里的体验。图中的Ҏ(gu)代表医院?</div> </td> </tr> </tbody> </table> <br>  解决q种不便的方法便是引qFacade模式。仍焉过医院的范例说明,可以讄一个接待员的位|,由接待员负责代ؓ挂号、划仗缴贏V取药等。这个接待员是Facade模式的体玎ͼ病h只接触接待员Q由接待员负责与医院的各个部门打交道Q请见下面的对象图?br><br> <table width="90%" align=center border=0> <tbody> <tr> <td> <div align=center><img src="http://image.tianjimedia.com/imagelist/05/06/631z3q347q41.jpg" border=0><br>?、描q经qFacade模式?a class=bluekey target=_blank><font color=#204890>改装</font></a>后,病h在医院里的体验。图中的Ҏ(gu)代表医院?/div> </td> </tr> </tbody> </table> <br>  Facade模式要求一个子pȝ的外部与其内部的通讯必须通过一个统一的门面(FacadeQ对象进行。Facade模式提供一?a class=bluekey target=_blank><font color=#204890>高等</font></a>U的接口Q得子pȝ更易于用?br><br>  使用了Facade模式之后Q本章的W一个图中所描述的一个子pȝ的用端对象所面对的复杂关pd可以化ؓ下面q个样子?<br><br> <table width="90%" align=center border=0> <tbody> <tr> <td> <div align=center><img src="http://image.tianjimedia.com/imagelist/05/06/4j1k41qbnf7h.gif" border=0><br>?、Facade架构模式的结构图</div> </td> </tr> </tbody> </table> <br>  描述l过Facade模式的改装后Q一个子pȝ的用端与子pȝ的关pR图中的大方框代表一个子pȝ?br><br>  如同医院的接待员一PFacade模式的门面类型将使用端与子系l的内部复杂性分隔开Q得用端只需要与门面对象打交道,而不需要与子系l内部的很多对象打交道?br><br>  <strong>Mediator架构模式</strong><br><br>  Mediator模式包装了一pd对象怺作用的方式,使得q些对象不必互相明显参照Q从而它们可以较松散地耦合。当q些对象中的某些对象之间的相互作用发生改变时Q不会立卛_响到其它的一些对象之间的怺作用Q从而可以保证这些相互作用可以彼此独立地变化?<br><br>  在下面的C意图中有大量的对象Q这些对象既会媄响别的对象,又会被别的对象所影响Q因此常常叫做同事(ColleagueQ对象。这些同事对象通过彼此的相互作用Ş成系l的行ؓ。从图中可以看出Q几乎每一个对象都需要与其它的对象发生相互作用,而这U相互作用表Cؓ一个对象与另一个对象的直接耦合?br><br> <table width="90%" align=center border=0> <tbody> <tr> <td> <div align=center><img src="http://image.tianjimedia.com/imagelist/05/06/u3xb76t989n9.gif" border=0><br>?、这是一个过度耦合的系l?/div> </td> </tr> </tbody> </table> <br>  通过引入调停者对象(MediatorQ,可以系l的|状l构变成以中介者ؓ中心的星形结构,如下图所C。在q个星Şl构中,同事对象不再通过直接的联pM另一个对象发生相互作用;相反圎ͼ它通过调停者对象与另一个对象发生相互作用。调停者对象的存在保证了对象结构上的稳定,也就是说Q系l的l构不会因ؓ新对象的引入造成大量的修改工作?<br><br> <table width="90%" align=center border=0> <tbody> <tr> <td> <div align=center><img src="http://image.tianjimedia.com/imagelist/05/06/ty1x3qa272mo.gif" border=0><br>?、这是一个用了Mediator架构模式之后的结构图</div> </td> </tr> </tbody> </table> <br>  比较传统的设计方法,面向对象的技术可以更好地协助设计师管理更为复杂的pȝ。一个好的面向对象的设计可以使对象之间增加协作性(CollaborationQ,减少耦合度(<a class=bluekey target=_blank><font color=#204890>Coupling</font></a>Q。一个深思熟虑的设计会把一个系l分解ؓ一相互协作的同事对象Q然后给每一个同事对象以独特的责任,恰当的配|它们之间的协作关系Q它们可以在一起工作?br><br>  在Mediator模式中,所有的成员对象都可以协调工作,但是又不直接怺理。这些对象都与一个处于中心地位的调停者对象发生紧密的关系Q由q个调停者对象进行协调工作。这个协调者对象叫做调停者(MediatorQ,而调停者所协调的成员对象称做同事(ColleagueQ对象?br><br>  <a class=bluekey target=_blank><font color=#204890>在C</font></a>olleague对象内部发生的事件会影响到所有的同事Q但是这U媄响不是以直接理的方式直接传到其它的对象上的。记住在组的成员增加时Q这L(fng)怺作用关系是以比指数更快的方式增加的。相反,q种影响仅仅直接影响到调停者对象,而调停者对象反q来会协调其它的同事QŞ成整个系l的行ؓ?br><br>  如果组的成员增加时Q调停者对象可能会面(f)修改Q而其它的同事则可以装做不知道q个新的成员一P不必修改。反q来Q如果小l的成员之一被从pȝ中删除的话,调停者对象需要对此做Z改,而小l中其它的同事则不必改动?br><br>  <strong>Interpreter架构模式</strong><br><br>  l定一个语a之后QInterpreter模式可以定义出其文法的一U表C,q同时提供一个直译器Q用端可以使用q个直译器来解释q个语言中的句子?br><br>  如果某一cd问题一再地发生的话Q那么一个有意义的做法就是将此类型问题的各个实例表达Z个简单语a中的语句。这样就可以建造一个直译器Q通过解释q些语句辑ֈ解决问题的目的?br><br>  例如Q依照一个匹配模式搜dW串便是一个常见的问题。与其ؓ每一个匹配模式徏造一个特定的法Q不如徏造一个一般性的法处理各种常规表达式。当接到一个指定的常规表达式时Q系l用一个直译器解释q个常规表达式,从而对字符串进行匹配?br><br>  再比?a class=bluekey target=_blank><font color=#204890>VBA</font></a>QVisual <a class=bluekey target=_blank><font color=#204890>Basic</font></a> for ApplicationsQ就不仅仅出现在微Y的Officepd软g中,q且可以供第?a class=bluekey target=_blank><font color=#204890>厂家</font></a>Z的Y件嵌入用;Crystal <a class=bluekey target=_blank><font color=#204890>Reports</font></a>报表生成软g也包括了一个便于用的宏语aQ用户可以执行较ؓ复杂的命令操作。一般而言Q将VBA或者其它的语言软g嵌入到自q<a class=bluekey target=_blank><font color=#204890>软g产品</font></a>中,可以使品定制化QCustomizationQ能力大大增强,但是q些宏语a引擎往往都很昂贵?br><br>  现在要介l的Interpreter模式描q怎样在有了一个简单的文法后,使用模式设计解释q些语句。熟(zhn)了q个模式以后Q一个没有接收过形式语言和编译器的正规训l的设计师也可以自行设计一个简单的直译器,以便Z用端提供一个简单语aQ或者在pȝ内部使用一个简单语a描述一个合适的问题?br><br>  <strong>语言、直译器和剖析器</strong><br><br>  Interpreter模式只描q直译器是怎样工作的,q不指明怎样在执行时创徏新的直译器。虽然广义地讲直译器不一定要有一个剖析器QParserQ,但是使用剖析器仍然是最常见的徏立直译器的办法。一个剖析器可以从一个档或命令行d文字性命令,q创建直译器?br>剖析器是一U能够识别文字ƈ文字按照一定规则进行分解以便进一步处理的对象。剖析器能够识别的字W串叫做语言。通常建立的小型计机语言是与环境无关的语aQ也是遵@一定的文法的文字模式,所谓文法,便是军_怎样语a的元素组合v来的规则的集合。剖析器便是Ҏ(gu)l合规则字W串分解的?br><br>  抽象地讲Q语aq不一定是以字W串的Ş式表辄。在Interpreter模式里面所提到的语a是指M直译器对象能够解释的Ml合。在Interpreter模式中,需要定义一个代表文法的命ocd的等U结构,也就是一pd的组合规则;每一个命令对象都有一个解释方法,代表对命令对象的解释?br><br>  命o对象的等U结构中的对象的M排列l合都是一个语aQ而剖析器的工作便是将一个文字性语a译成ؓ{效的直译器语言。因此,直译器往往需要剖析器?br><br>  <strong>认识Jack?/strong>Q?br><br>  剖析器生成器QParser GeneratorQ,常常UCؓ~译器的~译器(Compiler ComplierQ。Sun Microsystem提供一个专为JavaE序员发明的强大的剖析器生成器,最初叫做JackQ后来改名ؓJavaCC?br><br>  要用JavaCCQ必M用它提供的脚本语a<a class=bluekey target=_blank><font color=#204890>~写</font></a>一个脚本,然后执行JavaCC生成Java源代码。这生成的源代码是所需的剖析器。现在Sun已经不再负责JavaCC的研发,对JavaCC感兴的读者可以从http://www.experimentalstuff.com/Technologies/JavaCC得到免费的JavaCC和相x据?br><br>  JavaCC最早命名ؓJack是ؓ了与一个早广泛用的剖析器生成器YACC谐音。如果读者已l熟(zhn)了YACCQ可以用YACC辑ֈ同样的目的;只是相比之下JavaCC更容易得到JavaE序员的喜爱?br><!--文章底部广告开?-><br></p> <img src ="http://www.shnenglu.com/flyinghare/aggbug/104803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2010-01-05 10:46 <a href="http://www.shnenglu.com/flyinghare/archive/2010/01/05/104803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TFS中撤消别的用户对某个文g的锁?/title><link>http://www.shnenglu.com/flyinghare/archive/2009/09/27/97333.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Sun, 27 Sep 2009 01:21:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2009/09/27/97333.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/97333.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2009/09/27/97333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/97333.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/97333.html</trackback:ping><description><![CDATA[转自Q?a >http://www.cnblogs.com/longjxchina/archive/2009/02/13/1389681.html</a><br><br> <p style="MARGIN: 12pt 0cm 3pt"><strong><span style="FONT-FAMILY: 'Calibri','sans-serif'">Q{载说明:Ҏ(gu)本机试情况Q对原文E加改动Q?/span></strong></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 7.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left> <span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">惌?/span><span style="COLOR: black; FONT-SIZE: 10pt">TFS</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">中撤消别的用户对某个文g的锁定,首先需要用此用户在本地获得一个工作区</span><span style="COLOR: black; FONT-SIZE: 10pt">(WorkSpace)</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">Qƈ且获取需要解锁定的文件的最新版本。然后执行以下步骤:</span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 7.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left> <span style="COLOR: black; FONT-SIZE: 10pt">1</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">、打开命oH口Q?#8220;开?#8221;</span><span style="COLOR: black; FONT-SIZE: 10pt">-></span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">“</span><span style="COLOR: black; FONT-SIZE: 10pt">CMD</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">”</span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 7.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left> <span style="COLOR: black; FONT-SIZE: 10pt">2</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">、定位到</span><span style="COLOR: black; FONT-SIZE: 10pt">Visual Studio</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">的安装文件夹Q?/span><span style="COLOR: black; FONT-SIZE: 10pt">cd %LocalDisk%"Program Files"Microsoft Visual Studio 8"Common7"IDE"</span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 7.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left> <span style="COLOR: black; FONT-SIZE: 10pt">3</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">、输入如下命令:</span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 34.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left><span style="COLOR: black; FONT-SIZE: 10pt">Tf workspaces /owner:</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">所有者或</span><span style="COLOR: black; FONT-SIZE: 10pt">* /server:</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">服务器名U或</span><span style="COLOR: black; FONT-SIZE: 10pt">IP</span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 34.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">通过此命令来昄此用L(fng)多个工作区,如下图所C:<span style="FONT-FAMILY: 'Verdana','sans-serif'; COLOR: black; FONT-SIZE: 11.5pt; mso-fareast-font-family: 宋体; mso-bidi-font-family: 宋体; mso-no-proof: yes; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US><v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype></span></span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 7.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 34.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 7.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left><span style="COLOR: black; FONT-SIZE: 10pt"><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/flyinghare/200909270001.png" width=688 height=152><br>            注意Q以上命令在 TFS2008 下测试成功;<span style="COLOR: #ff0000"><strong style="FONT-SIZE: 14pt">?TFS2010 下,server 参数貌似需要加完整路径</strong></span>Q例如: <br>                         /source:http://source:8080/tfs/source<br>            <span style="COLOR: #ff0000">怎样查看 TFS 完整路径</span>Q在团队资源理器中Q选中服务器根节点Q查看属性窗口中?URL 属性?br></span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 7.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left><span style="COLOR: black; FONT-SIZE: 10pt">4</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">、输入命令撤消文仉定:</span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 34.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left><span style="COLOR: black; FONT-SIZE: 10pt">Tf undo /workspace:</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">工作区名U?/span><span style="COLOR: black; FONT-SIZE: 10pt">;</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">所有?/span><span style="COLOR: black; FONT-SIZE: 10pt"> /server:</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">服务器名U或</span><span style="COLOR: black; FONT-SIZE: 10pt">IP </span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">被锁定文件在TFS服务器的路径<br>     </span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">通过此命令就可以把被锁定的文仉l撤消,不过要注意的是:如果完成q些操作是在客户端机器上的话Q命令会l出没有权限警告q要求输入服务器的管理员帐户和密码。只有输入正的帐户和密码后才可以正常的撤消锁定Q如下图所C:</span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 7.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 34.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt"><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/flyinghare/200909270002.png" width=674 height=110></span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 34.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">虽然上图昄的是“没有要撤消的挂v更改Q但是更改仍然是正常的运行了Q只要你h一?/span><span style="COLOR: black; FONT-SIZE: 10pt">TFS</span><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt">界面可以看到效果,q且也可以正常对此文件进行签出和~辑?/span></p> <p style="LINE-HEIGHT: 18.4pt; TEXT-INDENT: 24pt; MARGIN: 0cm 0cm 0pt 34.45pt; BACKGROUND: white; WORD-BREAK: break-all" align=left><span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10pt"><br></span></p> 其他相关文章Qhttp://cleocn.appspot.com/?p=85033 <img src ="http://www.shnenglu.com/flyinghare/aggbug/97333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2009-09-27 09:21 <a href="http://www.shnenglu.com/flyinghare/archive/2009/09/27/97333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Google code + SVNq行多h开?/title><link>http://www.shnenglu.com/flyinghare/archive/2009/09/20/96786.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Sun, 20 Sep 2009 10:04:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2009/09/20/96786.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/96786.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2009/09/20/96786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/96786.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/96786.html</trackback:ping><description><![CDATA[<p>转自Q?a >http://blog.csdn.net/cc_net/archive/2009/08/16/4452890.aspx</a><br><br>说到源码理QCVS,VSS,SVN,TFS大家在公司可能都用的比较多了。但是在公司的环境基本都是在局域网中或者是专线q结到远E服务器来用。^时自己在家和朋友一些写一些代码的时候都苦于没有代码理工具Q没有网l环境,而不能不把代码传来传去,很是ȝ。不qGoogle code提供了免费的SVNI间Q主要注册了GMAILQ然后就可以使用SVNq行源码理Q和其他人共同开发了?/p> <p>|上有介l的Q不q我看了都不怎么详细Q自己摸索了下,写下来大家分享下?/p> <p>一 讉KGoogle code<br>Google code的地址?<a >http://code.google.com/</a>  Q如果用cn去访问好像访问不了,我这里是一片空白。管理项目的话可以直接?a >http://code.google.com/hosting/</a> 地址讉K。用Gmaildq去Q页面的中间有【Create a new project 】,点击以后可以创建项目了?/p> <p> <img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/flyinghare/2009-08-16_15-02-39.jpg" width=752 height=768></p> <p>?创徏自己的项?br>在创建项目的面Q填写项目名Q概要和描述Q其中项目名开头要写Q还不能有空格和其他W号。然后就是选择版本理pȝQ证书等{,q些我也不懂Q随侉K吧Q反正这有选好了,【Create Project】才可用。这里要注意的是目名字可能冲突。如果创建成功就可以q入目理界面</p> <p> <img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/flyinghare/2009-08-16_15-08-59.jpg" width=926 height=618></p> <p>?目理<br>目理中,上方的菜单【Project Home】可以看到项目的概述和描q。点凅RSource】就可以q行源码的管理。其中有2个地址Q一个是Https开头的Q一个是http的,https开头的是带加密的,所以如果要commit新的代码的时候就需要用这个地址。而如果仅仅是取得代码可以只用http开头的地址?/p> <p>使用https的地址的时候需要提供用户名和密码,q里的用户名是Gmail的用户名Q而密码是Googlel每个项目生成的Q而非是Gmail的密码。点凅RWhen prompted, enter your generated googlecode.com password 】后面的蓝色q接可以看到密码。这个密码是你所有项目的密码Q而不是每个项目一个密码?/p> <p> <img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/flyinghare/2009-08-16_15-13-36.jpg" width=963 height=564><br>?用户理<br>目建立好以后就可以把其他h加入到项目中Q这样就可以共同开发了。首先点M方的【Administer】,然后炏VProject members】,在下面填入要加入的用户Gmail可以了。有Project ownersQProject committersQProject contributors。具体解释右侧都有。点M存后Q其他用L(fng)录后Q在右上方的【My Favorite】下可以看到自己加入的目了。然后按三中介绍的方法找到密码?/p> <p>?其他理<br>Google Codeq提供了wiki{功能,我没用上Q所以不是太了解?/p> <p>?安装客户端和VS插g<br>上面的工作做好后是上传源码和文档。但是我找了半天也不知道怎么上传。以为是直接|页上上传,原来也要安装SVN客户端。在q里</p> <p><a >http://tortoisesvn.net/downloads</a>  可以下蝲到最新的TortoiseSVNQ这个应该是目前用的最多的SVN客户端Y件了。E文不好的朋友上面q提供了中文语言包?/p> <p>安装完客L(fng)后需要重启电(sh)脑,然后可以远E连接到SVN服务器了。其中URL填写Google 提供的哪个https的URL地址Q然后填写用户名QGmailQ和密码Q项目密码)Q保存后O(jin)K了。客L(fng)可以支持q接多个URLQ每ơ启动的时候可以选择要连接到那一个?/p> <p> </p> <p> </p> <p>支持SVN的VS插g我用的是AnkhSvnQ?a >http://ankhsvn.open.collab.net/servlets/ProjectDocumentList?folderID=198</a> q里可以下蝲到最新版本。目前可以支持到VS2010Q之前用老版本对VS2008支持不好Q文件状态不对,而且不能提交Q换到最新版的时候就好了。安装的时候配|VS要比较长旉Q不要以为是L了?/p> <p>如果只安装AnkhSvn而不安装TortoiseSVN也是可以的,不过你在VS中会发现Q操作的功能了很多Q比如分支,合ƈ{等?/p> <p> </p> <p>?使用VSq行开发和源码理<br>q入到VS中,打开【工兗?-【选项?-【Source Control】,默认应该是已l配|好了ؓAnkhSvn。然后可以点凅R文件?【Subvwrsion】打开服务器上的源码。和其他工具一P要选择一个本地\径来保存?/p> <p> </p> <p>1Q文件状态介l?/p> <p>蓝色勾QCheck out状态;色勾Q文件被修改状态;色方块:文g修改被保存;加号Q新d文g?/p> <p>2QSNV版本控制</p> <p>和VSS不同的时QVSS默认是锁住的状态,需要手动Check OutQ而SVN是自动Check Out。那么这样不是会有冲H吗Q其实这个和VSS允许多h牵出是一L(fng)。在你Commit的时候,会检查版本,会自动合q或提示冲突或是版本q期{等?/p> <p> </p> <p>获取最C码:q个不用说了是从服务器上拿最C码,但是如果你修改了文gQ然后拉最C码,q个时候系l会自动吧你修改的不部分和最C码进行合qӞ如果有冲H会提示Q要修修改冲H?/p> <p>获取指定版本代码Q这个可以通过查看历史Q或者指定版本号来拉L定版本的代码。这是同样会合ƈ代码。需要注意的是,SVN的版本号和VSS不同Q是全局版本P而不是每个文件有一个版本号。这个要特别注意Q因Z会发C个文件版本号可能是蟩跃的?/p> <p>SwitchQ有q样一个功能,可以把当前版本切换ؓ制定的版本,和获取指定版本不同,他也会自动合q不同的地方?/p> <p>RevertQ恢复功能,恢复C改前的状态。这个要注意的是Q如果你Ҏ(gu)件修改,然后获取了最C码,然后恢复Q这个时候是恢复到最新版本,而不是修改前的那个版本。这点要注意</p> <p>版本冲突Q这里版本冲H有2U情况,</p> <p>如果你当前版本ؓ1Q服务器版本?Q你修改或提交,服务器会提示你本地版本过期了Q你可以拉最C码,q解军_H后再次提交Q?/p> <p>如果你当前版本ؓ2Q服务器版本?Q而你从服务器获取版本1的代码,修改后,然后提交Q这个时候是不会提示版本q期的,会覆盖掉服务器上的版?Q而成为版?。这h会冲掉代码的?/p> <p>锁:SVN提供了锁的功能,和VSS的单用户Check out是一L(fng)Q不能同时修攏V但是目前Google Svn不提供锁的功能,所以没有办法用了?/p> <p>?SVN资料<br>以前没有使用qSVN的源码管理,所以有些地Ҏ(gu)觉不一栗关于SVN的版本控制的Ҏ(gu)和SVN介绍可以参考一下网?/p> <p><a >http://www.subversion.org.cn/svnbook/1.4/svn.basic.vsn-models.html</a> </p> <p> </p> <p>本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/cc_net/archive/2009/08/16/4452890.aspx</a></p> <img src ="http://www.shnenglu.com/flyinghare/aggbug/96786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2009-09-20 18:04 <a href="http://www.shnenglu.com/flyinghare/archive/2009/09/20/96786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>免费 SVN 服务器收?/title><link>http://www.shnenglu.com/flyinghare/archive/2009/08/19/93773.html</link><dc:creator>会飞的兔?/dc:creator><author>会飞的兔?/author><pubDate>Wed, 19 Aug 2009 01:52:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghare/archive/2009/08/19/93773.html</guid><wfw:comment>http://www.shnenglu.com/flyinghare/comments/93773.html</wfw:comment><comments>http://www.shnenglu.com/flyinghare/archive/2009/08/19/93773.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghare/comments/commentRss/93773.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghare/services/trackbacks/93773.html</trackback:ping><description><![CDATA[ 国内Q?br>http://www.coollittlethings.com/ <br>只需要注册即可用,速度很快Q用httpq行传输Q无web理功能?br><br>国外Q?br>http://code.google.com/hosting/<br>google提供的,速度比较快,甌卛_使用Q用httpsq行传输Q安全性,可靠性高Q带有web理功能?br><br>http://developer.novell.com/wiki/index.php/Project_Hosting<br>novell公司提供Q申请后需要审核,速度较快Q用httpsq行传输Q安全性,可靠性高Q带有web理功能?br><br> <p>OpenSVN - 台湾的服务器<br><a ><u><font color=#0066cc>https://opensvn.csie.org/</font></u></a><br>支持http https 协议 允许个h目使用 其他不详...详细说明参见<a ><u><font color=#0066cc>http://wiki.ptt.cc/-OpenSVNFAQ</font></u></a></p> <p>SVN源代码托服务器 - 上v?sh)信服务?a ><br><u><font color=#0066cc>http://www.svnhost.cn/</font></u></a><br>支持svn协议....允许建立一个个人项目的源码?..Open Sourse 不限!<br>速度相当可以.只不q公司外|防火墙BT...无法响应...所以没用这个了!</p> <a ><font color=#1a8bc8><br><font color=#000000>提供免费的Subversion服务器申?/font><br>http://www.javaforge.com</font></a> Q对于公司来说也许没什么很大的用处Q但对网上朋友小型的团队开发,而又没有自已的版本控制服务器的朋友来说还是挺有用的?br><br>而另外的是ȝ请SVN Hosting了,q里有一个SVN Hosting 值得考虑Q?br>[ <strong><a target=_blank><font color=#864f0e>http://svn.coollittlethings.com/</font></a></strong> ]Q或许能l正在ؓ天天办公室和安同步代码的h烦恼人用上!<br><br><a >http://code.svnspot.com/</a><br> <img src ="http://www.shnenglu.com/flyinghare/aggbug/93773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghare/" target="_blank">会飞的兔?/a> 2009-08-19 09:52 <a href="http://www.shnenglu.com/flyinghare/archive/2009/08/19/93773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.peopleim.cn" target="_blank">þþþþþ</a>| <a href="http://www.designelite.com.cn" target="_blank">ھƷþþþӰԺ˾</a>| <a href="http://www.jianzhuhr.net.cn" target="_blank">ŷ龫Ʒþþþþ</a>| <a href="http://www.qwkhd.cn" target="_blank">þþŷղ</a>| <a href="http://www.lihd.cn" target="_blank">㽶99þùۺϾƷլ</a>| <a href="http://www.brill-sh.com.cn" target="_blank">99ƷþþƷһ</a>| <a href="http://www.ffcchh.com.cn" target="_blank">㽶þۺӰ</a>| <a href="http://www.chemzt.cn" target="_blank">޹ۺϾþ</a>| <a href="http://www.vyty.cn" target="_blank">þòӰ</a>| <a href="http://www.650qq.cn" target="_blank">պƷþþþþ</a>| <a href="http://www.k7yg835v.cn" target="_blank">99þ뾫Ʒϵ</a>| <a href="http://www.yushiji505.cn" target="_blank">ɫ͵͵þһ</a>| <a href="http://www.168sf.com.cn" target="_blank">˾þô߽ۺͼƬ</a>| <a href="http://www.plkqry429.cn" target="_blank">ŷһþþ</a>| <a href="http://www.gay2000.cn" target="_blank">ŵþ</a>| <a href="http://www.qtvc.cn" target="_blank">ҹƷþþþþþ</a>| <a href="http://www.yeziseo.cn" target="_blank">ĻþþƷ</a>| <a href="http://www.classicastle.cn" target="_blank">þþƷѴƬƬ</a>| <a href="http://www.yundali.cn" target="_blank">þþžžþƷֱ</a>| <a href="http://www.fayongshicai.cn" target="_blank">ھƷþþþþþɬ</a>| <a href="http://www.g33e.cn" target="_blank">ھƷþþþþ鶹</a>| <a href="http://www.omaw.cn" target="_blank">þûɫƵ</a>| <a href="http://www.su117q.cn" target="_blank">ݹ97þ÷ѹۿ</a>| <a href="http://www.tkfh.net.cn" target="_blank">޹˾þһҳ</a>| <a href="http://www.287853x.cn" target="_blank">޹һɾþþƷۺ</a>| <a href="http://www.hnhanzhi.com.cn" target="_blank">þþþþùƷŮ</a>| <a href="http://www.puhb.cn" target="_blank">þĻƷһ</a>| <a href="http://www.soumee.com.cn" target="_blank">ֻƬþøպ</a>| <a href="http://www.ojl4q.cn" target="_blank">þAV</a>| <a href="http://www.7-go.cn" target="_blank">޾Ʒ׽þþþþ </a>| <a href="http://www.omsf.cn" target="_blank">ɫۺϾþþþһ </a>| <a href="http://www.shuangfengjixie.com.cn" target="_blank">þۺ϶㼤þ</a>| <a href="http://www.buniss.cn" target="_blank">޹Ʒþþþ </a>| <a href="http://www.ssc860.cn" target="_blank">wwwþ</a>| <a href="http://www.jsshunfu.com.cn" target="_blank">þùƷһ</a>| <a href="http://www.effusion.net.cn" target="_blank">þҹ³˿Ƭϼ</a>| <a href="http://www.bbs0310.cn" target="_blank">˺ݺۺϾþ88</a>| <a href="http://www.sic-mosi2.cn" target="_blank">97þóƷɰ</a>| <a href="http://www.bassaphoto.cn" target="_blank">99þþƷëƬ</a>| <a href="http://www.wubaili.com.cn" target="_blank">߾þþƷĹ</a>| <a href="http://www.gm53.cn" target="_blank">þþƷ˘AV</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>