写给程序员的软件测试指南:人人都可以开发无Bug代码

点击关注异步图书,置顶公众号

每天与你分享IT好书 技术干货 职场知识



参与文末话题讨论,每日赠送异步图书。

——异步小编

一年前,也是端午节,很巧合,本书的一个译者为另一个译者的新书《软件测试价值提升之路》写序。一年之后,还是端午节,两位译者一起为不一样风格的软件测试译著《程序开发人员测试指南:构建高质量的软件》(后简称《程序开发人员测试指南》)写序,依旧充满诗意,享受着成功的喜悦,并郑重推荐本书给所有的软件开发者和测试人员。

回想当初,朱少民老师从人民邮电出版社接下这本书的翻译任务,邀请 3 位测试界朋友杨晓慧、欧阳辰、曾天乐组成翻译团队,开启了本书的翻译旅程。他们虽是测试老兵,但从接下任务之后,还是感到较大的压力,始终怀有一颗谦逊的心来做这项工作。一方面它是全球第一本以“开发人员测试”命名的专业图书,希望中译本能够得到大家的长久喜爱。另一方面,翻译不是一件很容易的事,比写书还难。写书可以按照自己的想法、意愿去写,翻译则是“戴着脚链在跳舞”,经常需要仔细地揣摩原作者的写作思路或所表达的具体含义。就拿我们所整理的一个术语表为例,其中收集了218个术语,几经修改,先后出了好几个版本。多数术语很容易统一起来,有些术语(如quirk、circular argument、code bloat等)会有争议,不容易达成一致,查证各种资料,最终才达成一致。甚至面对个别术语(如Mockist、Test Double、Stub),我们觉得多数开发人员更容易理解英文术语,没必要翻译成中文,但为了图书规范,尽量把各种术语翻译成中文,只是在其第一次出现时,注明原英文术语。

十年前或更早,许多优秀的软件公司都有独立的测试团队,更强调测试的独立性、客观性,开发的质量很大程度上依赖于独立测试的质量。那时,微软公司拥有大约一万名专业的测试人员(Software Development Engineer for Test,SDET),成为全球为数不多的测试大军团,因此,那个时代微软是许多公司的测试标杆,大家学习微软如何做测试,参加由微软资深人士开设的培训讲座。那个时候,我们曾经亲身经历的项目,开发人员所做的测试很少,更多的测试是由专业的测试团队完成。即使大家都认为“单元测试应该是由开发人员来做”,单元测试的覆盖率也非常低,其效果依旧不理想,可圈可点的项目很少。 不少项目推行过开发者测试,成功者寥寥,甚至个别项目想摆脱独立的测试团队就直接上线,结果也是铩羽而归。

然而,最近几年敏捷开发席卷而来,到处开花结果,所有开发者越来越关注质量,开始做越来越多的测试。微软测试军团从2010年开始瓦解,到2014年烟消云散,绝大多数的SDET快速融入开发团队之中,成为开发工程师的一员,而剩余的SDET要么改行,去干运维、技术支持等工作,要么辞职,去其他公司继续专职的测试工作。今天,Google、Facebook等公司成为新的标杆,人们开始推崇非常简单的工程师文化、推崇开发与测试的融合。在这样的环境下,开发人员不仅需要完成代码,还需要全力保证代码的质量,要求开发人员做足够的测试。但是,开发人员不是天生下来就会做测试,测试能力还比较弱,甚至有些开发人员在今天敏捷开发的环境下,依旧排斥测试,开发者测试在国内不容乐观,这里面有客观因素,也有主观因素,但无论如何需要改变。

如果按照过去那种瀑布模型做测试,先开发,后测试,开发人员会遇到心理上、思维上的障碍。而从理论上看,测试驱动开发(TDD)则彻底解决了这个问题,因为测试在前,开发在后。在开发前,测试的思维不会受到实现思维的影响;实现的代码还没有,自然也不存在心理上的障碍。理想很丰满,现实很骨感,TDD的应用还是凤毛麟角,因为TDD的具体实施会面对各种困难,如给开发人员带来额外的工作量、如何摆脱过去写代码的习惯等。例如,在TDD实施时,我们经常能够听到开发人员说,“再给我加一倍的时间”。由于增加较大的工作量,在进度压力下就很难实施TDD,或者说,许多团队不知如何实施TDD,如何更高效地完成软件的开发且提高质量,不仅让客户满意,而且也带来生产力。如果管理层有坚定的决心,并敢于在组织、流程、策略上做出相应的改变,TDD可以带来“质量”和“生产力”的双收益,不靠事后检验,可以大大降低质量劣化带来的成本。

