学考易
标题: 使用极限编程改善项目的设计和灵活性 [打印本页]
作者: 36987412 时间: 2015-7-29 17:15
标题: 使用极限编程改善项目的设计和灵活性
随着项目的逐渐成熟,难道你不愿意自己编写代码的道路通向坦途,而非走向荆棘丛生的崎岖小径?似乎看起来不管你采取什么方式,编码之路迟早会走向迷途。项目越大,困难越多。有多少次当你以一个近乎完美的设计开始你的项目,然而一旦开始编码,你会发现自己事实上只看到了项目的局部?
测试驱动开发(TDD)改变了编码的过程,并且这种改变不仅是可能的,同时也是值得去做的。开发包括三方面的活动:编写测试用例,编码并进行测试,重构代码以消除重复代码使其更简单、更灵活、更容易理解。
这个过程会频繁地重复,每次进行测试均是为了保证产品的正确性。设计、编码和测试三者之间的鸿沟将不再存在,这样可以促进你对整个环境更好地理解。因此,你的设计(和编码)将随着项目的成熟逐步得到改善而非降低。
使 TDD 更加有效的原因是单元测试自动化,而且这些自动化单元测试的工具可以从Internet 上免费获得。虽然没有简化功能版的商业产品,但开发人员可以合理地使用这些高质量的软件。本文将指导你怎样获得和使用Nunit 并通过C#(或者任意一种基于Microsoft .Net Framework的语言)开发实践TDD。注意到类似的工具对于C++和Java 开发人员也是可用的,因为他们支持大多数语言和操作系统。这些工具与极限编程紧密地结合起来,扩大了TDD应用的范围。
为什么设计会降低性能大多数传统软件开发过程是基于你在设计之初正确的设计与估计,并通过开发以形成完美的产品。这种开发方式保证了产品的统一性和之间的最小差异。然而这一过程却忽略了交流与反馈,同时也不利于生成错误信息(测试失败),并因此制定策略采取相应的措施(修复设计),而这些正是TDD所重视的。
为什么我们不能在开始就获得正确的设计?因为在开发时,处于项目之初的我们无法获得有关这个软件完整的知识。迭代式开发虽然也认同这一事实,并帮助你在项目开发初期识别一些重要的问题,而不是把这些问题留在后期解决。然而,迭代法无法终止开发过程,使你回到设计阶段来解决问题,哪怕这只是因为一个命名糟糕的公共类名。没有人愿意关注这些细小的问题,且不幸地,这种设计过程也禁止这种更新,因为在各个阶段不停重复的代价太高。
传统开发过程中的这些小问题一旦积累起来,会导致大问题的发生。你或许认为与其将时间耗费在这些对功能影响不大的细枝末节上,还不如将精力放在更重要的环节。然而,这个命名糟糕的公共类在代码中保留的时间越久,则相关的使用也会越来越多,改变起来就越来越困难。之后,团队会在编码的时候非正式地修改这些问题,很快,在计划发布整个产品时,你会做大量的工作尽量使代码和设计文档保持一致。对于这种情况来说,你之前的设计是没有价值的,因为代码本身就说明了设计。
测试驱动开发允许你推迟决定,直到你更好地理解了问题之所在。当你只是了解到产品开发的一些基本信息时,你不必设计出完美的体系架构。这对于传统软件开发中已经确定的理念来说,是一种挑战,从某种角度来说,甚至是违反常规的。因此我们建议你以一种开放的思想来尝试TDD,你会发现TDD的强大。
TDD 的另一个好处是更容易掌握。你开发的一系列测试说明了代码的运行机制,这种程序自我编档的方式促进了交流。它要求你通过概览测试用例并阅读自己的代码来获得反馈,从而有利于你创建的对象和组件更趋于松散耦合。同时,TDD 可以推迟你的设计决策,从而简化设计,使你能集中精力修正设计的问题。最后,它通过给出的一系列测试减轻你编码的压力,因为当测试发生中断时,它可以立即告诉你究竟发生了什么。
欢迎光临 学考易 (http://xuekao1.com/) |
Powered by Discuz! X3 |