三鹿

大家都知道三鹿最近大壮国货风采的神威了吧?

小孩小时候吃的是雅培奶粉,据说是国外进口国内分装的,比这种完全国货好在一点是生产商质量控制比较好。

早年去日本时,买了一个Sony的单放机给秀楠妈(那时候还谈恋爱),买的时候售货员特意说明,这个单放机是马来西亚生产,不是日本本地制造,所以价格上有优惠。从那时起到现在我一直认为并且坚信,中国企业出口欧美日的产品可以信赖,比如我的ipod就是中国组装,但是中国企业在国内销售或者只在国内销售的,都要小心谨慎,哪怕广告做的天花乱坠,代表产品就是我们这些药品、保健品、食品,以及其他各种各样的东西。

让我如何爱这种烂货?不要以为有个脑晕,我们国家就和以前有什么不一样了。那些爱国的海外哥们,怎么都一个个还呆在国外不回来?这个事件国内质检部门未必不知情,但是为了脑晕,他们一定会选择一个和谐的方式来解决问题。

最后结果会如何?一定是要某个领导批示,然后工作组大张旗鼓工作,然后几周以后或者几个月后不了了之。国内总有新闻,还怕没有别的消息把这个事情冲淡么?现在谁还记得汶川,谁还记得贵州俯卧撑,谁还记得那些去年前年很多年的事情?

只是可怜了那些受难的孩子,他们没有个好爹妈。那些有头有脸的,谁家会去吃国内奶粉,都跑到英美吃正宗的当地奶粉了。比如什么瓜瓜什么明泽。

http://yingjiesixiang.blog.sohu.com/97125890.html

薄瓜瓜上的中学,叫哈罗公学,每年学费2万多英镑,相当于人民币40万左右,比范跑跑当老师的那个光亚中学还贵。范老师的年收入只有薄瓜瓜学费的一个零头。薄瓜瓜每个假期回家的路费,也超过范美忠的收入。

薄瓜瓜当选时尚先生。他在牛津上学的时候,玩橄榄球,玩马术,玩击剑,玩各种贵族极限运动。

懒婆娘的裹脚布

上周跟高中时最好的朋友约好星期天上午去看另外一个刚生了宝宝的同学。由于周六近凌晨一点才睡,就顺手关了手机,想大睡特睡一把,反正见面的时间是九点半,嘻嘻.

九点钟出门,等上车才想起开手机,意外地发现小姑家刚考上大外的表弟发短信来,说已经坐六点多的火车赶来报到了,我的脑袋立刻嗡的一声,毁了,原本说好他跟同学就伴来,不用家长陪同的,怎么临时变了主意?况且,我明明记得是9号啊!真是的,不怪帅哥他说我脑子不灵光了。

见了那好朋友简单聊两句,请她帮忙带上随分子的钱,就匆忙赶往火车站。约好的接站地点直到最后也没看见那娘俩,后来才知道他俩跟着人流奔北出口去了,唉,在志愿者指引下跑向大外接站车附近才等到终于见到小姑,见到从未谋面的表弟,真是感慨万千。家里亲戚走动还算可以,唯独这位小了我十一岁的表弟第一次见,不过可能因为血缘关系吧,并不觉得陌生,还颇有种亲切感。

一路无话(那娘俩晕车,大多是我在叨叨,介绍沿途的风景建筑)。跟着校车一行人浩浩荡荡奔向大外的旅顺校区,很顺利地办好了报到手续。比起去年送妹妹,算是轻松多了,我干得最利索的活儿就是是帮忙清洁和整理床铺,呵呵。后来小姑邻居家在医科大学就读的一个男孩儿过来帮忙介绍学校附近情况,找银行,买东西–那里人生地不熟,能有这样的向导还真是不错。等一切安排停当,我饿得都有点儿心慌了,早饭就没吃,中午饭我来请好了,说中午,已经是下午两三点钟,姑姑和表弟也饿得够呛呢。那小伙儿找的还真是个好地方,虽然服务差一点,但是绝对好吃实惠,四菜一汤,荤素搭配,算起来还不到五十块钱,难怪那小伙儿说大外学生特别认那家店。

从餐馆出来, 顺路买了点水果,想不到居然碰见熟人。当时在我们学校卖水果的王小儿,居然也跟着搬到旅顺,我们可是看着他,确切说是看着他外甥长大的啊,去年回学校学全科的时候见过,这一下又有一年多了,世界实在太小了,王小儿为人实在,绝对不是奸商,这些年一直靠诚信经营的,我们都很买他的帐,也是那小校友带我们去他那里的。看来,人还是实在些好,可惜他的妻,看上去很不般配。

