今天给各位分享驱动程序开发的知识,其中也会对驱动程序开发电子版下载进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
在计算机硬件与软件的交汇处,驱动程序扮演着至关重要的角色。它就像是硬件与操作系统之间的桥梁,确保两者能够顺畅沟通。驱动程序开发究竟是一门怎样的学问?今天,我们就来深入浅出地探讨一下这个话题。
驱动程序开发概述
让我们先来了解一下什么是驱动程序。驱动程序(Driver)是一种软件程序,它允许操作系统与硬件设备进行通信。简单来说,就是让硬件设备能够在计算机上正常运行。
驱动程序的作用
* 硬件与操作系统之间的桥梁:驱动程序负责将硬件设备的指令转换为操作系统可以理解的格式,并将操作系统的指令转换为硬件设备可以执行的格式。
* 提高硬件性能:通过优化驱动程序,可以提高硬件设备的性能,例如,提高显卡的渲染速度、提高网络卡的数据传输速度等。
* 提供额外的功能:驱动程序可以提供额外的功能,例如,显卡驱动程序可以提供游戏模式、显示模式选择等功能。
驱动程序的分类
* 操作系统驱动程序:这类驱动程序是操作系统的一部分,例如,Windows的设备管理器。
* 第三方驱动程序:这类驱动程序由硬件厂商提供,用于提高硬件设备的性能或提供额外的功能。
驱动程序开发流程
驱动程序开发是一个复杂的过程,需要遵循一定的流程。以下是一个基本的驱动程序开发流程:
| 步骤 | 描述 |
|---|---|
| 需求分析 | 分析硬件设备的特性和功能,确定驱动程序需要实现的功能。 |
| 硬件接口设计 | 设计硬件设备的接口,包括数据传输协议、控制指令等。 |
| 驱动程序开发 | 编写驱动程序代码,实现硬件设备与操作系统之间的通信。 |
| 驱动程序测试 | 对驱动程序进行测试,确保其能够正常运行并满足需求。 |
| 驱动程序部署 | 将驱动程序部署到目标操作系统上,确保其能够与硬件设备正常通信。 |
驱动程序开发技巧
驱动程序开发是一项技术性很强的任务,以下是一些实用的开发技巧:
* 熟悉硬件设备:了解硬件设备的特性和功能,有助于更好地编写驱动程序。
* 掌握编程语言:熟悉C/C++等编程语言,是编写驱动程序的基础。
* 了解操作系统原理:了解操作系统的原理,有助于更好地编写驱动程序。
* 关注开源项目:参考开源项目,可以学习到一些优秀的驱动程序开发经验。
* 编写清晰的代码:编写清晰、易懂的代码,有助于他人理解和维护。
驱动程序开发工具
以下是一些常用的驱动程序开发工具:
| 工具 | 描述 |
|---|---|
| WindowsDriverKit(WDK) | 微软提供的驱动程序开发工具包,用于开发Windows平台的驱动程序。 |
| Linux内核源代码 | Linux内核源代码,用于开发Linux平台的驱动程序。 |
| VisualStudio | 微软提供的集成开发环境,用于开发Windows平台的驱动程序。 |
| Eclipse | 开源集成开发环境,支持多种编程语言,包括C/C++。 |
总结
驱动程序开发是一门技术性很强的学问,需要掌握一定的硬件、软件知识。通过本文的介绍,相信大家对驱动程序开发有了更深入的了解。在今后的学习和工作中,希望大家能够运用所学知识,为计算机硬件与软件的融合贡献自己的力量。
请注意,本文仅为个人观点,如有不足之处,敬请指正。
如何正确入门Windows系统驱动开发领域
[序言]
很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概也就3~4年时间.大多数人都认为会驱动开发的都是牛人,高手之类的.其实高手,牛人不是这样定义的.我们在学习驱动开发之前,一定要明白一个道理:术业有专攻,不要盲目跟风.
[本内容适用环境及工具]
1> Windows系统下
2> VS2003版本以上
3> Windows驱动开发包(DDK(老版本) WDK(新版本))
4>有能力着可以安装VMWare
[本内容适用群体]
1>具有C/C++语言基础的人
2>具有80×86汇编基础的人
3>具备高中以上文化水平的逻辑思维
[具备Windows系统理论书籍]
1> Windows核心编程
2> Win32多线程程序设计
3>深入解析Windows操作系统
4> Windows操作系统原理
FAQ1:为什么需要[具备Windows系统理论书籍]这4本书?
答:驱动是Windows系统的一个重要的组成部分,深入Windows系统核心的一个体系,就因为驱动跟系统内核联系得十分紧密,所以涉及了不少系统的基础理论以及原理.因此在学习驱动开发之前必须先明白Windows系统的基础开发理论,Windows系统的运作原理,Windows系统的架构体系.那么我提供的上面4本书是目前市面上我认为最经典最全面的书籍了.
[具备Windows驱动开发书籍]
1> Windows驱动开发技术详解
2> Windows设备驱动程序WDF开发
FAQ2:为什么需要[具备Windows驱动开发书籍]这2本书?
答:假设你对Windows系统的基础理论扎实了,也看完了所说的[Windows系统理论书籍]这4本书,而且你还从事开发过Windows程序或者大程序的经验者.那么你进入Windows驱动开发的时候,需要一本经典的驱动入门开发书籍即可正确入门.现在我提供了[Windows驱动开发书籍]这2本书完完全全针对Windows驱动开发入门而编写的书籍.当然我首要推荐<Windows驱动开发详解>这本书.本书的内容在目前来说,针对驱动开发的讲解时非常到位了.包含了驱动开发理论配置驱动体系等等……是一本不可多得的好书.那么第2本,其实有点滥竽充数,但是他里面有少少涉及到WDF这个最新的驱动开发理论的讲解,大家也就凑合着吧.
[具备Windows调试基础理论书籍]
1>软件调试
2> Windows用户态程序高效排错
FAQ3:为什么需要[具备Windows调试基础理论书籍]这2本书?
答:在开发驱动的情况下,你少不了要调试驱动程序.那么如何调试驱动程序呢? Windows已为你考虑到这个问题了并开发了一套强有力的调试工具:Windbg.如何学习这个工具的调试呢?那么现在市面上只有这2本书针对Windbg讲解得还比较到位,至少针对调试命令的使用,已经用中文讲解了,大家可以通过2本书先大概了解Windbg的调试命令,然后再进一步进行GOOGLE搜索并深入学习.
[具备汇编基础理论书籍]
1>汇编语言作者:王爽
2> 80×86汇编语言程序设计教程[绿皮版或者黑皮版]
FAQ4:为什么需要[具备汇编基础理论书籍]这2本书?
答:由于在Windows环境下开发驱动,从而有个弊端,就是Windows的WDK,DDK文档少得可怜,很多说明多是模糊的.因此导致我们开发的驱动极其不稳定,这时就需要逆向Windows驱动的机制来加深理解.在一个由于驱动的不稳定性,会导致系统蓝屏,有时错误并不会直接定位到你的代码,这时就需要汇编来分析错误的缘由.就如我前面介绍的[具备Windows调试基础理论书籍]基本是用汇编语言来阐述调试技术.
[驱动开发扩展书籍]
1>寒江独钓-Windows内核安全编程
2> Windows内核原理与实现
3> Rootkit Windows内核安全防范
4> Windows内核情景分析
FAQ5:为什么需要[驱动开发扩展书籍]这4本书?
答:熟话说:学无止境,驱动开发领域是一个很庞大的体系,这归根于驱动框架多样化而决定的.驱动包含了:文件驱动,磁盘驱动,显卡驱动,网络驱动,等等不同的种类,每一种类就是一个领域,你决定你的能力需要扩展到多方面,那么你可以考虑先我这里提供的这4本书来学习,通过阅读这3本书,你会发现驱动可以做很多你意想不到的事情.本人从事开发驱动将近4年,也仅仅涉及文件驱动,磁盘驱动以及一些小型驱动而已.这些的学习我也仅仅是根据需求来进行选择性学习.每个人都有自己的能力极限,大家要量力而行.
[推荐正确学习方式]
1>认真阅读我提供的参考书籍
2>多使用Google来解决你遇到的问题
3>多尝试用驱动写你自己喜欢的功能
4>提升你英文阅读能力,因为大部分有价值的资料来自于国外
5>不要急于求成,不要浮躁,不要把驱动开发技术当做一种炫耀
深入浅出windows驱动开发的目录
向内核世界说一声:hello,我来了。如果你是一个初学者,并对这个世界充满好奇心,请从这一章开始,我们一起打招呼~
第1章 Hello World驱动 1
1.1从Hello World开始 2
1.1.1 HelloDRIVER 4
1.1.2代码解释 8
1.1.3驱动程序的编译和安装 11
1.1.4查看我们的驱动 14
1.2虚拟环境 15
1.2.1使用虚拟环境进行驱动开发 15
1.2.2使用VMware虚拟机 15
1.2.3目标机设置 16
1.2.4 Virtual PC虚拟机 18
1.3小结 19
如何在规范的商业环境中,开发成功而有效的驱动软件?驱网站长马勇(ZnSoft)将向你娓娓道来。你会学到这些内容:建立一个简单而有效的开发、调试环境;64位环境下的内核编程技巧;如何发布你的驱动软件。
第2章商业驱动开发技术 20
2.1建立开发调试环境 21
2.1.1 SVN环境 21
2.1.2创建工程,导入SVN 23
2.1.3建立符号服务器 25
2.1.4用符号调试 27
2.2 64位驱动开发技术 34
2.2.1 64位驱动编写技术 35
2.2.2 32位应用程序与64位驱动混合模式 36
2.3驱动程序的发布与测试 42
2.3.1驱动程序签名 42
2.3.2驱动程序测试 46
2.3.3 WHQL 49
2.4小结 50
WDF是目前最新的驱动编程框架。当很多内核程序员还紧抱WDM的巨大佛脚时,千万要记住,WDF已是大势所趋。本章介绍了WDF最重要的几个概念,并进行了一定程度的深度挖掘。对于WDF框架的三大核心模型:对象模型、事件模型、PNP/Power模型,本章作了重点讲述。
第3章 WDF概述 51
3.1主要特点 52
3.2框架视图 53
3.3兼容性 55
3.4对象模型 56
3.4.1对象和句柄 59
3.4.2引用计数 60
3.4.3上下文空间 61
3.4.4 PME接口 67
3.4.5 DDI接口 69
3.4.6父子关系 76
3.4.7对象同步 77
3.5驱动对象和设备对象 78
3.5.1驱动对象 78
3.5.2驱动入口DriverEntry 81
3.5.3设备对象 84
3.5.4创建设备对象 85
3.5.5设备栈 86
3.6 IO模型 88
3.6.1 IO目标对象 88
3.6.2 IO目标对象的细节 90
3.6.3安全的缓冲区 93
3.6.4内存对象(一) 96
3.6.5内存对象(二) 98
3.6.6框架和IO请求 102
3.6.7更详细的处理流程 103
3.6.8 IO请求参数 105
3.6.9队列 107
3.6.10创建IO请求 110
3.7 PNP和电源模型 112
3.8小结 115
使用WDF框架开发USB驱动,方便且简单。本章首先总体上从硬件和软件两个方面介绍USB相关知识点,包括设备的电气特性、总线结构、USB驱动类型以及类驱动。编程方面,从USB设备初始化、数据操作以及设备控制等几个方面来讲解,透彻并且翔实。
第4章 WDF USB设备驱动开发 116
4.1 USB设备硬件结构 117
4.1.1主从结构 117
4.1.2硬件拓扑 118
4.1.3 USB中断 119
4.2 USB软件结构 120
4.2.1总线驱动 120
4.2.2系统类驱动 121
4.2.3功能驱动 122
4.2.4父驱动与混合设备 122
4.2.5过滤驱动 125
4.2.6 USB驱动栈、设备栈 125
4.3内核开发 127
4.3.1设备驱动 127
4.3.2入口函数 128
4.3.3 USB描述符 129
4.3.4描述符介绍 130
4.3.5汇总举例 133
4.3.6读取描述符 135
4.3.7初始化 137
4.3.8设备初始化函数 138
4.3.9创建设备对象 141
4.3.10设备命名、符号链接 143
4.3.11启动设备 147
4.3.12创建队列 156
4.3.13停止设备/反初始化 158
4.4数据I/O操作 160
4.4.1 USB控制命令 160
4.4.2构造并发送控制命令 162
4.4.3读USB中断端口 163
4.4.4连续读操作 165
4.4.5数据处理函数 166
4.4.6中断端口的效率 167
4.4.7读/写批量端口 168
4.5设备控制 171
4.5.1关于I/O Target对象 171
4.5.2获取USB版本 172
4.5.3管道重置 174
4.5.4设备重置 176
4.5.5管道中止与终止 177
4.6用户程序 179
4.6.1内核读/写 179
4.6.2控制命令 179
4.7小结 180
1394俗称火线。大伙平时最多接触它的地方大概是内核调试时,借助1394卡进行双机互联。本章首先从硬件方面介绍了1394的知识,它的总线结构很特别,极具可扩性,能非常方便地在各种类型的1394设备之间建立数据链路。内核编程方面,本章重点讲解了数据通信相关知识,分为异步通信和同步通信两种方式,颇为复杂,相对难于掌握,但套路是现成的,变化的东西不多,可以熟能生巧。本章最后介绍了1394双机互联的原理,有兴趣的读者可参考之。
第5章 WDF 1394驱动开发 181
5.1 1394一席谈 182
5.1.1版本情况 183
5.1.2电源特性 183
5.1.3 1394卡 183
5.1.4总线拓扑 184
5.2发送请求 186
5.2.1同步方式 187
5.2.2异步方式 189
5.2.3对WDM的回忆 191
5.3总线重置与计数 193
5.3.1总线重置 193
5.3.2设置重置回调 193
5.3.3计数更新 194
5.4 PNP操作 195
5.5异步通信 196
5.5.1地址范围 197
5.5.2异步读 200
5.5.3异步写 201
5.5.4异步锁请求 202
5.5.5数据流 203
5.6等时通信 204
5.6.1申请带宽 205
5.6.2释放带宽 206
5.6.3等时通道 206
5.6.4资源句柄 207
5.6.5缓冲区挂载 210
5.6.6缓冲区解挂 211
5.6.7开始传输 211
5.6.8停止传输 212
5.6.9其他等时操作 213
5.7其他操作 213
5.7.1设备配置 213
5.7.2获取控制器信息 214
5.7.3速度信息 215
5.7.4厂商自定义命令 216
5.8安装与测试 216
5.8.1 1394虚拟设备 216
5.8.2创建虚拟设备 218
5.8.3示例代码 219
5.8.4安装与测试 221
5.9小结 222
内核天生适合于C语言编程,但越来越多的内核项目,规模达到10数万的规模。在这种情况下,人们不由地会将目光投向优雅的C++语言。总体上说,C和C++是至亲好友,内核中使用C++本不应有什么大问题,但有几个暗礁潜伏已久,不小心的程序员,你可千万不要触礁。
第6章内核驱动C++编程 223
6.1驱动中的类 224
6.1.1一个简单的例子 224
6.1.2 new/delete 225
6.1.3 extern C 227
6.1.4全局/静态变量 228
6.1.5栈的忧虑 230
6.2类封装的驱动程序 233
6.2.1寻找合适的存储所 233
6.2.2类方法与事件函数 235
6.2.3 KMDF驱动实现 236
6.2.4 WDM驱动实现 237
6.3多态 238
6.3.1基类、子类 238
6.3.2实现多态 239
6.3.3测试 241
6.4小结 241
使用WDF框架编写的驱动程序,在测试和调试的时候,有特殊的工具。本章介绍了目前所知的三个,它们分别是:Windbg扩展调试命令、WDFTester测试工具、WDFVerifier测试工具。本章将以示例方式,介绍这些工具的使用。
第7章 WDF驱动测试 242
7.1 WDF错误 243
7.1.1实例分析 245
7.1.2 USB错误 246
7.2 WDF扩展调试命令 247
7.3 WDFTester 254
7.3.1 WDFFiTester 254
7.3.2使用 256
7.3.3 WDFCallTracer 260
7.4 WDFVerifier 263
7.4.1识别KMDF驱动 263
7.4.2使用与介绍 265
7.5小结 266
SoftIce渐行渐远之后,Windbg成为内核调试的第一利器。使用Windbg的最大难点是命令繁多,参数复杂。本章以总结归纳的形式,介绍了作者在工作中经常用到的几大类调试命令,并以实例形式一一介绍。作者根据个人经验所作的分类,未能全备,但能够保证的是,所有实例翔实而可靠,可以作为可信的参考。
第8章调试命令详解 267
8.1概述 268
8.1.1寻求帮助 269
8.1.2 DML语言 270
8.1.3基本信息 271
8.1.4基本设置 272
8.1.5格式化显示 273
8.1.6开始调试 273
8.2符号与源码 276
8.2.1模块列表 277
8.2.2模块信息 279
8.2.3符号路径 280
8.2.4符号加载 283
8.2.5符号搜索 285
8.2.6源码命令 287
8.3进程与线程 289
8.3.1进程命令 289
8.3.2线程命令 292
8.3.3异常与事件 296
8.3.4局部变量 300
8.3.5显示类型 301
8.4断点 301
8.4.1软件断点 301
8.4.2硬件断点 303
8.4.3其他操作 303
8.5内存命令 304
8.5.1查看内存 304
8.5.2内存信息 307
8.5.3其他命令 311
8.6小结 312
相信大多数人在学习内核开发的时候,都问过这样一个问题:内核驱动怎么向用户程序发送消息,或者如何调用Win32函数。用户程序和内核同步,是一个基本而重要的知识,本章介绍了三种主要的实现方式。至于内核是否可以调用Win32函数,读一读本章开篇的话,你就有答案了。
第9章内核同步 313
9.1关于内核同步 314
9.2内核事件同步 316
9.2.1原理 316
9.2.2用户程序 318
9.2.3内核实现 319
9.3 IRP同步 320
9.3.1用户程序 321
9.3.2内核实现 323
9.4 WMI同步 325
9.5数据缓冲区同步 326
9.6反向调用 328
9.7小结 330
微软最新的音视频编程框架即AVStream框架,不管从什么方面来说,音视频编程都是一个很小众的领域。AVStream框架极其复杂,个人看法是掌握的难度超过了WDF。本章介绍了AVStream框架的各种基本知识点,并以实例讲解一个内核音频过滤器在系统中是如何工作的。
第10章音频驱动开发 331
10.1简介 332
10.1.1音频模块架构 332
10.1.2系统中的音频设备 334
10.2 AVStream对象 338
10.2.1设备对象 339
10.2.2 Filter工厂和Filter对象 340
10.2.3 Pin工厂和Pin对象 342
10.2.4 Node对象与Connection结构体 343
10.3 AVStream描述符 346
10.3.1描述符简介 346
10.3.2描述符示例 347
10.3.3分发函数表 349
10.3.4自控表 349
10.3.5自控表示例 351
10.4代码讲解 355
10.4.1入口函数 355
10.4.2设备分发函数 357
10.4.3 Filter与Pin分发函数 358
10.4.4创建和删除 359
10.4.5数据处理 360
10.4.6数据格式 362
10.5自控表函数 364
10.5.1事件函数 364
10.5.2属性函数 366
10.5.3方法函数 367
10.5.4用户接口 367
10.6硬件操作 370
10.6.1数据DMA 370
10.6.2 AVStream中的DMA实现 371
10.6.3谈谈ISR 374
10.7安装与测试 376
10.7.1安装 376
10.7.2测试工具 376
10.8小结 379
ASIO音频驱动具有两个非常亮眼的优点:低延迟、多通道。低延迟能够达到几毫秒,使得最灵敏的耳朵也难也察觉;多通道则让通常的双声道、6.1声道等一齐歇菜,而可以很轻松地让多达十几、几十个声道同时工作,在进行高级音频编辑时,这非常重要。
第11章 ASIO虚拟声卡 380
11.1引言 381
11.2关于ASIO 383
11.3 ASIO用户驱动 384
11.3.1 COM接口 384
11.3.2安装与卸载 386
11.3.3 IASIO接口 387
11.3.4技术核心 390
11.3.5计算延迟 392
11.4内核驱动实现 393
11.4.1同步 393
11.4.2原理 393
11.4.3实现 396
11.5 ASIO音频软件 396
11.6小结 397
从本章开始的三章内容,讲的都是“驱动安装”这个话题。在本章中,介绍了系统中和驱动安装有关的各种系统模块。读者通过阅读本章后,至少能够掌握这两个基本知识:系统如何识别一个旧设备,并为它加载合适的驱动文件;系统如何发现一个新设备,并完成驱动安装。
第12章设备驱动安装入门 399
12.1基础知识预介 400
12.1.1设备类型 400
12.1.2设备实例ID 401
12.1.3驱动加载和安装 403
12.2安装模块 404
12.2.1内核PNP管理器 405
12.2.2用户PNP管理器 406
12.2.3安装接口函数(Setup API) 408
12.2.4配置管理器接口(CfgMgr API) 410
12.2.5类安装器(Class Installers) 410
12.2.6类协安装器(Class Co-Installers) 410
12.2.7设备协安装器(Device Co-Installers) 411
12.2.8驱动包(Driver Package) 412
12.2.9驱动仓库(Driver Store) 413
12.2.10设备管理器(Device Manager) 414
12.2.11安装程序 415
12.2.12新设备向导 416
12.2.13添加硬件向导 416
12.2.14驱动安装器(Driver Installer) 416
12.3重要问题 417
12.3.1寻找和选择 417
12.3.2 32位与64位系统兼容 418
12.3.3系统重启 419
12.4安装模式 420
12.4.1示例1:客户端模式 421
12.4.2示例2:服务器模式 423
12.5安装器编程 424
12.5.1 DIF码 424
12.5.2处理流程 427
12.5.3工程示例 429
12.5.4注册 430
12.6小结 431
INF文件即驱动程序的“安装文件”,它包含了各种与驱动安装有关的指令信息。通过INF文件,系统知道如何处理驱动包中的各个文件,并在系统注册表中做出准确记录。本章主要从指令和域,这两个方面进行讲解。
第13章深入解析INF文件 432
13.1概述 433
13.1.1域 433
13.1.2指令 434
13.1.3多系统 435
13.2注册表指令 436
13.2.1缩写根键 436
13.2.2软件键 437
13.2.3硬件键 437
13.2.4 AddReg 438
13.2.5 DelReg 440
13.2.6 BitReg 441
13.3文件操作指令 441
13.3.1 CopyFiles 441
13.3.2 DelFiles 443
13.3.3 RenFiles 443
13.4服务指令 444
13.4.1 AddService 444
13.4.2 DelService 445
13.5基本域 446
13.5.1版本域 446
13.5.2文件域 447
13.5.3默认安装域 451
13.5.4控制域 454
13.5.5字符串域 457
13.6设备类安装域 458
13.6.1主域 459
13.6.2服务子域 461
13.7接口类安装域 461
13.8厂商/产品域 462
13.8.1厂商域 463
13.8.2产品域 464
13.9设备安装域 464
13.9.1硬件子域 466
13.9.2协安装器子域 467
13.9.3接口子域 468
13.9.4厂商默认配置子域 469
13.9.5逻辑优先配置子域 470
13.10 ChkInf介绍 471
13.11小结 472
驱动安装程序让你的驱动软件显得更加专业,所以,放弃手动安装驱动的做法吧,你的驱动将显得更靓。本章的示例软件MyDrvInst,可以作为读者设计更漂亮的安装软件的开始。
第14章设计驱动安装程序 473
14.1驱动包 474
14.1.1安装方式 474
14.1.2安装驱动包 475
14.1.3卸载驱动包 476
14.2驱动更新 477
14.2.1设备已连接 477
14.2.2设备未连接 478
14.2.3枚举系统设备 481
14.3分析INF文件 484
14.3.1函数介绍 484
14.3.2打印设备ID 486
14.4 MyDrvInst介绍 487
14.5制作软件安装包 490
14.5.1视图介绍 490
14.5.2我们的工程 492
14.5.3编译执行 493
14.6小结 494
附录A CY001 USB开发板 495
附录B VisualKD+ VMWare实现单机内核调试 501
什么是测试驱动开发
测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。
2基本原理
测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码,然后只编写使测试通过的功能代码,从而以测试来驱动整个开发过程的进行。这有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,并加速开发过程。
测试驱动开发的基本过程如下:
① 快速新增一个测试
② 运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过
③ 做一些小小的改动,尽快地让测试程序可运行,为此可以在程序中使用一些不合情理的方法
④ 运行所有的测试,并且全部通过
⑤ 重构代码,以消除重复设计,优化设计结构
简单来说,就是不可运行/可运行/重构——这正是测试驱动开发的口号。
本质和优势
或许只有了解了测试驱动开发的本质和优势之后,你才会领略到她的无穷魅力。测试驱动开发不是一种测试技术,它是一种分析技术、设计技术,更是一种组织所有开发活动的技术。相对于传统的结构化开发过程方法,它具有以下优势:[3]
1) TDD根据客户需求编写测试用例,对功能的过程和接口都进行了设计,而且这种从使用者角度对代码进行的设计通常更符合后期开发的需求。因为关注用户反馈,可以及时响应需求变更,同时因为从使用者角度出发的简单设计,也可以更快地适应变化。
2)出于易测试和测试独立性的要求,将促使我们实现松耦合的设计,并更多地依赖于接口而非具体的类,提高系统的可扩展性和抗变性。而且TDD明显地缩短了设计决策的反馈循环,使我们几秒或几分钟之内就能获得反馈。
3)将测试工作提到编码之前,并频繁地运行所有测试,可以尽量地避免和尽早地发现错误,极大地降低了后续测试及修复的成本,提高了代码的质量。在测试的保护下,不断重构代码,以消除重复设计,优化设计结构,提高了代码的重用性,从而提高了软件产品的质量。
4) TDD提供了持续的回归测试,使我们拥有重构的勇气,因为代码的改动导致系统其他部分产生任何异常,测试都会立刻通知我们。完整的测试会帮助我们持续地跟踪整个系统的状态,因此我们就不需要担心会产生什么不可预知的副作用了。
5) TDD所产生的单元测试代码就是最完美的开发者文档,它们展示了所有的API该如何使用以及是如何运作的,而且它们与工作代码保持同步,永远是最新的。
6) TDD可以减轻压力、降低忧虑、提高我们对代码的信心、使我们拥有重构的勇气,这些都是快乐工作的重要前提。
7)快速的提高了开发效率。
现状和前景
测试驱动开发的技术已得到越来越广泛的重视,但由于发展时间不长,相关应用并不是很成熟。现今越来越多的公司都在尝试实践测试驱动开发,但由于测试驱动开发对开发人员要求比较高,更与开发人员的传统思维习惯相违背,因此实践起来有一定困难。美国不少著名软件公司如IBM很早就开始向敏捷转型,在此过程中,TDD通常是最重要也最艰难的一个,正如IBM开发转型部门副总裁Sue Mckinney所言:测试驱动开发前景非常诱人,但是“在这个过程中我们的付出可能也是最多的。”Forrester的高级分析师Dave West认为,测试驱动开发(TDD)就像是“圣杯”,但是“如果能达到这个目标,付出再多的辛苦也是值得的。”
我想,测试驱动开发的推广过程中,首要的问题是将开发人员长期以来形成的思维观念和意识形态转变过来,开发人员只喜欢编码,不喜欢测试,更无法理解为什么没有产品代码的时候就先写单元测试;其次是相关的技术支持,测试驱动开发对开发人员提出了更高的要求,不仅要掌握测试和重构,还要懂得设计模式等设计方面的知识。
正像每种革命性的产物刚刚产生之初所必然要经历的艰难历程,测试驱动开发也正在经历着,但她正在逐渐走向成熟,前途一片光明。相信未来几年内,国内的一定会越来越多的软件企业开始普及测试驱动开发。
关于驱动程序开发到此分享完毕,希望能帮助到您。




