写给程序员的软件测试指南:人人都可以开发无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读版图书一本。赶紧来参加哦!


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

阅读原文

相关文章
|
27天前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
29 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
29天前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
2月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
1月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
136 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
21天前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
36 2
|
1月前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
52 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
2月前
|
Java C++
代码文件间重复性测试
本文介绍了如何使用代码相似性检测工具simian来找出代码文件中的重复行,并通过示例指令展示了如何将检测结果输出到指定的文本文件中。
|
2月前
|
SQL 安全 测试技术
『软件测试6』bug一两是小事,但安全漏洞是大事!
该文章强调了在软件测试中识别与处理安全漏洞的重要性,并详细介绍了常见的安全测试类型、测试流程及使用的主要工具,帮助测试人员有效地检测和防止安全问题。
『软件测试6』bug一两是小事,但安全漏洞是大事!
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
18 0
|
2月前
|
测试技术 UED 开发者
软件测试的艺术:从代码审查到用户反馈的全景探索在软件开发的宇宙中,测试是那颗确保星系正常运转的暗物质。它或许不总是站在聚光灯下,但无疑是支撑整个系统稳定性与可靠性的基石。《软件测试的艺术:从代码审查到用户反馈的全景探索》一文,旨在揭开软件测试这一神秘面纱,通过深入浅出的方式,引领读者穿梭于测试的各个环节,从细微处着眼,至宏观视角俯瞰,全方位解析如何打造无懈可击的软件产品。
本文以“软件测试的艺术”为核心,创新性地将技术深度与通俗易懂的语言风格相结合,绘制了一幅从代码审查到用户反馈全过程的测试蓝图。不同于常规摘要的枯燥概述,这里更像是一段旅程的预告片,承诺带领读者经历一场从微观世界到宏观视野的探索之旅,揭示每一个测试环节背后的哲学与实践智慧,让即便是非专业人士也能领略到软件测试的魅力所在,并从中获取实用的启示。