【构建之法】第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)
//