??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲成AV人综合在线观看,亚洲国产精品日韩专区AV,99久久亚洲综合精品成人网http://www.tkk7.com/BlueDavy/category/1367.html不懂理论只懂实战的粗人?/description>zh-cnWed, 24 Oct 2007 09:39:50 GMTWed, 24 Oct 2007 09:39:50 GMT60敏捷实践场景探讨http://www.tkk7.com/BlueDavy/archive/2007/10/24/155517.htmlBlueDavyBlueDavyWed, 24 Oct 2007 03:01:00 GMThttp://www.tkk7.com/BlueDavy/archive/2007/10/24/155517.htmlhttp://www.tkk7.com/BlueDavy/comments/155517.htmlhttp://www.tkk7.com/BlueDavy/archive/2007/10/24/155517.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/155517.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/155517.html1、从开发环境到正式环境的部|?校验非常ȝQ?
2、数据库的频J移?校验非常ȝ?
我的解决Ҏ(gu)Q?
对于上面两个问题Q我自己惛_的解x法是Q?
1、徏立持l集成机Ӟ~写环境部v脚本和文档,采用q两U方法可保证从开发环境到正式环境的部|是非常单的Q?
~写自动验收试脚本Q可以基于Seleniumq行~写Q这hơ在升版本的时候就不需要再人工的进行回归测试了Q这里面的问题是如何在测试完毕完毕后清除q些试数据Q因些测试数据是不能和正式数据共存的?
2、徏立数据库升UL机制Q每ơ升U时做增量的升Q不q这需要徏立在对原库徏立版本记录,q个Ҏ(gu)对于我们的项目而言不太可行Q?
W二U方案就只能每次q行全面的重新移植了Q但q个带来的一个巨大问题就是存储过E的重复修改Q目前我q没惛_什么解x法,而且Q?
至于如何校验数据库移植是否成功,我觉得可以徏立数据库UL校验的CheckpointQ除了保证数据库l构、数据量{的  阅读全文

BlueDavy 2007-10-24 11:01 发表评论
]]>
由PHP CMS看Java业界http://www.tkk7.com/BlueDavy/archive/2006/05/25/48183.htmlBlueDavyBlueDavyThu, 25 May 2006 13:06:00 GMThttp://www.tkk7.com/BlueDavy/archive/2006/05/25/48183.htmlhttp://www.tkk7.com/BlueDavy/comments/48183.htmlhttp://www.tkk7.com/BlueDavy/archive/2006/05/25/48183.html#Feedback23http://www.tkk7.com/BlueDavy/comments/commentRss/48183.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/48183.html最q用了下在php业界中非常出名的wordpress和mamboQ用下来的感觉是q两个东西易用性真的太好了Q功能方面同样非常的强大Q实在想不出java界的CMS哪个能和它们q行Ҏ(gu)的,引发自己的一些思考,java界的技术h员特别容易以技术观点去评h(hun)一个东西的好坏Q觉得这是Z么java界的论坛、CMSq种东西L无法和其他语a体系的相比的原因Qƈ不是说java界就真的做不mamboq样易用的CMS?br />java界开源的气氛非常好,好处是促进了整个业界的技术的发展Q得java业界的很多技术思想成ؓ(f)整个软g界的领先思想Q弊端就是导致了java界的人员Ҏ(gu)陷入技术的盲目q求中,很多时候都q了需求,q了一套系l真正所需要的东西Q这不能不说是java界的(zhn)哀Q以java界的技术积累,要做出易用的论坛、CMSq不?x)比其他语言体系难,也不一定就?x)慢多少Q就象我一直认为的一个熟l的webwork+spring+hibernate的开发h员开发模块的速度必将快过用php、asp.net做开发的人员Q但Z么java界在q种cd的系l给人的感觉L开发效率远低于其他的语a体系呢,q是值得我们L考的?br />以响应速度来讲Q我觉得发展C天的javapȝ速度早就已经不比其他语言体系的慢Q应该是快于其他语言体系的系l?br />当然Q不可否认,java语言最大的优势仍然是在企业U的应用上,也许q是一个java界不屑于做CMS、论坛这样东西的理由Q但xQ这理由真的够充分吗Q?
java语言的优势到底在哪?我觉得目前来说java最大的优势仍然是它良好的开源氛_(d)而这个氛围能够保证java在技术领域一直保持业界的领先CQ但软g是面向服务的Q这个思想大家都接受的Q^_^Q不能L想着从技术上降低开发的隑ֺQ而忽略对于用戯(g)言很重要的易用性这点,易用性其实很多时候除了交互还体现在功能上Q这些功能往往是需要有_的经验积累才能Ş成出来的Q而java界的pȝ往往是看h功能强大Q而那些功能其实很多未必是用户所惌的,再加上功能强大往往带来的另外一个弊端就是系l过于灵z,没法用,如何领先的优势转化为真实的东西才是最为关键的....

"做到以用h待的操作方式的系l才是好pȝ"Q呵呵,H然觉得引导用户交互?fn)惯的系l才是真正有潜力的系l,^_^Q让用户L了习(fn)惯的pȝ是一U很可怕的pȝQ典型的莫过于windows、office




BlueDavy 2006-05-25 21:06 发表评论
]]>
面试杂谈http://www.tkk7.com/BlueDavy/archive/2006/05/18/46927.htmlBlueDavyBlueDavyThu, 18 May 2006 15:57:00 GMThttp://www.tkk7.com/BlueDavy/archive/2006/05/18/46927.htmlhttp://www.tkk7.com/BlueDavy/comments/46927.htmlhttp://www.tkk7.com/BlueDavy/archive/2006/05/18/46927.html#Feedback5http://www.tkk7.com/BlueDavy/comments/commentRss/46927.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/46927.html之前公司招高E,估计面试了不?0个hQ觉得面试别人其实也是一U乐,和各U不同的天会(x)让自׃学到很多Q而且׃q是面试阶段Q会(x)更容易进行没有隔阂的技术交,每次面试其实我都觉得是一ơ很好的技术交机?x),所以我很乐意面试,同时我也希望被我面试的h能够享受着q种感觉.....
每次面试的时候我都是按照Ҏ(gu)的简历来问问题,而不是固定的问某些问题,一般来讲是对方熟(zhn)的技术进行一些了解,q会(x)提出一些问题试着让对方用他熟(zhn)的技术去了解Q问完这些后?x)稍微问些涉及(qing)的周边技术,每次面试我都力营造不让对Ҏ(gu)觉紧张的气氛Q要让对方觉得这是ơ普通的技术交而已Q没什么的Q而且我向来认为面试的时候面试官不是Zd面试者比较什么,也不是ؓ(f)了显C己在某些斚w多么强,而是应该量的去挖掘面试者的能力Q让面试者能够在短暂的面试时间内展示自己的能?...
面试了这么多人,我觉得在作ؓ(f)面试者,在面试的时候切忌的是紧张Q另外就是在自己不懂的方面随便瞎扯,另外是要尽量的展示自己熟?zhn)的领域,通常来讲面试官也不会(x)要求你什么都?...
^_^Q当?dng)我知道,大公叔R试通常都不是这P大公司更在乎面试者的基础知识的扎实程度,而作Z些以目Z的中公司,我觉得更看重的是面试者的实战能力Q另外,作ؓ(f)从业软g行业的h来说Q我觉得对于技术的敏感能力、对于行业业务的理解能力、上q心、团队合作能力以?qing)责d都是我很看重的,管q些在面试的时候我q不能很好的d断,不过也在不断的学?fn)如何去判断Q^_^Q现在会(x)采取一些场景式的试探方?..