返回学校途中,我们终于有心思看光景了,发现环境相当不错,设施也是一流的,小姑禁不住发起感慨,说当初自己要是考上大学多好,眼圈也跟着红起来。考大学于她,的确算是一种痛了,当初由由兄弟姐妹资助,复课一两年还是没能考上,闲言碎语压得她喘不过气,大人们经常警示我们姐妹俩,要好好学,别像小姑那样喳喳呼呼。天知道小姑那个年代考大学有多难,而且,据说她严重偏科,物理极差,又有那么多男生追逐,唉……

等安顿好表弟,我跟小姑返回市内已经晚上六点多,因为小姑坚持说第二天有重要事情,就买了早晨第一趟火车票。帅哥说好要请小姑好好吃一顿的,我们就直奔结婚时那个酒店,小姑说不能空着手,拗不过他,只得简单领买了点萌萌喜欢的石榴和李子两样水果,知道小姑过得很紧吧,不忍心让她花钱,倘不是她有事儿,还真想豁出去,带她玩两天的。

大连这季节算是最适合旅游了,很想陪小姑逛街,买点衣裳饰品之类的,她总是带着羡慕的眼神,不由自主地说我的衣服漂亮,戒指好看什么的,说我有福,说我的帅哥很好。我有点困惑,是什么让小姑变成现在的样子,看上去年轻轻的她,心态似乎老了很多,似乎岁月和生活的艰辛让她变得卑微了,不是我记忆中那个开朗自信的小姑,更像琪琪表妹口中的老妈妈了,也许我在她面前该安静些。

晚餐在愉快的气氛中度过,萌萌宝贝兴致极高,饭后给大家唱歌,背古诗,好一通表演,小姑自是喜欢的很。不经意间听见小姑跟萌萌奶奶的谈话,大致是小姑说自家条件不好,比不上两个姐姐,供儿子上大学很艰辛之类的,唉!真是不喜欢小姑这样说话,穷过富过,顺心就好,儿子那么争气,小姑夫为人忠厚老实,有手艺,赚钱也还可以,她自己也能做些活计。小姑虽然心气儿高,找了小姑夫也还算可以了,虽然年轻的时候可能有些小问题,现在儿子都上大学了,早已经坐住茬了吧。表弟的性格看起来就很像小姑夫,稳当,准成,不多言不多语,心里却特有数儿,将来,小姑家肯定越过越好的。

回到我们家已经是晚上九点来钟,洗了澡,领小姑简单参观下,看看照片,谈谈天,十点多就睡下了,为了送儿子,四点来钟就爬起来,真是不容易。我洗澡之后做了稀饭,上床后却久久不能入睡,可能是太累了吧,也可能有些兴奋。

第二天早晨五点半我跟小姑爬起,简单吃过早饭,本想挤挤时间去早市买些海鲜给她带回去,也顺便捎些给奶奶,被小姑拒绝了,她说家里从来不买,也不知道怎么吃那些东西,唉,又来了,就这样吧。我尽量多照顾表弟吧,相信对他儿子好,比什么都强。

马上就是中秋,希望在我跟妹妹的热情邀请下,表弟能过来跟我们一起过节,也好让小姑安心。

