Twitter Updates

    follow me on Twitter

    February 19, 2009

    我的测试发展路程

    大概两年前在51testing上发表了文章《个人测试发展轨迹》,没想到引起了同行很大的反应。原文由于某些原因已经看不到了,而且今天又是自己测试发展的又一个里程碑,因此再把我个人的测试发展路程简单叙述一下,给那些看不到前一篇文章的朋友。

    1. 大学本科是一所重点大学,但不是名校。毕业后进入北京一所公司做开发工作,起薪1100月薪。半年试用期后涨到1700。
    2. 一年后跳槽到国内一家著名的通信公司做开发,年薪都算上大概10万。
    3. 工作半年左右辞职考研。研究生毕业后偶然进入测试行业,年薪跟以前相当。
    4. 试用期后提升为team lead,一直工作了大概20个月的样子,工资都有涨动。自己设计实现了一套自动化测试平台。
    5. 被美国一家著名软件公司邀请面试,并且成功得到offer,开始全职自动化测试的工作。
    6. 工作两年之后开始向高级测试的方向发展。

    February 15, 2009

    安全测试系列二:缓冲区溢出(Buffer Overflow/Overrun)

    说到安全问题就不得不提BO。BO是安全中最大,最重要的问题,也是最最经典的安全漏洞,它可以使黑客执行任意代码,从而引发EOP的攻击。很多黑客并不太在乎其他的安全漏洞,他们就是想发现BO,从而拥有对机器的控制权。

    由于BO这个问题太经典了,耳朵里不知道听过多少遍,因此在面试现在这家公司的时候还专门对BO进行了一些学习与研究,好像明白是怎么回事了。可是到了面试的时候,被别人一问就露馅了。同样,不久前面试了一个即将毕业的硕士生,是个印度小女孩。由于她做过BO相关的项目,因此也对此特意提问,没想到她对BO的理解跟我当年面试的时候也没什么两样,只是知道一点皮毛而已。

    四年之前立志投身于安全或者游戏领域,最终是进入了安全领域。在这几年的时间里,我花了不少的时间去研究Web2.0, Mobile等等,并没有花多少时间在安全领域方面。虽然自己测试的是安全的产品,但是跟测试其他的非安全产品并没有太大的不同,只是多些安全的表面知识而已,没有什么深刻的理解。自己也几次问自己,“为什么自己花那么多时间在自己的领域之外,而不把这些时间用于研究自己的领域呢?”其实我心里还是很清楚答案的,那是因为安全对我的水平来说还是太难了,强行去研究它没有兴趣,只有痛苦。而Web2.0, Mobile这些东西就要容易很多,我研究起来也轻松很多,不用花什么时间学习就可以做一些成果出来。

    是的,安全领域确实比较难,即使这个BO的理解我也是经过了两年多才觉得算真正的理解了,当然这也完全归于我各种技术的熟悉与提高,综合水平达到了能够理解BO的程度了。总的来说,理解BO也是分很多个层次的,各个层次要求的技术水平也不一样。要想真正理解BO,需要C语言,C语言编译,内存管理,汇编,Debugging,甚至机器码的知识。BO的形式也是各式各样,没有深厚的计算机功底是很难进行分析和利用的。今天我主要回答三个问题:什么是BO,为什么BO是一个安全问题?黑客为什么可以利用BO执行任意代码进而夺取机器的控制权?其他问题我在最后也会列出,留待感兴趣的朋友自己去探索。

    1.什么是BO?

    BO的概念很容易理解,只需要你有C语言的基本知识就足够了。就是你申请了一段内存,而你填入的数据大于这块内存,这样的话你填入的数据就覆盖掉了这段内存之外的内存了。比如,

    void foo(char* input)

    {

    char buf[100];

    strcpy(buf, input);

    }

    如果input的长度大于100,就会产生buffer overflow了。

    2.为什么BO是一个安全问题?

    因为黑客可以利用BO执行恶意代码从而控制计算机。我们有这个概念是因为我们常常听到有病毒利用缓冲区溢出的漏洞进行浸入或攻击,这已经成为我们头脑的一个公理似的东西呢。但是如果我问到第三个问题,可能就很少有人能回答上来了?或者是一知半解。

    3. 黑客问什么可以执行任意代码?

    要理解这个问题就不仅仅需要C语言的知识了,还需要懂得C语言的编译,内存管理和汇编等相关知识。我简单的来解释一下:

    在C语言中,当我们调用一个函数的时候,在汇编或者机器码的level是如何实现的呢?假设我们调上边的函数foo的时候,程序的stack将会是下边图表的样子。首先,输入参数会放到栈中去,然后是这个函数执行完的下一个指令的地址,也就是return address, 然后是EBP(这个我现在不解释),再然后就是这个函数的本地变量的内存空间。比如这个函数申请了100个字节的空间。当BO发生的时候,数据就会覆盖掉buf之后的内存,关键的部分是return address可以被覆盖。那么一个黑客就可以把return address的值修改成这个buf的一个地址,比如起始地址buf[0]的地址,而这个buf里边填入黑客自己的代码。这样当这个函数退出的时候,程序会执行return address所指定的代码,也就是黑客的代码了。

     

    buf[0]

    buf[99]
    EBP
    return address
    input
     
    既然已经理解了上边的三个问题,如果有兴趣的话可以去思考以下的后续问题:
    1. 怎样得到放return address的内存地址?
    2. 怎样决定用什么地址来覆盖return address?
    3. 什么样的代码应该放入缓冲区,这段代码做什么用,这段代码怎么编写?
    4. 有什么措施可以防止缓冲区溢出?也就是说即使发生缓冲区溢出,黑客也不能或者难以利用?
    5. 如果对方系统使用这些措施,有什么相应的办法去绕过?

    安全测试系列一:用实例来解释安全威胁分类 (STRIDE)

    安全测试跟通常的测试工作还是有很大不同的。我认为安全测试是在技术上超越开发人员的一个主要途径。一个合格的开发人员去做测试的工作,无论是黑盒,还是白盒,手工,还是自动化,都不需要他花很多的时间就可以进入工作状态。而对于安全测试,即使一个很有经验的开发人员不经过专门的学习也很难进行有效的工作。另外,一个安全测试人员的水平一般来说应该比开发人员高才对,如果低的话,很难想象你能够容易的发现什么安全漏洞(假设这个开发人员没有低级失误),更不要说什么更深层次的漏洞了。一个安全测试人员应该具备普通开发人员想不到的知识与经验,这样才能通过这些知识与经验去发现这些开发人员犯下的安全错误。我个人在通常的测试工作上已经找不到什么进步的感觉了,更多的是感到重复的劳动,因此我接下来会在安全测试的领域进行一些实践与探索,写一些文章。我不知道有多少人对安全测试感兴趣,不过至少我可以作为一个自我知识的总结与归纳。

    黑客大多是凭借自己的兴趣来发现漏洞和实现攻击的,而对于安全测试人员来说是应该有一些系统的概念的,比如到底有什么样的安全威胁,怎么去分类,每类有什么特点,等等。今天我就用几年前我个人的一些经验来解释一些安全的分类。

    大概6,7年前,我在一个论坛混,由于一些矛盾使我受到了不公正的对待,比如删贴,封ID等等。我并不是一个喜欢做坏事的人,因此对于黑客的技术从来没有感兴趣过,但是心中还是很不服气。我想作为一个计算机技术人员怎么能让别人这么欺负呢?因此实现了自己一系列的攻击。没想到的是,6,7年之后,在自己学习安全测试的时候,才意识到自己的那次攻击行为竟然几乎涉及了所有的安全威胁。起初的想法很简单,就是编一个程序自动发帖子。OK,这个很容易就实现了,论坛上滚滚都是我发的帖子,当然我用了不同的ID去发,论坛的排行榜经过了多年的积累,在几分钟之后排名靠前的全是我注册的新ID了。用户当然也就无法去正常的访问和使用这个论坛了。然后和他们开发人员的对抗就开始了,他们先是要求发帖的时候根据图片输入一串数字,可惜他们图片的文件名和数字是对应的,我可以轻易的先发一个请求包得到回应包,search里边的图片文件名,然后再发发帖请求。他们的这个办法失效了,并且由于他们自己有bug,使得正常的用户即使输入了正确的数字也常常发帖失败。他们则取消了这个验证系统,转而控制每个IP每个小时只能发帖5次了。虽然很多用户并不满意这个规则,但是还是有效地限制了我的自动程序。我的对应有三种办法,一是使用多台机器,可是我手中没有这么多资源。二是程序控制每小时只发5个帖子,这样一晚上下来也会让论坛看上去很难看。三是动态的去修改自己的IP。Search了一下,但是并没有找到修改IP的有效资料,因此停止了这个方案。当然还有另外一个原因让我停止就是,我发现了他们的一个bug,我可以用任何人的ID去发言。这个bug用起来就很有趣了,我可以以管理员的名字在论坛上发虚假信息,用一个人的ID去攻击其他人引起公愤等等。这个bug他们的开发人员没办法了,他们不知道怎么回事也没有应对的措施了,他们还以为我攻破他们的数据库了呢。后来网站的老总也出面讲话了,他们也没人敢惹我了,这事就算了。另外,我只能使用其他人的ID发言,我也尝试过找出他们的漏洞去使用管理员的权限去做些事情,比如删贴子,封ID,IP等等,不过没有成功。

    话说回来,安全威胁分类的英文缩写是STRIDE, 代表了六种安全威胁,分别为Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Services, and Elevation of Privileges.

    1. Spoofing 就是伪装,比如我用别人的ID发言就是Identity Spoofing, 我想到用变化IP的办法就是IP Spoofing.

    2. Tampering 就是篡改,比如我用别人ID发言的手段就是篡改了合法包,而他们的server端没有相应的检查措施。

    3. Repudiation 就是拒绝承认,比如我进行了这些攻击,他们并不知道是我做的,也没有证据是我做的,我就可以不承认。

    4. Information Disclosure 就是信息的泄漏,比如他们的那串数字图片就没有任何保护,图片上的信息轻易的就被别人得到了。

    5. Denial of Services 就是拒绝服务,比如我的自动发帖使得正常用户无法使用就是这种攻击。

    6. Elevation of Privileges 就是权限的提升,比如我尝试用管理员的权限去做事情,就是属于这种。

    一般来说,EOP的威胁是最大的,这也是为什么Vista下要加入UAC的功能了,就是为了防御这种攻击。而Buffer Overflow则是可以被利用进行这种攻击的常见安全漏洞,这个问题可以以后再谈。DOS攻击可能是最容易发现的安全漏洞,比如一个AV就可以导致这种攻击。当然DOS攻击也分为两种,一种是导致服务突然崩溃,另一种则是使服务逐渐失去能力,比如在大客户量的时候。第二种就要比第一种更难测试一些了。这些威胁都不是独立存在的,很多时候是互相关联的,比如我是通过Tampering的手段,达到了Spoofing的目的。再比如,你如果成功进行了EOP的攻击,Spoofing, Tampering, Information Disclosure 这些问题也就自然出现了。对于我们安全测试来说,我们一般是对照一个软件模块,通过安全分析,列出各种可能的威胁,并且设计出各种安全的test case去进行测试.

    February 13, 2009

    回忆我的小学(3)- 班花美女

    小学的时候喜欢什么女孩道理很简单,就是喜欢最漂亮的,即使第二漂亮的自己也不会喜欢。而审美眼光也很简单,就是一个脸蛋,根本不会考虑什么气质呀,身材呀这些。我不知道是不是每个男孩都跟我一样,但是我知道我们班的几乎每个男生都喜欢着同一个女孩,那就是“如晨”。如晨是我们的班花,当时好像没有什么太多班花,校花的概念,如果要是评选校花的话,那肯定也是如晨了,因为在我的小学我没有见到过比她更漂亮的。

    如晨个子小小的,座第一排,脸蛋很清秀,人也很老实,话不多,相对来说算是学习好的学生。但是,我们基本上对她都是暗恋,没有人敢说出来,原因是因为勇的存在。勇虽然武力排第三,但是他是最能闹得,因为我学习好被他专用,也因为如晨长得好看,被他长期名义上的霸占。我不知道他们私下里有没有过恋爱,也不知道小学毕业以后他们是否曾经在过一起,但是在学校里就是一个名义上的。因此,没有其他人敢打如晨的主意,甚至跟如晨说句话,都可能遭到勇的报复。我现在已经记不得我跟如晨的任何对话了,我只记得六年级的时候她送给我和我当时最要好的朋友“永浩”每人一张贺年卡(只送给我俩),而永浩因此被勇辱骂过,而我因为跟勇的关系,他并没有对我怎样。当时我还是有点妒忌永浩,因为我没想到如晨对他还那么好。小学之后就再也没有见到过她,也没有听到过任何她的消息,不知道她毕业之后如何,现今又是什么情况呢?

    因为如晨的存在,我忽视了所有其他的女生。Somehow有的时候我也会喜欢其他的女孩,但是时间非常的短暂,应该是95%以上的时间心思都在如晨身上吧。但是如果把我放回到以前,以我小学之后的审美观的变化,我可能会毫不犹豫地选择另外一个女孩“英丽”。英丽是回族,其实脸蛋长得也挺好看,我们班的第二。除此之外她的个子高高的,是我们班最高的两个女孩之一。其实,我们对女孩也有一个武力排行的,英丽是排第二的,排第一的女孩叫“李新红”。这两个女孩个子差不多,但是李新红的力气更大,垒球总是第一名,而英丽爆发力很好,跑步快,短跑总是冠军。初中的时候,我不但喜欢漂亮的女孩,同时我还会对体育好,尤其是跑步快的女孩产生好感,即使他们不漂亮。而英丽是不但美丽,跑步也出众,个子又高高的,再加上她具有一些少数民族的气质,脸上常带笑容,在外观上,以我的审美观来说差不多是perfect了。并且,她其实对我也是有好感的,这个就不多说了。但是,英丽也具有回民的共同特点,学习一般,好斗。当然在我们班的四大天王的笼罩下,作为一个女生是不可能有什么表现的。但是学校毕业以后,我就听说她在外边混起来了,经常打架,跟男生也敢动手。当然,我相信她的实力,至少我是如何也打不过她的。小学毕业以后我只见过她一面,我们骑着自行车相遇,共同的路程非常短,我忘记了我们谈过什么了。我这人不善言谈,跟人有一段时间不见面就不知道说什么了,有时候我甚至会故意躲避以前的熟人,就是因为不知道该怎么打招呼,我人当时还是非常内向的。在我们分手的时候,她对我说“有事找我”。“有事找我”,这句话是那些社会上混得好的朋友常常对我说的,而这次是我唯一一次听到的从一个女生口里说出来。后来我虽然没有再见过她,但我们互相之间应该都会知道一点对方的信息,因为她嫁给了我妹妹的同学。(为什么我要写出李新红的全名呢?因为我高一的时候听说她得白血病去了。这也是我的一个surprise, 没想到身体那么强壮的一个女孩竟然这么早就没了。)

    芳是半路转学过来的,她的特点是耐力好,长跑非常强,过来之后出乎我的意料的是在长跑方面beat了英丽。当时比我们高一年级的一个女生长跑总是冠军,有一次校运会之前她来我住的院子跟我院的一个女孩,她的同学谈话的时候,她表示很怕芳。我当时也很吃惊,没想到这么牛的女孩会怕我班一个新来的。而最后的结果真的是芳拿了冠军。芳来了之后自然会受到勇的欺负,她的家就在学校隔壁,她有一个比我们大两三岁的哥哥,过来帮她也不敢动手,最后都急哭了。后来是芳的家长过来,勇才有所收敛。由于如晨和英丽,我没有觉得班上还有任何其他女孩漂亮。直到有一次学校旁边的一个小混混对我说芳很漂亮,我才有所注意。当时还怕听错反问了一句“她漂亮?”,那个人跟我confirm了。是的,现在回想起来,芳身材修长,个子高高,另外芳长得好像跟大家有点不太一样,有种特殊的气质,说她漂亮并不过分。初中的时候在一个小卖部碰到过她一次,没想到她个子长那么高,我要仰头看她。后来听说她打篮球,我还奇怪怎么可能,小学从来没见过她打。再后来听说她进了省篮球队。几年以后一个哥们的老婆好像也是省篮球队的,认识她,我们还提到过一次。工作以后有一次在公车上碰到一个女孩非常像她,没敢去认。

    华是小学前半段跟我玩得最多的女孩,几乎每天都来我家玩。我们冬天还一起去公园呀,等等。有一次她让我手握手,然后她兴奋地说“你是真聪明呀,我就见过你一个这么握手的”。原来是因为我右手压左手,而一般人都是左手压右手。最后问大人,好像是说脑和手是交叉的,左手代表右脑,而右手代表左脑,我右手压左手说明我左脑发达,而左脑掌管逻辑这些东西,所以就聪明。我这个人也是有虚荣心的,而我一直认为聪明是我最大的本钱,也很在意别人对我这方面的评价。因此,夸过我聪明的女孩我会记的特别牢。小学后半段我跟勇学坏了,我也会欺负其他同学,包括华。其实华一直对我都是非常好的,我记得我跟她打架的时候她很气愤地看着我,估计对我非常失望吧?从那次打架之后我们好像就没再说过话。华当时是个很一般的女生,后来听说初中的时候她出落成美女了,个子长高了,变化很大。但我却再没有见过她。是不是就算见到也认不出来了?

    回忆我的小学(2)- 四大天王

    印象中一年级跟我玩得好的两个人是“立新”和“更新”,他们在二年级的时候降级了。而后来五年跟我玩得好的人全部出自于从高年级降级到我班的学生。我写文章的时候才惊奇的发现,原来我小学的好朋友都是降级生。在我们那么烂的小学,又跟最烂的学生混在一起的我,能是什么好人呢?这点来看,我能考上大学又是一奇迹了。

    这批人过来之后班上发生了很大的变化。首先就是有个同学叫“勇”,他在这批人里好像是老大,谁都欺负,没有人敢吭声。这批人跟我成为好朋友的有“海涛”,“勇”,“二东”,“永浩”,“志杰”。在小学的其余五年,我都是在不同的阶段分别跟这几个人一起玩。勇对我们班影响相当深远,我们班的班风完全是受勇的影响建立起来的。当然他并不是最能打得一个,他的身材不高,他更多体现在了自己的霸气和校外的社会关系之上。如果论打斗能力,我们班的排行应该是“立强”,“爱平”,“勇”和“志杰”。当然这也不是绝对的,只是小学爱排班上的大王,二王,等等。这个排名是公认的,但他们直接交手的机会是很少很少的。当然班上后来出现了一个远高于这四大天王的皇上皇,这是另外一个话题了。

    立强并不是降级生,他的身体素质明显比其它人高出很多。长跑,垒球等等项目总是校运会上的冠军。身材比较高大,强壮,座最后一排,并且是体育班长。一年级的时候并没有意识到他的存在,但是在后五年中,他是班上的大王。好像听到过传言他的实际年龄比户口上要大两岁,也许这是他强大的原因之一。后来也知道他其实是练武术的,这也是他强大的另外一个原因吧。当然,最主要的是他是回民,先天身体素质确实很好。

    爱平是后来从外边转学进来的学生,在他之前勇是排第二的。这个人确实年级比我们大两岁,因此个子高大,很有威慑力。但是这人很nice,我从来没见过他打架或者欺负人,并且跟我关系一般,因此也没有太多可谈的。

    勇其实跟我玩的时间相当的长。这个人很social,外边有一定的社会关系,而且人很复杂,我一直不知道我们之间有没有真正的友谊。在班上他最好的朋友可能就是我了,因此即使立强也很少欺负我,因为他也不想直接跟勇起冲突。勇肯定是打不过他,但是勇外边的社会关系是他所不具备和畏惧的。勇跟我的关系很好,甚至勇在班上是霸占我的,其他人跟我关系好他会把那些人从我身边赶走。原因应该很简单,因为我学习好。他经济能力很好,跟我在一起为我花了不少钱,但是他在学习上对我的利用也很多,而我对他更多的是恐惧的感觉,没有什么朋友的友情那些感觉。

    当然跟他在一起自然会染上一些恶习,我也会欺负那些比我更弱小的,人缘就变得越来越差。以前众望所归的我,到小学的后期,有一次是学生投票三好学生,竟然没有我,可见我当时班上的人缘有多差了。这点来说,我一直对我欺负过的人有一种愧疚的心理。那次评选的结果激怒了勇,勇用极度威慑性的眼神扫了全体同学一遍,而班主任跟我关系也非常好,因此重新投票,当然结果就是高票当选了,因为没有人敢得罪勇。

    志杰是四人中唯一有外号的人,其他人是不允许别人给他们起外号的。他人对同学还是很nice的,我们可以叫他外号“大杰子”,甚至“傻大杰子”,他也不会介意。他从来不欺负同学,但是他讲义气,打起架来不要命,小学期间看到最血腥的几场架差不多都是发生在他身上。因此,内心深处我一直还是敬重他的。

    “立强”,“勇”,“志杰”,我有更多的回忆。这里想简单谈一下另外一个人。如果我们要排第五的话那一定是“永建”。他是我们同学身材最高的,想想看打架也不会差。但是,他也比较随和,不善斗,因此在打架这方面我们是忽视他的。但是我确实跟他打过一架,由于平时对他的忽视,以及狗仗人势在班上的地位,我内心是不能接受被他打败的。但是在打斗的过程中,我基本是挨打,没有任何还手之力,更没想到的是他招招致命,根本没对我客气,出手极其凶残。我被打到一边又扑上去三四次,最后发觉实在是差距太大了,不得不认输。那次可能是我被打得最惨的一次,伤养了好长时间,从此对他刮目相看,而他也确实参与了小学期间最大规模的一场战斗,这也是我为什么一定要提他的原因。

    回忆我的小学 (1)

    随着时光的流逝,年龄的增大,在得到更多东西的同时也失去了以往所拥有的。昨天confirm了我的小学早已经不存在了,小学的同学也没有跟任何一个人保持联系。在我的学生时代,毫无疑问小学生活是最丰富多彩的,因为除了学习我们什么都干。也是最刻骨铭心的,大概是因为六年的时间是最长的一个阶段。小学的生活也是灰暗的,因为总体来说还是被一定的恐怖和阴影笼罩。随着自己意识到自己慢慢地变老,对小学的回忆也越来越强烈,很多时候晚上醒来想着小学那些事情不能继续入眠。因此,我想把他们写下来,为了自己,为了以后不会把他们彻底忘记。如果真的有可能被我的同学看到的话,一定要跟我联系,虽然我知道有些人是永远不可能会看到的。

    我的小学名叫“回民小学”,其实本来在我入学的时候是叫“工农路小学”,一个很有当时中国特色的一个名字。现在想起来我大概从小上课就爱走神,二年级的时候,体育课上老师讲话,突然同学欢呼起来,我还以为有什么好事情呢,原来是学校改名了。本来附近有一个“回民小学”,但是由于我们学校回民的比例比他们更大,因此就把这个名字赋予我们了。

    学校的对面就是回民居住区,我们那里称做“清真寺街”。班上的回民现在回想起来应该是至少一半以上,或者更多 (我们那里称回民,不称回族)。回民有一些特点,比如他们身体强壮,体育很好,好斗,不爱学习。因此,我们班上的气氛是崇拜暴力,蔑视学习。因此我的小学大部分时间是不得意的,因为打架比较差。当然我学习好还是有一定优势的,那些强势的同学还是要依靠我写作业,考试打小抄,等等。因此,总的来说,我被欺负的不算太多。其实,回想起来我很惊叹他们的身体素质,我当时只能算是个中上等的水平,可是等我上了初中,高中,大学,我可都算是体育好的,我甚至高中在校运会可以拿冠军,可是我在小学唯一的一次获奖是六年级的一次第六,这还是因为不少同学没毕业就退学了的缘故。可见,汉民和回民的身体差距之大了。汉民在我们那里当然会受欺负,他们称汉民为“汉猪”。我当时还想呢,“汗珠”,我们出的汗都变成了珍珠,那也不错。小孩的思维现在想起来总是很奇怪。我有一个同学名字叫“白燕”,但是人长得比较黑。我当时冥思苦想也想不明白,“她长得那么黑,干嘛叫白燕呢?,再说了,就算是燕子本身也是黑色的呀,怎么可能是白燕呢?”。

    我的小学是一所很差的小学,以盛产少年犯而出名。但是我上了大学之后才彻底知道它到底有多差。我同学的弟弟毕业于周围的另外一所小学,一所我认为非常好的小学。当我听到他骂自己的小学差的时候,我很吃惊。我说“你的小学很好呀”,他回答“好什么,南市区倒数第二”,我说“不会吧,你们小学比我们小学好多了”,他问我是什么小学,然后他说“你们学校倒数第一”。那个时候我才知道,原来倒数第二的小学都比我们小学好那么多。我清楚地记得我小学毕业考试的成绩全班第一173分,可是到了初中我发现是个人都是180多分,这也解释了我们学校到底有多差了。即使现在我还经常会埋怨父母为什么当时会给我选一个这么差的学校?而我现在选房子最先考虑的就是学区问题,孩子的教育肯定是要放在第一位的。这个方面我父母做的太少了,而我也一直认为我能考上大学已经算是一个奇迹了。

    小学之前是幼儿班,我也是在这所学校。在下午放学的时候,经常会遇到对面清真寺街的一个看起来很凶个子比我们高的人欺负。我们是指的我和“涛”,当时我和涛是最好的朋友,后来一年级我们没能在一个班。欺负我们的人名字叫“景文”,没想到的是一年级入学的时候他竟然跟我在了一个班,当时的感觉就是害怕。结果比我预想的要好得多,他有先天性心脏病,并不擅长打架,甚至打不过我,因此小学六年他从来也没敢再欺负过我。

    我这人从小贪玩,小学第一堂课就从窗户跳出去了,平时喜欢跟同学摔跤。其实那个时候我不是个弱者,应该在摔跤方面我跟大多数同学比是占上风的。可是班主任非常不喜欢我这点。一年级第一学期结束的时候,老师先公布三好学生名单,没有我。接下来公布成绩,我是全班唯一的双百。同学就很不理解为什么三好学生没有我,问老师,老师解释“XXX太爱摔跤了”。由于这次没有被评为三好学生,再加上我的诚实,我失去了小学六年的区和市三好学生的所有机会。二年级评选区三好学生,老师的标准是必须要每次都是三好学生的人,同学们都纷纷地看着我,提着我的名字,当时的班主任换了一个,她也很喜欢我。但是,我诚实地告诉大家,我有一次没有被评上三好学生。因此,这个名额就给了我们的班长,他是唯一次次三好学生的人。以后就约定俗成了,每次都是他。

    除了这个,小学一年级的生活还是fair的。我记得有个同学叫“朱萍”,好像上了一个学期家就搬走了,可能搬到东北了吧?因为我记得有篇课文是关于大兴安岭的,好像说就是她家。还有一个同学叫“方印”的,当时我觉得他学习比我好,可能是他人老实,老师喜欢他吧,总觉得他学习最好。他二年级转学走了,后来听说他被保送到清华了。

    二年级的时候,我们班发生了重大变化。我们班一些学习差的学生降级了,而高年级的学习差的学生也降级到我们班了。这次变化影响深远,直接建立了班上的势力格局。

    February 9, 2009

    克莱沃曼2009关注焦点

    1. Cloud Computing
    2. Windows 7
    3. Mobile
    4. Netbook
    5. Virtuliazation

    Live Mesh 跟我对云计算的理解格格不入 (四):云应用和云共享

    由于云平台的概念模糊,使得云应用也并不清晰。目前来看有两种主流的跟云有关的应用。一种是以Google为代表的“软件即服务”,云应用完全通过浏览器来和Web来实现。另一种就是微软所倡导的“Software+Service", 相关云应用还需要桌面软件来补充。举个典型的例子就是Gmail完全通过Web来访问,没有客户端。而Live mail则即可以通过Web也可以通过Live mail的client来访问。当然谁对谁错很难分辨,两种模式都存在大量的用户群。但我个人认为,单纯的通过浏览器来解决问题目前来看还是太超前和走极端了。一个简单的例子就是IM,相信几乎所有的用户都prefer客户端软件,而不是在浏览器里跟朋友聊天。这也是为什么Gtalk火不起来的主要原因,Facebook的chat功能也没有太多的人使用。因此,目前的阶段,微软提出的Software+Service是现实的。

    可是由于桌面软件的开发和Web Service的开发大相径庭,使得想维护既有Service,又有Software的模式成本相对要高很多。因此,这就是Mesh平台诞生的一个很重要的原因。如果不从云计算的角度讲,Mesh还是一个不错的平台,尤其对于开发人员来讲。和Java的同样的代码可以在不同计算机平台运行的概念相类似,Mesh App实现的是同样的代码可以在不同的设备上运行,比如在Web上,在桌面上,在手机上等等。我先不谈这个概念具体实现上的困难,假设这个概念很好的实现了,那么我们就不需要编两种代码了,而Software和Service两种应用在Mesh上实现了统一。所以说在Mesh上也没有什么Software+Service了,基本上是Software=Service=Mesh App了。换句话说,有了Mesh App就什么都够了。Idea非常好,但是我觉得有两个问题。第一,Mesh把Web也当作一种设备,忽略了当今计算机世界已经是以Web为中心的现实,更忽视了Web在未来越来越重要的趋势。把Web当作设备,无非是想弱化Web的地位和提高Devices,微软拿手部分的地位。这个设计我不赞同。第二,由于Mesh App是在Mesh平台上开发和运行的,就使得桌面部分不如通常的桌面软件强大,Web部分不如通常的Web service强大。好处基本都是针对开发人员的,而用户的体验呢?除了Web和桌面统一的用户界面,功能性恐怕会大大折扣。用户会买这个帐吗?当然,IT的发展是迅速的,也常常是出人意料的。也许在Mesh的平台上会涌现出很多杀手级的应用出来,这样的话Mesh当然会流行起来。如果没有好的应用出来,我看Mesh的命运就悬。

    现在比较有意思的问题是,Mesh App是否要代替目前微软的Software+Service的模式(针对个人用户来说)。还是和Google”软件即服务“,以及Software+Service共存,而Mesh App又能抢占多少的市场?

    云共享本身就是一种云应用,单独拿出来作为一点是因为它在云计算中具有特殊重要的地位。概念很简单,目前实现的也算不错,就不多说了。而云应用另外一个非常重要的特点就是社交性,交互性等等,这是与传统软件区别很大的地方。Facebook就是靠个社交发家了,而Mesh自然没有忽视这点,集成了社交的功能,这点我还是比较赞同的,虽然技术实现也不难。

    而由于没有我所理解的云平台的出现,我也就没有必要讨论我理解的云应用了。

    Live Mesh 跟我对云计算的理解格格不入 (三):云平台

    在我写文章的初期忘记了非常重要的一个话题:云平台,现在补上。我们一台计算机,当你有了所有硬件以后就需要一个操作系统了。同理,当我们具备有云存储和云计算以后,我们也需要一个云的操作系统。操作系统在个人计算机中有多重要,云操作系统就会在云计算中有多重要。微软的Azure,据我的初步了解是完全具有云存储,云计算以及一个强大的Cloud OS。但是,这个平台是是针对企业而不是个人的,而更像是一个操作系统的底层部分。显然,Mesh是微软设计的针对个人用户的云计算的平台。由于我是从个人用户的观点去看问题,我想绝大多数的用户也是同样去看问题的,我这里只谈个人用户的云平台,就像Windows是个人用户的操作系统一样。

    说起云平台,我认为从个人用户的角度去看就是我以前所理解的WebOS。由于这段时间云术语的盛行,使得WebOS反而有点渐渐被人淡忘。我理解的WebOS是这样的:首先是以云存储和云计算为中心,其次提供一套强大的API使得可以开发第三方的云应用,当然还需要进行一系列用户看不到的繁琐的工作,比如cache management, sync management, storage management, computation management, etc. 我一直相信在云计算中,sync是一个非常重要的方面,我只是反对Mesh把sync放到了核心的位置。

    由于Mesh过分地强调本地存储和计算,显然不能满足我WebOS的定义。其实这个趋势和发展我看出来了,Google它们也看出来了,难道微软就看不出来吗?我猜测,Mesh之所以如此强调本地计算,主要的原因是不愿意放弃自己在本地计算的优势和垄断地位。如果微软完全按照我理解的云计算去进行,Windows势必被逐渐边缘化,从而变得越来越不重要。Mesh这种设计很大程度上是想保持Windows的地位而以。我这样猜测并不是没有根据的,最近Mesh team已经归了Windows了,从这个角度也可以验证我的猜想。而Google则没有这个包袱,所以它们要搞彻底的云计算。我希望这不要拖了微软的后腿。

    由于对Azure了解还不多,所以对它还是充满了希望,不知道什么时候能够给大家开放能够体验一下。但是总的来说它还是太底层,太企业化,微软当然应该提供一个个人的云平台出来。Mesh作为一款网络应用还是非常出色的,总体的设计水平也很高,但是用Mesh来承担这个角色,显然并不恰当与合适。近两年上网本的发展趋势已经证明了网络越来越重要,而本地计算越来越次要了。这两天又传出Intel准备推Android的上网本,虽然还是谣传,但并非不可能。微软在这一个趋势下明显吃了大亏,XP不得不延期停售,Windows利润下滑,可微软的策略又在哪里呢?就凭借Windows7和Mesh够吗?至少在上网本这个领域是明显不够的。而Google的Android如果投入到上网本上,再加上GDrive的推出,很难说不给微软一个致命的打击。当然我指的是个人用户市场,在企业用户我相信微软的优势还是绝对的。

    说来说去WebOS的市场各式各样的产品是真不少,而我以前接触过一些主要的问题是没有开放的平台,而我个人对这个领域观察也主要集中在了几个大公司上。Amazon的S3没有接触过,不知道如何。从我接触过的产品上看,目前没有一款完全符合我的要求。有人说Google提供的API就是WebOS,我看还是差很多,充其量也就是个service platform。也就是说,这个平台的核心在Google的各种service上,并不是在云存储和云计算上。Live services跟这个类似。Mesh的问题就是太强调本地存储和计算。我唯一看着有点这个意思的是Facebook平台。可是Facebook的问题在于缺少generic的云存储,并且F8上开发的应用局限性比较大,不能完全发挥出Web应用的潜力。Skydrive具有云存储,也具有一定的云计算和云应用,但是它没有平台。谁会推出第一个我理想的,甚至超越我理想的平台,让我们拭目以待吧。

    这里想再解释一下我那个下载电影的例子。如果用Mesh来实现同样的功能的话,是应该这个样子的。首先你要通过下载软件把电影下载到本地,其次这个电影要sync到Web上去,再次电影又要sync到你的手机上去,你才可以通过手机观看这部电影。明显繁琐很多。

    Live Mesh 跟我对云计算的理解格格不入 (二)

    1. 云存储
    2. 云计算。首先关于云存储想在多说两句。Mesh assume用户的各种设备都具有足够的存储空间,而贴心地考虑到了offline和low connection情况,我感觉有点本末倒置。如果一个用户没有足够好的网络,他很自然地就不会选择云存储,而既然选择了,我们应该认为他的网络状况还是OK的,就算是不OK的,当他sync的时候一样会有很大问题,从而不能应用Mesh。而用户选择云存储大概有这么几个原因:
      • 寻找额外的存储空间:比如netbook
      • 备份数据
      • 可以方便地访问数据及共享数据
      • 云计算

    这几方面的应用通常都是assume网络状况应该不是问题,而Mesh做了大部分的工作在于网络连接出现问题的情况,而把一个很重要的应用“寻找额外的存储空间”给抹杀了。我想这两年兴起的上网本本应是个机会,如果Mesh很好地满足了“额外空间”这个需求,那我相信大部分的netbook用户会很高兴地使用这免费的5G空间。(上网本本身的概念就assume internet always be connected) 所以我想问微软到底有没有考虑这个需求。

    当然,云存储是个基础,更重要的概念是云计算。什么是云计算?我的理解是,打个比喻。我们的计算机的输入设备是鼠标,键盘,而输出设备是显示器。计算机的存储在硬盘,计算在CPU都是存在于主机里。而一般用户通常对主机的感念很浅薄,也不需要去了解主机的构造与工作原理。云计算与此类似,你的计算机变成了输入输出设备,而你的主机则变成了云。你的数据存储在了云里,你的计算也发生在了云里。一个用户并不需要去真正了解云,不需要明白云的结构和工作原理。当然这是针对云计算来比喻的,你还是需要你的本地主机来进行本地计算,以及处理对云的输入输出。现在的趋势是应用越来越多地往云里转,如果有一天所有的应用都转到了云里,则本地只需要一个弱弱的主机即可满足要求,这也是Google它们所倡导的,当然是debatable的。因为这里只谈云计算,就不涉及本地计算与云计算前途的讨论了,不然又是一个大话题。

    那么云计算有什么好处?举个例子。现在你想下载一个电影,你用下载软件BT呀等等,这个下载的计算发生在本地,你开着电脑,根据你的网络情况,可能会下载几时分钟到几个小时,然后下载完毕你就可以欣赏了。在云计算中,你只需要告诉云你想下载什么电影,这个过程是由云来完成的。由于云中server的能力以及网络的良好情况,通常都会比你自己下载要快很多。你甚至可以关上电脑去睡觉,或者去逛街,因为计算是在云中产生的不需要你本地的计算与存储能力。下载完毕后,你可以随时通过internet来欣赏你的电影。比如,你在外边逛街,你的手机接到下载完毕的信息,你就可以立即通过手机来欣赏这部电影了。是不是轻松和方便很多?

    这是我理解的云计算。而Mesh是什么情况呢?Mesh team非常骄傲地介绍debug的feature,在浏览器里运行的应用可以在本地调试。有人提问这个是怎么实现的,他们的回答是,数据存储在云里,而代码实际是在本地运行的。我的天呀,代码在本地运行,这还能称作云计算吗?真是貌似而神离呀。从这一点看,我又对Mesh产生了很大的失望。另外,由于计算产生在云里,本地计算机只是相当于输入和输出,更加使得sync没有任何必要了。

    Live Mesh 跟我对云计算的理解格格不入 (一)

    Live就是有钱,昨天参加了他们的一个training, 具体说来除了讲课就是吃。早上九点吃一顿,中午十二点吃一顿,下午四点又吃一顿,吃不了的还可以打包走。很少有training安排的这么丰盛,吃是爽了,可是这training我怎么觉得这么不对劲呢?

    Live Mesh 从内部测试版推出到现在也已经有段时间了,最近还获得了有技术奥斯卡美誉的Crunchie Award 2008的最佳技术创新大奖。我一直认为这就是微软云计算的平台,没想到最底层的平台是Azure。微软把Azure称作Cloud OS, 而Live Mesh则建立在Azure之上,称作Live Framework, 要我看更像是一个Web OS。从微软的解释来说Azure是面向企业,而Live Mesh则是针对个人用户。Azure我没有什么太多研究,今天我就谈谈Mesh, 也算对得起Live的热情款待。

    云计算作为这两年的技术热点一直是我所关注的,而微软的Mesh我从最早的内部测试就已经体验过了,当时还没有开放开发平台,只是软件的体验,感觉没什么太大意思。而昨天的training则是面对面被传授了一下开发平台,感觉更没意思了,换句话说就是从失望到绝望。按说这种新技术焦点应该会引起很大的关注吧?可昨天400人的classroom里竟然不到1/3的人。要知道这training是免费的,而且还有丰厚的食品,吸引力都如此之低,是不是本身就说明了些什么?training的内容并不止Mesh,可我最关心的就是Mesh,因此其他内容也没好好听。我本以为通过对开发平台的学习能够让我对Mesh有一个比较新的认识,结果是Mesh的设计跟我对云计算的理解大相径庭。

    要说云计算,现在也并没有一个统一的理解和定义。Google表示“软件即服务”,而微软表示“Software+Service"。Google在搞”云计算“,而张亚勤表示微软搞得是”云端计算“。这些概念我都不反对,我本人理解的云计算包括以下几个方面:云存储,云计算,云应用,云共享和云安全。下面从这几个方面谈谈我对云计算的理解,以及为什么对Mesh失望?

    1. 云存储。我认为云存储是云计算的中心,要谈云计算首先要有数据在云内的存储。我一直批评Facebook没有generic的云存储,因此不能称作Web OS,至少是不完整的Web OS。而我理解的云存储很简单,就是你拥有云内的一块存储空间,就像你自己拥有一块硬盘,你在操作系统内访问它可以像访问本地硬盘一样的方便。具体来说就是你打开My Computer, 你就会看到你的云硬盘列在其中,而你可以双击打开它,可以做任何你在本地硬盘上的操作,用户对本地和云硬盘的体验应该是统一的。这个应用对配置有限的netbook是非常重要的,而就这么一个小小的要求,现在竟然没有公司能够满足。这两天有新闻说一直没有露面的GDrive年内要推出了,难道这会是第一个?而微软在这方面明显没有看到有什么想法。本来Skydirve已经做得还不错了(我用Skyedrive instead of Mesh 去存储数据),25G的存储空间也挺大,可跟OS的结合就是不做。当然这是题外话了,我今天要谈的是Mesh。Mesh的设计明显跟这个不同,Mesh的中心其实并不是云存储,而是data sync。Mesh的理念是数据可以在Web, Desktop 及各种各样的其他设备,包括手机,Mac等等设备间Sync,使得你在任何时间,任何设备,无论是online还是offline都可以访问你的数据。说实话我就很讨厌这个Sync, 因为我不想搞得那么麻烦,把数据存N各copy。现在用起来困难一大堆,比如Web的空间是5G,而Desktop的空间是上百G,什么要Sync,什么不Sync,自己还要配置。而我的手机则几乎没有什么存储空间,根本没法跟它们sync。为什么不能在我的Desktop和手机上都搞一个云硬盘直接跟自己的云内存储空间相连呢?这样也可以实现任何设备都可以随时访问数据呀。当然Mesh这样设计也不是没有自己的考虑,他们考虑如果网速慢的话,直接访问云速度会比较慢,有本地copy的话速度就会快很多。而我的理解是,即使没有本地copy,你照样可以做cache呀,常用的文件cache起来,提高performnce。而如果因为网速慢,或者因为文件大使得直接访问云的速度降低,无法忍受,通常你sync数据的时候也会有大问题,很难操作。想想看你要访问一个大文件和你要sync一个大文件体验能有多大的区别呢?Mesh也考虑到了Offline的情况,因为有本地copy所以即使offline也可以访问,操作和修改这些数据。可是我认为,如果真的offline了,则意味着用户不能email, IM,Surf,Search,Facebook等等,我想用户基本上会离开电脑搞别的去了,谁还会在这个时候还用Mesh?总而言之,Mesh的设计太多的考虑了没有internet, 或者网速低的情况,而忽略了用户体验和设备存储量的局限性,更忽略了网络的发展趋势。想想看,未来的世界是”Internet anywhere“,用户应该是随时都可以用任何一种设备拥有对internet的可靠访问。比如,在公司用公司的电脑,家里用家用电脑,出门用手机,或者netbook/laptop。一个简单的云存储就够了,谁也不会喜欢那个需要sync的Mesh,而用户如果真的需要本地copy的话,就直接把Web drive里的文件drag到本地硬盘不就行了,哪里需要Mesh那么麻烦?综上所述,Mesh的设计是有些落后的,不是进步的。我希望Gdrive能够达到我想要的,简简单单的云存储功能。

    February 8, 2009

    我的测试观点与经验

    本书收录了我一年多所写的关于软件测试的文章,内容包含初中级测试工程师工作所涉及到的内容。测试总的来说还是比较简单,我认为作为初中级tester来说,这些文章基本涵盖了应该掌握的知识点,和一定的职业指导与规划。今后我写文章可能不会再涉及这些方面,而会从更高的角度去讨论测试技术与发展,因此把这些文章编辑成册,以方便大家的阅读。

    下载doc:《我的测试观点与经验》

    下载pdf:《我的测试观点与经验》

    Online(Office Live): 《我的测试观点与经验》

    Online(Google Docs): 《我的测试观点与经验1》

    Online(Google Docs): 《我的测试观点与经验2》