BlueDavy 2006-05-18 23:57 发表评论
]]>
业务的理解以?qing){化ؓ(f)?sh)脑化操作的能?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/05/16/46402.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 16 May 2006 06:48:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/05/16/46402.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/46402.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/05/16/46402.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/46402.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/46402.html</trackback:ping><description><![CDATA[ <p>以前的自׃直认为做技术化性质的框架、品是自己的职业发展之路,逐渐的慢慢而改变,发现以前的自己很陷入技术,不断的追求技术,而忽略了软g的本质,软g的本质是Z提高在某U工作上的效率,其实是让业务能够更高效的完成,而要做到q一点,依赖的重点ƈ不是技术,而是对业务的理解以及(qing)业务{化ؓ(f)?sh)脑化操作的能力Q而这Ҏ(gu)非技术能解决的,在业界可以看到很多公司,象浪潮,它在烟草行业的成功让人叹服,从技术h员的角度ȝ它的pȝ可能?x)觉得不q尔?dng),技术h员往往?x)认p做出一套这L(fng)pȝ来不q是菜而已Q但事实是如果让你现在进入烟草行业,也许你做出来的系l从技术上是超了潮Q但从业务的理解上以?qing){化ؓ(f)?sh)脑化操作的能力上能越潮吗?q个不是一两年的业务积累就够的Q^_^Q从现在国内的Y件业界的情况来看Q我觉得大部分技术h员的最?jng)_展方式还是深入理解业务,q才是自q优势Q同时掌握将业务转化为技术的能力Q这L(fng)技术h员必是强势的,q样做出来的东西才是有够的竞争力的QY件是面向服务的,^_^Q不要忘Cq一本质?br />技术只是一U辅助而已Q切勿反客ؓ(f)?......</p> <img src ="http://www.tkk7.com/BlueDavy/aggbug/46402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-05-16 14:48 <a href="http://www.tkk7.com/BlueDavy/archive/2006/05/16/46402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软g工程与团?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/03/12/34919.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sun, 12 Mar 2006 08:49:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/03/12/34919.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/34919.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/03/12/34919.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/34919.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/34919.html</trackback:ping><description><![CDATA[<P>每个团队都有它更为适合的Y件工E,因此不可一概而论Q谈谈自己对于XP以及(qing)重型软g工程象CMMq种更ؓ(f)适合的团队?BR>XPQ作为敏捷型软gq程的代表者,我觉得它志在于发挥团队的力量Q挖掘团队成员的潜力Q共同提升团队成员的能力Q快速响应客L(fng)需求,但就自己对XP实施的经验而言Q我觉得XP对于团队成员有一定的要求Q要求团队成员具备一定的职业水准Q象基本的OO思想、TDD、重构技术,同时XP要求团队成员拥有一定的自主能力、够的上进心以?qing)责dQ如果不是一支这L(fng)团队Q实施XP?x)碰到很多的困难Q甚至会(x)D目的失败,对于XPQ我认ؓ(f)它是一U攻d的Y件过E,^_^<BR>CMMQ作为重型Y件过E的代表者,它志在强调要做到对于软gq程步骤的可控性、计划性等Q它的是明确的分工,每个步骤都需要通过一定的标准才算完成Q每个步骤的成员和其他步骤的成员的接口ؓ(f)文档QCMM对团队成员的要求则ؓ(f)分开的,各个步骤需要相应的专业化h才,水U式的作业,对于CMMQ我认ؓ(f)它是一U防守型的Y件过E?BR>作ؓ(f)一个技术h员,以我自己对XP和CMM的各自了解来_(d)我认Z个技术方面的人员?x)更喜欢XPQ因为XP可以让h自由的、快乐的工作着Q去享受工作带来的乐,而作为公司而言也许?x)更喜欢CMMQ因为公怼(x)认ؓ(f)q样更可控制?BR>但就像h件而言Q我也同栯Y件开发过E中最重要的hQ而不是过E,要充分的发挥人的作用Qh的作用只有在快乐的、n受的开发环境中才可获得Q在那样的情况下往往能发挥h最大的潜力Q所以我推崇XPQ我向往敏捷式的软gq程?BR>但事实上来讲Q我同样认ؓ(f)Q对于一支不具备一定水准的团队来说QXPq不适合Q而CMM则更为适合Q而且如果团队成员不具备够的上进心以?qing)钻研精的话,我同栯为实施CMM更ؓ(f)适合Q让整个目的运作只是变成流水线式的q程Q让参与的项目组只是作ؓ(f)工h一般的工作?BR>惛_乐的享受技术带来的乐趣Q想快速的响应客户的需求,p我们拥抱XP吧,而且我认为真正的一支有能力实施XP的团队将是非常幸的Q技术h员的工作是非常快乐的,同时他们输出的成果必然是高质量、高效的Q这样就可以产生“客h意、公司满意以?qing)员工自׃满意”的良性结果,^_^<BR>但其实我们可以去思考下Q国内有多少家公司具备这L(fng)条gd施XP呢,从业人士中有多少人具备可参与到XPq样的敏捯E的能力?...<BR></P><img src ="http://www.tkk7.com/BlueDavy/aggbug/34919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-03-12 16:49 <a href="http://www.tkk7.com/BlueDavy/archive/2006/03/12/34919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>既然认ؓ(f)它是好的Q就要发挥到极限Q系列之三重?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/01/26/29229.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 26 Jan 2006 02:58:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/01/26/29229.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/29229.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/01/26/29229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/29229.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/29229.html</trackback:ping><description><![CDATA[x良一个烂设计为好设计吗?惛_加或l护代码功能时更加简单吗Q重构无疑是其中最好的Ҏ(gu)之一Q既然它是好的,我们p把它发挥到极限,把重构发挥到极限的方法就像kent beck说的Q采用两帽子的原则Q工作中不断的交换帽子,^_^<BR><BR><FONT color=#008000 size=4><STRONG>重构的好?/STRONG></FONT><BR>1、改良设?BR>      设计在一开始不可能做的很完善、很完美Q只能是通过在开发的q程不断的去改良和完善,重构是最好的Ҏ(gu)之一Q通过重构可将设计快速的改良?BR>2、增加或l护代码功能时更加的?BR>      重构q行的原因主要还是因为在增加或维护代码时q行的很困难Q这个时候重构原有代码就是ؓ(f)了让增加或维护代码功能变得更为的单?BR><BR><FONT color=#008000 size=4><STRONG>重构的实?/STRONG></FONT><BR>重构q不是什么新思想、新技术或者新Ҏ(gu)Q是一?0q代已l有N多h融入他们的开发中形成?fn)惯的过E,那么重构到底应该怎么d呢?在这点上我觉得我没有什么多发言的意义,大家参考《重构》一书,书中阐述了很多优U的编码习(fn)惯以?qing)重构进行的场合、方法,重构不象设计模式Q重构应该被形成?fn)惯融入到开发中去,重构不是一独立的d?BR>重构依赖于良好的试体系Q如之前讲过的单元测试的贯彻?BR>Java的开发h员更是可以借助IDE来快速的完成重构的工作?BR><BR><FONT color=#008000 size=4><STRONG>l验ȝ</STRONG></FONT><BR>慢慢的重构也变成了我的开发习(fn)惯,重构保证了简单设计的可行Q同时也保证了Y件的质量?BR>有了重构Q我在开发中可以实行”不要求高质量的实现代码Q但要求高质量的试代码“,高质量的实现代码在Q务完成时卛_通过重构的技术去q行Q就像我以前一blog提及(qing)q的一P我在代码实现q程采用的就是:(x)<BR>1、编写能够满x试的代码?BR>2、对代码q行重构?BR>      2.1 按照《重构》的一些模式进?BR>      2.2 OO<BR>      2.3 设计模式<BR><img src ="http://www.tkk7.com/BlueDavy/aggbug/29229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-26 10:58 <a href="http://www.tkk7.com/BlueDavy/archive/2006/01/26/29229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>既然认ؓ(f)它是好的Q就要发挥到极限Q系列之二单元测?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/01/22/28976.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sun, 22 Jan 2006 15:43:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/01/22/28976.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/28976.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/01/22/28976.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/28976.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/28976.html</trackback:ping><description><![CDATA[既然试是好的,那就把它发挥到极限?BR>试是好的,q一Ҏ(gu)可厚非,几乎做Y件的人都是认可的Q本只是谈谈测试中的单元测试部分,单元试的目的是Z保证cM的方法是W合设计时的需求的Q需求驱动似的类实现Q^_^<BR><BR><FONT color=#008000 size=4><STRONG>单元试的好?BR></STRONG></FONT>1、保证类对于设计以及(qing)需求的W合<BR>      在没有单元测试的情况下,其实是很难保证类对于设计以及(qing)需求的W合的,很多情况往往?x)因为开发h员本w的因素实C码复杂化Qƈ且编写出很多设计和需求根本不需要的东西?BR>2、降低调试的复杂?BR>      x在没有单元测试的情况下,调试通常是集成时才做的,q个时候要通过慢慢的跟t来查找问题的原因,而在webpȝ中就更痛苦了QL要重启,如果不想那么痛苦Q就采用单元试吧?BR>3、减集成时出错的机?BR>      单元试可保证暴露给外部的API的正性,减少要通过集成才发现错误的现象?BR>4、保证重构和单设计的可行<BR>      xQ如果没有单元测试,怎么敢对代码做重构呢Q如果没有单元测试,单设计很N过重构L变成为将来更好的设计?BR><BR><STRONG><FONT color=#008000 size=4>单元试的实?/FONT></STRONG><BR>单元试的实现采取的Ҏ(gu)通常是xUnitQ在Java界就是junit了,最重要的仍然不是工P而是怎么d现单元测试的Ҏ(gu)Q测试驱动开发无疑是最佳的~写试的方法,首先Ҏ(gu)设计或需求编写测试,Ҏ(gu)试~写代码Q直到测试通过为止?BR>在代码出现bugӞ一定要先把出现bug的情况补充到试中去Q接下来仍然是修改实C码,直到试通过?BR>单元试~写的原则其实很单,是试一定情况下cȝ执行是否W合预期?BR>q是举例来说Q?BR>假设需要编写一个根据用户名和密码验证用L(fng)服务Q按照TDD我们首先~写单元试c,我们应该怎么来编写这个单元测试类呢,一般可按照一个这L(fng)步骤Q?BR>1、分析类的输入?BR>      q点通常是分析类依赖外部什么类Q需要在试cM提前注入?BR>      以上面的服务来说Q通常需要依赖的是用L(fng)DaocR?BR>2、分析方法的输入造成的输出的影响?BR>      q点通常是分析方法输入的参数Ҏ(gu)行结果造成的媄(jing)响?BR>      以上面的服务来说Q输入的参数为用户名和密码,q个时候会(x)有几U情况会(x)出现Q?BR>      2.1 用户名或密码为null<BR>            在这U情况下Q假设期待的输出为false<BR>      2.2 用户名和密码都ؓ(f)null<BR>            在这U情况下Q假设期待的输出为false<BR>      2.3 输入的用户名和密码在pȝ中存?BR>            在这U情况下Q假设期待的输出为true<BR>      2.4 用户名或密码其中一输入不正确Q验证不通过<BR>            在这U情况下Q假设期待的抛出AuthronizedException<BR>在经q这L(fng)分析后,可以开始编写测试类了,~写的测试类如下(CZ代码而已)Q?BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG id=Codehighlighter1_46_1309_Open_Image onclick="this.style.display='none'; Codehighlighter1_46_1309_Open_Text.style.display='none'; Codehighlighter1_46_1309_Closed_Image.style.display='inline'; Codehighlighter1_46_1309_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_46_1309_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_1309_Closed_Text.style.display='none'; Codehighlighter1_46_1309_Open_Image.style.display='inline'; Codehighlighter1_46_1309_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> UserServiceTest </SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000"> TestCase </SPAN><SPAN id=Codehighlighter1_46_1309_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_46_1309_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000"> UserDao dao</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000"> UserService service</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000"> User user</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_203_269_Open_Image onclick="this.style.display='none'; Codehighlighter1_203_269_Open_Text.style.display='none'; Codehighlighter1_203_269_Closed_Image.style.display='inline'; Codehighlighter1_203_269_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_203_269_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_203_269_Closed_Text.style.display='none'; Codehighlighter1_203_269_Open_Image.style.display='inline'; Codehighlighter1_203_269_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> main(String[] args) </SPAN><SPAN id=Codehighlighter1_203_269_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_203_269_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        junit.textui.TestRunner.run(UserServiceTest.</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_316_563_Open_Image onclick="this.style.display='none'; Codehighlighter1_316_563_Open_Text.style.display='none'; Codehighlighter1_316_563_Closed_Image.style.display='inline'; Codehighlighter1_316_563_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_316_563_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_316_563_Closed_Text.style.display='none'; Codehighlighter1_316_563_Open_Image.style.display='inline'; Codehighlighter1_316_563_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">protected</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> setUp() </SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000"> Exception </SPAN><SPAN id=Codehighlighter1_316_563_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_316_563_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        </SPAN><SPAN style="COLOR: #0000ff">super</SPAN><SPAN style="COLOR: #000000">.setUp();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        dao</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> UserDaoImpl();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        user</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> User();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        user.setName(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">TEST_BLUEDAVY</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        user.setPass(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">JERRY</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        dao.save(user);<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        service</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> UserServiceImpl();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        service.setDao(dao);<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_613_671_Open_Image onclick="this.style.display='none'; Codehighlighter1_613_671_Open_Text.style.display='none'; Codehighlighter1_613_671_Closed_Image.style.display='inline'; Codehighlighter1_613_671_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_613_671_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_613_671_Closed_Text.style.display='none'; Codehighlighter1_613_671_Open_Image.style.display='inline'; Codehighlighter1_613_671_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">protected</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> tearDown() </SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000"> Exception </SPAN><SPAN id=Codehighlighter1_613_671_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_613_671_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        </SPAN><SPAN style="COLOR: #0000ff">super</SPAN><SPAN style="COLOR: #000000">.tearDown();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        dao.delete(user);<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_722_802_Open_Image onclick="this.style.display='none'; Codehighlighter1_722_802_Open_Text.style.display='none'; Codehighlighter1_722_802_Closed_Image.style.display='inline'; Codehighlighter1_722_802_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_722_802_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_722_802_Closed_Text.style.display='none'; Codehighlighter1_722_802_Open_Image.style.display='inline'; Codehighlighter1_722_802_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> testWhenNameAndPassAreNull()</SPAN><SPAN id=Codehighlighter1_722_802_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_722_802_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        assertEquals(</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">,service.login(user.getName(),user.getPass()));<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_847_927_Open_Image onclick="this.style.display='none'; Codehighlighter1_847_927_Open_Text.style.display='none'; Codehighlighter1_847_927_Closed_Image.style.display='inline'; Codehighlighter1_847_927_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_847_927_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_847_927_Closed_Text.style.display='none'; Codehighlighter1_847_927_Open_Image.style.display='inline'; Codehighlighter1_847_927_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> testWhenNameOrPassIsNull()</SPAN><SPAN id=Codehighlighter1_847_927_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_847_927_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        assertEquals(</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">,service.login(user.getName(),user.getPass()));<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_981_1060_Open_Image onclick="this.style.display='none'; Codehighlighter1_981_1060_Open_Text.style.display='none'; Codehighlighter1_981_1060_Closed_Image.style.display='inline'; Codehighlighter1_981_1060_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_981_1060_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_981_1060_Closed_Text.style.display='none'; Codehighlighter1_981_1060_Open_Image.style.display='inline'; Codehighlighter1_981_1060_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> testWhenNameAndPassAreCorrect()</SPAN><SPAN id=Codehighlighter1_981_1060_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_981_1060_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        assertEquals(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">,service.login(user.getName(),user.getPass()));<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_1110_1302_Open_Image onclick="this.style.display='none'; Codehighlighter1_1110_1302_Open_Text.style.display='none'; Codehighlighter1_1110_1302_Closed_Image.style.display='inline'; Codehighlighter1_1110_1302_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1110_1302_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1110_1302_Closed_Text.style.display='none'; Codehighlighter1_1110_1302_Open_Image.style.display='inline'; Codehighlighter1_1110_1302_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> testWhenNameOrPassIsError()</SPAN><SPAN id=Codehighlighter1_1110_1302_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1110_1302_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_1123_1191_Open_Image onclick="this.style.display='none'; Codehighlighter1_1123_1191_Open_Text.style.display='none'; Codehighlighter1_1123_1191_Closed_Image.style.display='inline'; Codehighlighter1_1123_1191_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1123_1191_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1123_1191_Closed_Text.style.display='none'; Codehighlighter1_1123_1191_Open_Image.style.display='inline'; Codehighlighter1_1123_1191_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>        </SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN id=Codehighlighter1_1123_1191_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1123_1191_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>            service.login(user.getName(),user.getPass());<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>        }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_1219_1296_Open_Image onclick="this.style.display='none'; Codehighlighter1_1219_1296_Open_Text.style.display='none'; Codehighlighter1_1219_1296_Closed_Image.style.display='inline'; Codehighlighter1_1219_1296_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1219_1296_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1219_1296_Closed_Text.style.display='none'; Codehighlighter1_1219_1296_Open_Image.style.display='inline'; Codehighlighter1_1219_1296_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>        </SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(Exception e)</SPAN><SPAN id=Codehighlighter1_1219_1296_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1219_1296_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>            assertEquals(AuthronizedException.</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">,e.getClass());<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>        }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><BR>在编写完试cd可以开始编写实C码了Q实C码在~写的时候很单,只要能够保证试通过完事,在测试通过后可以开始考虑重构的事Q重构仍然只要保证测试通过卛_Q其实这个时候就可以看到Q简单设计就变得可行了,因ؓ(f)可以通过重构来提升设计?BR>如果来q段代码出现bugQ就把bug中的输入情况也编写ؓ(f)一个测试方法进行测试,开始运行就应该和bug一样出现问题,q时只需M正实C码,直到试通过为止Q那么bug也就自然被修正了?BR>单的单元试的编写较为简单,复杂的单元测试则可能需要用Mock来模拟一些环境,Mock斚w的工h很多Q大家可以去参考相关的开源工L(fng)|站?nbsp;    <BR><BR><FONT color=#008000 size=4><STRONG>l验ȝ</STRONG></FONT><BR>对于单元试通常很多人都有疑问,执行h的时候经常是不够dQ特别是在项目时间紧张的情况下,L觉得~写试是一U耽误旉的事Q其实编写单元测试会(x)Z节省非常多的旉Q想x们大部分的项目都是在集成、修改bug和维护上消耗了大量的时_(d)既然单元试q么好,那么我们实现单元测试吧?BR>在单元测试中最重要的注意点是不要依赖于正常的q行数据Q所有的数据都要通过代码模拟出来Q在试完毕后清除,避免造成试对于q行数据的依赖,同时也避免测试数据对于实际运行系l的影响?BR><img src ="http://www.tkk7.com/BlueDavy/aggbug/28976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-22 23:43 <a href="http://www.tkk7.com/BlueDavy/archive/2006/01/22/28976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>既然认ؓ(f)它是好的Q就要发挥到极限Q系列之一持箋集成http://www.tkk7.com/BlueDavy/archive/2006/01/21/28889.htmlBlueDavyBlueDavySat, 21 Jan 2006 11:14:00 GMThttp://www.tkk7.com/BlueDavy/archive/2006/01/21/28889.htmlhttp://www.tkk7.com/BlueDavy/comments/28889.htmlhttp://www.tkk7.com/BlueDavy/archive/2006/01/21/28889.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/28889.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/28889.html持箋集成无疑是一U非常好的方法,那么在实际的软g开发过E中应该把它的好发挥到极限Q但我自己l历q的目以来Q只在一个项目中真正的较好的实现了持l集成,不知道大家的情况是怎么P持箋集成的最出名的代表还是MS的Daily Build和冒烟测试了?BR>
持箋集成的好?/FONT>
1、集成变得自动化Q不依赖人工?BR>      q点好处对于目是多工程的情况下特别的明显,可以xQ一个项目在多工E的情况下,如果不是 自动集成部vQ而需要h手工的话Q需要耗费多大的精力,对于单工E的目来说q点可能不是那么的明显?BR>2、尽早的发现集成出现的错误?BR>      在不做持l集成的情况下,目通常也许是在一个P代的后期才开始将所有h做的东西q行集成Q这个时候才暴露出集成的问题Q这个时候再L已l非常困难了Q因Z西已l很多了Q采用持l集成可一定程度减这个问题,因ؓ(f)持箋集成保证了每ơ都只是部分的集成Q出现问题的话也知道范围被锁定在一个小的部分,而且通常可通过单元试、功能测试以?qing)集成测试来保证在持l集成进行时早发现错误Q提醒导致持l集成失败的相关人员?BR>3、不断的发布新的可运行版本?
      q点无论是对于开发h员、项目管理h员和客户带来的好处都是很明显的,对于开发h员来说每天可以通过q个版本看到自己所完成的Q务,增强d完成的满xQ对于项目管理h员来说则可以看到目的开发在按计划的q行Q对于客h_(d)可以早的看到系l以定和需求的W合性?BR>
