如何通过单元测试提高开发效率?

Kevlin Hnney是英国的一位独立顾问和培训师,其关注的范围主要包括软件架构、模式、开发过程和程序设计语言。在本文中他将谈谈如何通过单元测试提高开发效率。

单元测试只会浪费时间吗?某些软件专家们确实是这么想的。最近在Software Quality Insights上看到一篇文章——《单元测试真的有用吗?》。那些认为单元测试无用的开发人员给出了如下理由:

1. 他们不了解单元测试。

2. 很难写出优秀的单元测试。

3. 单元测试只会浪费时间、降低效率。

4. 写单元测试需要太多时间(特别是频繁的迭代开发)。

5. 回归测试更有效率。

本文将重点讨论后面三个问题,即单元测试与开发效率的关系。

效率 vs 人员安排

单元测试会降低效率、造成时间上的浪费吗?这取决于所说的效率是什么,以及所说的时间对象是谁。在一个纯粹编写新代码的周期里,写单元测试的程序员所写代码可能会比不写单元测试的少。如果所说的效率是指这个,那么单元测试确实会降低程序员的效率。

但是,我们很容易发现这种牵强的效率定义的问题所在。代码行并不是衡量效率的标准,它只是所写代码的行数。从单个类到整个系统,我们可以发现很多代码行数已经远超出了实际所需。

我们需要的并不是更多的代码,而是准确的代码。单元测试可以让我们随时进行代码层次上的真实性检查,它可以告诉我们是否在开发正确的东西。所以越多的测试就意味着越少的代码。这并不是什么坏事。开发速率(development velocity)与开发速度(development speed)的区别就在于方向。向正确的方向前进即使几步也要好于在错误的方向上飞奔。

另一个错误的想法是开发人员大部分时间都在编写新代码。虽然开发人员也想专心于代码,但是现实却并非如此。会议(与团队、管理人员、客户、投资商等)、邮件、程序调试、会话、文档制作、安装、研究评估、帮助解决问题、跟进支持、合并版本、处理配置管理系统等都是需要考虑的。

虽然各部分所占比例根据项目与公司的不同而有所变化,但是这些都是与代码无关的活动,而且所占时间总和要高于编写代码占用的时间。问题在于,如果我们把一部分编码时间用于单元测试,那么上面这些时间有多少可以转化为编码时间呢?

局部优化 vs 全局优化

看清全局也很重要。下面Alfred Aho说所的关于开发AWK语言的故事颇有一些值得我们考虑的地方:

“如果再有这样一次机会,我们在开发这种语言的时候肯定会增加严格的测试。我们当时是把AWK当作一种”临时性(throw-away)“语言进行开发,所以并没有考虑严格的质量控制……曾经有个人用AWK编写了一个CAD系统。他来找我,想告诉我AWK编译器的一个Bug。他很生气,说我浪费了他三个星期的生命,因为他用了三个星期查找他代码里的错误,结果却发现是编译器的问题!后来我和Brian Kernighan讨论过这个问题,我们觉得应该做一些质量控制方面的工作。然后,我们针对AWK所有功能做了一次严格的回归测试。从那以后,我们三人无论谁为这种语言增加新功能的时候,都要先写一份相应的测试。”

这个故事的意义就在于它是比较早的拥护“测试先行”编程方式的实例——在实现某个功能之前先把测试写出来,而不是只在计划或者口头说说。另外,这个故事也说明了如何把短期、临时性或针对性代码转变为长期、稳定的方案。

时间: 2024-12-02 17:44:22

如何通过单元测试提高开发效率?的相关文章

Android 如何用 Vim 提高开发效率

本文讲的是Android 如何用 Vim 提高开发效率,虽然笔者是Android开发工程师,但也接触过各种IDE(不限于Android开发).不同的IDE往往都有不同的快捷键,我们总不能对每种IDE都进行配置吧.实际上,现在大部分IDE都能通过插件的形式支持Vim了.所以,只需要掌握Vim的基本使用,在支持Vim的IDE都能很快上手,熟悉的操作,熟悉的手感. Vim模式 Vim可分为3种模式,分别是Normal模式.Visual模式和Insert模式.以下的基本操作都是在Normal模式进行.三

如何利用 Visual Studio 自带工具提高开发效率

