移植是软件开发中一项具体而又实际的工作,不要相信某些软件工具的广告宣传(比如java 的宣传口号write once run many). 即使仅仅对软件进行常规升级,也要把这看得和向另一个操作系统或数据库移植一样重要.记得从16位Windows移植到32位windows的"乐趣"吗?当你使用了某个操作系统的特性,如它的进程间通信(IPC)策略,或用某数据库专有语言写了存储过程,你的软件和那个特定的产品结合度就已经很高了.好的软件设计者把那些特有的实现细节打包隐藏起来,所以,当那些特性该变的时候,你的仅仅需要更新那个包就可以了.
"UML User Guide"(Grady Booch,Ivar Jacobson和Jim Rumbaugh ,Addison Wesley,1999)中指出,你应该在开发阶段的早期就定义软件模块之间的接口.这有助于你的开发人员全面理解软件的设计结构并取得一致意见,让各模块开发小组相对独立的工作.一旦模块的接口确定之后,模块怎样实现就不是很重要了.从根本上说,如果你不能够定义你的模块"从外部看上去会是什么样子",你肯定也不清楚模块内要实现什么.
14:走近路需要更长的时间
在软件开发中没有捷径可以走,缩短你的在需求分析上花的时间,结果只能是开发出来的软件不能满足用户的需求,必须被重写.在软件建模上每节省一周,在将来的编码阶段可能会多花几周时间,因为你在全面思考之前就动手写程序.你为了节省一天的测试时间而漏掉了一个bug,在将来的维护阶段,可能需要花几周甚至几个月的时间去修复.与其如此,还不如重新安排一下项目计划.避免走弯路,只做一次但要做对(do it once by doing it right).