持箋集成的实?/FONT>
既然持箋集成q么好,那就在项目中引入持箋集成吧,怎么栯目变得可进行持l集成呢Q在开源界中对于持l集成有非常多的良好的支持工P对于持箋集成而言Q通常是两个部分:(x)
目自动部v
目自动部v的工具可选择采用ant或mavenQ通过之前项目手动部|的步骤译为ant或maven的编译脚本来完成目的自动部|Ԍ当然Q这要求对于ant或maven一定程度的熟?zhn)Q不q无论是antq是maven都很Ҏ(gu)上手Q同时可能会(x)需要对原有工程q行一定的攚w,如采用maven一般都需要先把引用的包全部归入一?nbsp;仓库中?BR>一个项目的自动部v脚本有些时候可能很单,有些时候会(x)很复杂,所有有些自动部|脚本真的是可能需要写上个一天,但这是非常值得的?BR>在自动部|脚本编写完毕后Q就可以通过命o(h)或在IDE中直接部|就可完成整个项目的自动部v的动作?BR>通常目自动部v的过E需要有q么几步Q?BR>1、清IZ往的编译?BR>2、编译项目工E?BR>3、运行项目工E中的单元测试?BR>4、部|工E?BR>5、如为多工程的项目则其他工程也需要重复上面的1???步骤?BR>6、运行功能测试?BR>7、生成项目网?以便查看目的代码情c(din)测试运行情늭)(可??BR>在自动部|完成时Q即可看到项目的q行版本Q同时从目|站中可了解目的代码情c(din)测试的q行情况{?BR>目持箋集成
目持箋集成的工具可选择采用luntbuild或cruisecontrol(Ucc)Q两者各有千U,q里不进行比较。项目持l集成需要根据项目所需要的持箋集成的情冉|~写相应的持l集成脚?luntbuild可通过web理界面完成Qcc通过~写脚本完成)Q通常目持箋集成的脚本会(x)涉及(qing)到这些:(x)
1、决定是采用版本理工具(cvs)感知的方式或每日定时(nightly-build、daily-build)q行持箋集成的方式,如决定采用版本管理工h知的方式Q需要确定对于版本管理工L(fng)态获取的频率Q如每隔20分钟(g)查一下是否有更新?BR>2、持l集成进行,首先是从版本理工具中获取最新的pȝ版本Q接着是调用目自动部v脚本完成目的自动部|?luntbuild和cc都可直接的调用ant或maven脚本)?BR>3、合q自动部|后的测试结果到日志?q点在cc中是要做的,对luntbuild不清??BR>4、根据自动部|的l果通知相关的h?email、jabber{等都可??BR>在脚本编写完成后Q启动工具项目即可进行持l集成了Q可以通过持箋集成的网站去查看目的持l集成情况,其中?x)包含持l集成执行过E的信息、测试执行的情况、持l集成的l计分析{?BR>ȝ来说搭徏目的持l集成环境不?x)太困难Q只要对ant或maven、luntbuild或cc有一定的熟?zhn)Q同时明白项目手动部|是如何q行的?BR>关于工具的用可以参见几个工L(fng)|站Q同时也?A >满江U?开?/A>参考上的《持l集成实践之cruisecontrol》?BR>
l验ȝ
?3q开始在自己所l历的项目中开始实行持l集成,但最l执行的好的只有一个项目,到底是什么原因呢Q在q些目中项目的持箋集成环境都是搭徏好了的,但就是没执行好,ȝ下来发现的问题就在于Q?BR>1、开发h员没有对持箋集成形成_的重视?BR>      在几个项目中都是因ؓ(f)持箋集成在失败后没人去调好Q因为在开发h员本行是好的Q放入CVS后由于持l集成进行时的环境不一L(fng)实是有可能会(x)造成p|的,但持l集成失败后无h重视Q导致之后的持箋集成一直就没什么意义?BR>2、缺乏够的试?BR>      D了项目即使持l集成成功了但可q行版本中仍然是有N多的bugQ这说明持箋集成是非帔R要单元测试、功能测试的支撑的,否则意义大打折扣?BR>q有一个是持箋集成通常需要耗费很长的时_(d)web型系l的持箋集成通常需要重启web应用服务器;W一个问题倒是可以通过采取增量方式q行持箋集成来解冻I但由于不是工L(fng)接支持的Q所以这块实现还是比较麻烦的Q第二个问题比较麻烦了Q反正在我自q历的目中这个问题一直没很好的解冻I通常是需要在持箋集成l束后h工手动的启动web应用服务?我试着在cc脚本的最后去启动应用服务器,仍然是无效的)?BR>无论如何Q持l集成带来的好处是非常明昄Q值得dQ既然是好的Q就要把它发挥到极限(Ҏ(gu)l集成给予够的重视、增加测?Q那p我们在项目中实现持箋集成吧!

BlueDavy 2006-01-21 19:14 发表评论
]]>
软g开发中的质量保?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/01/03/26435.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 03 Jan 2006 05:36:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/01/03/26435.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/26435.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/01/03/26435.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/26435.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/26435.html</trackback:ping><description><![CDATA[<P>如何保证软g的质量一直就是o(h)人头疼的事,q里列了一个自己实际运作的一套用于保证Y件质量的体系Q还望大家多加指炏V?BR>软g的质量保证的x点主要分Z个方面:(x)<BR>1、对于需求的满<BR>      保证软g的设?实现对于需求是满的?BR>2、对于设计的满<BR>      保证代码的实现是遵@设计的?BR>3、代码的质量/性能<BR>      避免代码实现造成的性能或其他的一些非功能性问题?BR><BR>Z保证q三点的达成Q在实际的项?产品中采用了一套这L(fng)Ҏ(gu)Q涉?qing)到的角色有目l理/开发经?需求h?设计人员/开发h?试人员Q?BR>1、对于需求的满<BR>      在对于需求的满上,为避免代码的设计/实现与需求出现大的偏差,要求由需求h员提供验证的场景Q同时根据每天早?x)大家的计划在下班时对计划的完成?gu)验证场景q行验证?BR>       涉及(qing)到的角色Q需求h?负责验证场景的提供和需求实现的验证)<BR>                                   试人员(Ҏ(gu)验证场景q行验证)<BR>2、对于设计的满<BR>      在对于设计的满上,为避免出C码和设计严重偏离的现象,要求设计人员和开发h员频J的交流Q确信开发h员对于设计意囄理解Q开发h员在q行代码实现时根据设计h员提供的概要设计完成详细设计Q在开发过E中采用TDD的方式进行,保代码对于设计的符合,q样q不是说设计是不可修改的Q但设计和代码的实现需要是可映的?BR>      要求设计人员对开发h员的代码q行频繁的Code ReviewQ确定设计被正常的实现?BR>      涉及(qing)到的角色Q设计h?提供对于设计验证的方?<BR>                                  开发h?TDD)<BR>3、代码的质量/性能<BR>      Z证代码的质量Q在PP不能完全执行的情况下也要求尽量的多采用PP的方式进行开发,同时通过设计人员对于开发h员以?qing)开发h员互相的Code Review来保证代码的质量?BR>      对于代码的性能更多的是通过单元试执行的耗时来分析?BR>      对于设计以及(qing)代码q行重构来提升代码的质量和性能?BR>      涉及(qing)到的角色Q设计h?Code Review、性能分析、设计重?<BR>                                  开发h?PP、Code Review、代码重?<BR>4、Q务完成情?差距分析<BR>      Z证Y件开发顺利完成,应不断的对Q务完成的情况q行差距分析Q以早做出应对措施q调整?BR>      涉及(qing)到的角色Q项目经?开发经?BR><BR>在开发过E中首先要求的是高质量的试代码(满需?设计) Q之后才是高质量的实C码,对于实现代码在有了测试代码的情况下更多的可以通过重构去达到高质量?BR><BR>M而言Q在软g开发过E中最重要的就是要保证各种角色人员的接口的明确、交?反馈的畅通,同时采取步前进的方式,通过重构来达到目标?/P><img src ="http://www.tkk7.com/BlueDavy/aggbug/26435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-03 13:36 <a href="http://www.tkk7.com/BlueDavy/archive/2006/01/03/26435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从球赛谈Y件开?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/01/01/26282.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sun, 01 Jan 2006 13:32:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/01/01/26282.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/26282.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/01/01/26282.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/26282.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/26282.html</trackback:ping><description><![CDATA[昨晚看切?dng)西的比赛的时候突然联惛_了Y件开发,呵呵Q来看球赛Q?BR>1、根据比赛双方的实力、主客场、天气等{各斚w因素来比赛双斚w?x)制定自q目标Q战q뀁胜或别的目标?BR>2、需要在有限的时间内(90分钟)达成目标?BR>3、多U角色构成?守门员、后卫、中场、前?<BR>4、一定的阵型(4-3-3?-4-2)和战?防守反击、短传渗透、长传冲??BR>5、多变的形式以及(qing)多种不定因素(裁判、球员状态等)?BR><BR>球赛的整个过E需要由整个队共同努力去完成Q而教l负责对于全局的把握、战术的调整{?BR>软g开发和球赛有很多cM的情况,也是在一定的旉内由多h协作共同d成目标,在完成目标的q程中会(x)到多种不定的因素和多变的需求,通过架构来制定开发过E的阵型Q通过引入模式来作为实现目标的战术?BR><BR>软g开发和球赛一P人是其中臛_重要的因素,一L(fng)阵型、战术在不同的球队中׃(x)产生完全不同的效果,你不能去要求甲联赛的球员拥有和联赛的球员同L(fng)水^Q也不能去要求一个球员永q保持良好的竞技状态,同时Q阵型、战术直接媄(jing)响到个体Q也怸体的实力很强Q但在一个不适合的阵型和战术中是无法发挥的?BR><BR>从架构层ơ去看,球赛依靠4-3-3?-4-2q样的阵型构成其架构Q在实现目标的过E中需要保持阵型,在进展的q程Ҏ(gu)实际情况q行调整Q但不会(x)频繁变化Q教l就象一个优U的架构师Q会(x)Ҏ(gu)情况来决定出最佳的架构?BR><BR>从实现角度去看,在球赛进展的q程中球员会(x)采用多种协作模式Q撞墙式配合、下底传中等Q同时个体也?x)采用多U模式,I档qh、h球分q、变向、踩单R{,好的球员能够U熟的应用模式到合适的环境中去?BR><BR>从团队管理角度去看,球赛需要多U角色的球员的共同合作,球员的合作是影响目标达成的重要因素?BR><BR>从个体角度去看,个体的能力、状态以?qing)对于架构的理解?x)影响架构的实现和目标的达成?BR><BR>某种E度上来Ԍ球比Y件开发更具难度,极ؓ(f)有限的时_(d)更多角色的合作,更多不定的因素?img src ="http://www.tkk7.com/BlueDavy/aggbug/26282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-01 21:32 <a href="http://www.tkk7.com/BlueDavy/archive/2006/01/01/26282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q样的项?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/12/17/24382.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sat, 17 Dec 2005 09:25:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/12/17/24382.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/24382.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/12/17/24382.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/24382.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/24382.html</trackback:ping><description><![CDATA[<P>面(f)一个这L(fng)目Q项目目标是Q?BR>1、提供一个框Ӟ而且对这个框架要求还比较高,属于具备一定技术难度的目Q这L(fng)来可列ؓ(f)研发cR?BR>2、完成一个实际项目的开发工作?BR>目团队l成是这P(x)<BR>1、高U程序员一名,gQ目的开发经理,E序员一?对Java不熟)Q初U程序员四名(应届大学??BR>在目前项目的q展情况看下来,发现q样的项目目标以?qing)带领一支这L(fng)团队要完成目标真的不Ҏ(gu)Q很隑־难,分析的原因觉得很单,研发c项目很多时候停留在技术角度的d上,需要的是高U技术h员,而同时的实际目开发工作的那个目标则主要停留在了业务角度上Q这个时候要求的是架构的E_Q团队承受高压力的能力以?qing)一定的目l验Q而且我一直觉得在q样旉紧张、团队水q相差较大的情况下至需要有一个能够顶得住的开发h员,目前在这L(fng)情况下一个架构要同时面对两个q样有一定矛盄目标Q目前情늜来架构的表现q不是非常的好,整个团队在架构的接受上就׃不少的时_(d)而且在开发过E中仍然需要架构设计师的不断支持,从实际项目的角度d析这L(fng)架构其实是不成功的,但从研发目角度ȝ又是成功?.....<BR>自己在面对这L(fng)情况下还是显得有些无能ؓ(f)力,l验不Q自׃为PM同时又作为系l设计师需要保证研发性质部分的完成,q势必要求投入大量的旉去进行研发性质部分的开发工作,而同时ؓ(f)了保证实际项目开发的利q展又必dteaml予_的技术支持,而且实际目来讲毕竟优先U高Q在q样的情况下最后导致的是研发性质的那个目标进展的比较慢,而同时实际项目的q个目标q展也不是非常的利?BR>不过个h觉得在这L(fng)情况下唯一有利的还是团队的培养Q团队在l过一个这h期的培养后能够较快的提升Q也许能够成为后期真正的框架开发的团队Q否则以目前团队能力来讲d框架型的开发几乎是不太可能?/P><img src ="http://www.tkk7.com/BlueDavy/aggbug/24382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-12-17 17:25 <a href="http://www.tkk7.com/BlueDavy/archive/2005/12/17/24382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>团队理漫谈http://www.tkk7.com/BlueDavy/archive/2005/12/16/24290.htmlBlueDavyBlueDavyFri, 16 Dec 2005 13:43:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/12/16/24290.htmlhttp://www.tkk7.com/BlueDavy/comments/24290.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/12/16/24290.html#Feedback4http://www.tkk7.com/BlueDavy/comments/commentRss/24290.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/24290.html目l过了P代一阶段QM来说我对teamq是比较满意的,管也出C不少的问题,但在q些问题暴露出来后领gp为我q样理team是不正确的,我对team的过于信d致了q次q代一出现了目标偏差的现象Q但我个Zq么认ؓ(f)Q在团队理上我一直坚信应该徏立在对team的信M?qing)徏立team的一致作战能力、一致荣誉感上,而不是步步对teamq行制度性的防范和监控,q个我是不太认同的,管q样的做法通常来说实能得C个比较好的结果,但是我认为在那样的team中工作是不快乐的Q会(x)Ҏ(gu)造成team的疲惫感Q工作除了付q辛苦得到物质收获外,我觉得最重要的还是让team得到_上的快乐Q我倡导快乐工作?BR>不过当然Q既然暴露出问题Q自然值得ȝQ在ȝ后发现现在的team实是有些松散,q不够紧密的团结Q重要的是没形成l一的荣誉感Q在q样的情况下我仍然认为ƈ不是通过制度、监控等Ҏ(gu)L制teamQ而是仍然lteam一定的I间Q简单的说说q次出现的问题和自己的解x\Q?BR>1?FONT color=#ff0000>q代版本产生了偏需求和UI的现?BR>      出现q个现象我觉得最主要的原因是在提炼用h事时做的不够好,同时在用h事的录入上的控制
      也不够好Q针对这ơ出现的现象Q我觉得在用h事上必须表达Z个成功的业务场景的详l描q??BR>      q附带UI来说?、业务规则的说明以及(qing)用户故事验证的说明?BR>      判断一个用h事是否完成的标准是成功的业务场景的执行、业务规则的满以及(qing)是否能够通过?BR>      h事验证?BR>      验证工作由on-site customer做,多数情况下on-site customer是目l理、BA或需求分析h员?BR>      通过频繁发布的持l集成版本将自己实现的用h事与用户故事验证人员q行频繁的沟通和交流?BR>      开发h员往往对细节不够重视也是造成此现象的原因Q开发h员往往只注重主体功能的完成Q但把细
      节却l忽略了Q这个在以后的P代中需要进行纠正,培养开发h员对于用h事完成的概念的认识?BR>2?FONT color=#ff0000>开发h员在实现d时出C不知如何下手的现?/FONT>
      造成q种现象的发生我觉得最主要的仍然是CRC设计以及(qing)d分解上出C问题Q按照CRC设计的要
      求以?qing)Q务分解的要求q种现象出现的情况应该是不会(x)发生的,管q次team的能力是有些Ơ缺Q但
      CRC设计加上d分解其实?x)Ş成非常明的详细设计以?qing)如何实现详细设计的Q务,在这点上?BR>      x案就是在下一ơP代会(x)议上加强CRC设计以及(qing)d分解q两块,CRC设计一定要能通过情景?BR>      试,d分解一定要分解的够清晎ͼ让开发h员都能明白是怎么做的Q至于碰到难点的地方自然?BR>      先安排ؓ(f)Spiked?BR>3?FONT color=#ff0000>开发h员在q行d跟踪时出现偏ȝ现象
      开发h员仍然没能Ş成很好的d跟踪的习(fn)惯,q点只能不断的纠正,培养开发h员Ş成这L(fng)?BR>      惯?BR>4?FONT color=#ff0000>接口依赖造成的瓶颈现?BR>      q是此次q代出现的一个较大的问题Q未形成一个P代中的接口依赖的全貌图,D了在d分配?BR>      接口依赖常常集中在一个h的n上,出现了瓶颈现象,q点在第二个q代中需要改q,增加整个q代
      的接口依赖图Q这个可Ҏ(gu)CRC设计提取形成?BR>5?FONT color=#ff0000>d自行挑选造成的Q务完成有隑ֺ的现?BR>      此次q代中出Cq个现象Q部分h员挑选了过其能力很多的dQ最后导致了d完成的过E中
      出现了很多的问题Q这个我仍然觉得一斚w是CRC设计的问题,另一斚w是缺PP的原因?BR>6?FONT color=#ff0000>持箋集成p|ơ数q多的现?/FONT>
      此次q代中造成持箋集成p|的原因竟然多是测试代码编写的不正以?qing)测试代码对于运行数据的?BR>      赖,q个我在目ȝ?x)议上进行了讲解Q由于这个项目压力太大,而且team能力实有些不Q所
      以我未强制执行TDDQ不q仍然极度鼓励;W二个原因则是在造成了持l集成失败后未列为最高优?BR>      U的事去做?BR>q次出现q些问题虽然有些是和团队个h相关Q但我更多的认ؓ(f)q就是整个团队的责QQ而不是某个h的,因此在第二个q代中我仍然是以培养整个团队的一致荣誉感为首Qƈ且仍然给予团队够的I间以及(qing)充分的信任;而且在第一ơP代中出现q些问题也是好事Q毕竟这是一支全新的团队Q在团队能力Ơ缺的情况下我对于团队的表现是比较满意的Q在后箋我仍然的更多是依靠交、反馈以?qing)共同作战来弥补上面的问题,而不是依靠制度和强制性的监督?BR>比较可喜的是Team开始接受整个Y件过E,TDD也开始得到接受,而且team成员的能力提升也是比较的明显Q这其实Ҏ(gu)而言已l达到目标了Q相信这L(fng)一支团队是不会(x)让我失望的?/P>

