【构建之法】第11章-软件设计与实现

本章重点:

  • 典型的开发流程
  • 常用的分析和设计方法:ERD、DFD、UML
  • 开发阶段的一些管理方法:每日构建、小强地域、构建大师
  • 源代码管理

1 分析和设计方法

1.1 表达、传递和处理信息

在整个软件开发周期,我们需要表达、传递和处理下面这些信息:

  • 在“需求分析”阶段,我们要搞清楚:在问题领域中的现实世界里,都有哪些实体,如何抽象出我们真正关心的属性,实体之间的关系是什么,在这个基础上,用户的需求是什么,软件如何解决用户的需求;
  • 在“设计与实现阶段”,我们要搞清楚:软件是怎么解决这些需求的?现实世界的实体和属性在软件系统中是怎么表现和交换信息的?;
  • 在“测试”和“发布”阶段,我们要搞清楚:软件真的解决了这些需求了么?软件解决需求时候的效率如何?用户还有什么新需求?

1.2 解决问题的步骤

看典型解题者的解题过程,有下面的步骤

  • 理解,抽象:理解问题,过滤掉非核心信息,抽象出关键信息和它们之间的关系;
  • 找到合适的数学模型
  • 根据模型和解法,按部就班地解决问题:这要依赖于对数学原理和基本操作地掌握。

1.3 分析和设计的方法

  • 以文字为主的文档:如Word、PowerPoint文档;
  • 用图形为主构造的模型:如Mind Map(思维导图)、ERD、DFD、UML的各种图,甚至包括Flow Chart流程图;
  • 用数学语言的描述:如Vienna Development Method;
  • 用类自然语言+代码构造的描述:如Literate Programming;
  • 源代码加注释也能描述

2 图形建模和分析方法

2.1 表达实体和实体之间的关系

思维导图(Mind Map)
在这里插入图片描述
实体关系图(Entity Relationship Diagram)
在这里插入图片描述
**Use Case Diagram(UCD)**主要有以下元素:

  • 参与者(Actor)
  • 系统
  • 用例(Use Case)
  • 信息传递线

2.2 表达数据的流动(Data Flow Diagram)

在这里插入图片描述

2.3 表达控制流(Flow Chart, Finite State Machine)

  • 数据流图(Flow Chart)
  • 有限状态自动机(Finite State Machine,FSM)

2.4 统一的表达方式(Unified Modeling Language,UML)

各种图示建模方法的大致特点:

各种分析建模方法 从结构化数据的角度看 从面向对象的角度看 从控制的角度看
强调静态 ERD Class Diagram
强调动态,交互 DFD,UCD,Activity Diagram Sequence Diagram FSM,Flow Chart,UML State Machine

但是,要客观看待这些图形化辅助工具的价值,UML不是“银弹”。

3 其他设计方法

  • 形式化的方法(Formal Method)
  • 文学化编程(Literate Programming)

4 从Spec到实现

4.1 把修改集(Change Set)集成到代码库中

源代码签入步骤

  • 根据场景和开发任务来决定集成的次序;
  • 互相依赖的任务要一起集成;
  • 在测试场景时,要保证端到端的测试;
  • 场景的所有者必须保证场景完全通过测试,然后把场景的状态改为“解决”。

4.2 开发人员的标准工作流程

在这里插入图片描述

5 开发阶段的日常管理

  • 闭门造车(Leave Me Alone):不被打扰;
  • 每日构建(Daily Build):每天或至少每周完成构建,提升团队积极性;
  • 构建大师:导致构建失败的成员;
  • 宽严皆误:要学会审“势”。
  • 小强地狱(Bug Hell):bug过多的小强入狱,解决到一定程度后即可出狱。

6 实战中的源代码管理

//

7 代码完成(Code Complete)

//