开发者测试不仅仅局限在TDD、单元测试和集成测试,组件之间的交互性测试、调用系统进行更高层次的测试也会出现在开发者测试中,开发者测试也不仅仅使用测试技术,可测试性、依赖关系、复用和契约式编程、防御式编程等以构建高质量的代码为目的的技术也与开发者测试息息相关。测试不能真正保证质量,软件质量是在设计、编程过程中慢慢形成的。从这个角度看,开发者测试更为重要,在开始构造功能时就要思考怎么测试它,相对于找到代码错误,他们更关注于如何避免错误。在成功的团队中,团队的每个成员都拥有这样的理念:构建高质量的软件(正是本书的副标题)。他们与客户、交付团队协作,试图理解什么才能帮助客户获得成功,如何找到最有效、最简单的解决方案。这本书正是从这个角度展开讨论,以帮助开发人员正确地理解和掌握开发者测试,解决开发人员从准单元测试开始,到测试替身、模拟框架、不同的TDD模式等测试中遇到的各种障碍。本书还有其他一些特点,下面就让我们逐一介绍。

首先,这不是“测试专家写的开发者测试”,而是“开发专家写的开发者测试”。书中并没有花太多篇幅介绍测试的概念、测试设计技术、单元测试工具(这些可能是我们之前推行开发者测试的重点),而是把重心放在了可测试性、影响测试的编码风格、实现开发者测试的方式、测试环境和条件的构造、开发者测试在全部测试活动中的位置和作用等方面(这些是真正影响开发者测试效率的问题)。因此,这本书对于开发人员具有很好的实用价值。

其次,这本书不是一座“大山”,而是若干“甜点”组成,除了前3章介绍测试的基本概念和术语,其他各章相对独立,一章基本是一个主题,阐述开发者测试所遇到的问题、解决方法、注意事项等。即使隔了很长时间我们才读另一章,或者跳过没有兴趣的个别章节,也完全不影响我们阅读的体验或收获。“甜点”还隐藏在每一章中——每章穿插着一些“小窍门”“经验之谈”或“注意事项”等,点拨读者,读者获得启发或警醒。

再者,本书实例丰富,循序渐进,例如14.1 节就用了“一个简单的搜索引擎”的8个实例,一步一步地介绍经典风格的TDD是如何实施的。本书的内容安排得当,有主有次,主次分明,例如许多测试书籍都有“基于需求的测试方法”的详细介绍,本书则用较少篇幅快速带过。而对于重点内容,如可测试性、Mock技术和TDD,分别用了两章阐述其不同的方面。在Mock技术中,逐一介绍了如何应用不同的Mock对象——桩对象、伪对象、模拟对象、监听器、哑对象,更体现其专业水准。

最后,这本书中的开发者测试不是“孤立”的,而是“在上下文中”的(上下文是软件工程中最重要的概念之一)。书中将开发人员与测试人员放在一个场景中,让读者更好地理解问题发生的前因后果。将问题放在代码中(很多还是来自于实际产品的代码),方便读者映射到自己的产品和代码中,并设想解决问题的方法是否适合自己,留给读者更大的思考空间。将测试活动放在实际的研发项目中,单元测试和模块集成、独立模块测试的区别并不那么明显,书中也不回避这些现实问题,而是帮助读者看到这些测试的真正过程,使读者可以根据项目的具体情况做出策略选择。

我们非常高兴参与本书的翻译,翻译过程虽然很辛苦,但也是快乐的学习过程,能解开我们对开发者测试的一些疑惑。唯一的遗憾是,相见恨晩矣!如果早几年读到此书,在之前的工作中,很多事情会有更好的方式做,比如TDD、单元测试,比如代码质量检测、敏捷一体化团队……相信本书对开发者们会有更大的帮助,会逐步提升开发者的测试能力。开发者测试做好了,在未来交付项目代码时,会感到很轻松,会更加充满自信。