BlueDavy 2005-12-16 21:43 发表评论
]]>
反?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/12/01/22161.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 01 Dec 2005 13:33:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/12/01/22161.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/22161.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/12/01/22161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/22161.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/22161.html</trackback:ping><description><![CDATA[今天有hҎ(gu)现在q行目的几个方面提Z疑问Q认为是几点值得考虑的风险,自己在仔l考虑后觉得确实值得反思:(x)<BR>1、ؓ(f)什么要采用hibernateQ采用OO设计取代传统数据库设计?<BR>      觉得q个问题Ҏ(gu)而言没什么可值得仔细思考的部分Q采用hibernate利大于弊Q这点对我而言毫无疑问Q一是因为即使不采用hibernateQ在代码中仍然要对获取的resultset做{化ؓ(f)对象的步骤,二是hibernate寚w用CRUD的良好支持,三是数据库无x,四是对象兌的支持?BR>      但以提问的h的观Ҏ(gu)看,一是他个h对于hibernateq不熟,认ؓ(f)他无法掌控,q就是风险,二是他认为采用hibernate反而增加了目的实现难度?BR>      l合自己的观点和提问人的观点来看Q觉得在目中采用什么样的技术才是合适的技术确实是个值得思考的问题Q怎么样从可满项目的多种技术实现方案中q行选择Q?BR>2、项目中采用XP是否合适?<BR>      我采用XP被h|疑的地方竟然是目成员的交合作问?..... q点让我挺震惊的Q这Ҏ(gu)都不知道到底是我做的不对q是被h误解Q至我认ؓ(f)我现在team的交绝Ҏ(gu)一般重型Y件过E的团队交流做的好很多很多,早会(x)、P代会(x)议、不时的讨论{等Q这些交我觉得应该不会(x)差吧Q呵呵,不过被h疑问Q我觉得臛_p明自己做的仍然不够好?BR>      另外竟然q被看成是不做设计直接编码的行ؓ(f)Q在q点上我真的是觉得让别h误解了,CRC设计N不是设计Q?Q而且我觉得CRC设计l对是超传l的那种做详l设计的Ҏ(gu)的?BR> <BR>总而言之,我觉得有人提出疑问是好事Q只有这h能真正仔l的d思自q很多做法?BR><BR>另外Q说说关于TDDQ觉得自q在才是真正的做TDDQ今天在l一个同事讲的时候真正的自己也去领?zhn)TDD的好处,在写一个对象的实现的时候,通常?x)在实现的过E漏掉一些边~性的(g)或别的问题Q更H出的就是在集成的时候才发现问题Q今天在实践的时候突然觉得TDD的好处就在于q了开发h员在写一个对象的实现之前仔细的考虑那个Ҏ(gu)的功能、边~性的一些东西,q个时候通过~写试代码完全可以体CQ然后再d实现其实比较简单了Q把握针Ҏ(gu)试写实现的原则,更不用说对于集成试的好处了Q呵呵,q样才能发挥XP的很多优点,比如单设计、重构、持l集成等{?img src ="http://www.tkk7.com/BlueDavy/aggbug/22161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-12-01 21:33 <a href="http://www.tkk7.com/BlueDavy/archive/2005/12/01/22161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回顾XPhttp://www.tkk7.com/BlueDavy/archive/2005/11/30/22035.htmlBlueDavyBlueDavyWed, 30 Nov 2005 13:49:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/11/30/22035.htmlhttp://www.tkk7.com/BlueDavy/comments/22035.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/11/30/22035.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/22035.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/22035.html在项目中正式的执行XP中的q程Q除了PP׃暂时没实施,其他的都在实施中Q虽然这点会(x)被很多xper_(d)^_^Q其实我也知道P(yng)P非常好,毕竟以前l历q,但由于某些原因,在现在的team中我q不好去执行Q以后找到机?x),呵?....
自己接触XP说v来也有两q多了,而且在以前的团队中也是采用这L(fng)q程Q但现在自己带team真的执行的时候却发现到一些问题,一斚w可能是因己太久没温习(fn)XPQ^_^Q有些过E都不是那么记得了,另一斚w是在执行的时候有些步骤确实不好走Q在q样的情况下Q回了手头的几XP的文档,从XP中对于整个Y件过E的推行来看自己实施q程中的问题?BR>XP中对于整个Y件过E的推行是这L(fng)Q?BR>1、和客户一起分析需求,产生User StoryQUser Story的定义ؓ(f)用户对于需求的一D|q?BR>实际执行情况Q由PM充当客户Q由Team LeaderҎ(gu)PM的描q进行User Story的编写,而且׃User Story的定义不是那么明,实际执行q程中有些迷惑,在这点上我现在的定义是一个不可分解的独立、成功业务场景,此场景由场景q程和业务规则共同构成,现在的做法是Ҏ(gu)Use CaseQ拿出其中那些不可分解的独立、成功的业务场景作ؓ(f)用户故事?/FONT>
2、由团队中的Senior成员对User Storyq行完成旉以及(qing)技术风险的评估Q同时再l团队中的Junior成员对User Storyq行完成旉以及(qing)技术风险的评估Q最后合q两人的取^均值构成此User Story的完成时间以?qing)技术风险的评估Q如此时产生的User Story大于三周Q则q行分解Q如于一周则q行合ƈ?? 如出现无法评估的User StoryQ先q行Spike)
实际执行情况Q之前对此过E不够明,所以没有这么做Q觉得以后可以考虑执行Q不q疑问就在于Junior能做估吗Q?/FONT>
3、由客户对用h事进行商业h(hun)g?qing)商业风险的评估?BR>实际执行情况Q恩Q这步可行?/FONT>
4、根据用h事的技术风险、完成时间评估、商业h(hun)倹{商业风险的评估来制定发布计划,制定的原则ؓ(f)商业价g先?BR>实际执行情况Q由于现在缺步?Q所以只是依照商业h(hun)值来制定?/FONT>
5、根据发布计划以?qing)用h事团队共同想出系l隐喅R?BR>实际执行情况Q我认ؓ(f)pȝ隐喻其实是架构设计Q在q个步骤上在team中由架构设计组完成?/FONT>
6、根据发布计划制定P代目标以?qing)P代计划,q代控制?Q-3周?BR>实际执行情况Q基本是q样的?/FONT>
7、Team对P代中的User Storyq行CRC设计和Q务分解,d控制在大于一天小于三天的范围?BR>实际执行情况Q由于没做步?Q在q代?x)议上首先是列出User StoryQ但q不q行完成旉的估计,而是先进行CRC设计QCRC设计中也有个疑点Q可能是执行的不好,我对于CRC的做法是拿出用户故事中所出现的名词,q构成名词中的属性和Ҏ(gu)Q此时进行情景测试,此时自然受架构U束才能完成Q比如UI--->Action--->Service--->Daoq样一U过E才可通过情景试(Ҏ(gu)情景试来I补整个过E中不符合的设计)Q就产生了CRC设计的UI、业务对象、Action、Service、Daoq些dQ在q个时候出现问题,是在简单的User Story中这些Q务就同样非常单,甚至所有Q务合在一起也?天的q种情况Q这对于XP来说其实是不W合的,q个时候再d合ƈd、合qUser Story发现不是那么好做.......
8、由团队成员自行挑选Q务?BR>实际执行情况Q完整执行?/FONT>
9、Q务承担者进行TDD实现Q每天挑选Pair一赯行?BR>实际执行情况QTDD斚w׃我的理解不是很好Q未良好执行Q今天专门看了手头XP文档中TDD的部分,发现以前的做法确实很不正,以后一定好好执行,像~写一个简单的增加用户q样的方法,在TDD中首先应该考虑q个Ҏ(gu)到底有哪些功能,然后在单元测试中q行~写Q最后方法的实现完全Ҏ(gu)单元试来实玎ͼ而不~写出单元试范围的代码,PP׃目前team以及(qing)环境的原因,暂未执行Q在来我决定推行?/FONT>
10、提交代码进行持l集成?BR>实际执行情况Q完整执行,不过~少TDD其实q块的意义已l不昑־那么重要Q不q我仍然觉得对于功能试以及(qing)作ؓ(f)一个集成测试环境来讲非帔R要,毕竟q是自动的?/FONT>
11、P代Q务完成后发布q代版本?BR>实际执行情况Q完整执行?/FONT>
12、进入下一个P代?BR>上面只是对XPq程的一个简单描qͼXP中还有很多重要的思想和原则都是值得分开了详l阐q和分析的:(x)
单、交、反馈、勇气、站立早?x)、TDD{等?BR>以后有时间的时候一个一个来写写感触Q呵c(din)?BR>
在目前的团队实施的Y件过E情冉|看,个h觉得有几个方面是有非常好的效果的Q?BR>1、早?x)。耗不了多长时间却能v到很好的作用?BR>2、P代会(x)议。耗费旉是很长,但对于整个团队Q务完成的情况来看是非常值得的,增加了团队的交流气氛Q从而提升了整个团队的水qI让团队成员自行挑选Q务可以让团队成员d的去提高自己Q提高工作方面的兴趣?BR>3、持l集成。非常有好处Q至避免L要依靠一个hd集成Q而且目l所有成员都能看到项目的q展Q对于团队来说是U鼓励,呵呵Q我在持l集成中q生成项目网站,觉得q个对于目l以?qing)领导层来说都很有效果?BR>4、xplannerq行d跟踪。通过xplanner的Q务跟t提升整个团队对于Q务完成时间的评估准确度,同时也比较准的l计了团队的工作量?BR>
psQM看下来,自己在XP整个实施上还是存在很多的问题Q要吸取教训Q以后努力改q,其实我一直坚持的一点,其实对于一个中型目来说Q我真的不认为采用什么Y件过E必然就是最好的Q关键是需要一套适合团队的完整、规范的软gq程Q这个很重要?/P>

