Testing Is the Engineering Rigor of Software Development
Testing Is the Engineering Rigor of Software Development
Neal Ford
DEVELOPERS LOVE TO USE TORTURED METAPHORS when trying to explain what it is they do to family members, spouses, and other nontechies. We fre- quently resort to bridge building and other “hard” engineering disciplines. All these metaphors fall down quickly, though, when you start trying to push them too hard. It turns out that software development is not like many of the “hard” engineering disciplines in lots of important ways. 
Compared to “hard” engineering, the software development world is at about the same place the bridge builders were when the common strategy was to build a bridge and then roll something heavy over it. If it stayed up, it was a good bridge. If not, well, time to go back to the drawing board. Over the past few thousand years, engineers have developed mathematics and physics they can use for a structural solution without having to build it to see what it does. We don’t have anything like that in software, and perhaps never will because software is in fact very different. For a deep-dive exploration of the comparison between software “engineering” and regular engineering, “What is Software Design?”, written by Jack Reeves in C++ Journal in 1992, is a clas- sic.* Even though it was written almost two decades ago, it is still remarkably accurate. Reeves painted a gloomy picture in this comparison, but the thing that was missing in 1992 was a strong testing ethos for software. 
* http://www.developerdotstar.com/mag/articles/reeves_design.html 
166 97 Things Every Programmer Should Know 
 
Testing “hard” things is tough because you have to build them to test them, which discourages speculative building just to see what will happen. But the building process in software is ridiculously cheap. We’ve developed an entire ecosystem of tools that make it easy to do just that: unit testing, mock objects, test harnesses, and lots of other stuff. Other engineers would love to be able to build something and test it under realistic conditions. As software devel- opers, we should embrace testing as the primary (but not the only) verifica- tion mechanism for software. Rather than waiting for some sort of calculus for software, we already have the tools at our disposal to ensure good engineering practices. Viewed in this light, we now have ammunition against managers who tell us “we don’t have time to test.” A bridge builder would never hear from his boss, “Don’t bother doing structural analysis on that building—we have a tight deadline.” The recognition that testing is indeed the path to repro- ducibility and quality in software allows us as developers to push back on arguments against it as professionally irresponsible. 
Testing takes time, just like structural analysis takes time. Both activities ensure the quality of the end product. It’s time for software developers to take up the mantle of responsibility for what they produce. Testing alone isn’t sufficient, but it is necessary. Testing is the engineering rigor of software development.
Testing Is the Engineering Rigor of Software Development的更多相关文章
- 微软职位内部推荐-Software Development Engineering II
		微软近期Open的职位: Job Title: Software Development Engineering II Work Location: Suzhou, China Enterprise ... 
- 关于敏捷开发方法(Agile Software Development)的阅读笔记
		对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师<现代程序设计>课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该 ... 
- [英中双语] Pragmatic Software Development Tips 务实的软件开发提示
		Pragmatic Software Development Tips务实的软件开发提示 Care About Your Craft Why spend your life developing so ... 
- [software development] 需求分析checklist
		[software development] 需求分析checklist // */ // ]]> [software development] 需求分析checklist Table of ... 
- Software Development Engineer - Database Services
		http://stackoverflow.com/jobs/116486/software-development-engineer-database-services-amazon?med=clc& ... 
- Code Simplicity–The Science of Software Development 书摘
		Chapter1 Introduction That is the art and talent involved in programming—reducing complexity to simp ... 
- 微软职位内部推荐-Software Development Engineer 2
		微软近期Open的职位: SDE II Organization Summary: Engineering, Customer interactions & Online (ECO) is l ... 
- 微软职位内部推荐-Senior Software Development Engineer
		微软近期Open的职位: Job posting title: Senior Software Development Engineer Location: China, Beijing Divisi ... 
- 微软职位内部推荐-Software Development Engineer II
		微软近期Open的职位: Job Title:Software Development EngineerII Division: Server & Tools Business - Comme ... 
随机推荐
- Selenium WebDriver- 操作frame中的页面元素
			#encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ... 
- 【LeetCode】Remove Duplicates from Sorted Array(删除排序数组中的重复项)
			这道题是LeetCode里的第26道题. 题目描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数 ... 
- pytion3--class一个更实际的例子
			class一个更实际的例子 到目前为止,我们所看的大多数例子都是人为创造而且是独立完备的,其目的是为了帮助你把注意力集中在基础知识上.然而,本章的结尾是一个较大的例子,把我们所学的大多数概念都聚合在这 ... 
- adb shell am命令
			adb shell am命令是在cmd命令行可以通过命令来启动Activity,Boradcast,Service等,更多使用可以参考下面附件. 比如在cmd串口我们发送广播,广播action是&qu ... 
- bzoj 3779 重组病毒 好题 LCT+dfn序+线段树分类讨论
			题目大意 1.将x到当前根路径上的所有点染成一种新的颜色: 2.将x到当前根路径上的所有点染成一种新的颜色,并且把这个点设为新的根: 3.查询以x为根的子树中所有点权值的平均值. 分析 原题codec ... 
- 文本生成器(bzoj 1030)
			Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ... 
- 莫比乌斯函数之和(51nod 1244)
			莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如 ... 
- 【CF1027A】Palindromic Twist(模拟)
			题意:输入T组字符串,每个字符串都必须改变一次,每个字母改变的规则是变成相邻的字母,字母a只能变b,z只能变y,判断改变后的字符依旧是否能够变成回文串 n<=1e2 思路: #include&l ... 
- 【Codevs1034】家园(最大流,裂点)
			题意:由于人类对自然的疯狂破坏,人们意识到在大约2300年之后,地球不能再居住了,于是在月球上建立了新的绿地,以便在需要时移民.令人意想不到的是,2177年冬由于未知的原因,地球环境发生了连锁崩溃,人 ... 
- 快充 IC BQ25896 的 常用參數
			一: POWER-PATH MANAGEMENT (有接 adapter) 1:Vbat > Vsysmin,Isys = 0A, BATFET disable Vsys = Vbat + 50 ... 
