如果你是在建一栋房子,那么这个建造过程就会复杂得多,而糟糕的设计所引发的后果也更严重。

首先你要决定准备建一个什么类型的房子—在软件开发里的类似事项称为问题定义(problem definition)。

接下来,你必须和某个建筑师( architect)探讨这一总体设计,并得到批准。

这跟软件架构设计( architecturaldesign)十分相似。然后你画出详细的蓝图,雇一个承包人。

就像软件的详细设计。再然后,你要准备好建造地点,打好地基,搭建房屋框架,砌好边墙,盖好房顶,通好水、电、煤气等。这就如同是软件的构建(construction)一样。在房子大部分完成之后,庭院设计师、油漆匠和装修工还要来把你新盖的家以及里面的家什美化一番。

这就好比软件的优化(oprimization)过程。在整个过程中,还会有各种监查人员来检查工地、地基、框架、布线以及其他需要检查的地方。这相当于软件复查(评审,reviews)和审查( inspections)。

除此之外,这两种活动还有什么相似之处呢?建造一个房子的时候,你不会去试着建造那些能买得到的现成的东西。你会买洗衣机、烘干机、洗碗机、电冰箱以及冷藏柜。除非你是机电方面的巫师,否则你是不会考虑自己动手弄这些东西的。你还会购买预先造好的橱柜、餐桌、门窗以及浴具,等等。

当开发软件时,你也会这么做的。你会大量使用高级语言所提供的功能,而不会自己去编写操作系统层次的代码。你可能还要用些现成的程序库,比如说一些容器类( containerclasses)、科学计算函数、用户界面组件、数据库访问组件,等等。总之,自己编写那些能买得到的现成的代码通常是没有意义的。

用建筑房屋来类比软件构建,还有助于解释为什么不同的软件项目能从不同的开发方法中获益。

建筑业中,盖间仓库或者工具房,或是一座医院或者核反应站,你在规划、设计及质量保证方面所需达到的程度是不一样的。盖-座学校、--幢摩天大楼,或一座三居室的小别墅,所用的方法也不会相同。同理,在软件开发中,通常你只需要用灵活的、轻量级的( lightweight)方法,但有时你就必须得用严格的、重量级的开发方法,以达到所需的安全性目标或其他什么目标。

最后,建筑这一隐喻让人们对超大型的软件项目的认识更加深刻。

超大型的结构一旦出现问题,后果将非常严重,因此有必要对这样的结构进行超出常规的规划与建设(over-engineered)。建筑人员需要非常小心地制定并核查设计规划,在建设时留有余地以保障安全;宁可多花10%的成本买更坚固的材料,也比摩天大楼倒下来要划算得多。

还需要特别关注工作的时间。在建造帝国大厦(TheEmpire Building)的时候,每辆运料车运输时都留有15分钟的余地。如果某辆车没能在指定时间到位,则整个工期就会延误。

同理,对于超大型的软件项目,就需要比一般规模的项目有更高级别的规划设计。

Capers Jones发表的报告称,一套100万行代码的软件系统,平均需要69种文档( 1998)。其需求规格文档般有四五千页长,而设计文档常常是需求的两三倍长。

不太可能有哪个人能完全理解这种规模的项目的所有设计细节-—甚至只是通读遍都不那么容易。因此,更充分的准备工作也就理所应当了。

该文章知识作为个人笔记,大部分知识来源于书本或网络整理总结;