BlueDavy 2005-11-30 21:49 发表评论
]]>
到兛_技术的客户咋办Q?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/11/10/19198.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 10 Nov 2005 09:55:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/11/10/19198.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/19198.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/11/10/19198.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/19198.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/19198.html</trackback:ping><description><![CDATA[<P>本来作ؓ(f)客户而言Q它需要关心的是自己想Zpȝ做什么,实现什么样的功能,而不?x)关心到技术层面,但如果碰C兛_技术的客户怎么办呢Q客户关心到你用的是什么^台、什么框架、ؓ(f)什么要用以?qing)它如果要基于^台做自主开发要怎么做,感觉在这U情况下挺棘手的Q客户往往变成了对于你实现需求的技术进行干预,而很多时候又没法向用戯释清楚,而且在这U情况下往往是客h据你的介l和讲解来做出基于这L(fng)q_是否能实C们需求的评估Q这挺难搞了,也许是自q技术不q关Q不q觉得最~Z的是沟通的Ҏ(gu)Q大家觉得在q种情况下会(x)有什么比较好的方法呢Q求?......</P><img src ="http://www.tkk7.com/BlueDavy/aggbug/19198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-10 17:55 <a href="http://www.tkk7.com/BlueDavy/archive/2005/11/10/19198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>公司U技术团队徏?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/11/07/18669.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Mon, 07 Nov 2005 15:54:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/11/07/18669.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/18669.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/11/07/18669.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/18669.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/18669.html</trackback:ping><description><![CDATA[从公司来讲Q自q资格是远q的不够Q在q里主要也是Ҏ(gu)自己的项目经验阐qC自己对中型企业技术团队的一U观点,个h觉得对于中小型企业来讲三U团队的构成是比较理想的Q就是支撑^台团?应用pȝ开发团?实施团队Q从三团队的构成来讲切忌企业的面铺的太q,那这三团队很隑Ş成了Q但在国内大部分中小型企业仍然处于盈利ؓ(f)上的{略Q这也是没办法的Q毕竟求生才是最重要的,在这U情况下Q我觉得在这L(fng)公司不如q脆由应用系l开发团?实施团队来组成,而支撑^台则选用开源的或进行采购,当然Q选用开源的概念是某个可直接用的或者不需要进行太多集成工作的Q这样在公司发展C定程度的情况下,在适当的时Z再进行升U到三团队的徏设?BR>觉得现在中国很多中小型企业的问题在于,既想构成q种三的团队,但同时又不舍得投入,q样造成的后果其实是不言而喻的?BR>觉得其实在国外的很多公司的技术团队都是类DU三U团队的构成Q更ZU的公司则可逐步的脱Mؓ(f)只有支撑q_研发团队Q而同时生了一个新的咨询服务团队,而由别的公司作ؓ(f)应用开发团?实施团队?BR>^_^Q我个h觉得仍然是中型企业的定位问题,其实中小型企业的支撑q_的研发ƈ没有惛_中的那么的困难,舍得投入招进4--6个比较有l验的h来进行大?--6个月的研发,当然Q这对团队的要求是比较的高,同时需要公司有一定的目l验U篏Qƈ形成公司主营业务的需求,所以一开始就要组成三U团队确实是比较的困难?BR>但同时在国内的企业中q存在另外的问题Q就是对于此cȝ发性质的项目干pMhq于的多Q而且x的h多,很多企业毕竟是从二团队开始升Uؓ(f)三团队的,此时带来的问题就是企业内部利益斗争,q个从根本上军_了支撑^台进展的困难Q由于没有在外企呆过Q不知道国外的企业是否会(x)有这L(fng)问题Q呵?img src ="http://www.tkk7.com/BlueDavy/aggbug/18669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-07 23:54 <a href="http://www.tkk7.com/BlueDavy/archive/2005/11/07/18669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软gq程规范http://www.tkk7.com/BlueDavy/archive/2005/11/03/17949.htmlBlueDavyBlueDavyThu, 03 Nov 2005 05:36:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/11/03/17949.htmlhttp://www.tkk7.com/BlueDavy/comments/17949.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/11/03/17949.html#Feedback6http://www.tkk7.com/BlueDavy/comments/commentRss/17949.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/17949.html软gq程规范

一.  概述

本文主要对于软gq程的整体规范进行较为完整的描述Q来源于个h的项目经验、所?/SPAN>team使用的Y件过E以?qing)个人的一些想法ȝ而成?/SPAN>

文章按照寚w目中采用的Y件过E进行描qͼ之后对保证整个Y件过E有效执行的工具、制度等q行描述?/SPAN>

本文意ƈ不在标明q个软gq程是多么的优秀Q关键是要找到适合自己团队的Y件过E,没有最优秀的,只有最合适的?/SPAN>

?  软gq程

此Y件过E是Ҏ(gu)Team以及(qing)XP制定的,囄如下Q?IMG height=437 alt="Triones产品pd软gq程 1.0.jpg" src="http://www.tkk7.com/images/blogjava_net/bluedavy/Triones产品pd软gq程%201.0.jpg" width=641 border=0>

2.1.       里程计划制?/SPAN>

控制在一个月范围内,每个里程应有突出性进展的部分Q里E碑版本的发布具有很强的意义Q每个里E碑版本在功能或非功能性方面应有明的Ҏ(gu)?/SPAN>

在每个里E碑l束时发布里E碑版本q同时给予项目组一定的休息旉?/SPAN>

2.2.       q代计划制定

控制在一至两周范围内Q每个P代周期结束后对客户发布P代版本?/SPAN>

2.3.       q代q程

2.3.1.       需求分?/SPAN>

在P代的需求分析中主要为对划定在此q代阶段的需求进行详l的分析Q生出用户故事?/SPAN>

2.3.2.       设计