《程序开发人员测试指南:构建高质量的软件》

《程序开发人员测试指南:构建高质量的软件》

【瑞典】亚历山大.塔林德 著

点击封面购买纸书

第一本面向开发人员的、编写可测试的代码、避免缺陷,提高软件质量的测试书,测试专家朱少民、杨晓慧、欧阳辰、曾乐天翻译并推荐。

在本书中,亚历山大首先展示了那些需要关注的测试。他介绍了一些被人们忽视但很实用的观念,例如契约式编程(Programming By Contract)。他教会我们如何设计出容易被测试的代码。他强调了两个我喜欢的目标:

构建具有高可读性的、基于规格说明的测试,依旧保持文档的价值;

消灭高质量系统的最大敌人之一——各种坏味道的复制。

他通过实用的、平衡的方法做好TDD,并呈现了传统的TDD和Mockist TDD的应用技巧,从而向我们全面介绍了单元测试的内容

本书讲解了开发人员需要了解的测试技术,以便帮助他们建设高质量的软件,讲解了如何编写测试代码、如何进行单元测试、重构测试驱动的开发等实战技术。帮助读者快速吸收的关键测试概念,以及在编写测试用例时需要重点掌握的技术和不可不知的方法。也包括需要学习的测试平台或工具。本书作者也回答了有关开发团队常常在测试中遇到的许多问题,包括:什么是代码测试? 什么使得它难以测试? 什么时候进行足够的测试等。

今日互动

你觉得开发人员需要测试技巧?为什么?截止时间5月11日17时,留言+转发本活动到朋友圈,小编将抽奖选出3名读者赠送纸书1本和2张e读版100元异步社区代金券,(留言点赞最多的自动获得一张)。异步图书后台回复“5月新书”进入新书交流群,获得第一手新书信息,点击此处直达活动

推荐阅读

2018年4月新书书单

2018年5月新书书单(文末福利)

异步图书最全Python书单

一份程序员必备的算法书单

第一本Python神经网络编程图书

长按二维码,可以关注我们哟

每天与你分享IT好文。

在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步e读版图书一本。赶紧来参加哦!

点击阅读原文,购买《程序开发人员测试指南 构建高质量的软件》

阅读原文

原文地址:http://blog.51cto.com/13127751/2112883

时间: 2024-10-17 13:08:56

写给程序员的软件测试指南:人人都可以开发无Bug代码的相关文章

从程序员到项目经理(4):程序员加油站 -- 不是人人都懂的学习要点

学习是一种基础性的能力.然而,“吾生也有涯,而知也无涯.”,如果学习不注意方法,则会“以有涯随无涯,殆矣”. 一.学习也是一种能力 看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力.我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路.说话.穿衣服…后来,我们上学了,老师把书本上的知识一点一点灌输到我们的脑子里,我们掌握的知识越来越多,与此同时,我们学习能力却好像越来越差了,习惯了被别人喂饱,似乎忘记了怎么来喂自

从程序员到项目经理之程序员加油站 -- 不是人人都懂的学习要点(转发)

学习是一种基础性的能力.然而,“吾生也有涯,而知也无涯.”,如果学习不注意方法,则会“以有涯随无涯,殆矣”. 一.学习也是一种能力 看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力.我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路.说话.穿衣服…后来,我们上学了,老师把书本上的知识一点一点灌输到我们的脑子里,我们掌握的知识越来越多,与此同时,我们学习能力却好像越来越差了,习惯了被别人喂饱,似乎忘记了怎么来喂自

程序员装逼指南(转)

程序员嘛,外行人看起来已经是不可理解的奇怪生物了,自然也没必要跟他们再装逼 所以呢,如何对其他程序员装逼就是一门很有学问的事了 ---------------------------------------------------- 一.准备工作 "工欲善其事必先利其器." 1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好.一个用来查资料,一个用来写代码.总之要显得信息量很大,效率很高. 2.椅子不一定要舒服,但是一定要可以半躺着. 3.大量的便签,各种的颜色

一篇写给程序员的提问艺术(转)