用房屋建筑方式理解软件构建相关推荐

  1. 软件构建设计图_游戏设计如何帮助您构建更好的软件

    软件构建设计图 游戏是一种有趣的媒介. 与电影,文学和戏剧等几乎所有其他流行娱乐方式不同,游戏取决于玩家的选择. 作为游戏设计师,您大部分时间都花在精心设计要呈现给玩家的选择上. 对我们来说,最有趣的 ...

  2. 从你家的衣柜,理解软件编程的「架构」

    从你家的衣柜,理解软件编程的「架构」 2017-05-09 陈小霖Kelly 51CTO博客 作者:陈小霖Kelly 来源:商学院毕业的程序员 可阅读原文 事情是这样的,一个读商科的好基友是金融公司的 ...

  3. 《代码大全2》第5章 软件构建中的设计

    目录 前言 本章主题 5.1 设计中的挑战 5.1.1 设计在软件构建中所处的角色 5.1.2 设计是一个险恶的问题 5.2 关键的设计概念 5.2.1 软件的首要技术使命:管理复杂度 1. 管理复杂 ...

  4. 消息中间件解析 | 如何正确理解软件应用系统中关于系统通信的那些事?

    苍穹之边,浩瀚之挚,眰恦之美:悟心悟性,善始善终,惟善惟道! -- 朝槿<朝槿兮年说> 写在开头 随着业务需求的发展和用户数量的激增,对于互联网应用系统或者服务应用程序则提出了新的挑战,也 ...

  5. 基于开源软件构建高性能集群NAS系统

    大数据时代的到来已经不可阻挡,面对数据的爆炸式增长,尤其是半结构化数据和非结构化数据,NoSQL存储系统和分布式文件系统成为了技术浪潮,得到了长足的发展.非结构化数据目前呈现更加快速的增长趋势,IDC ...

  6. 计算机分子模拟聚乙烯,用“分子模拟”软件构建聚乙烯分子、全同立构聚丙烯分子,并计算它们末端的直线距离-高分子物理-实验1-01...

    高分子物理实验. 实验一 用"分子模拟"(MP)软件构建聚乙烯分子.全同立构聚丙烯, 并计算它们末端的直线距离 一.实验目的 1.了解用计算机软件模拟大分子的"分子模拟& ...

  7. 软件构建_认为独特的构建正确的软件而不是简单的软件

    软件构建 Has anybody ever told you, "We do it that way because that's how it's always been done&quo ...

  8. 公共场所安全蹭网andwifi热点软件构建安全网络!

    在地铁上.公交车上,多数人都是低着头上网,玩手机.如果公共场合有wifi热点,更是加重这种想象.不过公共wifi热点真的安全吗?网银被盗.个人信息泄露造成不少个人损失.为此,我们为何不构建利用wifi ...

  9. 《代码大全2》第2章 用隐喻来更充分地理解软件开发

    <Code_Complete_2>持续更新中......_@来杯咖啡的博客-CSDN博客这本书有意设计成使你既可以从头到尾阅读,也可以按主题阅读.1. 如果你想从头到尾阅读,那么你可以直接 ...

最新文章

  1. 子段乘积(逆元费马小定理)+线段树做法
  2. java des加密解密_JAVA和c# 之间数据通讯时通过DES进行加密解密
  3. 动态添加跨行表格_手把手教你制作Excel动态统计表格,主管看了都会竖起大拇指!-Office教程...
  4. django报错‘staticfiles‘ is not a registered tag library
  5. 现代控制理论课程实验三:一阶倒立摆的LQR控制器设计
  6. 微软私有云系列 ----SQL 云部署
  7. Ionic之自定义icon大小
  8. 央行数字货币离我们还有多远?
  9. 计算机专业助我成长作文600,挫折助我成长作文(精选6篇)
  10. 北邮计算机学院专业分析,2019-2021北京邮电大学考研数据分析
  11. 《大话物联网(第2版)》赠书活动名单公告
  12. 元旦有什么国产蓝牙耳机推荐?2022音质好的蓝牙耳机选购指南
  13. 冯 诺依曼体系结构是现代计算机的基础,作为现代计算机基本结构的冯·诺依曼体系包括______。...
  14. docker命令安装rap2阿里开源接口管理工具
  15. Ajax + $ajax
  16. node安装后的设置(node_global和node_cache) - windows
  17. 下一波下岗的将是 “IT技术支持人士”
  18. java基础学习之JSP动态web开发技术
  19. 用函数实现判断素数(以及改进思路)
  20. Kaggle实例-家庭贫困水平预测

热门文章

  1. 下载、安装Wireshark
  2. 【Java】数据类型和运算符
  3. 博阅电纸书_博阅电纸书评测:轻松阅读的开始
  4. python之Bottle框架
  5. 异步社区|本周半价电子书书单
  6. SonarQube 7.7 中文插件安装
  7. 5 款顶级 Docker GUI 工具!免费又好用
  8. 微信app支付签名错误,但验证工具正确,如何解决
  9. 12 个强大的现代 CSS 技术
  10. EPON+EOC设备网管实现方案