乱了

    最近很少写东西,日子过得浑浑噩噩,毫无生趣。如果不是还能跟帅哥撒撒娇,我都在怀疑自己是不是有有生命的动物了。

    因为考期临近,人变得异常烦乱。看书似乎没什么条理,只能机械性地做模拟题,正确率高时,自然欣喜一番,反之就万分沮丧。之前还经常接宝宝回来过周末,这两个礼拜也拉倒了。

    宝宝在幼儿园升了中班,很自豪地跟我说自己现在是甜甜班的小朋友了,而且特别喜欢新来的没保护好眼睛的老师,还多了很多朋友。对于她来说,去幼儿园也成了相对快乐的事情。在老师的建议和强制下,小丫头一下子报了四个班儿:蒙氏,英语,美术和舞蹈。前面三个是必须的,那厉害的贝贝老师说,不参加就得转到其他班级。最后的舞蹈是我们决定加选的,女孩子学点儿舞蹈,对形体气质总是有些帮助的,小丫头本身也很想学。至于英语,宝宝似乎没什么兴趣和信心,我答应帮她辅导,才乐呵呵地同意学。唉,简直是欺骗孩子,忙着考试的我,哪里有心情管她啊:(所以说,爷爷奶奶真是值得感谢,帮我分担那么多……

    妹妹升大二了,早准备买电脑给她的,因为当时学校不支持,就决定大二再说。这不,为了买电脑那丫头提前回来几天,我这做姐姐的带着她逛得昏天黑地,最终在帅哥的指点和陪同下买了她相对满意的一款东芝300系列的笔记本,算是了去一桩心事。还有一日帅哥公司有活动,我们姐俩去KTV唱了好几个小时的歌,简直非一般战士了,唱歌绝对是个体力活儿,累得脑袋嗡嗡的。原计划要去吃哈根达斯,实在是没气力了,只能作罢。本该好好复习的,却整天瞎混,简直毁了,闹心毁了。亲爱的妹妹临走时我一点儿没好气儿,让她赶紧滚蛋,之后又自责透顶。幸亏是自己亲妹妹,这要是小姑子,想必要跟我翻脸的吧。

    接下来的几天因为该来的那个死活没动静,折磨得我甚至怀疑自己是不是中奖了,帅哥也受不了我的疑神疑鬼,强烈建议俺买试纸测一下才终于放心了。唉,做女人,容易吗?

    状态不佳,生理和心理都跟着有问题。痘痘困扰了我两三个月,虽然有内分泌的原因,我的美容师也像是吃白饭的!态度倒是挺好,不过怎么能对我的脸一点都不负责任,看着顾客脸上长痘都不管不顾的。大热天的,她们院长顾问之类的领导又赶上休假,临时找不到人解决问题。害得我只好去另外一家美容院办月卡排痘,懒得见白痴美容师,十天半月去一次,找她糊弄两下,当时就看在她态度好的份儿上,不跟她计较吧,等逮到领导再说。但可恨的是那丫头近来动不动就改休息日,明知道我跟美女姐姐搭伴儿做脸的,凭什么给我随便改时间,说了算了还。这一次更过分,自己不打电话,居然让别人通知我,切!前天,终于忍无可忍,找他们刚换回来的院长一通理论,那家伙被我说得只有道歉的份儿,原本,俺不是得理不饶人的主儿,可他们也太过分了,我把脸交给她们是用来学徒的,还是用来糟蹋的?简直浪费我宝贵的时间!难道我是花钱砸大脑袋去了?!幸亏,那院长识相,换了位资深的美容师,赠送了一次氧疗给我,不然,哼,没完,老虎不发威,当我是病猫啊,切!急眼了给老娘退卡。唉,乱了乱了啊,整的自己跟泼妇似的。

    考试赶紧过去吧,再耗俩月,非得疯了不可。家里乱得像猪窝也没心思收拾,朋友约也懒得出去,一个人天天这样呆着,真成屋里憋屈型了。

    帅哥也表现不错,最近基本不跟我找别扭,容忍我撒泼耍赖,动不动还拉我出去逛逛街,看看电影,呵呵。上午一同学电话里还说大家都特别看好帅哥,赞我有福云云,哦,看来我不能一天到晚怨天尤人了。孩子有人管,老公不用操心。除了洗衣做饭打扫卫生,交各种费用,也没什么让我操心的,老老实实看书,临阵磨枪得了。人得知足,别没事儿找事儿的好,自己跟自己过不去,不值当的,哦?

浅论C++在Windows下的GUI自动测试(Unit Test)

昨天,公司开发组与测试组开会总结上一个release的经验教训,期间就提到一个问题,如何更好的更自动化的测试程序。

公司正在研究的是IBM的RFT,这个东西不用说,一定是功能强大、极难使用,IBM的软件做的如此有特色,也是不易。问题是作为一个开发人员,我只想能够快速的、可重复、可添加用例的测试自己的代码,难道只能用屏幕定位、鼠标模拟、控件按钮定位这样的“高深”技术?

最近在开发的主要是一些接口,给另外一个产品使用,没有界面上的任何东西。美国的同事开发了一个测试程序,跑在命令行下,每次我添加一个新的功能或者修改了一些代码,他那边只要跑一遍,就知道对以前的功能有没有影响。

这个东西不新鲜,就是unit test,几乎每个新兴的开源代码(以java、python、ruby为代表)都会有一个unittest字样的目录,里面就是一些主要的功能测试代码。可是为何我们一直没有很好的利用这个工具呢?

我想原因也很简单,unit test需要开发人员更好的对代码进行抽象化、模块化。有人一定会反驳说,对于GUI紧密相关的,没法做Unit Test。这是一个问题,但是不是绝对的,也不能成为不进行unit test的理由。关键还是要很好的做到MVC各个模块分离,降低他们之间的耦合度。

通常对于一个Windows程序员来说,一个GUI界面,会包含几个功能,一是按钮或者控件的响应,比如按下一个按钮,它要变成灰色,直到运行功能完成再恢复原状,或者是一个控件,点击一下会让用户输入,输入完成以后校验,根据校验的结果保存或者提醒用户出现问题。这些都是比较common sense的流程。

但是这些流程显然不是原子的(atom),它们涉及到了M(model)、V(View)、C(control)的各个方面,对于Windows程序员,这三个方面往往都被放入到CXXXDialog这样的类里面实现,自己还感觉封装的非常好。

我们就拿用户校验来说明一下如何分解这个MVC过程。

“一个控件,点击一下让用户输入”,这一部分显然是V和C的,个人感觉,这部分的测试可以由test方面做更深入的检查,开发人员需要保证功能实现完整,简单运行正确。

“接受用户输入、检查输入数据”,这一部分,显然是比较复杂的逻辑,涉及到Model和Control,View在这一部分可以被忽略掉,输入部分就是数据,输出部分就是检查的结果。很显然,这一部分可以被包装、抽象起来,自己单独做Unit Test。

“如果出错,反馈用户出错的结果”,这一部分基本上也是以View为主,是需要tester发现问题的部分。

“如果正确,保存用户的输入”,这块很显然也是可以分离出来单独进行自动测试的。

从上面分析可以看出来,GUI的测试不是不能进行,而是需要开发人员做更多的工作,需要很好的抽象逻辑计算部分的代码,如果可能,界面展示规则代码也可以抽象处理单独测试。

这不容易实现,但是值得去做。

另外,在研究C++的GUI测试,发现了一个很好的帖子:http://bytes.com/forum/thread606579.html

摘选一些比较精华的部分,中文部分是我的简单翻译:
Do a google for ‘TFUI’ – its a good technique for your problem.搜索一下“TFUI”,这是一个很好的技术,可以用来解决你的问题。(我找的结果是这里http://c2.c2.com/cgi/wiki?TestFirstUserInterfacesPrinciples)

Aside from that, the main approach is to treat the GUI library like any other 3rd party library – mainly, don’t try and unit test it, unit test your code that uses it.另外,主要的一点是应该把GUI库当作其他的第三方库来看待,不要试图对他们做单元测试,要测试使用这些库的代码。(简单说,就是不要测View界面部分,而是测试逻辑或者数据部分)

By this, I mean: ensure all of your logic (business rules, gui presentation rules, data retrival and updates, etc) are completed separated from the gui code. In your gui’s event handlers, don’t do anything except delegate to a plain old C++ Class.我是说:确保所有你的逻辑(商业逻辑,gui展示规则,数据存取更新等等)是完全的与界面代码分离,在GUI事件处理里面,不要做任何事情,除了代理到一个简单的C++类里。

By separating your code from the gui code, you can easily test your code, without having to even link to the gui library.通过分离代码(功能部分、规则部分)和GUI,就可以很容易测试代码而不需要连接到GUI库。

In software, abstract is usually the way to solve a problem.在软件中,抽象通常都是解决一个问题的办法。

Andrew

另一篇回复,

————————-

Its a great book for working with un tested code, and for seeing how
to create ‘seams’ between areas like GUI libraries and our code.(这本书应该是《修改代码的艺术》)

For those interested in unit testing, a good guide that M Features,
myself and plenty of others use is:

A unit test does NOT :
* Use any file IO
* Connect to a db
* Present anything on screen
* communicate across a network.

单元测试不应该:

1,使用任何文件输入输出。

2,连接到数据库。

3,展示任何东西到屏幕。

4,通过网络连接通讯。
The rational for this, is many, but boils down to forcing us to create
a design that is decoupled from these areas, which nearly always
results in a good, clean & highly cohesive design. For example, how
many times have we in the past put logic directly into a dialog
class? Where as with this style of testing, we force ourselves to
separate out the UI aspect from the logic part, resulting in us using
the MVC or MVP or Humble Dialog design patterns, as they allow us to
unit test the logic without going anywhere near the GUI.

The second major win is speed of test runs.

I can run 1200 unit tests in 42.7 seconds currently (and these are
Java unit tests!) because of following these guidelines. And because
they run soo fast the Team runs ALL tests ALL of the time.
Slow tests mean we run them fewer times, the less we run them, the
longer it is before we find out we broken something. The longer time
before finding out we broke something, the more costly it is to
fix…..

Andrew