预测未来一直是人类期望掌握的能力,透着人们对未来的憧(kong)憬(ju)。千年的文明史中人类不断尝试去预测未来。东方的八字、?杯、奇门遁甲,西方的星相学、水晶球、塔罗牌、先知;直到先如今的择吉日、"不说话知你姓"、股市预测和天气预报。可见预测术已经走到了尽头,所以不要期望谁会给出未来的景象,我们能做的是--xiacai...会不会有软件测试这个职业消失了像旧时代的电话接线员一样。
  扯过了...
  一个被普遍认同的观点是,目前软件复杂度和规模不断增加的情况来看,测试工作只会变得越来越不可或缺。(这个结论显然有些片面,移动APP肯定没在考虑范围之内。)要正儿八经的猜测未来的景象,我们不妨看看近些年软件测试的变化(尚且叫“演进”吧)方向,测试的演进大致可以归为3类:
  第一类演进的目标是『配合开发模式变化的测试流程改进』。
  回看那些开发模型和方法,例如瀑布、迭代、螺旋、敏捷、持续集成、XP(极限编程)、TDD(Test Driven development)、ATDD(Acceptance Test-Driven Development),“我们一直在实践中探寻更好的软件开发方法...”『敏捷宣言』中的这句话很好的诠释了这些名词的由来。软件开发方法演进的过程中,软件测试方法也需要同步的进化,这些方法的成功都是需要开发和测试相辅相成共同演进才能获得,比方说随着敏捷和持续迭代理念在开发项目中的普及,测试自动化和持续回归测试逐渐成为了测试工作的重心。
  第二类我把它称做『面向测试对象的规律总结以及新方法的寻找』。
  软件复杂度的增加和软件规模的增大是测试工作一直以来大的挑战,面对新的测试对象我们往往需要寻求更有效的测试手段,然后总结归纳出一系列测试方法、模型或者理论。和算法的演进一样测试理论的演进是缓慢的,几年几十年前的理论方法仍是现今测试行为的核心,这需要经历长期的探索和投入。新的软件服务,云服务、物联网还有移动APP的爆发,层出不穷,所以我们一直在路上。(云测和众测是APP爆发和物联网背景下的一种尝试。)
  第三类我把它总结为『更高效的测试执行』。
  高效的测试执行即追求更快的测试效率,达到更好的测试效率。说到这个大家肯定会想到自动化,在未来自动化测试仍会是提高测试效率的大方向,问题如今已演变成如何让自动化测试实现起来更简单,维护起来更方便,执行起来更灵活。只有自动化才能满足如今乃至以后更加“敏捷”的开发状态。自动化固然重要手动测试如今也仍然无法割舍,让手动测试变得高效,也有非常多的工作可做:开发测试工具,加强辅助手段;让测试过程中的数据创建,结果检查,信息抓取,问题定位等阶段变的更便捷。
  测试未来会是什么样子呢?
  计算机软件行业被归为服务业,测试人员是为服务业提供服务的人,我们为代码、数据库服务器、和各式的计算设备提供服务。想预测未来,先来看看那些被我们服务的对象的变化吧。
  『硬件的变化』摩尔说“大规模集成电路中的集体管数量每18个月增加一倍”,之后几十年里CPU的性能也一直按照这样的速度增长着。近些年单颗CPU的性能提高看似到达了极限(因为耗电、漏电流、热密度等诸多原因所导致的提升停滞)但是多核的出现延续着摩尔规律,也许不久后的有我们能用上1024核的个人电脑了。以智能手机为首的移动设备处理性能的不断提升,则可能催生一个万物联通的时代。2010年的thinkpad笔记本配置是2G内存和500G硬盘,现在6G甚至8G的内存成为了标配,硬盘容量甚至达到了TB级,自购一块2TB的硬盘也不过几百币。但是再大的容量都似乎都很容易被放满,占用空间已达数GB的应用软件、高清视频和图片,实际上存储空间从来没有充裕过。目前主流的存储设备仍为硬盘,而它的速度早已成为设备性能的瓶颈,所以另一种更快的外部存储设备闪存已经在各设备商的高端机型中使用;闪存构成的固态硬盘(Solid State Drive,SSD)速度更快, 它的价格也在变的越来越便宜(当前128G主流MLC颗粒配高效主控的中高端SSD价格在500币左右)。数据库改用SSD作为存储介质已经被广泛的尝试,但是因为数据库的结构以及SSD I/O的特性,它们的组合并未完全发挥SSD的特性,而以高速SSD作为前提的数据库系统正在被研发。
  『带宽的变化』早时候我们上网必须要通过“猫”也是模拟调制解调器,网速快不过100Kbit/s;之后改用ADSL理论上能达到8Mbit/s;现在针对光纤入户的小区电信运营商已经能够提供百兆甚至千兆的带宽了。带宽大幅增快的同时,价格也在变的越来越便宜;相比大学时躲在课本后面看球赛文字直播的情形,现在的学生们已经可以通过3G/4G网络看现场直播了。硬件性能和带宽的变化,使得网络两端的平衡性一直在摇摆,于是产生符合当时环境的软件服务特征,中央集权时代、CS结构和云服务等等。。
  『代码的未来』1954年开始开发的FORTRAN(FORmula TRANslator)语言被认为是世界上早的编程语言,而在那个时代编程语言已经有3000多中,虽然大多数只在论文上出现而没有实现,至今已知被实现的语言多达2500种。http://people.ku.edu/~nkinners/LangList/Extras/search.htm每一种新语言的诞生不像其他的发明发现一样能够快速的得到收益,实际上大多数语言在实际应用中夭折了。对比30年前计算机,如今的机器已经有大约10万倍的外部存储容量,1万倍的内存大小和1000倍的CPU性能;可是如果拿30年前的编程语言和现在主流的编程语言比较,你会发现它们的差别其实并不大,编程语言的发展是非常缓慢的,但是语言的变更仍是大趋势且从未停止。
  现在影响较大的趋势主要有“声明式的编程风格”(包括DSL“特定领域语言”及“函数式编程”)、“动态语言”("元编程")、多核环境下“并发编程”。(因为编程的经验的不足这里我没法一一展开介绍,但是确实值得关注和学习,它们可能已经出现在你测试的代码里;另外自动化做为代码的一部分在演进的趋势中不可忽略。)一方面抽象化和动态极大的提高了软件的开发效率;怎么理解,《人月神话》中有:"无论使用什么编程语言,生产一条基本语句所需要的工数几乎是一定的。"之前A语言描述一个算法需要1000行,现在B语言用10行可以搞定了,也是说新的语言让工作效率提升了100倍。而另一方面多范式编程风格的流行和动态语言使得代码更加复杂而不易阅读。另一个不能忽略的变化是近几十年程序员们在框架和工具等方面的极大投入,Framework、API类库、方法有着千倍的增长;工具以IDE为例,如今的IDE功能多切强大,语法提示,重构,调试器等等都对生产力有着重大的影响。
  ......
  软件测试的周围正在发生着各种有趣的事情,让你的工作变的更有成感;而一些事件(像移动APP的爆发)也可能改变现在的游戏规则,让你觉得茫然。留意发生在周围的变化,关注你感兴趣的事情,做一个生产者,让机器做更多的工作。
  曾经看过一部记录片题目叫『Life in a day』,影片是导演雷德利·斯科特和托尼·斯科特牵线,由YouTube发起邀请
  全世界的网友用摄像机纪录下2010年7月24日这自己的生活以及回答一些问题。终来自190个和地区的4500小时的视频汇聚到一起,展现了在同之中世界各地人们的日常生活。虽然同在地球上但是镜头中的每位主人公都在经历着不同的生活,有的人平淡无奇,有人在经历冒险。横跨大洲各地域人们所思所想的极大反差刺激着我。我很想知道如果邀大家做一段『Test in a day』的记录,展现出来会是什么样子,很难想象那些可能的思想的碰撞。
  google, microsoft, facebook这样的big软件公司一直在引领着的相关领域的技术潮流,但是角落里专注的人们也在悄然谱写着未来。