Coding Complete

  • Sortware Consttruction
    • problem definition
    • requirements development(需求分析)
    • construction planing (规划构建)
    • software architecture(软件架构)
    • detailed design
    • coding and debugging
    • unit testing
    • integration testing
    • integration(集成)
    • system testing
    • corrective maintenance (保障维护)

这里写图片描述

P.s. 灰色表示构建活动

软件构件的主要活动包括:详细设计,编码(构建),调试,集成,开发者(集成测试和单元测试)

The Importance of Metaphors

人类世界就是通过隐喻构成的,一切都是以人的视角来定义世界。而这就是隐喻
当然,上面说的有些极端,通过比喻将抽象知识具体化,或者说是对概念进行内在化(intemalizing)和抽象(abstracting),然后在更高层面思考问题。

用 accretion(冲积层)来形容软件开发过程,增量的(incremental),迭代的(iterative),自适应(adaptive),演进的(evolutionary)

隐喻是描述抽象事物及问题的很好的方式,就好比用建造房子来比喻项目的构建,可以很容易理解一个项目的构建过程。

  • 构思房子的类型 problem definition
  • 设计房子 architectural design(软件架构设计)
  • 建造房子 construction(构建)
  • 内部装饰 oprimization(优化)
  • 检查 reviews(评审) or inspections (审查)
  • 随着时间推移,问题修改需要的成本也将呈倍数增加
  • 仔细的准备是必要的(长远看,减少后期重构的机会)
  • 最常见的项目风险是糟糕的需求分析和项目计划
  • 准确的定义问题
  • 明确的需求,充分详尽的描述需求
  • 需求带来的成本最好可以带来更多的商业价值

前期准备

这里写图片描述

这里写图片描述

需求

这里写图片描述

这里写图片描述

构建

这里写图片描述
这里写图片描述

好的设计

这里写图片描述

Typical Architectural Components (架构典型组件)

  • Program Organization (程序组织)
    • 定义程序主要构建块(building blocks)
    • 块之间高内聚,低耦合
  • Major Classes(主要的类)
    • 定义主要类(继承体系,状态转换,对象持久化)
  • Data Design
  • BUsiness Rules
  • User Interface Design
  • Resource Management
    • 注意稀缺资源不要浪费
  • Security
    • 输入不可信
    • 缓存区
    • 加密
  • Performance
    • 速度,内存之间的成本优先顺序
    • 算法和数据结构
    • 空间和时间的预算
  • Scalability 可伸缩性
    • 系统增长以应对未来需求的能力
  • Interoperability 互用性
    • 与其他软件或硬件共享资源如何完成
  • Internationalization / Location
  • Input/Output 输入/输出
    • 读取策略
    • I/O 错误检测
  • Error Processing 错误处理
    • Coding convention level 代码约束层次
    • 错误纠正还是检测,主动还是被动,错误什么时候传播
    • 什么时候抛出异常,如何记录,如何描述
    • 验证数据有效性每个类需要负什么责任
  • Fault Tolerance 容错性
    • 重试
    • 备用逻辑
    • 表决算法
    • 使用正常值抹平错误
    • 部分运转/partial operation 功能退化/degraded functionary
  • Architectural Feasibility 架构可行性
    • 性能问题
  • 过度健壮
    • 各个类的健壮度应该相似
  • ReuseDecisions 复用
  • Change Strategy 变更策略
    • 灵活,变更可预测 delay
  • General Architectural Quality
    • 保持概念完整性
  • 架构应该描述所有主要决策的动机

这里写图片描述

这里写图片描述

这里写图片描述

Language

  • 思考能力取决于你知道的表达该思想的词汇
  • 如果你不知道这些词汇,就无法表达

Programming Conventions 编程约定

  • 底层实现与架构保持一致

Architectural Design is a Wicked Problem

书中有人定义 Wicked question 是只有通过解决或部分解决才能明确的问题。 未知性(不确定性)是可怕的,无从下手(Sloopy Process)是令人情绪低落的。在解决一个问题后,还会遇到新的问题,这就是软件设计的问题。所以,设计总是带有启发式的色彩。
没有银弹,实质性问题和偶然性问题都是复杂的。
降低复杂度的方法就是拆分系统,使之简单化,保持只解决一个问题的状态

优秀的设计

Levels of Design

Software System

Division into Subsystems or Packages 分解为子系统或包

Division into classes 分解为类

Division into Routines 分解为子程序

Internal Routine Desgin 子程序内部设计

-------------    本文结束  感谢您的阅读    -------------