如果你是在建一栋房子,那么这个建造过程就会复杂得多,而糟糕的设计所引发的后果也更严重。
首先你要决定准备建一个什么类型的房子—在软件开发里的类似事项称为问题定义(problem definition)。
接下来,你必须和某个建筑师( architect)探讨这一总体设计,并得到批准。
这跟软件架构设计( architecturaldesign)十分相似。然后你画出详细的蓝图,雇一个承包人。
就像软件的详细设计。再然后,你要准备好建造地点,打好地基,搭建房屋框架,砌好边墙,盖好房顶,通好水、电、煤气等。这就如同是软件的构建(construction)一样。在房子大部分完成之后,庭院设计师、油漆匠和装修工还要来把你新盖的家以及里面的家什美化一番。
这就好比软件的优化(oprimization)过程。在整个过程中,还会有各种监查人员来检查工地、地基、框架、布线以及其他需要检查的地方。这相当于软件复查(评审,reviews)和审查( inspections)。
除此之外,这两种活动还有什么相似之处呢一个房子的时候,你不会去试着建造那些能买得到的现成的东西。你会买洗衣机、烘干机、洗碗机、电冰箱以及冷藏柜。除非你是机电方面的巫师,否则你是不会考虑自己动手弄这些东西的。你还会购买预先造好的橱柜、餐桌、门窗以及浴具,等等。
当开发软件时,你也会这么做的。你会大量使用高级语言所提供的功能,而不会自己去编写操作系统层次的代码。你可能还要用些现成的程序库,比如说一些容器类( containerclasses)、科学计算函数、用户界面组件、数据库访问组件,等等。总之,自己编写那些能买得到的现成的代码通常是没有意义的。
用建筑房屋来类比软件构建,还有助于解释为什么不同的软件项目能从不同的开发方法中获益。
建筑业中,盖间仓库或者工具房,或是一座医院或者核反应站,你在规划、设计及质量保证方面所需达到的程度是不一样的。盖-座学校、–幢摩天大楼,或一座三居室的小别墅,所用的方法也不会相同。同理,在软件开发中,通常你只需要用灵活的、轻量级的( lightweight)方法,但有时你就必须得用严格的、重量级的开发方法,以达到所需的安全性目标或其他什么目标。
最后,建筑这一隐喻让人们对超大型的软件项目的认识更加深刻。
超大型的结构一旦出现问题,后果将非常严重,因此有必要对这样的结构进行超出常规的规划与建设(over-engineered)。建筑人员需要非常小心地制定并核查设计规划,在建设时留有余地以保障安全;宁可多花10%的成本买更坚固的材料,也比摩天大楼倒下来要划算得多。
还需要特别关注工作的时间。在建造帝国大厦(TheEmpire Building)的时候,每辆运料车运输时都留有15分钟的余地。如果某辆车没能在指定时间到位,则整个工期就会延误。
同理,对于超大型的软件项目,就需要比一般规模的项目有更高级别的规划设计。
Capers Jones发表的 告称,一套100万行代码的软件系统,平均需要69种文档( 1998)。其需求规格文档般有四五千页长,而设计文档常常是需求的两三倍长。
不太可能有哪个人能完全理解这种规模的项目的所有设计细节-—甚至只是通读遍都不那么容易。因此,更充分的准备工作也就理所应当了。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!