首页>参考读物>计算机科学与技术>软件与程序设计

测试驱动的iOS开发
作者 : (美) Graham Lee 著
译者 : 爱飞翔 译
出版日期 : 2012-10-22
ISBN : 978-7-111-39919-3
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 214
开本 : 16
原书名 : Test-Driven iOS Development
原出版社: Addison Wesley
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

现在iOS应用正变得越来越复杂,这意味着创建和应用iOS应用需要采用最佳的实践。本书是第一本100%关注在iOS环境实现TDD和单元测试的图书,书中介绍了一些最有用的最佳实践,能够帮助读者快速将TDD整合至现有的使用Apple Xcode 4和OCUnit单元测试框架的过程中,并全程(从最初的规范到最终的产品)指导读者用测试驱动开发的方式构建Objective-C iOS应用。

图书特色

iOS应用程序的开发变得越来越复杂,并且对于业务更加重要,因此要求开发者必须能持续地编写出高质量的代码。这意味着在创建与测试iOS应用程序时,必须采用一套最佳的实践方案。测试驱动开发(Test-Driven Development,TDD)就是一种强大的最佳实践方法。本书是iOS领域第一本完全专注于TDD的书籍,旨在帮助开发者在iOS环境下成功地践行TDD与单元测试。
Graham Lee先生长期从事iOS/Mac的开发,本书旨在帮助你使用Apple的Xcode 4开发环境及OCUnit测试框架,迅速地将TDD集成到现有的开发流程中。本书还将引领读者从最初需求规格书开始,采用TDD方式,构建一个完全使用Objective-C语言开发的iOS应用程序。此外,本书还介绍了一些对iOS测试驱动开发很有用的模式,并展望了若干即将在iOS平台上亮相的自动化测试技能。

本书主要内容:
通用的软件测试知识,以及软件测试的目标;
如何利用测试驱动开发与单元测试来实现软件测试目标;
如何进行单元测试的设计与编写;
如何使用Apple的开发工具中绑定的OCUnit测试框架;
在iOS应用程序的开发过程中如何从最初的需求规格书演进到最终产品;
如何实现从需求描述中提取出来的数据模型;
如何实现应用程序的业务逻辑;
如何为BrowseOverflow应用程序设计并实现网络通信功能;
如何编写视图控制器的代码;
如何实现一个功能完备且能正常运行的应用程序;
阐述用于移除类之间的依赖性、代码运行环境依赖性以及线程依赖性的设计范式;
汇总适合采用TDD开发方式的情况;
展望业界一些更为新颖的功能、一些对已有技术的扩展以及一些有用的开发工具。

作者简介

Graham Lee
资深安全顾问与iOS/Mac开发专家,在全球iOS/Mac开发者社区中享有盛名。多次受邀在Voices That Matter、NSConference、Association of C and C++ Users以及Qcon等国际技术会议上展示高质量的Cocoa软件工程实践。在软件测试领域有深厚的积累和实践经验,从6年前主管一个基于GNUstep的服务器应用程序的测试开发工作开始深入研究OCUnit与单元测试技术。在研究iOS开发前,曾为OS X、NeXTSTEP及其他类UNIX系统开发过应用程序。他还是一位经验丰富的技术作家,著有《Professional Cocoa Application Security》一书。

图书前言

