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 ...
随机推荐
- [python] 求大神解释下 面向对象中方法和属性
面向对象中 类方法 实例方法 类属性 实例属性该如何理解呢?
- day01 项目
项目名称: 编写登陆接口 项目需求: 1 输入用户名密码 2 认证成功后显示欢迎信息 3 输错3次之后锁定,包括下次运行此程序也要锁定,涉及到持久化的问题只能用python 自 ...
- C++ 获取网页源码码的操作
#include <stdio.h>#include <windows.h>#include <wininet.h>#pragma comment(lib,&quo ...
- mongodb系统出错。 发生系统错误 1067。 进程意外终止。
MongoDB安装目录\data\将此文件夹下的mongod.lock删除 mongod.exe --config E:\ruanjian\MongoDB\mongod.cfg --remove mo ...
- STL之map容器的详解
一.关于map的介绍 map是STL的 一个容器,和set一样,map也是一种关联式容器.它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键 字的值)的数据 ...
- 【bzoj3439】Kpm的MC密码 可持久化Trie树
题目描述 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当然地忘记了密码,只能来解答那些神奇的身份验证问题了. ...
- 刷题总结:排序机械臂(石室中学oj)(splay)
题目: 题目描述 为了把工厂中高低不等的物品按从低到高排好序,工程师发明了一种排序机械臂.它遵循一个简单的排序规则,第一次操作找到最低的物品位置 P1,并把从左起第 1 个至第 P1 个之间的物品反序 ...
- Java防止SQL注入的途径介绍
为了防止SQL注入,最简洁的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只 ...
- 【转】SpringMVC访问静态资源的三种方式
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
- python中的 __xxx__ 方法
1 __class__ instance.__class__ The class to which a class instance belongs def foo(): pass class A(o ...