本书简单明了地介绍了软件开发中的最佳实践,展示了工程流程在编写优质代码上的重要性以及测试的重要性,总结了很多资深工程师的经验教训,并提供了很多真实案例。书中介绍的经验可以应用到产品开发周期的每个环节,从设计到开发以及最后的发布和维护。本书的中心思想就是要在设计和实现的过程中改进代码质量,包括类建模、性能、安全性、内存使用以及调试,帮助读者构建完美的项目。本书适合专业及业余程序员阅读。
完美代码
优化软件开发生命周期
(美)Donis Marshall
John Bruno 著
徐旭铭 译
采用一流的工程实践来帮助你编写更健壮、无错的代码。两位微软的.NET开发专家与你分享优化软件开发生命周期的真实案例和经过实战考验的解决方案——从避免代价昂贵的编程陷阱,到提高开发团队整体效率的方法等。无论你是来自哪个层次的托管代码程序员,都能在这里找到设计、原型开发、实现、调试以及测试的技巧,进一步提升代码的品质。
本书涉及开发流程中每一个阶段的优化(从设计到测试),以及如何开发出更优质的应用程序软件:
通过元编程来降低代码的复杂度,同时还能增加灵活性和可维护性。
把性能当做一项功能,并且在开发周期中对它进行管理。
为应用程序的伸缩性采取各种最佳实践。
通过预防性的安全措施来抵御各种恶意攻击。
在运行之前通过防御性编程来捕捉错误。
在每日工程流程里植入自动化构建、代码分析和测试等工作。
实现更好的源码控制管理和提交流程。
建立一套质量驱动、基于里程碑的项目节奏,并最终产生更好的结果。
作者简介
Donis Marshall 是Debuglive.com的CEO,他管理的专家软件工程师团队开发出第一个基于Web的Windows应用程序调试器。凭借20年的开发经验以及深厚的微软.NET背景,他编写了好几本书,其中包括《Programming Microsoft Visual C# 2008: The Language and .NET Security Programming》。Donis还是一名培训师和咨询师,专门讲授并主持关于.NET编程、调试、安全性以及设计和架构的研讨会。
John Bruno 是微软的资深程序经理,有着超过10年的应用开发经验,他擅长使用微软.NET技术来设计并构建可扩展的Web应用和服务。加入微软以来,John对Windows Live的发布起到重要作用,同时他还负责Windows Live Spaces的服务架构和程序员平台,Windows Live Spaces目前在全世界的用户数超过了1亿。现在他的主要精力都放在了开发Windows Mobile下一代Web服务上。
在过去多年里软件开发已经有了很大的演化。编程语言和快速开发工具(比如NET和 Visual Studio 2008)的进步让软件工业可以构建更高质量的软件,速度更快,成本更低,更新更频繁。尽管这种对软件和工具以及过程演化的需求日益增加,但构建和发布高质量的软件对于软件项目的所有参与者,特别是程序员来说,仍然是一项艰难的工作。幸运的是,本书包含了应用程序工程师在开发健壮的代码中所需要的工程实践、过程、策略和技术等一切最佳要素。
本书探讨了软件开发中几乎每一个方面所需的最佳实践,以达到更高的代码质量。这本书提供了来自资深工程师的实践经验,可以应用到产品开发周期里的每一个环节:设计,构造原型,实现,调试,测试。这些宝贵的资料和建议还进一步得到了来自真实世界实例的支持,这些来自微软内部的工程团队包括了(但不限于)Windows Live Hotmail和Live Search团队。
本书的读者
本书适合软件开发里每一个环节的参与者阅读。特别是那些在构建高质量软件方面寻求最佳实践和建议的应用程序工程师。书中很多部分都展示了工程流程在编写优质代码上的重要性。其他部分则着重于测试的重要性。本书的中心思想就是要在设计和实现的过程中改进代码质量,包括类建模、性能、安全性、内存使用以及调试。
专业和业余程序员都可以阅读本书。我们假设读者对编程概念和C#面向对象编程具有基本的理解,而水平则没有要求。本书主要是关于托管代码应用程序开发的最佳实践,书里所探讨的话题应该能引起各级托管代码程序员的共鸣。
本书的组织
本书的组织形式和应用程序开发生命周期非常相似。各个章并不是分割成很多部分,而是根据四个关键的原则组织在一起。第1章里列出了这些原则:专注设计、防御和调试,分析与测试,以及改进流程和态度。
专注设计本书最重要的主题之一就是:经过深思熟虑的设计是提升产品整体质量的重要途径。为了支持这一主题,我们将探讨很多不同的实践,例如类设计和原型开发、元编程、性能、伸缩性以及安全性等话题。
防御和调试出色的设计是构建高质量软件应用的关键,但是理解那些会阻碍发布无错代码的陷阱的重要性也同样不能忽视。根据这一原则,我们要讨论的话题包括内存管理、防御性编程技术以及调试。
分析与测试即使最伟大的程序员遵循了所有推荐的最佳实践,他仍然会写出有bug的代码。因此,讨论如何进行代码分析以及测试的方法是进一步提升代码质量的重要环节。
改进流程和态度除了最佳实践以外,工程的流程和文化也能对产品的质量产生巨大的影响。我们探讨了提升团队的效率以及追求质量几个重要话题。
系统要求
至少要有以下的软件和硬件环境才能在32位Windows环境下编译执行本书中的示例代码:
Windows Vista,Windows Server 2003 with Service Pack 1,Windows Server 2008,或者Windows XP with Service Pack 2。
Visual Studio 2008 Team System。
20GHz CPU,推荐26 GHz CPU。
512MB内存,推荐1GB内存。
8 GB 硬盘安装空间,推荐20GB硬盘空间。
CDROM 或 DVDROM驱动器。
微软或兼容鼠标。
配套网站
本书在网上设立了一个站点提供示例代码的下载。代码按照章节来组织,可以从以下地址下载:
http://wwwmicrosoftcom/learning/en/us/books/12792aspx。
其他在线资源
本书的补充资料和更新将发布在Microsoft Press Online Developer Tools Web站点上。它包含了对本书内容的更新、专栏文章、配套内容、勘误、样章等等。站点的地址是:http://wwwmicrosoftcom /learning/books/online/developer。这个站点会定期更新。
本书的支持
我们尽力确保本书内容的准确性。微软出版社在以下地址提供关于图书的勘误:
http://wwwmicrosoftcom/mspress/support/searchaspx。
如果要直接联系微软的帮助和支持,可以在下列网址中输入你的问题:
http://supportmicrosoftcom。
如果你有关于本书的评论、问题或建议,或着在知识库里找不到你问题的答案,请按照以下方式联络微软出版社:
电子邮件:
mspinput@microsoftcom
通信地址:
Microsoft Press
Attn: Solid Code editor
One Microsoft Way
Redmond, WA 98052-6399
请注意:以上联系方式并不提供产品支持。如果你需要支持信息,请访问微软产品支持站点:
http://supportmicrosoftcom。
致谢
牛顿说过,“如果我看得比别人远,那是因为我站在了巨人的肩膀上。”这句名言正适用于这本书,特别是考虑到其中所引述的实践、观点和经验的时候。更进一步地说,那些肩膀属于很多为这个项目做出贡献的人。虽然我们的名字占据封面,但是我们要感谢每一个帮助这本书出版的人。我们要感谢他们在这个项目里做出的贡献和支持,并且希望能一一向他们表示谢意。
首先,如果没有微软出版社的同仁就没有这本书的出版。这里我们要感谢Ben Ryan、Devon Musgrave和Melissa von Tschudi-Sutton,他们保证了本书的高质量和项目的按期进行。另外,我们还要感谢技术编辑Per Blomqvist和审稿Cindy Gierhart所做出的贡献和反馈。
前面提到过,本书包含了大量的实践、观点和经验。如果没有来自微软和行业里专家们的贡献、支持和反馈,这些元素是不可能出现在书中的。这里我们要特别感谢为此做出贡献的人和帮助我们审校的人:Jason Blankman,Eric Bush,Jacob Kim,Don Reamey,Dick Craddock,Andres Juarez Melendez,Eric Schurman,Jim Pierson,Richard Turner,Venkatesh Gopalakrishnan,Simon Perkins,Chuck Bassett,Venkat Iyer,Ryan Farber和Ajay Jha。
还要感谢Wintellect公司。Wintellect是一个咨询、调试和培训公司,专门帮助其他公司专注在NET和Windows开发环境上构建更好的软件。它的服务包括短期的NET进阶培训课程,以及开发和咨询服务,包括紧急调试。公司还主持了Devscovery研讨会——一个3天的多路会议,专门面向中级和高级程序员。更多的关于Wintellect的信息请访问wwwwintellectcom。
Wintellect公司的John Robbins和Jeffrey Richter都为本书提供了无价的建议和及时的反馈。在此特别感谢!
Donis Marshall我已经写过好几本书了。但是这是第一本合著的书。在完成本书以后我有一个感想,为什么过去我不找一个人来合著呢?John Bruno对这个项目来说是无比重要的人物。他广博的知识和深刻的洞察力足以让任何关心Windows的技术人员都不能错过本书。John还具备一个作家少见的可贵品质——遵守时间。
John Bruno写书是一件劳心劳力的事情,经常会影响到你最亲近的人。所以,我首先要感谢我的妻子Christa和我的两个儿子,Christopher和 Patrick,感谢你们在我写这本书的过程中给予我的耐心、理解和牺牲。你们的爱和支持让我每天都能保持最好的状态。另外,我还要感谢Donis Marshall邀请我加入这个项目。我感谢他的友善,并让我有机会和他一起参与这样一个重要的工作。在我的生命里,我有幸认识了很多富有创造力和具有聪明才智的人。对于那些总是启发我、鼓励我、挑战我和支持我的人,在这里感谢你们。
采用一流的工程实践来帮助你编写更健壮、无错的代码。两位微软的.NET开发专家与你分享优化软件开发生命周期的真实案例和经过实战考验的解决方案——从避免代价昂贵的编程陷阱,到提高开发团队整体效率的方法等。无论你是来自哪个层次的托管代码程序员,都能在这里找到设计、原型开发、实现、调试以及测试的技巧,进一步提升代码的品质。
本书涉及开发流程中每一个阶段的优化(从设计到测试),以及如何开发出更优质的应用程序软件:
● 通过元编程来降低代码的复杂度,同时还能增加灵活性和可维护性。
● 把性能当做一项功能,并且在开发周期中对它进行管理。
● 为应用程序的伸缩性采取各种最佳实践。
● 通过预防性的安全措施来抵御各种恶意攻击。
● 在运行之前通过防御性编程来捕捉错误。
● 在每日工程流程里植入自动化构建、代码分析和测试等工作。
● 实现更好的源码控制管理和提交流程。
● 建立一套质量驱动、基于里程碑的项目节奏,并最终产生更好的结果!
作者简介
Donis Marshall是Debuglive.com的CEO,他管理的专家软件工程师团队开发出第一个基于Web的Windows应用程序调试器。凭借20年的开发经验以及深厚的微软.NET背景,他编写了好几本书,其中包括《Programming Microsoft Visual C# 2008: The Language and .NET Security Programming》。Donis还是一名培训师和咨询师,专门讲授并主持关于.NET编程、调试、安全性以及设计和架构的研讨会。
John Bruno是微软的资深程序经理,有着超过10年的应用开发经验,他擅长使用微软.NET技术来设计并构建可扩展的Web应用和服务。加入微软以来,John对Windows Live的发布起到重要作用,同时他还负责Windows Live Spaces的服务架构和程序员平台,Windows Live Spaces目前在全世界的用户数超过了1亿。现在他的主要精力都放在了开发Windows Mobile下一代Web服务上。
(美)Donis Marshall John Bruno 著 徐旭铭 译:暂无简介
徐旭铭:暂无简介
专家推荐
序
前言
第1章敏捷世界里的代码质量
11软件开发的传统方法
12软件开发的敏捷方法
121Scrum
122eXtreme Programming
123测试驱动开发
13尽早进行质量控制
14微软内幕:Windows Live Hotmail工程
141工程准则
142成功的关键因素
15编写坚实代码的方法
151专注设计
152防御和调试
153分析与测试
154改进流程和态度
16总结
17本章要点
第2章类设计和原型开发
21Visual Studio中的协作
22磨刀不误砍柴工
23软件建模
231统一建模语言
232Visio示例
24原型开发
25跟踪
26Visual Studio类设计器
261创建一个类图
262使用类设计器进行原型开发
263原型开发示例
27总结
28本章要点
第3章元编程
31什么是元数据
32托管应用里的元数据
33应用程序中的元数据
34微软内幕:Windows Live Spaces中的配置管理
35总结
36本章要点
第4章性能也是功能
41常见的性能难点
411网络延时
412负载大小和网络往返时延
413受限的TCP连接
414未优化的代码
42分析应用程序性能
43提升Web应用性能的技巧
431减小负载大小
432有效利用缓存
433优化网络通信
434为性能组织编写代码
44采用性能最佳实践
45微软内幕:解决Live Search的性能问题
451Web性能准则
452成功的关键要素
46总结
47本章要点
第5章伸缩性设计
51理解应用程序伸缩性
511伸缩性之路
512数据库的伸缩性
52伸缩Web应用程序的技巧
521选择可伸缩的应用程序设计
522设计可伸缩的应用程序基础设施
523抵御应用程序故障
524保证可管理性和可维护性
53微软内幕:管理Windows Live Messenger服务基础设施
54总结
55本章要点
第6章安全性设计和实现
61常见的应用程序安全威胁
62设计安全的应用程序的原则
63安全的应用程序的SD3+C策略和实践
631设计上的安全性
632默认值的安全性
633部署和通信中的安全性
64理解NET框架的安全性原则
641运行时安全策略
642代码访问安全
643应用运行时安全策略
65其他安全性最佳实践
66总结
67本章要点
第7章托管内存模型
71托管堆
72垃圾回收
721原生对象的托管包裹
722GC类
723大型对象堆
73终止
731不确定的垃圾回收
732可丢弃对象
733丢弃模式
734弱引用
74固定
75托管堆的技巧
76CLR Profiler
77总结
78本章要点
第8章防御式编程
81防御式编程和C#
82警告
83代码检查
84软件测试
841测试驱动开发
842代码覆盖
843自我描述的代码
844命名规则
845伪代码
846注释
85用类实现防御式编程
851修饰符
852接口
86防御式编程小结
87设计模式
88总结
89本章要点
第9章调试
91溢出bug
92Pentium FDIV bug
93符号
931符号服务器
932源码服务器
94抢先式调试
95主动型调试
951托管调试助手
952MDA举例
953代码分析
954性能监视
96调试
97调试工具
971Visual Studio
972NET框架工具
973Windows调试工具
974CLRProfiler
975Sysinternals
98跟踪
981Web应用程序跟踪
982异常处理
99生产调试
910总结
911本章要点
第10章代码分析
101投资测试过程
1011定义测试的节奏
1012建立测试工作项的跟踪
102采用自动化的代码分析
1021使用静态代码分析工具
1022编写应用程序测试代码
1023使用Visual Studio进行测试
103通过度量来理解质量
1031衡量代码的复杂度和可维护性
1032通过透视来理解质量
104微软内幕:Microsoftcom的Web分析平台的质量管理
1041代码质量的重要性
1042测试投资
1043管理质量
105总结
106本章要点
第11章改进工程流程
111工程流程改进的技巧
1111建立起关注质量的项目节奏
1112实现源码控制和提交流程
1113每日发布和测试代码
1114自动化每日构建
1115使用MSBuild
1116创建并执行质量指标
112总结
113本章要点
第12章态度决定一切
121激情
122线性还是迭代
123销售为王
124灵活性
125解决实际问题
126你要负责
127把移植代码当做新代码来写
128重构
129优先级
1210从实际出发
1211拥抱变化
1212拓展视野
附录A敏捷开发资源
附录BWeb性能资源