我向其他开发者讲授测试驱动开发很大程度上是出于偶然。本来安排我在会议上关于另一个话题发表演讲,而我的一个朋友则讲述TDD(Test Driven Development,测试驱动开发)。不过朋友的妻子选择那周末生双胞胎(我认为是这样的,我可不是这方面的专家),所以Chunk,也就是委托我写这本书的人,问我能不能也关于TDD发表演讲。由此机缘,最终使我开始了为期一年的写书过程。
  通常来说,真实状况并不像我们彼此之间讲述的那样美好。实际上,我初次接触单元测试是在很多年前了。在成为专业的软件开发者之前,我曾在一家制作基于GNUstep(由自由软件基金会所制作,可运行于Linux与其他平台的Cocoa库)产品的公司里当测试人员。据我当时所知,单元测试就是确保软件产品的每个小部件都能正常运行的一种开发方法。当这些小部件合并为大的组件时,按理说它也能正常运行才是。
  这种理解一直持续到了我从事第一份编程工作时,那个工作是负责某个跨平台安全软件的Mac系统版本开发。(这里我又一次省略了一件事—几年前,我曾做过一个为期6周的LISP外包程序。每个人都曾做过一些并不为之骄傲的事情。)在做这份工作时,我参加了一个TDD培训课程,这项课程是由经常活跃于面向对象编程讨论会上的Kevlin Henney所开设的。他除了写过很多文章之外,还曾编辑过一本书,名叫《每个程序员都应该知道的97件事》 。就是通过学习这个课程,我才最终意识到测试驱动开发的主旨是使得开发者对其编写的代码更有信心。随着学习的深入,我还领悟到测试驱动开发可以使开发者在修改代码时心里更加踏实。当对TDD有足够的了解,并能够从实践的教训中总结经验时,我终于将TDD当成了日常开发的一部分,并弄懂了其中哪些方法适合我,哪些不适合。几年之后,我能够接受Chuck的邀请,来做一场关于TDD的演讲了。
  真心希望这本书能够让读者领悟到测试驱动开发的好处,并将其纳入日常编码工作中,同时也希望读者能稍花点时间就掌握它,不要像笔者这样花费了5年左右的时间。有很多关于单元测试的书,其中某些书的作者也曾参与测试框架的编写与设计。这些书都很好,不过,它们都没有特别针对Cocoa Touch的开发者。笔者的这本书提供了以Objective-C语言所编写的范例,讲述了Xcode及相关工具的用法,并以Cocoa的编程风格书写代码。但愿本书能够将测试驱动开发的原理讲得更加易懂,并使它与iOS开发者的工作联系起来。
  另外,还有测试工具的问题。对于写单元测试有很多种工具可用,具体采用哪个,还要取决于众多不同的工具与框架所提供的功能。尽管本书会提到它们之间的一些差别,但是笔者打算专注于讲解Apple所提供Xcode开发环境及其所附OCUnit测试框架的用法。这么做的原因很简单,那就是适用性:任何想尝试单元测试或TDD的开发者,只要学习了本书所讲的知识,使用标准的开发工具,并具备一定的决心,就可以立刻投入工作中。如果读者觉得标准的测试工具缺少某些功能或者不太好用,那你当然可以研究其他工具的用法,甚至自己写一个测试工具—只是记得要测试它哦!
  在成长为一个迷恋测试的程序员的过程中,我学到了很多。其中之一就是,想要当一个好的软件工程师,最好的办法就是与其他开发者交流。如果你对本书内容或者通用的TDD开发方法有任何评论或建议,欢迎在Twitter上与我交流讨论(我的用户名是iamleeg)。
致谢
  牛顿曾说过,“如果我比别人看得更远,那是因为我站在巨人的肩上”,当然了,他的这个说法综合了数个世纪以来作者们不断拓展与完善的那个隐喻。与此相似,本书也不是凭空写出来的,有很多要感谢的人,若全部写出他们的名字的话,要从爱达勒芙蕾丝伯爵夫人开始,用好多页才能写完。如果要写一份简洁一些的致谢表,那么首先要感谢的就是培生(Pearson)出版集团的诸位同仁,是他们促成了本书的出版发行。还要感谢Chunk、Trina与Olivia,是他们持续督促我完成此书的。此外还有本书的技术审校者Saul、Tim、Alan、Andrew、两位名为Richard的先生、Simon、Patrick以及Alexander,感谢你们在排查本书草稿中错误的过程中所做的出色工作,如果还有错误的话,则应归咎于我。感谢Andy与Barbara,你们所做的文字润色工作,将一些由程序员草草写就的文字变成了优雅的英语文句。
  感谢xUnit测试框架的设计者Kent Beck先生,没有他对于测试的见解,我将无处下笔,同样,也感谢xUnit框架的Objective-C版本制作方Sente SA公司。还必须提到的是Apple的开发工具制作团队,他们为了让全世界的iOS开发者能够使用单元测试所做的努力比其他人都要多。与别人相比,Kevlin Henney更让我领略到了测试驱动开发之美,让我避免了很多bug,谢谢你!
  最后,感谢Freya在没日没夜的写书过程中对我的支持与理解。如果此刻你正在读这段话,我想你可能会更加了解我的。

上架指导

计算机\程序设计

封底文字

