第1章 概述 1
1.1 问题:bug 1
1.2 净室方法 3
1.3 关于本书 5
备注 7
第2章 运算函数 9
2.1 运算:状态与函数 9
2.2 函数表示法:并行处理 10
2.3 条件并行处理 12
2.4 局部变量 13
2.5 基于预期函数的规定 14
2.6 其他标记法简介 16
2.7 预期函数的编写 19
练习 23
备注 24
第3章 验证 27
3.1 结构化控制语句 27
3.2 预期函数的定位 28
3.3 替换原则 31
3.4 代码序列 33
3.5 跟踪表 35
3.6 if语句 36
3.7 条件分支跟踪表 40
练习 43
备注 44
第4章 迭代的验证 45
4.1 while语句 45
4.2 循环中止的验证 47
4.3 已初始化循环 48
4.4 为独立的循环编写预期函数 50
4.5 其他形式的不定迭代 53
练习 55
备注 57
第5章 基于预期函数的程序设计 59
5.1 Pascal程序:最长一行的长度 59
5.2 C程序:统计字符及数字的出现次数 65
5.3 Icon程序:字符串解压缩 71
5.4 抽象化的探讨:登记注册系统 76
5.5 让事情简单 81
练习 85
备注 86
第6章 验证过程的回顾 89
6.1 为什么验证必须回顾 89
6.2 净室过程中的验证回顾 90
6.3 验证回顾是如何完成的 91
6.4 示例:注册登记系统的另一个例程 93
6.5 示例:测试数据生成器例程 95
6.6 示例讨论 100
练习 102
备注 102
第7章 定迭代 105
7.1 序列上的定迭代 105
7.2 序列变量 107
7.3 其他序列表达式 110
7.4 整型值的范围 113
7.5 其他数据结构 115
7.6 迭代机制 118
7.7 程序设计中的集合与序列 123
练习 126
备注 127
第8章 数据抽象与面向对象编程 129
8.1 数据抽象与封装 129
8.2 抽象函数 132
8.3 数据不变性 134
8.4 面向对象编程 139
练习 144
备注 144
第9章 递归与函数化语言 145
9.1 递归例程 145
9.2 终止 149
9.3 相互递归 150
9.4 函数化语言 152
练习 158
备注 158
第10章 测试 159
10.1 测试的角色 159
10.2 基于使用的测试 161
10.3 测试数据生成器 162
10.4 测试的其他方式 167
练习 168
备注 168
第11章 增量开发 171
11.1 用增量的方式开发程序 171
11.2 计划与实现的过程 173
11.3 示例:排演计划 174
练习 178
备注 178
第12章 我们将走向何方 181
12.1 净室过程的其他部分 181
12.2 其他的形式方法 183
12.3 我们学会了什么 187
12.4 展望未来 190
备注 192
部分习题的提示 195
参考文献 197