设计主要通过对用h事进?/SPAN>OOAD产生出符合此用户故事的领域设计,以此建立的领域模型结合架构构成完成用h事的设计Q?/SPAN>CRC CardQ最后进行情景测?/SPAN>(Scene Test)?/SPAN>

设计旉要遵循的三个原则Q?/SPAN>

l         Domain Model驱动

?/SPAN>Domain Model作ؓ(f)驱动q行设计Q通过对用h事的OOAD产生用户故事?/SPAN>Domain ModelQ基于此Ҏ(gu)架构完成整个用户故事的设计?/SPAN>

l         Simple

单够用,q个是最为难掌握的,说的直白点就是先采用能够惛_的一个最单的设计d现功能,至于q个设计是不是那么的合理先不要太多的ȝ?x),在完成了功能后可以不断的对其q行重构Q其实其原理是?/SPAN>一步一个台Ӟ直至云霄Q而不是一步登?/SPAN>?/SPAN>Q每个团队的不同仅在于这一个台阶能q多高而已?/SPAN>

l         集体参与

q代q程的设计由目l共同参与,目l成员可随意的发表各自对于系l实现的设计的想法?/SPAN>

2.3.3.       开?/SPAN>

开发过E中涉及(qing)的有Q?/SPAN>

l         ~码规范

~码规范需在项目开始时卛_定,q个需要根据每个公总?qing)团队的情况来决定,?/SPAN>Java~码规范中通常要涉?qing)的有类文g规范(主要是文件的版权、文件格式等)、命名规?/SPAN>(包名、类名、方法名、变量名{?/SPAN>)、注释规范?/SPAN>

l         TDD

按照先编写单元测试后q行代码~写的原则,在单元测试中主要需要对代码的逻辑、性能以及(qing)边缘q行试?/SPAN>

l         PP

双h~程Q在q行代码~写时必MZ赯行,一人操作键盘,一人旁边观看,同时q行思考?/SPAN>

l         Code Review规范

代码复查规范需要按照各个公总?qing)代码规范来q行制定?/SPAN>

2.3.4.       重构

在开发结束后需要考虑代码的重构,主要?/SPAN>OO的各原则以及(qing)设计原则来进行提升,复用性、性能{都是考虑的因素?/SPAN>

重构时可采用IDE提供的重构支持来快速完成,对于设计的重构可以通过设计?x)议来共同讨论,在重构时甚至可考虑推翻原有所有的设计而进行?/SPAN>

2.3.5.       持箋集成

持箋集成采用感应版本控制工具变化而进行的原则Q即有变化提交至版本控制工具时即q行持箋集成Q在持箋集成p|或成功的情况下均发送邮仉知相关人员Q项目组所有h员均可通过|站查看持箋集成的情c(din)?/SPAN>

持箋集成中主要需要进行的工作是编译所有源码、运行单元测试、按照系l手动部|方式自动完成部|工作、运行功能测试、发布测试报告ƈ通知相关人等?/SPAN>

持箋集成的原则ؓ(f)谁造成p|谁负责?/SPAN>

?  d规范

3.1.       d分配

在对用户故事完成设计时即可进行Q务的分配Q每个Q务拆分到1?天的范围内,对于难以估计的Q务先q行spike之后再行分配Q?/SPAN>spike的时间限制在1周以内?/SPAN>

由项目组成员自行挑选Q务?/SPAN>

3.2.       d完成

在完成Q务的q程中成员需q行d完成旉的跟t,原则为在开始Q务时填写d开始时_(d)在停止编写Q务的时候填写时间点Q在d完成时勾选完成Q务?/SPAN>

此时间也作为将来分配Q务时旉的估计,以得对于Q务的完成旉的估计能够越来越_?/SPAN>

3.3.       d跟踪

d跟踪通过d跟踪工具来完成,主要是Q务完成的旉、Q务统计等?/SPAN>

?  工具

涉及(qing)的工具主要有Q?/SPAN>

l         d跟踪工具

l         版本控制工具

l         持箋集成工具

l         Bug跟踪工具

l         开发工?/SPAN>

?  制度

5.1.       早会(x)

早会(x)旉大概?/SPAN>10---15分钟Q主要是Ҏ(gu)日Q务的回顾、难点的提出、今日的计划以及(qing)partner的挑选?/SPAN>

5.2.       发布?x)?/SPAN>

发布?x)议为里E碑计划的宣布,以ə目l成员能够明里E碑的目标以?qing)时间点Q同时也听取目l成员的意见?/SPAN>

5.3.       q代?x)?/SPAN>

q代?x)议为每个P代周期前q行召开Q以佉K目组成员明白q代目标以及(qing)旉点,同时听取目l成员的意见?/SPAN>

5.4.       设计?x)?/SPAN>

设计?x)议在每个P代周期开始的时候进行召开Q以认q代中需求的设计实现、Q务分配等?/SPAN>

5.5.       目周报

目于每周五下班时提交项目周报,主要是向客户、公司相关h员、项目组通报目的进展情c(din)下一步工作计划?/SPAN>

5.6.       目成员U分制度

目成员U分作ؓ(f)寚w目组成员的考核以及(qing)奖金分配的依据?/SPAN>

目成员U分主要从Q务的完成旉、质量、Q务过E中表现出的团队合作、责d、态度{进行评P对表现特别出色或不合人意的进行适当的奖惩?/SPAN>



BlueDavy 2005-11-03 13:36 发表评论
]]>
软gq程规范--?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/11/02/17883.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Wed, 02 Nov 2005 14:32:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/11/02/17883.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/17883.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/11/02/17883.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/17883.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/17883.html</trackback:ping><description><![CDATA[在和一个朋友聊天下发现是应该整理下自己在这斚w的东西,其实以前零散的也整理q其中的一些,只是完整的一直就没很好的整理Q现在脓(chung)出的q个也只是相当于目录l构式的Q?BR><IMG height=381 alt=软gq程规范.jpg src="http://www.tkk7.com/images/blogjava_net/bluedavy/软gq程规范.jpg" width=569 border=0><BR>q䆾基本是个目录式的Q明天按照这个结构完整的写出一关于Y件过E规范的文章Q主要是完整的进行描qͼ对于软gq程规范Q我q是那么认ؓ(f)Q每个team有每个team适合的过E规范,要灵zd不断的调_(d)不能固不变Q?img src ="http://www.tkk7.com/BlueDavy/aggbug/17883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-02 22:32 <a href="http://www.tkk7.com/BlueDavy/archive/2005/11/02/17883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>目成员U分制度http://www.tkk7.com/BlueDavy/archive/2005/09/11/12664.htmlBlueDavyBlueDavySun, 11 Sep 2005 07:53:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/09/11/12664.htmlhttp://www.tkk7.com/BlueDavy/comments/12664.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/09/11/12664.html#Feedback1http://www.tkk7.com/BlueDavy/comments/commentRss/12664.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/12664.html   在项目中Q通常׃目的繁忙得项目Q务的跟踪很大E度上失L义,D在最后进行项目成员工作评价以?qing)项目奖金分配时均带有很强的目l理的主观性,为更加准、客观的寚w目成员的工作做出评h(hun)以及(qing)合理的分配项目奖金,特制定项目成员积分制度?/SPAN>

       目成员U分制度作ؓ(f)目成员工作评h(hun)以及(qing)目奖金分配的唯一依据?/SPAN>

       U分采用如下Ҏ(gu)q行考核Q以目d核点,Zd的技术难度、时间紧急性来作ؓ(f)d的客观分敎ͼ对于d承担人则l合客观分数q行d完成的时间、质量、在完成d中表现出的责d、造成日构建的p|ơ数作ؓ(f)评估依据Q表格如下所C:(x)

d?/SPAN>

技术难?/SPAN>

分ؓ(f)三档分数Q?/SPAN>1~~5?/SPAN>5~~10?/SPAN>10~~15

1~~5Q技术难度低

5~~10Q技术难度中{?/SPAN>

10~~15Q技术难度高、需要预研或业务复杂度高

旉紧急?/SPAN>

分ؓ(f)三档分数Q?/SPAN>1~~5?/SPAN>5~~10?/SPAN>10~~15

1~~5Q时间充?/SPAN>

5~~10Q时间适当

10~~15Q时间紧?/SPAN>

d按时完成

按时完成l予5分,提前完成l予10分,推迟完成按天数计,每推q一天扣1?/SPAN>

d完成质量

分ؓ(f)三档分数Q?/SPAN>1~~5?/SPAN>5~~10?/SPAN>10~~15

1~~5Q勉强符?/SPAN>

5~~10Q质量中{?/SPAN>

10~~15Q优U的代?/SPAN>

 

质量考核要点Q?/SPAN>

是否遵@代码规范?/SPAN>TDD、功能的完成、代码的闭?/SPAN>

责Q?/SPAN>

分ؓ(f)三档分数Q?/SPAN>1~~5?/SPAN>5~~10?/SPAN>10~~15

1~~5Q表现尚?/SPAN>

5~~10Q表C{?/SPAN>

10~~15Q体现出了充的责Q?/SPAN>

 

责Q心考核依据Q?/SPAN>

d完成q程中的d性、问题出现时的及(qing)时沟通、压力的承受能力

造成日构建失败次?/SPAN>

p|一ơ扣1?/SPAN>

在项目Q务完成优U的情况下同时l予30分的U分奖励Q项目Q务出C重失误的l予扣除20分的惩罚?/SPAN>

BlueDavy 2005-09-11 15:53 发表评论
]]>
软gq程之需求分?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/08/09/9655.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 09 Aug 2005 06:05:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/08/09/9655.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/9655.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/08/09/9655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/9655.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/9655.html</trackback:ping><description><![CDATA[目正式启动Q要做的W一件事往往是需求调研,l历了忙的不断的和客户的交互后完成了调研,那么接下来该做什么呢Q接下来要做的就是需求分析了?BR>需求分析作Y件过E的重要环节Q其主要目的在于用某U客户和软g人员都能明白的语a来描q出客户调研的实际情况,q将作ؓ(f)后期软gpȝ设计以及(qing)工作计划制定的主要参考依据,需求分析文档中需要体现出几个关键点:(x)<BR>1、项目目?BR>      如果q项目目标都不清楚,那么目也就没法做了?BR>2、项目范?BR>      无边无际的项目谁敢做?BR>3、限制条?BR>      目通常是在有限制的情况下进行的Q例如时间、所依赖的相兌Y件、所采用的Y件语a技术等{?nbsp;<BR>4、功能性需?BR>      Ҏ(gu)调研分析客户对于pȝ中各功能模块的需求,重点在于描述出各功能模块的用例、受限制的地?权限控制)以及(qing)界面程?BR>5、非功能性需?BR>      非功能性需求主要有客户对于pȝ的性能要求、扩展要求、可靠性要求、系l安全、系l接口要求以?qing)和原有pȝ的集成等{需求?BR><BR>需求分析最重要的ؓ(f)Ҏ(gu)标书、合同分析出目的目标、范围、限制条Ӟ功能性需求则Ҏ(gu)需求调研的l果q行分析Q提炼出划分的功能模块以?qing)模块的功能、界面流E等Q非功能性需求有些在客户的语a中可能有所提及(qing)Q但一般来说不?x)很明显Q这个就需要依赖需求分析h员进行分析得出?BR><BR>在编写需求分析文档时通常可以采用q样的办法,先将目目标、范围、限制条件这些给写好了,在写功能性需求时可先调研的文档直接攑օQ之后再Ҏ(gu)个功能模块进行仔l的分析QŞ成各自功能模块的需求分析,非功能性需求可l合标书以及(qing)需求调研部分提?qing)的地方来编写?img src ="http://www.tkk7.com/BlueDavy/aggbug/9655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-08-09 14:05 <a href="http://www.tkk7.com/BlueDavy/archive/2005/08/09/9655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工具型h?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/07/14/7723.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 14 Jul 2005 11:51:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/07/14/7723.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/7723.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/07/14/7723.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/7723.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/7723.html</trackback:ping><description><![CDATA[何谓工具型h才?意指只会(x)使用工具而不?x)去考虑该工L(fng)构成{来完成软g开发的人员Q可以说Q在中国的Y件界其实大部分都是这L(fng)人才Q这L(fng)人才的优点在于能够用工具快速的q行目的徏设,如用struts、hibernate、spring{等Q由于中国目前的软g目大部分都属于q种实施型的Q所以其实用工h完成q些目无可厚非Q何必去重新发明轮子呢?但其实对于个Z至中国的软g业来_(d)q都是很可?zhn)的,对于个h来说Q可(zhn)之处很明显Q在如今各种工具不断冒出、版本不断更新的情况下,D了个人只能不断的跟随它的脚步Q而对于中国Y件业来说Q可(zhn)之处在于始l都被别人牵着d赎ͼ可?zhn)的是Q目前在业界很多工具使用的好的hp认ؓ(f)自己是业内的高手Q唉<BR>不过我觉得对于工具型人才业不能一子打死Q象做行业化软g的公司,其实需要的是q种工具型的人才Qؓ(f)啥呢Q行业化软g的公司的重点毕竟是做出符合行业特色的软gQ这U公司最重要的是什么,是对行业业务的深入了解,q合理的转化机操作Q它的h员应该更多的投入q方面,只要不是面对什么很复杂的行业,一般来说用工h完全可以搭徏Z个符合行业需要的软g的?BR>但对于个人发展来_(d)固然肯定得从工具型h才开始发展,之后则需要锁定自q兴趣点,Ҏ(gu)U或多种工具的实现手D进行深入的了解Q这对个h的发展有非常大的好处Q在掌握原理的基上其实即使以后的版本更新或者类似新工具的生的时候都不至于要拼命的去学习(fn)Q会(x)很容易理解,当然Q在一定程度上Q搞不好q可以自己做出更好的工具供其他h使用Q这对于个h对于业界都是一U幸。从q点上来_(d)其实q是比较ƣ赏普元的,不去评论它的技术怎么P毕竟它做CQ那些认p做到但现在没做到的请闭嘴?BR>所以说q是要看个h以及(qing)公司的定位,d出相应的选择?img src ="http://www.tkk7.com/BlueDavy/aggbug/7723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-07-14 19:51 <a href="http://www.tkk7.com/BlueDavy/archive/2005/07/14/7723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q倒是个好办法http://www.tkk7.com/BlueDavy/archive/2005/07/01/7017.htmlBlueDavyBlueDavyFri, 01 Jul 2005 14:29:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/07/01/7017.htmlhttp://www.tkk7.com/BlueDavy/comments/7017.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/07/01/7017.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/7017.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/7017.html在开发过E中是否为制定的开发步骤未能顺利执行而烦恼呢Q很多时候由于项目时间的紧急、h手的~少Q往往是由一个h负责整个模块从头到尾的开发,q没有做到那U严格的分层׃同的人员L担,q个时候严格的开发规范和快速的开发帮助向导就很重要,也有助于提升代码质量和开发效率,q能够得在有新加入的成员时候能快速的q入状态?BR>
q是IBM|站上的一好_(d)利用自己写一个eclipse插g来做到这点,q倒是个不错的Ҏ(gu)Q大家看看:(x)
http://www-128.ibm.com/developerworks/cn/opensource/os-eclip-extend/



BlueDavy 2005-07-01 22:29 发表评论
]]>
持箋集成的知识体p?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/06/06/5593.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Mon, 06 Jun 2005 03:43:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/06/06/5593.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/5593.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/06/06/5593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/5593.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/5593.html</trackback:ping><description><![CDATA[<P>在构思怎么样培训别人学?x)持l集成做法时ȝ一个知识体pdQ?BR><IMG title=持箋集成知识体系 height=455 alt=持箋集成知识体系.jpg src="http://www.tkk7.com/images/blogjava_net/bluedavy/q程改进/持箋集成知识体系.jpg" width=950 border=0><BR>其实持箋集成本n来说不是太难Q关键是把它变成一制度彻底的执行Q就象Microsoft在做日构建时的制度的挺好的?/P><img src ="http://www.tkk7.com/BlueDavy/aggbug/5593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-06-06 11:43 <a href="http://www.tkk7.com/BlueDavy/archive/2005/06/06/5593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>产品q程之品规划篇http://www.tkk7.com/BlueDavy/archive/2005/06/01/5429.htmlBlueDavyBlueDavyWed, 01 Jun 2005 10:53:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/06/01/5429.htmlhttp://www.tkk7.com/BlueDavy/comments/5429.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/06/01/5429.html#Feedback3http://www.tkk7.com/BlueDavy/comments/commentRss/5429.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/5429.html

产品q程之品规划篇

本文针对产品q程中的产品规划q程q行描述Q说明此q程的要炏V注意事等?/SPAN>

 

一.  概述

M事情在开展之前往往都有一个规划,规划又分为长期规划、中期规划和短期规划Q在规划中制定了在当前阶D需要达到的一个目标、基本的工作思\以及(qing)工作计划Q对于事情的利开展具有方向性的指导意义?/SPAN>

产品规划作ؓ(f)产品q程的第一个正式的q程Q此q程对于产品的发展方向、发展过E等h指导性的意义Q品规划所做的是一个长期的规划Q所以在制定的时候需要考虑多方面的因素?/SPAN>

?  要点

产品规划作ؓ(f)产品发展方向、发展过E等的指导性文Ӟ产品的v因、品的定位、品的蓝图规划、版本规划、里E碑规划、市场同cM品的Ҏ(gu)、推q方式是其要炏V?/SPAN>

2.1.       产品的v?/SPAN>

此部分中阐明对于产品的构思的来源Q品的起因通常来源于两U,一是公叔R目的U篏Q二是市场潜力的挖掘?/SPAN>

对于公司目的积累的起因则需要阐明历史项目的l验q说明ؓ(f)什么可发展成ؓ(f)产品?/SPAN>

对于市场潜力的挖掘方面则需说明市场潜力体现在了哪些地方?/SPAN>

2.2.       产品的定?/SPAN>

产品的定位至关重要,在一开始有个明的定位能帮助品按照一定的方向q行Q而不至于偏离方向或(f)时摸索方向,虽然在品的后期发展中适时调整方向也是必须的,但至在一开始的时候树(wi)立一个定位不至于在说赯个品的时候还说不出它的一个适用方向?/SPAN>

2.3.       产品的蓝图规?/SPAN>

产品的蓝图规划则Z品按照未来发展方向制定的一份发展蓝图计划,在蓝图中需要有效的描述产品的未来,臛_要让得这个品的来实是非常的光明Q如果连蓝图都不能给别h信心的话Q那q个产品是否要做真的需要仔l商酌?/SPAN>

产品的蓝图规划中甚至可以举些吸引人的场景Q让得品确实非常的实用?/SPAN>

产品的蓝图规划中q需要有对于产品优点的一些突出描qͼq些描述也就成ؓ(f)产品来的卖点,也是开发过E中首先需要把握的部分?/SPAN>

2.4.       版本规划

产品往往是一个长期战略目标,虽然可能已经惛_了很多的可做的有前途的部分Q但不可能划分在一个时期内全部做完Q需要按照品的卖点q行重点的攻养I往往来说对于产品的第一个版本在于突Z品的卖点所在,之后的第二个版本在易操作性、友好性等斚wq行加强Q之后的版本也许是更加的H出产品的优ѝ每个版本都需要有非常明确的目标和令h感觉明显的差别,q且在每个版本中都应该有H出的卖炏V?/SPAN>

2.5.       里程规?/SPAN>

产品的里E碑规划是指对于版本规划的分解,毕竟版本规划是一个大的目标,对于版本的里E碑规划主要按照产品的Y件过E制度来q行划分Q里E碑的划分同样需要依照一个重要的思想Q保证每个里E碑的到N是那么的振奋人心?/SPAN>

2.6.       市场同类产品的对?/SPAN>

Ҏ(gu)产品的定位以?qing)目标和市场同类产品q行Ҏ(gu)Q在Ҏ(gu)中最好列Z份关于两者功能的Ҏ(gu)点,分析清楚Ҏ(gu)的优势以?qing)己方的优势Qƈ需要分析对手的潜在走势?/SPAN>