iOS应用程序的开发逐渐变得更加复杂,并且对于业务更加重要,因此要求开发者必须能持续地编写出质量优秀的代码。这意味着必须在创建与测试iOS应用程序时,采用一套最佳的实践方案。测试驱动开发(Test-Driven Development,TDD)就是一种强大的最佳实践法。本书是第一本完全专注于TDD的书籍,它旨在帮助开发者在iOS环境下成功地践行TDD与单元测试。
Graham Lee先生长期从事iOS/Mac的开发,本书旨在帮助你使用Apple的Xcode 4开发环境及OCUnit测试框架,迅速地将TDD集成入现有的开发流程中。本书还将引领读者从最初需求规格书开始,采用TDD方式,构建一个完全使用Objective-C语言开发的iOS应用程序。此外,本书还介绍了一些对iOS测试驱动开发很有用的模式,并展望了若干即将在iOS平台亮相的自动化测试技能。
本书主要内容:
 通用的软件测试知识,以及软件测试的目标;
 如何利用测试驱动开发与单元测试来实现软件测试目标;
 如何进行单元测试的设计与编写;
 如何使用Apple的开发工具中绑定的OCUnit测试框架;
 在iOS应用程序的开发过程中如何从最初的需求规格书演进到最终产品;
 如何实现从需求描述中提取出来的数据模型;
 如何实现应用程序的业务逻辑;
 如何为BrowseOverflow应用程序设计并实现网络通信功能;
 如何编写视图控制器的代码
 如何实现一个功能完备且能够正常运行的应用程序;
 阐述用于移除类之间的依赖性、代码运行环境依赖性以及线程依赖性的设计范式;
 总结在什么情况下适合采用TDD开发方式;
 展望业界一些更为新颖的功能、一些对已有技术的扩展以及一些有用的开发工具。

作者简介

(美) Graham Lee 著:资深安全顾问与iOS/Mac开发专家,在全球iOS/Mac开发者社区中享有盛名。多次受邀在Voices That Matter、NSConference、Association of C and C++ Users以及Qcon等国际技术会议上展示高质量的Cocoa软件工程实践。在软件测试领域有深厚的积累和实践经验,从6年前主管一个基于GNUstep的服务器应用程序的测试开发工作开始深入研究OCUnit与单元测试技术。在研究iOS开发前,曾为OS X、NeXTSTEP及其他类UNIX系统开发过应用程序。他还是一位经验丰富的技术作家,著有《Professional Cocoa Application Security》一书。

译者简介

爱飞翔 译:暂无简介

译者序

测试驱动开发是近年来受关注程度较高的一种开发过程,它与“敏捷软件开发”与“极限编程”等软件设计方法学都有紧密关联。如何才能保证软件产品的代码质量,这是富有责任心的程序员一直都在探索的问题。测试驱动开发的妙处即在于,它以需求为引领,通过测试的形式,来指导开发者进行软件的设计与架构,并编写出最为精炼的代码,使得测试用例运行通过。经过适当的重构之后,测试用例与产品代码均可达到较为健康的状态。
  有了这样的测试套件作为代码质量与代码安全的保证,开发者即可在面对各式各样的需求冲击时,更为稳健地添加产品功能;同时,新功能的实现又可受益于既有的架构与设计,因为由测试驱动开发方式所催生出来的架构,既富有扩展性,又显得很简洁。译者在4年有余的工作经历中,也逐步感觉到:在项目中引入测试驱动开发方式,可以使软件的设计与功能的实现之间,形成良性循环,这二者都在测试驱动的引领与既有测试的保护下,可以高效地应对持续变化的需求。
  与20世纪90年代末产生的测试驱动开发技术相比,iOS平台的应用程序开发则是一个相对较新的领域。自2007年诞生以来,iOS平台迅速成为业界的热门话题。Apple系列的产品一贯以其精美的操作界面与良好的用户体验著称,截至2012年6月,App Store已经有超过65万个iOS应用程序了,其累计下载量突破300亿次。
  与Android、Windows Phone等移动平台相比,目前的iOS平台,从产品质量和营收情况看,都显得更具吸引力,因此有一大批公司、团队与个人开发者都涌入了这个领域。与传统软件行业相比,移动应用项目在开发资金、开发人员、开发周期方面都更为紧缩。在新产品的数量与既有产品的更新频度都急速增加的情况下,软件项目的可维护性与可扩展性却因为过分追求“短周期产品开发”而大幅度下降。
  如果这些移动软件项目的代码质量得到了提高,那么它就会有效地降低项目维护所需的成本,而且已有的测试用例与数次重构之后所产生的高内聚、低耦合的模块化代码,又大大减少了后续版本研发新功能时所需的开发、调试时间。高质量的代码还可以封装起来,为新的软件项目所复用,从而降低新项目的研发周期与人力资源消耗。
  近些年市面上讲述测试驱动开发的专著很多,从Kent Beck的经典入门读物《测试驱动开发》到Steve Freeman与Nat Pryce所写的那本强调使用TDD来培养面向对象思维的《测试驱动的面向对象软件开发》,各种关注点不同的经典教材都使大家受益匪浅。然而,我们却很少能够见到像本书这样的优秀教程,本书将TDD开发方式全面贯穿于移动开发平台中。
  读者通过研习本书,既可以掌握提升项目素质的先进TDD开发方式,又能够迅速制作出符合市场需求的高质量软件产品。无论你对测试驱动开发与iOS应用程序开发这两个领域的掌握程度如何,阅读完本书之后,都会获得开发技能与思维水平的双重提高。在初识书名时,译者就被这两种流行技术的相互结合所吸引,在翻译完全书之后,更是觉得它在产品需求、软件设计、测试有效性与开发效率之间达成了相当完美的平衡,是一本独具视角的佳作。
  在翻译过程中,对于众多的术语,译者都尽可能地查找相关资料,给予适当的注释。如果某个专有名词存在多种译法,且尚未有普遍认可的中文译法,则会将英文单词与各个译法都列出,供大家参考。本书主要由爱飞翔翻译,王鹏、舒亚林及张军也参与了部分翻译工作。感谢家人和朋友对我翻译工作的支持与鼓励。由于译者水平有限,错误与疏漏在所难免,恳请广大读者批评指正。
