《人月神话》(P13)整体和部分

前言

  • 总有吹嘘的人说:“我可以编写控制航空运输、导弹拦截、管理银行账户的系统。”对这些人,回答很简单,“我也可以,任何人都可以,但当你真的写了,你就会成功吗?”
  • 如何测试?如何集成?如何开发一个可依赖的系统?这些问题需要思考。

剔除bug的设计

  • 系统各个组成部分的开发者都会做出一些假设,而这些假设之间的不匹配是大多数致命且隐蔽的bug的主要来源。第4、5、6章所讨论的概念完整性,正是直面这些问题,使得bug更不容易产生。
  • 详尽、艰苦的体系设计正是出于这种目的。关键的工作是产品定义,许许多多的失败完全是因为那些产品未精确定义的地方而导致的。细致的功能定义、仔细的规格说明、规范化的功能描述以及科学的实施方法,大大减少了系统中需要寻找的bug数量。

体系设计评审

  • 在编写任何代码之前,规格说明必须提交给外部的评审小组,以详细的检查说明的完整性和明确性。开发人员自己无法完成这项工作,他们不会承认自己看不懂,反而乐于摸索澄清疑惑的办法。

自上而下的设计

  • 最优秀的编程人员将系统开发划分为体系结构设计、设计实现和物理编码实现,每个步骤都可以使用自上而下的方法很好的实现。
  • 设计是逐步精细化的过程。首先通过粗略的任务定义和大概的解决方案得到主要结果。然后对方案仔细检查,判断结果与预期之间的差距。同时将方案分解为更详细的步骤,精细化直到算法或者数据表达方式。
  • 尽可能地使用级别较高的表达方式来表现概念和隐藏细节,只要有必要进行进一步细化。

自上而下的设计从几个方面避免了bug:

  1. 清晰的结构和表达方式更容易对需求和模块功能进行精细地描述
  2. 模块分割和模块独立性避免了系统级别的bug
  3. 细节的抑制使结构上的缺陷更加容易识别
  4. 设计在每个精细化步骤上都是可以测试的

有时必须回退,推翻顶层设计,重新开始。一些糟糕的系统往往就是试图挽救一个基础很差的设计,而对它添加了各种便面装饰般的补丁。自上而下的设计让我们更加容易判断什么时候应该选择抛弃。

结构化编程

将系统结构作为控制结构来考虑,而不是独立的分支语句(GO TO跳转)。这种思考方法是程序设计发展史上向前迈进的一大步。

构建单元测试

(不再具有参考性)

系统集成测试

  • 使用经过调试的构件单元做集成测试,实际情况不一定满足,至少在每个部分都正常运行之后开始集成。这样比先集成后测试要节省时间。
  • 开发大量辅助调试平台和测试代码是很值得的。
  • 必须有人对变更和版本进行控制和文档化,团队成员应该使用开发库的各种受控拷贝来工作。
  • 系统测试期间,一次只添加一个构建。
  • 变更的阶段要么很大,间隔很宽;要么小且频繁。后者很容易变得不稳定。

以上就是《人月神话》第13章——整体部分的所有内容

在本章中作者强调了整体设计以及测试的重要性,自上而下的设计是保证“概念完整性”的一种具体实施方式。

书中描述开发流程是这样的:
需求描述-》体系设计-》评审-》精细化设计-》编码-》构件测试-》集成测试-》发布

实际的流程多数是这样的:
需求描述-》平面设计-》评审-》编码-》精细化设计-》编码-》集成测试-》发布

实际流程的合理性在于:

  1. 设计图比体系设计更加直观,更容易被人接受
  2. 有经验的开发者可以在编码过程中进行细化,节省开发时间
  3. 大部分项目达不到构建测试的条件,或是底层不支持或是功能简单

不合理的地方在于:

  1. 仅通过设计图隐含的问题不容易被察觉
  2. 平面设计师对于系统的理解可能会存在偏差
  3. 缺乏顶层设计容易导致项目开发过程中出现完整性方面的重大问题

我本身是一直坚持在做自上而下的体系设计的,但流程似乎并不是特别大的问题,只要关注好概念完整性,流程是灵活的。

所以,什么才是真正规范的流程?规范流程所带来的开发收益能有多大?在有合理进度安排的情况下,真正导致项目延期或者失败的原因究竟是什么?

这些问题可能得等到下一章或着读完整本书才能回答了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • 1****、问:你在测试中发现了一个bug****,但是开发经理认为这不是一个bug****,你应该怎样解决? 首...
    蛋炒饭_By阅读 5,294评论 1 94
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,715评论 2 59
  • 文章来自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鹏阅读 9,192评论 2 126
  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    Mr希灵阅读 21,957评论 7 278
  • 一、mariadb 查看CentOS7中是否已经安装了mariadb数据库,若安装了mariadb数据库,先卸载m...
    barry_di阅读 442评论 0 0