原文:如何利用 Visual Studio 自带工具提高开发效率 Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢?   显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位.   如何显示 1. 工具 / 选项 / 文本编辑器 -> 选择对应的语言 2. 勾选 "行号"       使用书签 和平常意义的书签类似,当我们希望在日后某一时刻快速定位到一处代码时使用.比如在项目例会上,你需要演示本周你所做的一些改

Xcode提高开发效率的代码块分享_IOS

前言 我们在开发的时候会用到很多常用的代码,比如UITableView的代理,一般情况下我们要么自己敲要么复制粘贴,但是Xcode有一个功能,可以用一行代码敲出你预设的一段代码.这就是Xcode的代码块功能,这篇文章跟大家分享一些常用的和自定义的代码块,有需要的下面来一起看看吧. 一.常用的: 1.strong: @property (nonatomic,strong) <#Class#> *<#object#>; 2.weak: @property (nonatomic,weak

Python利用IPython提高开发效率_python

一.IPython 简介 IPython 是一个交互式的 Python 解释器,而且它更加高效. 它和大多传统工作模式(编辑 -> 编译 -> 运行)不同的是, 它采用的工作模式是:执行 -> 探索 ,而大部分和数据分析相关的代 码都含有探索式操作(比如试误法和迭代法),所以 IPython 能大大提高编码效率. IPython 发展到现在,它不仅仅只是一个加强版的 Python shell 了, 它集成了 GUI 控制台,这可以让你直接进行绘图操作:它还有一个基于 Web 的交互式笔记

从开发框架提高开发效率说起

在我们接触的很多项目中,如果有一些参考性的项目框架,那么做起开发来,事半功倍,一般来说搭建或者积累这些框架性的项目,非一日之功.一般我们可以把具体的项目分为Winfrom.Web.微信.或者Socket等方面,具体项目界面表现不同,但是界面层底下的应该都是差不多的结构,能够支持多种数据库的接入,提供更好的接口封装,以便重用,实现最优化代码的处理. 软件系统随着业务的发展,变得越来越复杂,不同领域的业务所涉及到的知识.内容.问题非常非常多.如果每次都从头开发,那都是一个很漫长的事情,且并不一定能将

十款提高开发效率的Firefox插件

  Firefox浏览器能成为Web开发者和设计者最喜欢的浏览器,一个重要原因就是它有着丰富的插件可以用来辅助我们完成Web开发工作.下面给大家分享十款在Web开发工作中经常会用到的插件,利用好它们可以大大提高工作效率. 1. FireBug 在众多插件中Firebug无疑是大家最熟悉用的最多的了.Firebug集成在Firefox中,提供了一套开发辅助工具,诸如页面HTML.CSS.Javascript的浏览.编辑.调试.网络监控等等-- 2. FireShot FireShot是一款具有完备

SAP云服务平台干货攻略 | HTML5应用需要用到什么IDE提高开发效率?

http://mp.weixin.qq.com/s?__biz=MjM5OTI2MjgyMA==&mid=2651785507&idx=1&sn=e0f7e414097b22b2d4acb6bc3e9fa87e&chksm=bcc586288bb20f3ebaa0fb0d70dcb1fb803b92caff0e1c4dcc85aaf6e4545df645cd84887fbf&mpshare=1&scene=5&srcid=1114DbdSsJejli

Asp数据库访问代码自动产生工具-ASPRunner(适用初学者和为了提高开发效率的Developer)

初学|访问|数据|数据库 ASPRunner Professional - Web Developer's Nirvana 开发效率的Developer)-初学者适用什么数位板">ASPrunnerPro是一个数据管理管理管理,在网页中使用它可以很简单的访问和操作数据库.从初中者到经验非常的程序员都可以使用它, ASPRunnerPro 产生ASP(Active Server Pages ),产生的Asp允许用户搜索.编辑.删除和添加数据到Oracle,SQL Server,Ms Acce

使用Visual Studio自带工具提高开发效率

Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 / 选项 / 文本编辑器 -> 选择对应的语言 2. 勾选 "行号" 避免剪切或复制空白行 有些时候当我们复制了一行数据正打算粘贴到一个空白行的时候,手一抖,V变成了C,结果复制了一条空白行.这会让人很郁闷,当然你可以通过使用 Ctrl + Shift + V 从剪切版中找到之前复制