从建造狗窝到建造帝国大厦——软件开发过程其实可以这么看

    在我们讨论软件开发过程之前,我们不妨先来考虑为自己的爱犬Pluto安个家怎么样?至于为什么叫Pluto这个名字,其实这个名字来自美国迪士尼卡通中的一条大黄狗的名字,小时候我很喜欢看与Pluto相关的动画片,它总是能逗我笑。不过,在这里你完全没有必要打开网页去查询Pluto的相关信息,名字什么的并不重要,我们主要是考虑如何建造一个狗窝。

    你需要一个工具箱,这里面至少要包含锤子、圆锯等基本工具,然后你只需、要再去建材市场搞一些木板,花上一下午的时间,就可以做好一个简易的狗窝了。一切就是那么简单,不需要太多的提前设计,也不需要动太多脑筋,你只需要按照脑子里的想法去做就好了。

也许你做完后会发现,狗窝棚顶的木板不是很齐,没关系,它只要能挡雨就好了,但如果你发现没有给狗窝做一个圆形拱门的话···那你只好再拿起圆锯去开一个门了,不过这并不会花上你太多的时间。最糟糕最糟糕的情况下,你也许需要再花上一个下午做一个狗窝,但那是可以接受的,不是么?

    好了,我们正式进入主题,来讨论一下软件开发这个东西。现在我们得到了一个请求,开发一个代码量大概在2-3千行的软件,也许是一个爬虫,也许是一个文件管理器,那么你会怎么做呢?相信有那么一部分人首先会沏上一杯浓咖啡边品尝边仔细阅读相关需求,然后花些时间提出一套设计方案,再花上那么一些时间去完善一下设计方案,然后再着手实现代码细节部分,最终经过调试测试后交给用户。我也相信有一部分人会大概看一眼需求就提出那么一套设计方法,然后便开始无尽的编写代码和调试了···如果你认真的读了关于“如何快速建造一个狗窝“的话,你会发现造狗窝与和我刚才举例子的后者很相似。

    对于一个简单的建筑物(软件),就拿狗窝来说,这种宽松的设计方式还算适合,就算是设计架构出现了错误,我们还可以通过软件重构甚至推倒重做来解决问题,这都是可以接受的。但是,假若我们造的不是狗窝,而是高度为448.7米、102层、建筑面积为204,385平方米,斥资6700万美元的帝国大厦,这样的设计性失误是绝对无法容忍的,错误的设计甚至可能会带来严重的工程灾难。因此在建设开始之前,设计者们首先要考虑帝国大厦的用途(软件定义和需求分析);然后让建筑设计师们拿出一套经得住考验的建筑图纸(软件架构设计);紧接着去采购高质量的建筑原材料,聘请大量富有经验的建筑工人、运输司机、工地监工等,根据设计图纸完成整座大楼的建设(编码与调试);建设过程中不定期的还要进行质量检测(软件测试和评审);最后大楼修建完毕后还要请人来进行内部装修设计(用户界面设计和软件美化);完成内部美化装修后,最终进行各个部分的验收(软件验收和交付),帝国大厦才算是一件可以交付使用的产品。

    实际中的大型软件开发项目,虽然不可能都像帝国大厦那样投入如此巨大,但动辄几十万级别的代码量依然可以成为一个小型帝国大厦了。如此复杂的项目单凭几个人是无法搞定的,这需要一个团队来协作配合,想要保证自己的软件不步“巴别塔”的后尘,最好的方法就是制定一个详细的计划。现在请你再读一遍上面的例子,不过要注意括号中的内容,我已经将建筑学与软件开发的过程一一对应起来了,希望这种通过“暗喻”的方式能够让你理解软件开发过程。

    说回来,不论是造狗窝、造一座公寓楼还是造上一座帝国大厦,因为规模的不同,因此选择的方法也不同,向狗窝这样的中小型软件使用轻量级的、灵活的开发方式就可以达到很好的效果,而像帝国大厦这样的大型软件则需要使用重量级的、稳重的开发方式,在开发前做好“万全”的准备,这会为之后的开发节省下大量的时间、人力和物力。可以想象一下,如果在修建一座承重墙的时候发现图纸上的位置其实应该再向前移动0.5米,这要消耗多少时间和财力。我们并不是特别在乎推倒这面墙再在前面0.5米处再建上一座墙到底有多麻烦,关键是整个过程不仅要白白浪费掉本应该放在关键部分开发的时间,而且我们还要动用更多的人力去做这件事情,而这个悲剧本来是可以避免的,我们只需要在审查图纸的时候发现这个错误,这也许只会花上一个下午的时间外加一杯黑咖啡。

    也许这个例子可能有些不切实际(毕竟作者也没有做过建筑设计),但是作为一个“暗喻”来说,它已经很好地表达了我想说的事情。希望你在读完这几个故事后能对软件开发过程有着更加形象的认知,至少以后再进行软件开发活动的时候能够正确的选择开发方法,合理安排各个环节的时间,把握轻重缓急,完成软件开发任务。

posted on 2013-05-11 20:22  woud  阅读(562)  评论(0编辑  收藏  举报

导航