三年之痒

  眼看就要工作满三年了,对于大多数人来说是一个特殊的时期,对于我来说,也不例外。我也常常在想,我自己的定位是什么,我以后想要做什么,我该怎么选择,才能实现自己的价值和梦想。

  思绪回到三年前……

  我毕业于当时全国排名14左右的中南大学,学的专业是也是该校专业排名仅次于同济清华的土木工程。我没有像大多数人一样,选择去设计院,或者铁路局,工程局。我义无反顾的选择了金山软件,当时的我,几乎没有任何的犹豫。因为我相信,这就是我未来要走的路。

  金山软件是我梦想的地方,很早之前求伯君就是我的偶像。在高中时代,我就用过金山的WPS,毒霸,玩过剑侠情缘系列。在我看来,金山软件是一个值得自豪的公司,我能加入金山软件,更是一件自豪的事情。

  初中时期我开始学习QB,参加过奥赛,但是没有拿过什么名次。现在想来,当时经常获奖的几个同学,现在都没有在搞计算机了,也只有我是坚持了下来。正是因为这种坚持,让我有了机会来到金山。

  我所从事的是自动化测试工作,就是为WPS产品编写自动化测试案例或者测试工具。当时我加入时,产品的自动化测试程度还不是很高,后来我们使用QTP编写了大量的自动化测试案例,接着又打造了Box自动化测试平台,一个集任务发布、机器分配、环境准备、案例执行、报告收集、结果展示的分布式自动化测试平台。

  当时我还写过很多测试工具,最让我引以自豪的工具是用C#写的对话框检查工具(DialogCheck),功能是自动去打开所有WPS的对话框,检查窗口是否正确弹出。当时我对这个工具进行了精心的设计,后来我才发现,我的代码中使用了一些设计模式,比如:模板方法,反射工厂等。接着,我对设计模式产生了极大的兴趣,从《大话设计模式》、《Head First 设计模式》到《设计模式 - 可复用面向对象软件的基础》,让我受益颇多。

  后来,我开始意识到,由于非计算机专业毕业,基础知识自然成了我的薄弱环节,比如数据结构、算法、编译原理。我不能只停留在C#这种高级语言的层次。于是,我开始自学。为了证明自己学习的成果,我报考了国家软件设计师的考试,几个月的备战后,我非常顺利的通过了这个证明自己的考试。软件设计师原名高级程序员,这对我一个非科班出身的人来说,是一个极大的激励。

  公司组织结构几经调整,一直到现在,我所属的是金山互联网安全公司,负责测试金山毒霸等安全类产品。作为一个测试工程师,最令我引以自豪的是,我接触过软件测试的各个环节的具体工作。从界面层的QTP集成测试、基于C++底层接口的接口测试、测试工具及平台的开发、到性能测试,再到安全性测试。每一次转变,对我来说都是极大的提高。之前,公司并没有人专门做性能测试和安全性测试,我接到这个任务,并且开始了有趣的探索。比如性能测试工具LoadRunner、Silkperformer、OpenSTA、JMeter等等,甚至当时我蠢蠢欲动的打算自己实现一个性能测试工具。安全性测试中,我们研究了各种攻击方式,安全威胁,研究了各种安全扫描工具:FindBugs、PMD、LAPSE、Fortify SCA等等。我的(原创)攻击方式学习之XXX系列也是那时完成的。

  后来,性能测试逐步走向正轨,我开始负责毒霸C++模块的接口测试,属于白盒测试,我们都统一称作模块测试。当时我加入的时候,模块测试已经做了很长一段时间了,当时我们使用的测试框架是自己开发的CppTestFramework,我使用了几周后,发现CppTestFramework有很多不尽人意的地方,有的时候还会出现Bug,让我不得不停下案例编写的脚步去修正CppTestFramework的Bug。于是我想是否可以使用一些现成的测试框架,比如CppUnit之类的。后来,我发现了Google Test,简称gtest。这让我异常兴奋,gtest的简洁、易用,让我毫不犹豫的选择了它。所以你会看到现在还一直置顶的《玩转GTest系列》的文章。

  玩转GTest系列的文章很快就被gtest的作者zhanyong.wan发现,在他的鼓励下,我在极短的时间内完成了整个系列。现在的gtest官方主页右侧,还保留着我的文章链接。这个链接为我带来了可观的流量,更给我带来了极大的信心。

  接下来,就需要说服团队中的每个人,切换测试框架到gtest上来。于是,我特意举行了几次关于gtest的技术交流,向他们介绍gtest的特点和优势,并且从头开始介绍gtest的用法,以及一些能够吸引他们眼球的东西,比如:参数化测试,死亡测试,案例分布执行等等。渐渐的,大家都接受了gtest,于是,我用了1,2天的时间,写了个脚本,将以前所有基于CppTestFramework的测试案例代码自动升级成了gtest测试案例。

  模块测试的主要工作,是调用毒霸DLL的导出函数,尝试各种输入,然后检查是否达到预期的结果。有时候,我们还会对产品代码做一些单元测试。直接取下毒霸产品的代码,进行阅读、测试,让我对产品有了更深的了解。我对自己的代码要求很高,也容不得别人代码的瑕疵,所以,我很喜欢挑刺。我无法容忍开发人员命名时随意使用的缩写,我会给开发人员报变量命名的Bug,仅仅因为开发将Client写成了Clien。虽然Bugs数并不在我们的考核指标范围内,但我搜了一下,我发现的Bug数在整个测试团队(包括手工测试)中是排在前列的,虽然有很多Bug的优先级并不是很高。

  我是一个追求完美的人,我给开发提的一点点小的BUG,虽然不是立竿见影,但是是对开发代码有长远的促进作用。当我发现一个Bug时,我不是立即将它录到Bug库提交给开发,而是直接编译开发的代码,进行调试,找到Bug的根源。所以,我提交的Bug,基本上都会指出导致这个Bug的代码在哪个文件,第几行,以及,修复这个Bug的方法。也许开发不太喜欢过于强势的测试人员,我发现很多开发人员看了我的修复建议后,都要使用另外一种方式去修复它。这的确非常有趣。

  回到现在……

  我一直在思考,我的未来发展方向是什么。我是一个喜欢和代码打交道的人,也是一个愿意写代码一直到60岁的人。所以,一直以来,架构师是我梦寐以求的。我在测试领域的这三年,让我深刻的领悟到了软件测试的点点滴滴。我也在想,我是否需要坚持在测试这个领域继续发展。

  我心里怀着一个梦想,开发一款卓越的软件,让全世界为之受益。软件测试始终是在测试别人的代码,无法创造真正属于自己的产品。于是,业余的时间,成了我的快乐时光。我疯狂的学习、读书、写Blog,Coding。这一点来说,我非常的宅,不过我有一个喜欢和我一起宅的女朋友。一直以来,她对我的鼓励,支持都令我非常感动。我写了很多东西,都是用她的名字命名的,比如:NancyTetrisNancyBlogNancyGLines等等。

  Python是我业余时间时间学习并喜欢上的编程语言。我喜欢它的简洁和优美。我的很多工程都是使用Python来编写的,并且所以的代码都托管在Google Code中,以开源的方式提供着。我喜欢这种哲学。如果让我做一个职业Python程序员,会让我非常兴奋。

  我也想过做一个自由职业者。这样我就有大量的时间做自己喜欢的事情,专研自己喜欢的技术,前提是有某个东西能够给我带来稳定的收入维持生计。当然,我可以选择创业。我有一些想法,但是都没有坚持实施下来。

  我想,做一个Consultant也不错。据说这是一个在国外很火的职业。Consultant会遇到各种各样的环境,面对各种各样的难题,从事的是一个非常有挑战的工作,需要具备很强的解决问题的能力。

  也许,研究院会更适合我。我有着对那些未知领域无穷的求知欲望,我非常享受沉浸在研究中的快乐。同时,这也能让我找到自己专攻的方向,将某一门技术研究的更深更透。

  一个人想在某方面成为大师,需要在上面花费1万小时的努力。我希望我能找到自己的方向,并且坚定的走下去。

posted @ 2010-03-27 14:14  CoderZh  阅读(8122)  评论(40编辑  收藏  举报