译  者

图书目录

译者序
前言
第1章 软件测试与单元测试简介1
1.1 软件测试的目标1
1.2 软件测试由谁来做2
1.3 何时进行软件测试5
1.4 测试实践举例6
1.5 单元测试的适用范围7
1.6 测试驱动开发对iOS开发者的意义10
第2章 测试驱动开发技巧11
2.1 测试先行11
2.2 “失败、成功、重构”三部曲13
2.3 设计易于测试的应用程序15
2.4 更多有关重构的知识16
2.5 不要实现目前用不到的功能17
2.6 在编码前、编码中及编码后进行测试19
第3章 如何写单元测试21
3.1 需求21
3.2 使用已知的输入数据来运行代码22
3.3 查看运行结果是否符合预期24
3.4 验证结果24
3.5 使测试代码更具可读性26
3.6 将多个测试用例组织起来27
3.7 重构30
3.8 总结32
第4章 测试工具33
4.1 Xcode附带的OCUnit测试框架33
4.2 OCUnit的替代方案43
4.2.1 GTM43
4.2.2 GHUnit44
4.2.3 CATCH45
4.2.4 OCMock46
4.3 持续集成工具49
4.3.1 Hudson50
4.3.2 CruiseControl53
4.4 总结54
第5章 针对iOS应用程序的测试驱动开发55
5.1 产品目标55
5.2 用例56
5.3 执行方案58
5.4 开始制作程序59
第6章 数据模型61
6.1 Topic类61
6.2 Question类67
6.3 Person类69
6.4 将Question类与其他类关联起来70
6.5 Answer类74
第7章 应用程序逻辑79
7.1 执行方案79
7.2 建立Question对象80
7.3 用JSON数据构建Question对象93
第8章 网络相关代码103
8.1 NSURLConnection类的设计103
8.2 实现StackOverflowCommunicator类105
8.3 总结115
第9章 视图控制器116
9.1 类结构116
9.2 视图控制器类117
9.3 TopicTableDataSource类与TopicTableDelegate类121
9.4 通过已有的视图控制器建立新的控制器对象137
9.5 提问列表的数据源146
9.6 接下来的任务157
第10章 整合所有部件158
10.1 完成应用程序的工作流程158
10.2 显示用户头像172
10.3 收尾与清理176
10.4 发布应用186
第11章 为测试驱动开发进行软件设计187
11.1 针对接口进行设计,而不要针对实现187
11.2 用命令代替查询189
11.3 简洁而专注的类与方法190
11.4 封装191
11.5 使用比重用更好191
11.6 测试并发代码192
11.7 别耍没有必要的小聪明193
11.8 优先选择宽而浅的继承体系194
11.9 综述194
第12章 在既有项目中运用测试驱动开发195
12.1 第一个测试用例是最重要的195
12.2 通过重构使得代码更易于测试196
12.3 编写测试使得代码更易于重构198
12.4 真的需要写这么多测试用例吗199
第13章 测试驱动开发展望201
13.1 使用一系列输入输出值构建测试用例201
13.2 行为驱动开发202
13.3 自动生成测试用例203
13.4 自动生成能够通过测试的代码205
13.5 综述206

教学资源推荐
作者: [美]沃特·萨维奇 (Walter Savitch) 肯里克·莫克(Kenrick Mock)著
作者: Richard C. Detmer
参考读物推荐
作者: 宋文鹏 梁然 韩丰 著
作者: (美)Holden Karau 著
作者: (美)Chuck Cavaness Brian Keeton