<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>小糊涂的超级BLOG (Delphi Php Java C++ Object-C Python )</title>
	<atom:link href="http://blog.donews.com/cnsoft/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.donews.com/cnsoft</link>
	<description>Tags:服务器技术/BLOG应用发展/移动应用/游戏/Linux Manage/EBOOK下载/免费资源/IPHONE</description>
	<lastBuildDate>Fri, 18 May 2012 16:37:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>我来搭个台.等你来跳舞</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/05/19/1582986.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/05/19/1582986.aspx#comments</comments>
		<pubDate>Fri, 18 May 2012 16:34:49 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582986</guid>
		<description><![CDATA[基本上这就是到6-7月底我的工作. 我有两个目标, 一是完成基于RPC方式的 webgame开发框架. 二是顺便完成一个支持自动测试的引擎转换模块. 从下周开始考虑最重要的一部分,游戏世界之地图实现.
然后就是等其他同事快速复用或者是移植之前积累的系统模块. 当然准备工作要足够细.随时测试随时发现问题.
没有用户空想最浪费时间. 很快又要面临bigworld的那些烦心事了..
]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000"><span style="font-family: sans-serif">基本上这就是到6-7月底我的工作. </span></span>我有两个目标, 一是完成基于RPC方式的 webgame开发框架. 二是顺便完成一个支持自动测试的引擎转换模块. 从下周开始考虑最重要的一部分,游戏世界之地图实现.</p>
<p>然后就是等其他同事快速复用或者是移植之前积累的系统模块. 当然准备工作要足够细.随时测试随时发现问题.</p>
<p>没有用户空想最浪费时间. 很快又要面临bigworld的那些烦心事了..</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/05/19/1582986.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>secret kingdoms mobile released!神骑世界IOS 版发布</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/05/07/1582983.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/05/07/1582983.aspx#comments</comments>
		<pubDate>Mon, 07 May 2012 02:39:12 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582983</guid>
		<description><![CDATA[




http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8  神骑世界IOS 版发布


内容提要
为神秘王国的人类而战
准备好你的座骑,抵御魔族侵略者,保卫神秘国度
使用武器和盔甲定制你的座骑,经历30场战斗,穿越3个区域
SKM将会把SKO这款来自构思科技的全新奇幻MMO的动感新世界带到您面前
通过简单的挥击与轻敲战斗机制,与魔族的疯狂恶魔们战斗
挥击敌人进行攻击
轻敲屏幕招架敌人的攻击
使用重击打破敌人的格挡
独特的技能将会带来新的小游戏帮助你完成你的任务,抵御魔族的入侵
每个策略都会为你赚到更多的金币!使用你的金币购买宝石,药水,武器和盔甲
使用不同的道具定制你的兽人座骑。你的座骑是个海盗吗?还是一个忍者呢?都有可能哦!

Globex Studios 网站Secret Kingdoms Mobile 支持


屏幕截图
iPhone iPad

























 

]]></description>
			<content:encoded><![CDATA[<p><a href="http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8"></a></p>
<p><a href="http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8"></p>
<div><img src="http://a2.mzstatic.com/us/r1000/092/Purple/v4/b2/aa/f9/b2aaf969-113b-e778-55eb-9ff3bf28384e/IdmWVos9isS2WVSy8D6cu0-temp-upload.utezixjy.175x175-75.jpg" alt="Secret Kingdoms Mobile" width="175" height="175" /></div>
<p></a></p>
<p><a href="http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8"></a><br />
http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8  神骑世界IOS 版发布</p>
<div>
<div>
<h4>内容提要</h4>
<p>为神秘王国的人类而战<br />
准备好你的座骑,抵御魔族侵略者,保卫神秘国度<br />
使用武器和盔甲定制你的座骑,经历30场战斗,穿越3个区域</p>
<p>SKM将会把SKO这款来自构思科技的全新奇幻MMO的动感新世界带到您面前</p>
<p>通过简单的挥击与轻敲战斗机制,与魔族的疯狂恶魔们战斗<br />
挥击敌人进行攻击<br />
轻敲屏幕招架敌人的攻击<br />
使用重击打破敌人的格挡<br />
独特的技能将会带来新的小游戏帮助你完成你的任务,抵御魔族的入侵<br />
每个策略都会为你赚到更多的金币!使用你的金币购买宝石,药水,武器和盔甲<br />
使用不同的道具定制你的兽人座骑。你的座骑是个海盗吗?还是一个忍者呢?都有可能哦!</p>
</div>
<div><span style="color: #ffffff"><a rel="nofollow" href="http://www.globexstudios.com" target="_blank">Globex Studios 网站</a><a rel="nofollow" href="http://www.globexstudios.com" target="_blank">Secret Kingdoms Mobile 支持</a></span></div>
<div>
<div>
<h2>屏幕截图</h2>
<div><a href="http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8#">iPhone</a> <a href="http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8#">iPad</a></div>
</div>
<div>
<div>
<div>
<div><img src="http://a2.mzstatic.com/us/r1000/110/Purple/v4/ff/b5/e9/ffb5e9b2-84c6-9ff1-6c9f-97047f5d3b07/mza_5599108100548081954.320x480-75.jpg" alt="iPhone 屏幕截图 1" /></div>
<div><img src="http://a2.mzstatic.com/us/r1000/106/Purple/v4/ce/bb/d6/cebbd608-cf8b-3b28-3610-56e7605bf41e/mza_8637657951032783562.320x480-75.jpg" alt="iPhone 屏幕截图 2" /></div>
<div></div>
<div><img src="http://a4.mzstatic.com/us/r1000/090/Purple/v4/fb/78/53/fb7853bd-2261-b8ca-d34f-44a5ff1ad5d6/mza_9082932920192870834.320x480-75.jpg" alt="iPhone 屏幕截图 4" /></div>
<div><img src="http://a5.mzstatic.com/us/r1000/070/Purple/v4/9b/0d/12/9b0d12e5-97f8-d3d2-d60f-229562b06633/mza_1269245234804534442.320x480-75.jpg" alt="iPhone 屏幕截图 5" /></div>
</div>
</div>
<div>
<div>
<div><img src="http://a4.mzstatic.com/us/r1000/090/Purple/v4/38/ce/1d/38ce1d2c-3e79-ac56-a037-6e5714c49fbb/mza_7087967688811025741.480x480-75.jpg" alt="iPad 屏幕截图 1" /></div>
<div><img src="http://a3.mzstatic.com/us/r1000/118/Purple/v4/91/8d/ab/918dab66-40e4-7510-5da9-571cdde11248/mza_8489662417118278500.480x480-75.jpg" alt="iPad 屏幕截图 2" /></div>
<div><img src="http://a2.mzstatic.com/us/r1000/103/Purple/v4/b4/3b/7c/b43b7cfa-8b19-2c12-a71b-ea2aae632766/mza_8519667994173474106.480x480-75.jpg" alt="iPad 屏幕截图 3" /></div>
<div><img src="http://a5.mzstatic.com/us/r1000/111/Purple/v4/7e/64/27/7e6427b8-9d35-100a-8af2-18cabfe5e337/mza_5920619363293176348.480x480-75.jpg" alt="iPad 屏幕截图 4" /></div>
<div><img src="http://a4.mzstatic.com/us/r1000/095/Purple/v4/63/b5/10/63b510e4-06fb-a5c7-0196-a9832f0c4f97/mza_7932658607449833620.480x480-75.jpg" alt="iPad 屏幕截图 5" /></div>
</div>
</div>
</div>
</div>
<div></div>
</div>
<p><a href="http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8"></a></p>
<p><a href="http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8"> </a></p>
<p><a href="http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8"></a><a href="http://itunes.apple.com/cn/app/secret-kingdoms-mobile/id520175604?mt=8"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/05/07/1582983.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>时间流逝的同时你也会错过很多</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/05/06/1582974.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/05/06/1582974.aspx#comments</comments>
		<pubDate>Sun, 06 May 2012 10:05:49 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2012/05/06/1582974.aspx</guid>
		<description><![CDATA[有此感觉是自10年以来就很少写blog. 一度以为自己已经不会再写.说实话没办法写也是因为工作的内容是没办法太完整的与人分享.而除了工作,又没有太多时间去涉猎其他领域. 回过头来看,我大抵上还是一个system programmer, 尽管我也尝试去改变,但很快又被抓去做各种server system. 接下来的一个月的时间内,我会有时间整理自己,也要从google开始.赫然发现,有价值的资源太多了. 另外其实技术的沟壑加以时日终会填平的, 而来自design的部分却变得更加不可捉摸. 一个技术团队如果终日处于实验室阶段,当真是有些悲剧的.因为看到的是各种自我满足,还有各种的不确定和风险. 希望是我老了,看到的都是我的误判.
之前缺少的其实也是时间,谁都有很多关于优化之类的想法,但是没来得及付诸于实践.其实关于某些系统的实现,曾经就有些担心,会造成数据的浪费,但也只有实践过才会看到.而总体的系统设计模式,就更微妙了, 很难想象再去merge xml是什么样的状态.
Todo: Track refactor project . think more about unit test.
]]></description>
			<content:encoded><![CDATA[<p>有此感觉是自10年以来就很少写blog. 一度以为自己已经不会再写.说实话没办法写也是因为工作的内容是没办法太完整的与人分享.而除了工作,又没有太多时间去涉猎其他领域. 回过头来看,我大抵上还是一个system programmer, 尽管我也尝试去改变,但很快又被抓去做各种server system. 接下来的一个月的时间内,我会有时间整理自己,也要从google开始.赫然发现,有价值的资源太多了. 另外其实技术的沟壑加以时日终会填平的, 而来自design的部分却变得更加不可捉摸. 一个技术团队如果终日处于实验室阶段,当真是有些悲剧的.因为看到的是各种自我满足,还有各种的不确定和风险. 希望是我老了,看到的都是我的误判.<br />
之前缺少的其实也是时间,谁都有很多关于优化之类的想法,但是没来得及付诸于实践.其实关于某些系统的实现,曾经就有些担心,会造成数据的浪费,但也只有实践过才会看到.而总体的系统设计模式,就更微妙了, 很难想象再去merge xml是什么样的状态.</p>
<p>Todo: Track refactor project . think more about unit test.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/05/06/1582974.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Type 1120: Access of undefined property JSON 无法明确解析多名称引用 JSON</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/05/03/1582972.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/05/03/1582972.aspx#comments</comments>
		<pubDate>Thu, 03 May 2012 05:28:08 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2012/05/03/1582972.aspx</guid>
		<description><![CDATA[Type 1120: Access of undefined property JSON
无法明确解析多名称引用 JSON 
https://github.com/mikechambers/as3corelib/issues/171
If you’re using as3corelib like I’ve been using for quite some time now, you will notice this error.  To fix it you simply need to remove the following import (it may vary based on your project structure):
import com.adobe.serialization.json.JSON;
and then you’ll need to modify your code to [...]]]></description>
			<content:encoded><![CDATA[<p>Type 1120: Access of undefined property JSON<br />
无法明确解析多名称引用 JSON </p>
<p>https://github.com/mikechambers/as3corelib/issues/171</p>
<p>If you’re using as3corelib like I’ve been using for quite some time now, you will notice this error.  To fix it you simply need to remove the following import (it may vary based on your project structure):</p>
<p>import com.adobe.serialization.json.JSON;</p>
<p>and then you’ll need to modify your code to replace:</p>
<p>JSON.decode(myString);<br />
and<br />
JSON.encode(myObject);</p>
<p>to:</p>
<p>JSON.parse(myString);<br />
and<br />
JSON.stringify(myObject);</p>
<p>You can find the full details of the new implementation of the native JSON support in AS3 on Adobe’s Reference Site</p>
<p>解决办法是移除那个 import  然后把对应的函数名改掉. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/05/03/1582972.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1046: 找不到类型，或者它不是编译时常数: Vector。解决办法</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/05/03/1582971.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/05/03/1582971.aspx#comments</comments>
		<pubDate>Thu, 03 May 2012 04:15:17 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2012/05/03/1582971.aspx</guid>
		<description><![CDATA[第一个问题: 1046: 找不到类型，或者它不是编译时常数: Vector。
这是我打开一个as项目遇到的错误.
解决办法是: 用flash 3.5以上的sdk 发布版本设置成10.0.0 
]]></description>
			<content:encoded><![CDATA[<p>第一个问题: 1046: 找不到类型，或者它不是编译时常数: Vector。<br />
这是我打开一个as项目遇到的错误.<br />
解决办法是: 用flash 3.5以上的sdk 发布版本设置成10.0.0 </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/05/03/1582971.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>组织结构需要自适应性</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/04/26/1582943.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/04/26/1582943.aspx#comments</comments>
		<pubDate>Thu, 26 Apr 2012 02:57:39 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[URL History /每日一搜]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582943</guid>
		<description><![CDATA[有感于最近一段时间整个团队的工作的状态,自从公司调整人员之后, 明显感觉与之前的紧张有序相离甚远.  有下面几个问题
一 ,  考虑的是如何调整结构?  还是考虑调整的目标.
我只能说一下子就去考虑很多细节, 不大可能把握整体. 即便是认同需要调整, 每个人的出发点也是不同的, 相对想改进的部分也是不相同的. 但大多是从自身所熟悉的部分提出.  正确的顺序应该是搜集需求,整理排优先级. 确定阶段性目标.
避免遗漏.
二， 如果上司不告诉下属完整的计划, 下属怎么知道要提一些什么建议呢?
看到什么再跑去说,恐怕就来不及了.
三, 切忌大手术. 要坚持微创.  当所有系统都在变更时,实在是没有办法衡量何为好,何为坏.
四, 与其讨论该怎么做, 不如先做一些技术测试. 坚持随时测试评估.  通常 没有办法说服别人的时候, 只能先搁置. 或者拿出数据来, 我更建议还是先做一些核心瓶颈的工作.
五, 已经没有足够的资源支持正常的开发工作, 怎么办?
以上 的一些问题需要有人考虑, 但不能人人都去考虑. 这一点,明显感觉不如之前做的周全了. 人员减少了, 但是职责空缺没有补齐. 组织结构变得残缺了, 然而关键的人却没有意识到这一点. 而我只能意识到有缺失, 缺失的部分我也不知道全部,因为是缺失的人带走的,这是问题的关键.
组织结构变更以后, 现有的人员会像流水一样流动,弥补空缺, 弥补得好 整个团队还是那么大, 弥补不好的话, 就会缩小,或者成海绵状. 有洞.
]]></description>
			<content:encoded><![CDATA[<p>有感于最近一段时间整个团队的工作的状态,自从公司调整人员之后, 明显感觉与之前的紧张有序相离甚远.  有下面几个问题</p>
<p>一 ,  考虑的是如何调整结构?  还是考虑调整的目标.</p>
<p>我只能说一下子就去考虑很多细节, 不大可能把握整体. 即便是认同需要调整, 每个人的出发点也是不同的, 相对想改进的部分也是不相同的. 但大多是从自身所熟悉的部分提出.  正确的顺序应该是搜集需求,整理排优先级. 确定阶段性目标.<br />
避免遗漏.</p>
<p>二， 如果上司不告诉下属完整的计划, 下属怎么知道要提一些什么建议呢?<br />
看到什么再跑去说,恐怕就来不及了.</p>
<p>三, 切忌大手术. 要坚持微创.  当所有系统都在变更时,实在是没有办法衡量何为好,何为坏.</p>
<p>四, 与其讨论该怎么做, 不如先做一些技术测试. 坚持随时测试评估.  通常 没有办法说服别人的时候, 只能先搁置. 或者拿出数据来, 我更建议还是先做一些核心瓶颈的工作.</p>
<p>五, 已经没有足够的资源支持正常的开发工作, 怎么办?</p>
<p>以上 的一些问题需要有人考虑, 但不能人人都去考虑. 这一点,明显感觉不如之前做的周全了. 人员减少了, 但是职责空缺没有补齐. 组织结构变得残缺了, 然而关键的人却没有意识到这一点. 而我只能意识到有缺失, 缺失的部分我也不知道全部,因为是缺失的人带走的,这是问题的关键.<br />
组织结构变更以后, 现有的人员会像流水一样流动,弥补空缺, 弥补得好 整个团队还是那么大, 弥补不好的话, 就会缩小,或者成海绵状. 有洞.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/04/26/1582943.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>单元测试的目标和意义</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/04/20/1582939.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/04/20/1582939.aspx#comments</comments>
		<pubDate>Fri, 20 Apr 2012 04:34:35 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[Do-/Projects/关注的技术]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582939</guid>
		<description><![CDATA[单元测试 只是测试小到函数大到系统的功能. 但理论上是相同的, 定义输入和期望输出, 并尽可能做到条件分支覆盖. 无论测试的目标是什么, py 还是某个logic系统.
单元测试不是万能的,所以它的意义只是改善和提高. 试想, 如同盖楼,如果盖楼用的材料都有问题, 楼能结实吗?
不能把单元测试的目标的界定范围扩大, 比如应该只是测试一个函数A,  而不是去测试调用此函数的一个函数 B，在只测试B的用例里也同样会忽略A.  单元测试的方式一般分两种, 一是验证输入输出的结果, 一种是验证call order  或者是否某个函数被调用到.
单元测试之后,可以考虑一些集system测试,无论白盒还是黑盒,那是下一个阶段的事了.  单元测试原理不复杂,但是在实践起来也是件不容易的事(实践的细节才是最宝贵的财富 ), 因为需要组织足够多的测试用例,方能保证经过了测试的系统是ok的 .如果测试用例不够, 比如考虑的情况不足有遗漏, 即使表面上测试通过了 , 系统仍然是有问题的 .  所以我个人理解, 单元测试的意义在于构建一个可以控制的结构, 这个结构是需要不断完善的, 很符合Web 2.0 产品一直是beta 的理念. 但是随着时间的推移, 必然是可以提高效率的 , 因为可以消除一部分已知的问题重复发生。 不管这个导致bug的比例是多少, 都是有意义的, 比人为的去判断和手工的验证要快速的多.
无论怎么样,先把能搞的先得搞起来.  一个项目是否是可以进行自动测试 应该是这个项目是否能持续成功的一个标尺.  (持续的意思就是排除偶然的成功)
update: 单元测试另外一个意义是可以持续检查. 虽然是依赖于测试用例的. 但如果测试用例组织的合理, 只是某些功能性函数的修改必然会导致某些旧的测试变成不通过(依赖的功能部分错了).  似乎多了很多额外的工作,就是写完程序还需要写测试数据. 但这部分最合理的是谁修改程序谁修改测试用例。 还有就是测试数据最好是指定获取的方式,而不是写死的数据. 因为从实际系统中获取的数据才是真实需要测试的.
update1: 单元测试势必需要花更多的精力.改动函数自然就需要改动测试用例.如果需要的话. 但是也是为了确保功能和设计目标一致.不然更多衍生的调用都会发生错误的.至少某个函数被修改以后,可能就不再适合被其他场合使用了.
果然,很是有阻力.毕竟不是都清楚引入了单元测试之后需要做什么. [...]]]></description>
			<content:encoded><![CDATA[<p>单元测试 只是测试小到函数大到系统的功能. 但理论上是相同的, 定义输入和期望输出, 并尽可能做到条件分支覆盖. 无论测试的目标是什么, py 还是某个logic系统.<br />
单元测试不是万能的,所以它的意义只是改善和提高. 试想, 如同盖楼,如果盖楼用的材料都有问题, 楼能结实吗?</p>
<p>不能把单元测试的目标的界定范围扩大, 比如应该只是测试一个函数A,  而不是去测试调用此函数的一个函数 B，在只测试B的用例里也同样会忽略A.  单元测试的方式一般分两种, 一是验证输入输出的结果, 一种是验证call order  或者是否某个函数被调用到.</p>
<p>单元测试之后,可以考虑一些集system测试,无论白盒还是黑盒,那是下一个阶段的事了.  单元测试原理不复杂,但是在实践起来也是件不容易的事(<strong><span style="color: #ff0000">实践的细节才是最宝贵的财富</span></strong> ), 因为需要组织足够多的测试用例,方能保证经过了测试的系统是ok的 .如果测试用例不够, 比如考虑的情况不足有遗漏, 即使表面上测试通过了 , 系统仍然是有问题的 .  所以我个人理解, 单元测试的意义在于构建一个可以控制的结构, 这个结构是需要不断完善的, 很符合Web 2.0 产品一直是beta 的理念. 但是随着时间的推移, 必然是可以提高效率的 , 因为可以消除一部分已知的问题重复发生。 不管这个导致bug的比例是多少, 都是有意义的, 比人为的去判断和手工的验证要快速的多.</p>
<p>无论怎么样,先把能搞的先得搞起来.  一个项目是否是可以进行自动测试 应该是这个项目是否能<span style="color: #ff6600"><strong>持续</strong></span>成功的一个标尺.  (持续的意思就是排除偶然的成功)</p>
<p>update: 单元测试另外一个意义是可以持续检查. 虽然是依赖于测试用例的. 但如果测试用例组织的合理, 只是某些功能性函数的修改必然会导致某些旧的测试变成不通过(依赖的功能部分错了).  似乎多了很多额外的工作,就是写完程序还需要写测试数据. 但这部分最合理的是谁修改程序谁修改测试用例。 还有就是测试数据最好是<strong><span style="color: #ff0000">指定获取的方式,而不是写死的数据</span></strong>. 因为从实际系统中获取的数据才是真实需要测试的.<br />
update1: 单元测试势必需要花更多的精力.改动函数自然就需要改动测试用例.如果需要的话. 但是也是为了确保功能和设计目标一致.不然更多衍生的调用都会发生错误的.至少某个函数被修改以后,可能就不再适合被其他场合使用了.<br />
果然,很是有阻力.毕竟不是都清楚引入了单元测试之后需要做什么. 所以需要花时间准备实施的细则. (太多事情了&#8230;)</p>
<p>Q1: 测试用例如何组织。</p>
<p>需要根据某函数被引用的所有的context来设计. 如果是操作对象实体的,需要指定获取数据的方法,而不是简单静态数据. 这样好处是可以测试对象的数据定义变更时,是否可以测试通过. 测试用例的覆盖率,的确是100% 比较难.但是可以逐步完善完整.</p>
<p>Q2: 如果不大改动代码,怎么支持测试呢?</p>
<p>要进行自动测试的前提是代码是可以测试的.比如:代码是模块独立的,显然比处处调用的好测试. 将环境依赖的代码剥离.要么做预处理,要么写Dummpy class. 要保证,输入输出不变. 辅助的函数估计还是要加的,不影响运行,但是为了收集验证数据的. 代码天生就可以切换运行环境 会更方便进行自动测试.更容易构造运行环境. 但的确也有风险,性能问题等.</p>
<p>Q3: 运行环境和模拟的差异</p>
<p>在完成模拟的自动单元测试之后,在真实环境中需要配合bots来进行黑盒测试.(优先做这个吧) 但是单元测试如果没有的话,估计这部分就会很多问题了,所谓书到用时方恨少了.<br />
#bots 需要模拟真正的玩家交互.而不是写太多的cheat方法.这样测试的结果才会更加真实.<br />
#bots 还要做的是支持 groups test.<br />
#bots 还要支持测试数据的载入.<br />
（this can be implemented based on our customized gateway )</p>
<p>controlable test framework. plugined component framework. (!!!)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/04/20/1582939.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>openssl compile error &#8220;has modification time 3.8e+05 s in the future&#8221;</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/04/16/1582937.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/04/16/1582937.aspx#comments</comments>
		<pubDate>Mon, 16 Apr 2012 09:10:50 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[Exchange /帮助别人解决的问题]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582937</guid>
		<description><![CDATA[This error message is prompted when i try to compile dbmgr with mysql support.
later i find the reason, because  i mounted local file to centos .  finally, after  i copy all files to centos , and compile successfully.
interesting.   
http://hi.baidu.com/marbleant/blog/item/619e58170f3dbd4320a4e9f4.html ,  share with you.  i like this article.
]]></description>
			<content:encoded><![CDATA[<p>This error message is prompted when i try to compile dbmgr with mysql support.</p>
<p>later i find the reason, because  i mounted local file to centos .  finally, after  i copy all files to centos , and compile successfully.</p>
<p>interesting.  <img src='http://blog.donews.com/cnsoft/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>http://hi.baidu.com/marbleant/blog/item/619e58170f3dbd4320a4e9f4.html ,  share with you.  i like this article.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/04/16/1582937.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bigworld  究竟有多少潜规则..</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/04/09/1582931.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/04/09/1582931.aspx#comments</comments>
		<pubDate>Mon, 09 Apr 2012 03:34:10 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2012/04/09/1582931.aspx</guid>
		<description><![CDATA[1. bigworld 技术支持,从来都是 按时放假,按时下班. 不管你有多紧急. msn 随时 offline
2. 如果 server 时不时的 crash 只能怨你脚本代码写得不好. bigworld 要你做的永远只有如下几件事, 搜集log,搜集track dump,各种搜集. 然后就是等待..  能不能解决, 你控制不了.  还有就是让你找重现的步骤. 最好是能100%重现. 往往是过了很多天, 告诉你,这是个bug, 下个版本会修复. 而你需要勇气一下子把服务器版本升级, 或者拿到一个hotfix, 你只能当小白鼠, 不好使的话, 继续从上面的第一个步骤开始.
3. client 的问题不要报太大期望,尤其是第三方的库,mozilla,zip,fmod,speedtree 各种. 一旦出现各种不兼容, 那可真是要了命的.
4. 没有source ,所以真的出现致命灾难的时候, 是没办法解决的, 只能等待bigworld。 千万不要等到他们放假的时候出事.
5. bigworld 只负责引擎, 不负责游戏, 你做游戏的出了问题, 就是你用的不对.
6. 总之问题出现的原因, 你没有遵循好bigworld的潜规则..  文档里都没有的
只能送给bw一句话: 关键时刻真的不给力啊&#8230;  够坑爹的.  莫不成,我们就不应该用来做mmorpg吗.
&#8221;
… middleware is [...]]]></description>
			<content:encoded><![CDATA[<p>1. bigworld 技术支持,从来都是 按时放假,按时下班. 不管你有多紧急. msn 随时 offline<br />
2. 如果 server 时不时的 crash 只能怨你脚本代码写得不好. bigworld 要你做的永远只有如下几件事, 搜集log,搜集track dump,各种搜集. 然后就是等待..  能不能解决, 你控制不了.  还有就是让你找重现的步骤. 最好是能100%重现. 往往是过了很多天, 告诉你,这是个bug, 下个版本会修复. 而你需要勇气一下子把服务器版本升级, 或者拿到一个hotfix, 你只能当小白鼠, 不好使的话, 继续从上面的第一个步骤开始.<br />
3. client 的问题不要报太大期望,尤其是第三方的库,mozilla,zip,fmod,speedtree 各种. 一旦出现各种不兼容, 那可真是要了命的.<br />
4. 没有source ,所以真的出现致命灾难的时候, 是没办法解决的, 只能等待bigworld。 千万不要等到他们放假的时候出事.<br />
5. bigworld 只负责引擎, 不负责游戏, 你做游戏的出了问题, 就是你用的不对.<br />
6. 总之问题出现的原因, 你没有遵循好bigworld的潜规则..  文档里都没有的</p>
<p>只能送给bw一句话: 关键时刻真的不给力啊&#8230;  够坑爹的.  莫不成,我们就不应该用来做mmorpg吗.</p>
<p>&#8221;</p>
<blockquote><p>… middleware is the right way to go if you want to focus   your team on doing games instead of tech. And there is always enough   tech to develop in addition to the middleware anyway.</p>
<p>Getting to know [your middleware] will cost a lot of time, but it is  time you  have to spend or you will very likely regret it at some point.</p>
<p>But when things get complicated and you need to know exactly how a   system behaves, there is no better place to look then the source code.&#8221;</p>
<p>如果不能把文档做足 做细, 就请让我们看到源码&#8230;    引自: http://www.gamasutra.com/view/news/37304/Opinion_Know_Your_Middleware_Source_Code_Please.php</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/04/09/1582931.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>魔兽世界不是纸糊的</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/03/08/1582895.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/03/08/1582895.aspx#comments</comments>
		<pubDate>Thu, 08 Mar 2012 14:16:54 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2012/03/08/1582895.aspx</guid>
		<description><![CDATA[http://game.zol.com.cn/132/1324568.html
魔兽世界的服务器硬件需求批露.
http://server.51cto.com/News-194644_3.htm
2200台啊..多少米.这可不是用纸糊的.
]]></description>
			<content:encoded><![CDATA[<p>http://game.zol.com.cn/132/1324568.html</p>
<p>魔兽世界的服务器硬件需求批露.</p>
<p>http://server.51cto.com/News-194644_3.htm</p>
<p>2200台啊..多少米.这可不是用纸糊的.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/03/08/1582895.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