2.7.       推广方式

推广方式则主要针对品的宣传、推qѝ市销{略q行规划Q品是否能够带来实际的利益依靠于此阶段的制定?/SPAN>

?  ȝ

产品规划文档作ؓ(f)产品发展q程中的指导性文档,光要性体现在以上的几个要炚w分,产品规划文档臛_重要Q在后期产品发展q程中品的需求文档,产品的理忉|档,产品的发展计划文档,产品的白皮书文档{都需要从此文档中诞生?/SPAN>



BlueDavy 2005-06-01 18:53 发表评论
]]>
关于团队http://www.tkk7.com/BlueDavy/archive/2005/05/31/5377.htmlBlueDavyBlueDavyTue, 31 May 2005 14:34:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/05/31/5377.htmlhttp://www.tkk7.com/BlueDavy/comments/5377.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/05/31/5377.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/5377.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/5377.html在Blog上、群里、Maillist里提Z上面的那个问题后Q反响强烈呀Q也得到了不的指导Q需要吸取前辈们更多的经验,^_^
通过讨论Q发现要团队的每个h都有x实是g挺矛盄事,毕竟团队需要一致的目标Q想法太多嘛又不好,但集思广益嘛又是l常要的Q这造成了一些的问题
有h也提到对于大型团队其实更重要的是执行力,x实
不过其实执行力在团队中也是非常重要的,当然Q由于层ơ间隔少了,自然?x)比大型团队要好一?BR>
关于团队的东西其实涉?qing)太多太多了Q团队的Ȁ励、团队一致目标的培养、团队的协作、团队信心的建立Q这些都不是Ҏ(gu)的事



BlueDavy 2005-05-31 22:34 发表评论
]]>
如何挖掘团队的智慧?Q?http://www.tkk7.com/BlueDavy/archive/2005/05/30/5345.htmlBlueDavyBlueDavyMon, 30 May 2005 12:58:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/05/30/5345.htmlhttp://www.tkk7.com/BlueDavy/comments/5345.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/05/30/5345.html#Feedback2http://www.tkk7.com/BlueDavy/comments/commentRss/5345.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/5345.html在如今的软g开发中Q依靠个力已l很隑֮成一个品的开发了Q尤其是企业U的产品Q更是需要整个团队的努力和智慧来共同完成Q挖掘团队的智慧成了品开发中|ؓ(f)重要的一个环节了?BR>但工作以来也l历了几个团队,觉得挖掘团队智慧真的不是一件容易的事,觉得一是因Z国h?不在其位Q不谋其?的思想太重Q导致很多时候可能是没去考虑整个团队或者说产品的发展,二是因ؓ(f)不愿意说Q这个原因就有多U多样了Q应该说不管是哪个原因,作ؓ(f)团队领导者最重要的应该就是去扑և适合发挥团队共同智慧的办法,让团队成员都能去为整个品、整个团队想惻I很多时候应该设惛_果自己就是团队的领导者,自己应该怎么要带领好q支团队Q这U想法其实真的应该有Q就像我以前有个同事Q在公司一直想做品,但ƈ没有真正对于q个产品的构思或探烦Q等公司l了q个Z(x)的时候就发现怸着头脑Q那时就已经q了Q,也许q有一部分是责d的问题,q有是应该扑և让团队成员都发表自己意见的方法,觉得其实q挺难,说没x我觉得不太可能,只是有可能没Ml的惻I毕竟都是做IT的h?BR>很多时候都觉得要带领一支团队真的不Ҏ(gu)Q所以很多h一生都以能带出一支精英团队ؓ(f)自豪?BR>不知道大家有什么办法能够更好的挖掘出团队的智慧Q?Q?BR>
ps:不好意思,贴在了首,希望能得到各位有l验的团队领D的



