译者序
前言
致谢
第1章 关注于问题
1.1 解决方案之前的问题
1.2 计算机和世界
1.3 初始的问题焦点
1.4 问题不在接口上
1.5 描述外部世界的挑战
1.5.1 计算机的魅力
1.5.2 系统的两个含义
1.5.3 模型的两个含义
1.6 无缝开发
1.7 一些解决方案
1.8 本书的范围
第2章 定位问题并确定问题的边界
2.1 上下文图
2.1.1 物理领域
2.1.2 共享现象的接口
2.2 上下文图确定问题的边界
2.2.1 数据库领域
2.2.2 医生以及周期和范围领域
2.2.3 ICU病人领域
2.3 真实的问题
2.3.1 客户
2.3.2 进入外部世界要多远
2.4 领域接口
2.4.1 共享现象是抽象的
2.4.2 连接领域
2.4.3 忽略连接领域
2.4.4 当连接领域不能忽略时
2.5 处理较大的上下文
2.6 机器领域
2.6.1 什么处于机器中
2.6.2 当机器是问题领域时
第3章 问题和子问题
3.1 问题图
3.1.1 一个简单的问题图
3.1.2 另一个简单的例子
3.1.3 简单问题
3.1.4 问题分析和问题图
3.2 现实的问题
3.2.1 分解
3. 2.2 问题结构化
3.3 子问题示例
3.3.1 供暖显示
3.3.2 输入周期和范围
3.3.3 会员报表
3.3.4 火炉操作
第4章 基本问题类和框架
4.1 问题类
4.1.1 问题框架
4.1.2 五种基本框架
4.1.3 问题框架如何互不相同
4.2 关于现象和领域
4.2.1 个体
4.2.2 关系
4.2.3 因果现象和符号现象
4.2.4 领域类型
4.3 问题框架
4.3.1 需求式行为框架
4.3.2 命令式行为框架
4.3.3 信息显示框架
4.3.4 简单工件框架
4.3.5 变换框架
4.3.6 变换限制
第5章框架关注点和开发描述
5.1框架关注点
5.2需求式行为框架关注点
5.2.1框架关注点
5.2.2三个描述
5.2.3为什么一个描述不够
5.3命令式行为框架关注点
5.3.1违抗
5.3.2框架关注点
5.3.3合理的命令需求
5.34可行的命令需求
5.3.5门和马达领域特性
5.3.6机器规格说明
5.4信息显示框架关注点
5.4.1框架关注点
5.4.2车辆和感应器领域特性
5.5简单工件框架关注点
5.5.1框架关注点
5.5.2晚会规划领域描述
5.5.3用户命令
5.5.4需求
5.5.5晚会规划编辑规格说明
5.6变换框架关注点
5.6.1输入领域特性
5.6.2输出领域特性
5.6.3需求
5.6.4遍历
5.6.5框架关注点
5.6.6变换机器的效率
5.7两点注释
5.7.1问题框架和开发方法
5.7.2框架失配
第6章框架风格和开发描述
6.1框架和风格
6.1.1领域描述的范围
6.1.2领域风格
6.2静态风格
6.2.1物理的静态领域
6.2.2结构化风格
6.3动态风格.
6.3.1动态领域的宽容性
6.3.2抑制.
6.3.3离散现象和连续现象
6.4控制风格.
6.4.1行为状态
6.4.2行为领域特征
6.5非形式化的风格
6.5.1拘泥于形式的假设
6.5.2指代
6.5.3定义更方便的术语
6.6概念风格
6.6.1概念作为实体
6.6.2实体和需求进程
6.6.3标记进程
第7章模型领域和现实世界
7.1信息问题
7.2第一个例子
7.2.1问题
7.2.2从变量到模型
7.2.3关于作为模型
7.2A.更多的变量
7.3引入一个模型领域
7.3.1模型和现实世界
7.3.2现实世界领域特性
7.3.3设计模型
7.3.4维护和使用模型
7.4另一个模型例子
7.4.1问题
7.4.2一个不带模型的版本
7.4.3一个更难的版本
7.4.4一个朴素的线路模型
7.4.5一个更实际的模型
7.5模型中的控制和定义
7.5.1 C3引起c1
7.5.2 C3根据c1来定义
7.5.3 c1引起C3
7.6一些模型关注点
第8章变体框架
8.1框架和变体
8.2描述变体
8.2.1问题图
8.2.2描述领域
8.2.3变换问题描述变体
8.2.4信息问题描述变体
8.3操作者变体
8.3.1信息问题操作者变体
8.3.2命令式信息需求
8.3.3组合基本框架和变体框架
8.3.4修改默认行为
8.3.5重载默认行为
8.4连接变体
84.1带连接领域的需求式行为框架
8.4.2因果远程领域
8.4.3领域特性描述
8.4.4组合变体
8.4.5可叫牌远程领域和连接领域
8.4.6作为连接领域的文档
8.5控制变体
8.5.1一个变换问题
8.5.2其他控制变体
第9章特定的关注点
9.1框架关注点及其他
9.2溢出关注点
9.2.1当机器太快了
9.2.2针对溢出的策略
9.3初始化关注点
9.3.1机器和外部世界的初始化
9.3.2初始化和描述的跨度
9.3.3操作指令和领域描述
9.3.4通过机器的初始化
9.3.5信息问题中的初始化
9.4可靠性关注点
9.4.1评估可靠性关注点
9.4.2分离可靠性关注点
94.3通过分解解决可靠性
9.4.4信息问题中的可靠性
9.4.5诊断的困难
9.5身份关注点
9.5.1身份关注点中的接口
9.5.2一个身份模型
9.5.3模型创建和维护
9.6完整性关注点
9.6.1一种形式的完整性
9.6.2描述的跨度
9.6.3两个启发式
9.614避免死锁
9.6.5一般的观察
第10章再论分解
10.1引言
10.2包路由器问题l
10.2.1一个简单的分解
10.2.2框架关注点
10.3包路由器问题2
10.3.1静态模型中的预计算
10.3.2身份关注点
lO.3.3一些可能的自动机
10.3.4可靠性
10.3.5初始化
lO.3.6完整性
10.4分解启发式
10.4.1简单的启发式
10.4.2不同的节奏
10.4.3多于两种语气
10.4.4复杂领域或需求
10.4.5为用户或操作者建模
第1l章组合框架
1l.l引言
11.2组合问题
11.2.1公共领域
11.2.2一个非交互的组合
11.2.3共享显示领域
11.2.4命令式行为和需求式行为
11.2.5创建和使用词法领域
11.3组合关注点
11.3.1可通约的描述
11.3.2一致性
11.3.3优先级
11.3.4干扰
ll.3.5同步
第12章增长式软件开发
12.1软件开发的不成熟性
12.1.1软件质量
12.1.2灵丹妙药综合症
12.1.3成熟和熟练
12.2开发失败的风险
12.3浅层需求
12.4非功能需求
12.5外行的做法
12.6陷入复杂性中
12.7集中注意力
12.8合理看待问题框架
12.8.1不是灵丹妙药
12.8.2寻找更多的框架
12.8.3从经验中学习
附录表示法
术语表
参考文献
展开
·建立简单、清楚和易用的问题类的资料库,可以访问并重用它,得出与每个类相关的经验。
本书特点:
·分析了许多现实世界中的实例问题,讲述了怎样在实际中识别和结构化问题。
·结合各种大小问题,剥茧抽丝,展现了问题类的本质,并讨论了每个问题的不同方面。
·问题框架独立于任何特定的开发方法,所以可以很容易地将其应用到具体环境中。
“理解和使用问题框架很可能成为所有软件系统设计人员的一个基本技巧,Jackson的书提供了进入该领域的一个极佳途径。”
——David Garlan,卡内基—梅隆大学计算机科学系教授
“我认为Michael Jackson在本书中吸收了许多设计模式的精髓,并且构造了利用框架隐喻的一种更易掌握的技术。”
——Warren Keuffel,《软件开发》杂志资深编辑
在处理软件开发问题时,人们往往草率地开始考虑其解决方案。但是,软件开发问题涉及的是计算机之外的世界(即系统发挥作用的现实环境),因此必须考虑周边环境特征、关系和上下文。问题框架是分类、分析和结构化这类软件开发问题的一种工具。面向对象模式主要关注解决方案,而问题框架关注于问题本身,以便你能够清楚地、直接地理解和解决它。