作为一个刚入it界的php菜鸟,我感觉自己需要学很多程序员的基本素养,学习如何学习,有效率的学习,精确地学习,热情的学习,加油, 这是一篇关于提问的文章分享给大家吧, (2009年的更新:本文来自2005年的白云黄鹤BBS,未经排版,四年来,文末一直保留有英文原文出处并注明链接) 这个版上太多的问题,不能让我以很愉快的心情来解答,于是,我放弃了强忍着指责别人的心情找到了这篇<提问的艺术>(两年前我在HomePage版张贴过),真诚的希望那些又困难又期望得到帮助的新手朋友们抽时间看看,问&quo

程序员颈椎保护指南

我们程序员天天对着电脑,眼睛,颈椎等等,都会落下不少的职业病.来说说怎么治疗自己的颈椎病. 一.颈椎病是怎么产生的 形成颈椎病的核心原因是:不良生活习惯 我们身体的绝大部分疾病都是来自不良的生活习惯,生活习惯不改,再厉害的治疗也只能是缓解,无法根除. 影响形成颈椎病的生活习惯有那些呢? 1.不良坐姿习惯:天天长时间弯腰低头看文件看电脑,颈椎不出问题才怪,同时也容易驼背和腰疼.你侧着站到镜子前,看看你的脖子是脊椎是直的么? 2.呼吸太浅习惯:天天低头窝胸,呼吸就会变的很浅,呼吸变浅,人身体需要的氧

写给程序员的管理入门课程 -《格鲁夫给经理人的第一课》

写给程序员的管理入门课程 -<格鲁夫给经理人的第一课> 序 格鲁夫给经理人的第一课 <格鲁夫给经理人的第一课> 最早出版于 2007 年,书原名为<High Output Management>.本书的作者格鲁夫是 Intel 的前 CEO,领导了 Intel 从一家濒临倒闭的存储器公司,转型为微处理器公司,并且在个人 PC 开始流行时,成功和微软缔结 Wintel 联盟,主宰了整个 PC 电脑时代. 格鲁夫是一个技术出身的管理者,在本书中,我们甚至看到他多次用编译器来

写给程序员的机器学习入门 (一) - 从基础说起

前段时间因为店铺不能开门,我花了一些空余时间看了很多机器学习相关的资料,我发现目前的机器学习入门大多要不门槛比较高,要不过于着重使用而忽视基础原理,所以我决定开一个新的系列针对程序员讲讲机器学习.这个系列会从机器学习的基础原理开始一直讲到如何应用,看懂这个系列需要一定的编程知识(主要会使用 python 语言),但不需要过多的数学知识,并且对于涉及到的数学知识会作出简单的介绍.因为我水平有限(不是专业的机器学习工程师),这个系列不会讲的非常深入,看完可能也就只能做一个调参狗,各路大佬觉得哪些部分

《高效程序员的45个习惯:敏捷开发修炼之道》

--敏捷开发入门经典-- [内容] <高效程序员的45个习惯:敏捷开发修炼之道(修订版)>总结并生动地阐述了成为高效的开发人员所需具备的45个习惯.思想观念和方法,涵盖了软件开发进程.编程和调试工作.开发者态度.项目和团队管理以及持续学习等几方面. <高效程序员的45个习惯:敏捷开发修炼之道(修订版)>适合所有程序员阅读. [作者] Venkat Subramaniam博士: Agile Developer公司创始人,敏捷开发权威人士.他培训并指导了美国.加拿大.印度和欧洲多国的上

野生程序员是指仅凭对计算机开发的兴趣进入这个行业,从前端到后台一手包揽,但各方面能力都不精通的人(转)

本文摘自:<Web 全栈工程师的自我修养> 野生程序员是指仅凭对计算机开发的兴趣进入这个行业,从前端到后台一手包揽,但各方面能力都不精通的人.野生程序员有很强大的单兵作战能力,但是在编入“正规军”之后,可能会不适应新的做事方法. 遭遇“野生程序员” 腾讯公司内部的团队很多,在团队管理上有项目和专业两个维度.也就是说,有些团队是项目维度的,整个团队共同维护一个产品,成员来自不同的职业岗位:有些团队是专业维度的,比如一个组都是前端工程师,维护不同的产品. 因为前端组是设计部最接近后台技术的团队,所