序一
身处软件开发这个颇具颠覆性的行业,又恰逢智能技术的爆发期,很多认知都在被刷新着。和阿奎相识源于组织的敏捷转型合作,初几次见面印象是此人技术问得很细,聊了很多关于代码重构和自动化测试的观点,这可能也是敏捷圈子里最能够试探彼此是否为圈内人士的方法。那个时候关于“测试已死”的观点还是颇为流行的,当然意思是传统的人肉测试最终都会被自动化测试所取代,而开发人员通过测试驱动开发这样的技术实践自然就能生成自动化测试集,那专职测试还留着作甚?
前两周圈子里的人工智能专家给我转来一篇论文,快速扫描后大意是一组科研人员正通过语义和图形分析的技术对算法类论文进行直接算法生成,也就是说给这程序一个算法描述,它就还你一个真正的算法实现。当然现实中给一个高保真网页图片,还你一个真实网站的在线服务已经存在了。稍加思索你会得出一个具有讽刺意味的推论:是不是“开发已死”?具备一定智能的程序已经可以自己产生相应的程序了。而测试却好像并没有死,反而这两年从探索性测试到针对新交互渠道的感知测试还越来越火了。
看到这本书的时候,很高兴当年和阿奎讨论的一个观点现在仍然是对的,那就是“测试人员必须写代码”。不管是现代的分布式互联网应用,还是即将到来的物联网设备,其测试的难度都提升了很多,甚至可以说如果不采用自动化的程序是不可能进行有效测试的。想像一下把应用商城刷积分的人肉模式复制到未来一平米可能有上万个物联网设备接入的场景下,你可能需要一个Alpha Go来完成这样的“人肉”测试。有幸的是我认识了几位把测试人员写代码真正贯彻和执行下去的管理者,阿奎就是其中一位。
Python作为编程语言自不用多讲,曾经在测试领域因为其灵活性大受欢迎,积累了不少有用的测试库,即使现在很多项目上我们还会日常使用。而大数据时代的来到更催生了这门语言的学习热潮,不少业务人员开始学习Python作为数据分析的编程语言。时下的大数据分析不同于之前既定规则的数据处理,更多是在大数据中去挖掘和探索,某种意义上我们又何尝不可以说是在进行“数据测试”呢?所以学习Python应该是符合时代背景高投入产出比的事情。
从互联网到移动互联网,再到物联网,很多技术都会被改变,最有可能持续发光发热的“组件”可能就是我们的应用通信协议HTTP了。针对HTTP通信的接口测试也是最常见的,经常也是最繁琐的。学习如何进行有效的自动化是避免自己被机器人取代的必备技能。
最后,很感谢阿奎把自己的学习心得和方法也融汇到了此书中。刻意练习是技术学习的不二窍门,如何坚持确是相当有难度的一件事情。和广大读者一样,阿奎并非身处一个纯粹的技术公司,日常有很多的管理会议和业务需求,所以他的学习经验分享更值得大家借鉴和试验。
肖然
精益敏捷专家
ThoughtWorks咨询与设计总监
序二
转眼,阿奎工作已经13个年头了,先后做过程序员、软件工程师、团队经理,现在是一名系统分析师和内部敏捷教练,积极地参与组织中的敏捷实践和推广工作。
在担任团队经理期间,阿奎先后带过C/C++、Cobol和Java为开发语言的开发团队,多年来一直保持对技术研发工作的热爱。最有意思的是,多年以前他还在一个以主机COBOL为开发语言的部门的时候,竟然会去参加以Java为语言栈的编程大赛。
接触最多的是2013年调到新技术实验室的时候,那个时候互联网金融风头正盛,敏捷开发方法作为一种新的软件开发方法,正在被各个大型企业所认可和尝试。那是他接触敏捷的缘起,甚至可以说也是这本书的缘起。
阿奎自2013年开始从事敏捷实践和推广工作,他将自己定位为一名技术性管理者,在从事团队管理的同时,一直保持着对各种新技术的关注,在工作中对于如何提升团队的工作效率也多有思考。众所周知,敏捷开发转变的核心在于人的转变,而在人的转变过程中,人员能力的提升和对新的开发模式的适应又是尤为重要的。
随着敏捷、精益、DevOps等新的软件开发理念的盛行,软件测试的从业人员也正在经历工作环境和工作要求的改变。这种改变需要软件测试从业者成为真正的IT人,具备计算机基础理论知识和网络知识,掌握一门编程语言,熟悉一个操作系统和一个数据库。
环顾业内,很多软件测试从业者都正在经历从“点点点”工程师到自动化测试工程师的转变,这个转变是痛苦的,也是迷茫的。阿奎就是看到了这样一个需要,利用去年下半年和今天一年的业余时间,写了这本书,其中的每一个练习都是他精心设计的,并且都自己进行了实战和解答。这本书是他专门针对没有编程基础的软件测试工程师如何快速、高效地学会编程这一课题的一次实践和有益的尝试。
书中提到的“闯关式学习”实际上就是“刻意练习”的学习思想,在编程语言学习上的实地应用,并且经过他的一些实验,取得了非常好的学习效果。
特别祝贺阿奎,能够将自己长期工作、学习的收获和所得,通过一本书的形式进行一次总结,特别是这样一本帮助大家学习编程的书。
薛勇
主任工程师
中国银行软件中心
前 言
每个人都应该花1年时间学习编程。
——乔布斯
我一直以来有一个观点,对于希望从事自动化测试工作或者希望掌握自动化测试技能的人士,掌握一门计算机语言是绕不过去的一个坎。就是这个坎,让很多从事手工测试的工程师对于自动化测试工作望而却步,这让很多人不由自主地退而求其次,转向去学习一些自动化测试的工具,来回避语言学习的困难。
看到身边很多的测试工程师对待编程语言的学习畏之如虎,谈之无力,让我产生了“为希望转型成为自动化测试工程师的软件测试从业者提供一本靠谱的编程语言学习指导书”的想法。这也是促成这本书初稿形成的原始动力。
随着信息技术的发展,计算机办公技能成为一名现代白领工作者的必备技能,我们日常工作中有很多的时间都是在与计算机进行交互。通过对计算机语言的学习,可以为你打开一扇与计算机进行深层次互动交流的大门。同时,在编程语言的学习中,你会学到一种新的思考方式并找到另一种看待问题、解决问题的视角。
本书的内容包含两部分:Python编程基础和基于Python的HTTP接口测试。
在Python编程基础部分,主要关注Python语言的基础知识的学习和掌握,这一部分对于每一名希望快速掌握一门计算机语言的学习者都是适用的。
基于Python的HTTP接口测试部分,重点面向希望转型为自动化测试工程师的软件测试从业者,以HTTP接口测试为应用场景,来学习和掌握Python的相关知识点和使用技巧。
本书以闯关式学习方法为指导进行编写,让读者通过一个一个小的关卡的刻意练习,在不知不觉中掌握“Python编程基础”和“HTTP接口测试”的相关技能,完成从手工测试工程师到自动化测试工程师的转变。
所谓闯关式学习方法,通俗地讲,就是通过不断的刻意练习,打通一个一个的练习关卡来进行自我提升和学习的方法。闯关式学习方法首先要求有一名有经验的指导者,针对学习目标刻意设计的一个又一个的练习关卡,即挑战问题,读者通过一定的前期知识的学习和练习后,在给定的时间内对第一个关卡的问题发起挑战,即闯关。如果给定的时间内不能有效地完成挑战问题,就需要反复的刻意练习,直至轻松完成挑战问题为止,即闯关成功。此时,进入下一个练习关卡。
我一直认为,学习软件开发、测试技能,和学习骑自行车、游泳一样,是一项技能的修炼,而非仅仅是知识或者概念的掌握,而要习得一项技能需要“刻意地练习”。
作家格拉德威尔在《异类》一书中指出:“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。”他将此称为“一万小时定律”。要成为某个领域的专家,需要10000小时,按比例计算就是:如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。
我并不是想用这段引用来告诉大家,成为自动化测试工程师也需要五年的时间,而是希望大家看到其中“锤炼”一词的深意——成就超凡技艺的过程,实际上是一个“锤炼”的过程,也就是“刻意练习”的过程。
既然叫做刻意练习,有别于随意的练习。随意的练习并不能带来有效的学习和精进,并且会浪费时间,打击练习者的信心。没有任何有效的学习和精进的过程是惬意的,不需要付出努力的,要做到刻意练习有如下四个要点:
● 有目的的练习。刻意练习一定是针对某一个既定的目的进行练习,即每一个练习都是有具体目标的。
● 精神高度集中的练习。刻意练习一定是需要练习者精神高度集中,全身心投入的,只有这样才能带来学习上的领悟和突破。
● 反复的练习。在以上两点的基础上,重复的练习是技艺提升不可缺少的一环,没有什么技巧性的技艺是一次就可以完全掌握和彻底领悟的,编程尤其如此。只有通过不断的重复的练习才将编程中用到的一些基本的概念和模式变成自己的肌肉记忆和大脑反射。
● 获得有效反馈的练习。反复练习中,还需要有效的反馈来确定练习是否取得了进展,这种反馈一方面可以促进练习者更好的坚持练习,另一方面也可以告诉练习者,练习到什么程度就够了。
以上也是闯关式学习方法的理论依据和本书设计编写的初衷。
编程作为一门技艺,是可以习得的,习得是有方法的,即刻意练习!但是,“没有任何有效的学习和精进的过程是惬意的和不需要付出努力的。”
这是一本针对Python编程基础和HTTP接口测试技能,进行刻意练习的学习指南,这不是一本可以靠在沙发上阅读的消遣书。