`
kyke
  • 浏览: 50562 次
  • 来自: 广州
社区版块
存档分类
最新评论

谷歌如何测试软件 —— 第三部分

阅读更多

在前两部分的文章中,很多人在评论里提出了问题。我没有忘记他们。希望大部分的人能在余下的几部分文章里找到答案。我现在还是开始这篇文章的主题。

在Google,质量并不等于测试。我相信在任何一个地方都是如此。“质量不是被测试出来的”这句老话是再正确不过了。从汽车到软件,如果它们起初制造的就有问题,那它们永远都不会没问题。试问任何一个曾经被迫大量召回的汽车公司,掩盖质量问题的代价有多大。

然而,事实情况并不是像这句话那样既简单又精确。虽然质量并不是测试出来的,但我们有同样的证据表明,没有测试,你不可能开发出任何有质量的东西。一个人怎么可能在没有测试的情况下认定你的工程具有高质量?

对于这种难题,最简单的解决办法就是:禁止对开发工作开方便之门,以独立自由之精神进行测试。测试和开发工作需要同步进行。编写一点,测试一点。再编写一点,再测试一点。更好的方法是制定测试计划,或者你开发之前先把计划做好。测试并不是一个独立的工作,它是开发工作的一部分,伴随着整个开发过程。质量不等于测试;为了质量,需要你把开发工作和测试结合到一起,搅拌它们,直到分不清你我为止。

在Google,这是我们明确的目标:把开发和测试融合,你不能单独进行任何一项工作。做一点,测试一点。再做一点,再测试一点。关键就是看谁在做测试。因为在Google,专职测试人员是出奇的少,所以唯一可行的方法就是使用开发人员。还有比这些实际开发了这些程序的人员更合适做测试的吗?还有比程序的作者更适合去发现bug的吗?是谁具有更多的愿望在程序第一次写出时避免bug?Google之所以安排这么少的专职测试人员的原因就是,开发者负责质量。事实上,坚持使用大型测试机构的团队通常会开发出有问题的东西。测试机构庞大,这是一个信号表明编码/测试工作的融和有问题。增加测试人员并不能解决任何问题。

这就是说,质量措施更多的应该是一种预防行为,而不是一种发现过程。质量属于开发问题,而不是测试问题。通过把测试工作一定程度的融合到开发过程中,我们极大的降低了一些本来被认为会写很多有问题的代码的人的出错机会。我们不仅避免了大量的客户方的问题,我们还非常有效的降低了测试人员提出的、其实不是bug的bug。在Google,测试工作的目标就是检查这些预防工作是否在有效的运行。测试工程部一直在寻找这种作为bug创造者的软件工程师和作为bug预防者的测试软件工程师之间的联合能达到的效果的证据,一旦这个方法出现问题,他们就会拉响警笛。

这种开发和测试的结合随处可见,从代码审查注释上写的“你的测试呢?”到厕所里的给开发者的最好的测试实践方法的宣传画——这是我们臭名昭著的厕所测试指导方针。测试是开发工作中是必不可少的,开发和测试的联姻是孕育质量的过程。软工就是测试者,测试软工就是测试者,测试工程师就是测试者。

如果你的企业也有这种类型的结合,请分享出你们成功的经验与挑战。如果没有,那么这是一个给你的企业带来好处的机会:在开发人员和质量之间画上全等号。你们都听过这样一个老故事:小鸡很高兴能为一顿咸猪腿加鸡蛋早餐奉献自己的力量,可猪究竟做错了什么?的确是 … 去对你的开发人员哼哼两声,看能不能得到他们哼哼回应。如果他们发出的是咯咯哒的声音,那说明你们之间存在问题。
分享到:
评论

相关推荐

    华为P40安装谷歌框架步骤1——backup.rar

    华为P40下载谷歌框架第一步。 使用手机浏览器下载(对浏览器无要求),在文件管理中找到下载的安装包 1、文件管理——长按压缩包——更多——解压至——内部存储——选择目录——Huawei(位置在中间偏下)——勾选右...

    Google Android SDK开发范例大全——示例代码

    Google Android SDK开发范例大全(台湾天珑书局09年超级畅销书)——示例代码,第三章

    从入门到精通HTML5——PDF——网盘链接

     第8章 层标记——div 161  教学录像:33分钟  8.1 层 162  8.1.1 层的分类 162  8.1.2 定义数据块 162  8.2 <div>标签 163  8.2.1 <div>标签的简介 163  8.2.2 <div>标签的属性 164  ...

    创新商业模式对电信产业影响系列——Google Android平台化战略专题分析报告

    从市场推广模式来看,Android 系统在软件开源、第三方开发者资源投入、产业链合作等方面有其相对于其他操作系统的竞争优势,随着其技术的逐渐成熟,将会在手机操作系统市场占据一定的市场份额。 启动Android 战略,...

    《Google Android开发入门与实战》.pdf

    第5章 千里之行 始于足下——第一个应用helloworld 52 5.1 helloworld应用分析 52 5.1.1 新建一个android工程 52 5.1.2 填写工程的信息 52 5.1.3 编程实现 53 5.1.4 运行项目 54 5.2 调试项目 ...

    分布式系统学习——GFS谷歌文件系统Paper翻译1

    第二,大型数据文件的规模出现导致文件观念的改变 第三,文件的改变常为追加(append)而非覆盖(overwrite),对一个文件的随机写操作(random w

    谷歌三大论文.rar

    公共资源 2003年Google在SOSP会议上发表了大数据历史上第一篇公认的革命性论文——《 GFS: The Google ...2006年,Google发布了第三篇重要论文——《 BigTable: A Distributed StorageSystem for Structured Data 》

    ApkIDE——安卓反编译

    搜索功能是Apk修改的一个重要工具,从此你不必借助其它第三方搜索工具。 5、内置Google在线翻译引擎,支持实时翻译,支持所有Google支持的几十国语言对译,汉化更轻松。 6、自动识别图像资源,并提供该类资源的快捷...

    《Google Android开发入门与实战》

    第5章 千里之行始于足下——第一个应用HelloWorld 第7章 良好的学习开端——Android基本组件介绍之我的美丽我做主——Android中应用界面布局 第7章 良好的学习开端——Android基本组件介绍之不积跬步无以至千里——...

    Google.Android开发入门与实战

    第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3 编程实现 5.1.4 运行项目 5.2 调试项目 5.2.1 设置断点 5.2.2 Debug项目 5.2.3 ...

    大数据技术原理与应用——第一章 大数据概述

    1.1.1 第三次信息化浪潮 信息化浪潮 发生时间 标志 解决的问题 代表企业 第一次浪潮 1980年前后 个人计算机 信息处理 Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 第二次浪潮 1995年前后 互联网 信息...

    2009.6.19—30举办3S研讨会暨Google Earth与Google Map等仿真建模与共享及ARCGIS与遥感高级程序员培训班

    第三单元:地理信息系统基础概论及GIS数字地图与遥感制图 主讲人:GIS硕士、南京路川公司专业技术开发工程师 第四单元:国际最优秀GIS最新技术应用---ARCGIS9.2/9.3系列专题 1、介绍目标前国际上最优秀的GIS软件...

    Google Android开发入门与实战的代码

    第5章 千里之行 始于足下——第一个应用HelloWorld 52 5.1 HelloWorld应用分析 52 5.1.1 新建一个Android工程 52 5.1.2 填写工程的信息 52 5.1.3 编程实现 53 5.1.4 运行项目 54 5.2 调试项目 ...

    《程序天下Google API开发详解:Google Maps与Google Earth双剑合璧》第三章配套源码

    ├─03 实战Google Maps API之一——IP地理位置可视化查询 │ ├─3.1 创建基本的地图 │ │ ├─3.1.1 “Hello World”地图 │ │ ├─3.1.2 添加API内置GControl()控件 │ │ ├─3.1.3 使用GMarker()地标 │ │ ...

    三天学会HTML5——多媒体元素的使用

    使用Google地图获取位置信息多媒体是互联网中的最重要的一部分,无论访问的是哪种类型的网页,视频或音频触手可及,在之前实现这些功能对开发人员来说可能非常痛苦,必须依赖Object标签,调用第三方软件来加载,如...

    chrome浏览器打开axure生成的HTML静态文件页面

    已升级manifest version 3版本 第一步:解压得到一个axure-...第三步:点击【加载已解压的扩展程序】,选择刚刚解压得到的“axure_chrome_extension”文件夹,即可安装成功。 axure_chrome_extension文件夹不可删除

    android开发入门与实战(下)

    第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3 编程实现 5.1.4 运行项目 5.2 调试项目 5.2.1 设置断点 5.2.2 Debug项目 5.2.3 ...

    Google_MapReduce中文版-系统架构

    第三部分描述了一个经过裁剪的、适合我们的基于集群 的计算环境的MapReduce实现。第四部分描述我们认为在MapReduce编程模型中一些实用的技巧。第 五部分对于各种不同的任务,测量我们MapReduce实现的性能。第六部分...

    android开发入门与实战(上)

    第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3 编程实现 5.1.4 运行项目 5.2 调试项目 5.2.1 设置断点 5.2.2 Debug项目 5.2.3 ...

    Google Android SDK开发范例大全(第3版)part2

     第9章 Google服务与Android完美整合  9.1 Google账号验证Token  9.2 Google搜索  9.3 前端产生QR Code二维条形码  9.4 以经纬度查找目的地位置  9.5 GPS Google地图  9.6 移动版Google Map  9.7 ...

Global site tag (gtag.js) - Google Analytics