BlueDavy 2005-05-30 20:58 发表评论
]]>
行业化Y?---技术与业务的融?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/05/21/5038.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sat, 21 May 2005 09:59:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/05/21/5038.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/5038.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/05/21/5038.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/5038.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/5038.html</trackback:ping><description><![CDATA[<P>在踏入Y件行业之前,一直对软g有迷惑的概念Q就像是IT行业外的人看待做IT的h一P觉得做IT的h对电(sh)脑的什么都懂,不管是硬件、Y件、网l等{,呵呵<BR>如今t入软g业也几年了,对Y件也是有那么一点分cȝ概念了,目前大部分的中小企业甚至有些大企业都在做Z通常UC业化的YӞ行业化的软g偏向于解册业的具体业务问题Q如?sh)子政务行业的审批系l,?sh)信行业的?sh)信计费系l,财务用的财务pȝ{等Q这也就要求做此cY件的设计、开发h员对其相应的业务有较深刻的理解,以前做电(sh)子政务的时候就有个玩笑Q说做完了这个项目都可以d公务员了Q甚x一般的公务员还更加的了解其行业的一些东西,q也折了行业化Y件的一些本质,q也׃得在选择做行业化软g的时候需要慎重,毕竟要从做这个行业的软g转换到做另外一个行业的软g的时候ƈ不是一件简单的事,p银狐在他的那文档里写的Q也怽可以选择做一个业务专Ӟ沉浸C个行业数十年Q没错,怿q样的你出来后就是一个大牛hQ呵呵,既懂业务又懂技术,从这也就可以看出Q你得确定你所选择得行业化软g的行业,^_^Q有些拗口,不过实如此Q曾l说q,如果既对软g开发感兴趣Q同时又Ҏ(gu)个行业的具体业务有兴的话,做个业务技术专家也是非怸错的一件事?BR>当然Q在软g业中q有一U这L(fng)软gQ就是ؓ(f)开发商们提供支撑^台或开发^台的软gQ如WebsphereQW(xu)eblogic Portalq些东西Q其实我觉得q些也可以称之ؓ(f)行业化YӞ只是它面对的行业是Y件行业本w,^_^Q这也就要求你对软g行业本n有够的了解Q看h也许?x)觉得比做其他行业Y件更为简单是吗?毕竟是行业中人,呵呵Qƈ非如此,有谁能说对Y件行业的业务很懂的呢Q?扪心自问吧?BR>所以说Q做软g的h都在做着行业化性质的YӞ大家面对的行业不一P甚至那些支撑g的Y件也可以UCؓ(f)行业化的软gQ在选择从事做何U性质的行业化软g的时候得慎重Q毕竟h的精力是有限的,先精通而后博学是种不错的方向?BR>既然选择了做某种性质的行业化软g后,在选择公司时自然也要选择相应的公司,首先是要在提高自己技术的同时不断的加p己对该行业的了解Q甚臌比该行业的从业h员更加的懂,当然Q是在该行业可被信息化的斚wQ在提高技术时也要量首先提高适合该行业需求的技术,q个徏立在对于行业业务的深入理解和技术方面信息的掌握的基之上Q技术和业务的ƈ行是不可或缺的?BR>当然Q你可能认ؓ(f)可以借助业务分析专家+技术专家的方式来对行业化Y件进行规划、设计、开发,但毕竟在沟通上?x)^白的增加一些障,毕竟技术专家最l还是需要学?fn)这个业务,从业务中做出抽象Q才能Ş成架构模型的东西Q业务技术专家也是目前行业里最需要也是比较缺的?/P><img src ="http://www.tkk7.com/BlueDavy/aggbug/5038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-05-21 17:59 <a href="http://www.tkk7.com/BlueDavy/archive/2005/05/21/5038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>产品开发之不易http://www.tkk7.com/BlueDavy/archive/2005/05/19/4890.htmlBlueDavyBlueDavyThu, 19 May 2005 13:18:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/05/19/4890.htmlhttp://www.tkk7.com/BlueDavy/comments/4890.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/05/19/4890.html#Feedback2http://www.tkk7.com/BlueDavy/comments/commentRss/4890.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/4890.html产品开发和目开发有部分的类g处,毕竟都是软g开发过E,^_^Q不q品开发较之项目开发来说更加的不易Q下面就从品的整个开发过E来讲讲产品开发的不易?BR>一个公司在l过N多的目q对目q行ȝ或对市场的情况进行N多的分析后发C做成产品的潜在可能性,往往q时需要成立一个品规划小l来q行产品的规划,包括对于产品的定位,产品的市场切入点Q品的功能的策划,产品理念的编写,产品优势的规划,市场现有cM产品的研IӞ竞争Ҏ(gu)的优势,竞争Ҏ(gu)的走向,产品的卖点,产品允许的开发周期,产品的成本以?qing)利润的估计Q这可以列ؓ(f)产品的第一个阶D,产品可行性分析阶Dc(din)这个阶D늚不易之处显而易见,首先需要有明确的品的定位Q这个就有一定的隑ֺ了,然后产品的卖点,最隄地方在此了,毕竟q得估计在你q行产品开发周期的同时也会(x)有其他竞争公司在q行Q而且往往一个品会(x)是比较的庞大Q需要划分ؓ(f)几个周期来进行,所以这个时候又得同时估好产品允许的开发周期以?qing)每个版本的延箋性、品的成本以及(qing)利润的估计,毕竟商业化的公司QM能一直投入而没有利润,q得考虑好品开发完毕后市场切入点在哪,M能等C品开发完毕后才去惌怎么dq个优秀的东西呢Q这个阶D至关重要,很大E度上决定了产品的将来?BR>l历q品可行性分析之后,觉得q个产品可行Q值得投入那么p入了下一个阶D,技术可行性阶D,q个阶段主要是l徏一个品设计团队,Ҏ(gu)之初产品的第一周期的规划对其技术可行性进行评伎ͼ在这个阶D设计团队成员更多的应该是考虑怎么样去设计一个稳定而又快速的架构Qƈ需要对可能出现的技术风险进行评伎ͼ作ؓ(f)企业U的产品的话Q这时在架构上更需要考虑C业的需求,高ƈ发、稳定性、高响应{等Q架构上的掌握也是同L(fng)关键Q这时应该更多的是采用成熟的技术体p,q尽可能采取产品设计团队成员都熟(zhn)的体系l构Q如实需要采用不熟?zhn)的体pȝ构,则需要进行一定时间的对于此体pȝ构的了解Q以预计来的技术风险,q尽量多的采取已有的较好的东西,不重复发明轮子是关键Q当?dng)不是说去买N多贵的品来l装自己的品。这个阶D同L(fng)臛_重要Q技术架构的把握对后期整个品的研发都有臛_重要的媄(jing)响,设计团队需要确实的做到对于整个架构体系的把握和掌控(包括在将来体pȝ构不够完整时的调整的q行)以及(qing)技术风险的评估、避免和响应{略Q记住品的技术先q性不是关键的Q何况一般的公司Ҏ(gu)没法去做什么先q的东西Q而且客户也不?x)关心你的技术有多么的先q,重点在于产品的稳定、高效?BR>在经历过技术可行性分析后Q如果技术上评估可行的话Q那么就正式q入团队的研发阶D,此时需要组Z品的设计团队、研发团队、测试团队、规划团队、管理团队、策划团?用户团队)Q各团队的协同工作至关重要,q要制定一pd的品研发阶D制度,产品的质量保证体p,产品开发过E采用何UY件工E,产品团队的激励制度,各团队的协作制度。研发阶D中最为重要的是保证品的研发始终处于H出产品卖点的中心问题上Q不可偏L方向Qƈ首先保证产品卖点部分的完成,而研发阶D늚不易更不用说了Q做q开发的都知道,技术难度,软gq程的管理,质量的保证,各团队之间的协作Q由于Y件开发难以量化,但同时又得保证开发周期的有限Q更是增加了q整个过E的隑ֺ?BR>l于Q经q了q些漫长的阶D,产品的第一周期完毕Q此旉要同时加入进来的是产品宣传团队和销售团队了Q只有通过q个阶段才能使得产品的开发变得有意义Q品的效益才得以生,而同时品的{划团队则需要l考虑产品的后期发展方向的l节规划{等Q又重新轮@的进入整个品开发周期?BR>上面其实也只是较为简单的描述了品的周期Q在实际的品周期过E中Q所到的难度只?x)超q上q的Q毕竟品的整个q程有很多难以把握的因素Q诸如品的未来走势(q个需要良好的市场分析的眼?、技术走?需要良好的技术掌控能?、品的市场切入(q个可是产品变得有实际意义的关键)、品整个过E的团队的协作、h员的协作、h员的E_、公司整体的坚定(在品的q程中保持坚定的方向)。Q何一个环节都对品生重大的影响Q在M一个环节上都不能松懈。感觉在做行业标准化的Y件会(x)E微好一些?BR>产品化的q程是一个风险较高的q程Q但同时也是一个利润高的过E,产品化能使得一个公司得到质的提升,得到发展上的一个飞跃?/P>

BlueDavy 2005-05-19 21:18 发表评论
]]>
搭积?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/03/08/4919.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 08 Mar 2005 09:43:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/03/08/4919.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/4919.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/03/08/4919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/4919.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/4919.html</trackback:ping><description><![CDATA[<P>时候经常玩搭积木,也很喜欢玩,因ؓ(f)一块一块的积木经q拼凑后p搭出自己心中所想的N多的东西?/P> <P>软g界经q多q的发展Q一直都朝着一个搭U木的目标,希望软g能够通过对积木的拼凑快速的搭徏出应用Y件或者说产品Q当然和搭积木ƈ不完全相同,一个比喻而已Q如今流行着各种各样的这L(fng)思想Q如Z插g式的、构件式的,Portal中的Portlet式的Q无非都是希望Y件的重用性以?qing)可快速用性得到提升。在q些思想中,Portal的Portlet式以?qing)Eclipse的Plugin机制无非是其中的g者,非常的显|一定程度上来说也是q个推动了之前的面向lg、面向服务的软g思想的推q,也做C以前希望做到的和g一L(fng)E度Q即插即用?/P> <P>Plugin机制的好处不a而喻Q但Z插g式系l在插g交互的问题上好像一直就没有得到很好的解冻Iq点和搭积木不同,U木之间不需要共享数据等{,^_^Q而Plugin之间则相对不同,Plugin的互盔R讯、共享数据这个是很正常的需求,我们q不能指望Plugin完全独立的实C个部分,q个在少部分的Plugin可以如此Q但l大部分是不行的Q想必大家还记得IoC的一个原则:(x)"don't call me"QPlugin之间的相互通讯也通过IoCcM思想去解冻IQ?Q通过IoC容器注入所依赖的PluginQ?Q?Q?/P> <P>其实说v来如今有很多插g式的pȝQ这也不是什么新概念Q象media player的插件、Maven的插件等{,太多了,在Plugin的通讯、数据共享方面好像都q需要进步,不知道各位有什么看法?Q?</P><img src ="http://www.tkk7.com/BlueDavy/aggbug/4919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-03-08 17:43 <a href="http://www.tkk7.com/BlueDavy/archive/2005/03/08/4919.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.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://senimei9.com" target="_blank">ĻƵ</a>| <a href="http://686kp.com" target="_blank">ѵƵ</a>| <a href="http://popodino.com" target="_blank">պƵ</a>| <a href="http://664403.com" target="_blank">һۺ</a>| <a href="http://zqsplc.com" target="_blank">޸Ӱһ?</a>| <a href="http://dangyuming.com" target="_blank">av벻þ</a>| <a href="http://by2988.com" target="_blank">AV˵ </a>| <a href="http://hkcdk.com" target="_blank">һaƬþëƬ</a>| <a href="http://cykj-tech.com" target="_blank">һëƬ߲</a>| <a href="http://0967c.com" target="_blank">ѹۿƵ</a>| <a href="http://hdznzdh.com" target="_blank">Ļ</a>| <a href="http://djllgs.com" target="_blank">avһ</a>| <a href="http://jcss99.com" target="_blank">ww߹Ƶѹۿw</a>| <a href="http://33303339.com" target="_blank">պһ</a>| <a href="http://hn-hshb.com" target="_blank">˹ۿëƬ</a>| <a href="http://szclinic.com" target="_blank">þAV뾫Ʒ</a>| <a href="http://szclinic.com" target="_blank">ĻۺϾþ2</a>| <a href="http://ivr69.com" target="_blank">WWWɫ.COM</a>| <a href="http://002309.com" target="_blank">ѹۿ</a>| <a href="http://sswg2.com" target="_blank">ձ</a>| <a href="http://gnebs.com" target="_blank">޳aavҰĦ</a>| <a href="http://6266tv.com" target="_blank">þ޾Ʒۺ</a>| <a href="http://bjymt.com" target="_blank">츾һ</a>| <a href="http://601508.com" target="_blank">þwww˳ɿƬ </a>| <a href="http://532342.com" target="_blank">һȫٸɫƬ</a>| <a href="http://sxwlhg.com" target="_blank">þùӾƷŮ</a>| <a href="http://www398ph.com" target="_blank">Ʒþþþþþþþ</a>| <a href="http://slmlxg.com" target="_blank">ŷһ</a>| <a href="http://0101av.com" target="_blank">޾Ʒþþþþþ </a>| <a href="http://xbooktxt.com" target="_blank">պ߿Ƭ˳Ƶ</a>| <a href="http://hdznzdh.com" target="_blank">þþ99Ʒѹۿ</a>| <a href="http://gdbobo.com" target="_blank">߿Ƭ˳Ƶڵ</a>| <a href="http://hqwgg.com" target="_blank">ҹ޲</a>| <a href="http://okgou58.com" target="_blank">aĻ</a>| <a href="http://www84847.com" target="_blank">Ƶ97</a>| <a href="http://www-175345.com" target="_blank">츾ӰƬ</a>| <a href="http://591se591se.com" target="_blank">ۺɫ¶</a>| <a href="http://nn227.com" target="_blank">޾Ʒһۺ99þ</a>| <a href="http://by6215.com" target="_blank">˿wwwƵ</a>| <a href="http://zdxxxx.com" target="_blank">Ļ˾Ʒһվ</a>| <a href="http://shnisda.com" target="_blank">Ʒһ</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>