第六章:当你编码时
这一章的内容和我们现在经常做的事情息息相关,需要好好理解理解。
注重实效的程序员批判地思考所有代码,包括我们自己的。我们不断地在我们的程序和设计中看到改进的余地。在“重构”中,我们将讨论一- 些即使我们还处在项目中期,也能帮助我们修正现有代码的技术。
只要你在制作代码,你就应当记住,有一天你必须对 其进行测试。这样你将增加它实际通过测试的可能性。
怎样深思熟虑地编程
我们想要让编写代码所花的时间更少,想要尽可能在开发周期的早期抓住并修正错误,想要在一开始就少制造错误。如果我们能深思熟虑地编程,那对我们会有所帮助:
●总是意识到你在做什么。Fred让事情慢慢失去了控制,直到最后被煮熟,就像“石头汤与煮青蛙”里的青蛙一样。
●不要盲 目地编程。试图构建你不完全理解的应用,或是使用你不熟悉的技术,就是
希望自己被巧合误导。
● 按照计划行事,不管计划是在你的头脑中,在鸡尾酒餐巾的背面. 还是在某个CASE工具生成的墙那么大的输出结果上。
●依靠可靠的事物。不要依靠巧合或假定。如果你无法说出各种特定情形的区别,就假定是最坏的。
●为你的假定建立文档。 “按合约编程" 有助于澄清你头脑中的假定,并且有助于把它们传达给别人。
●不要 只是测试你的代码,还要测试你的假定。不要猜测;要实际尝试它。编写断言测试你的假定。如果你的断言是对的,你就改善了代码中的文档。如果你发现你的假定是错的,那么就为自己庆幸吧。
●为你的工作划分优先级。把时间花在重要的方面;很有可能,它们是最难的部分。
●不要做历史的奴隶:不要让已有的代码支配将来的代码,如果不再适用.所有的代码都可被替换。即使是在一个程序中,也不要让你已经做完的事情约束你下一步要做的事情一准备好进行重构。
选择合适的算法。
重构:重写,重做和重新架构代码
需要重构的代码的特征:重复,非正交的设计,过时的知识,性能。
怎样进行重构:
不增加功能;
开始重构前,确保拥有良好的测试;
采取短小,深思熟虑的步骤
易于测试的代码
把可测试性构建进软件中,并且把各个部分连接在一起对之前每个部分进行彻底的测试
测试时需要编写单元测试,使测试代码易于找到;使用测试装备处理一些常用操作;构建测试窗口,提供模块内部状态的各种视图,而又不使用调试器。
测试装备都应该具有以下功能:
●用以指定 设置与清理( setup and cleanup )的标准途径。
●用以选择 个别或所有可用测试的方法,
●分析输出是否是预期 (或意外)结果的手段。
●标准化的故障报告形式。
测试应该是可组合的;也就是说,测试可以由子组件的子测试组合到任意深度。通过这一-特性, 我们可以使用同样的工具、同样轻松地测试系统的选定部分或整个系统。