书籍详情
软件工程实践导论:有关方法、设计、实现、管理之三十六计
作者:金尊和著
出版社:清华大学出版社
出版时间:2005-04-01
ISBN:9787302105763
定价:¥48.00
购买这本书可以去
内容简介
金尊和,清华大学毕业,曾师从吴澄院士从事计算机集成制造系统的研究.博士毕业后加入IBM中国研究中心从事软件和网络方面的研究和开发.2000年,加盟著名的软件工具公司RationalSoftware(现为.IBM收购),从事软件项目管理工具和建模工具的研发工作,现在金尊和博士作为JavaJDO专家组成员在IBM公司加州硅谷分部从事企业软件工程方法和流程管理方面的研发工作,并活跃子各种专业组织.为了促进广大读者与作者的交流互动,第二书店热情邀请了金尊和博士与大家一同相约在第二书店的网上论坛,http://bbs.dearbook.com.cn/viewtopic.php?t=19355大家有关于此书的任何问题可以与金博士在线交流。本书把软件工程放在一个更大的商业视角中进行考察和分析,对最新的软件工程理论从实践的角度重新检验,并提出作者独特的思考方法和新的理论。本书在形式上参照兵法三十六计,总结了软件工程实践中的一些基本原则、出发点和解决问题的思路和方法,涉及软件工程的方法论、软件设计、编程实现以及管理等四个方面。每个方面包含若干计,每一计为一个重要的方法,单独成为一个章节。本书面向专业软件开发人员、一般软件从业人员、信息产业管理人士、计算机等专业的教师和在校生以及对软件和信息产业感兴趣的任何读者,也包括希望对软件工程有一定了解或绎创造性方法论感兴趣的读者。
作者简介
金尊和金尊和,清华大学毕业,曾师从吴澄院士从事计算机集成制造系统的研究。博士毕业后加入IBM中国研究中心从事软件和网络方面的研究和开发工作。随后前往美国,先后参与和主持了卫星无线通讯系统分布式网络管理软件和嵌入式系统的开发。2000年,加盟著名的软件工具公司RationalSoftware(现为IBM收购),从事软件项目管理工具和建模工具的研发工作,在大型软件工具的研发和市场积累了丰富的经验。金尊和博士在IBM公司加州硅谷分部从事软件工程方法和流程管理方面的研发工作,并活跃于各种专业组织,是Sun公司JavaJDO专家组成员。>>更多作品
目录
绪论
0.1 历史的回顾
0.2 软件的定义
0.3 什么是软件工程?
0.4 软件工程的大环境
0.5 软件工程究竟像什么?
0.5.1 雪球理论——做软件就像滚雪球
0.5.2 软件工程控制论——软件生产过程是个离散多环控制系统
0.5.3 兵法三十六计的启示
0.6 本书的组织
方法篇
1 经济为本
1.1 投入产出的概念
1.2 经济为本的启示
1.2.1 为技术而技术是条死胡同
1.2.2 以经济原则指导软件项目的决策过程
1.2.3 按照产品规律来营销软件产品
1.2.4 以收益为依据规划设计产品
小结
2 用户为先
2.1 用户需求分析
2.2 用户友好的交互界面
2.2.1 界面设计和风格
2.2.2 界面的本地化
2.3 软件安装和部署
2.4 用户培训和技术认正
2.5 用户大会和开发人员网络
2.6 用户文档
2.7 用户支持和反馈
2.8 系统长级和版权管理
2.9 软件咨询服务
小结
3 管理需求
3.1 什么是软件需求?
3.2 了解需求
3.3 记录需求
3.4 追踪需求
3.5 在变化中管理需求
小结
4 及早集成
4.1 软件工程项目的风险
4.2 及早集成才能滚雪球
4.3 少食多餐
小结
5 连续验证
5.1 有关测试的理论
5.2 测试自动化
5.3 软件缺陷跟踪系统的概念和实际应用
5.3.1 软件缺陷的生命周期
5.3.2欲穷千里目, 更上一层楼
5.4 软件的“测不准”原理
5.5 另类的验证
小结
6 控制变化
6.1 循序渐进
6.2 同步协调
小结
7 规范流程
7.1 规范要点
7.2 CMM
7.3 Rational Unified Process
7.4 极限编程
7.5 发展方向
小结
8 快速原型
8.1 软件中的“概念车”
8.2 大行不顾细谨
8.3 走向产品
小结
9 借鸡下蛋
9.1 外包
9.2 买进
9.3 开放代码运动
小结
10 开放标准
10.1 开放的意义
10.2 开放标准的种类
10.3 支持开放标准
小结
设计篇
11 避繁就简
11.1 “不简单”的设计
11.1.1 面向履历表的设计
11.1.2 “难得糊涂”的设计
11.1.3 委员会式的设计
11.2 简单就是金钱
11.3 简单才真切不简单
11.4 关键是平衡
11.5 皇帝的新衣
小结
12 因地制宜
12.1 有没有万能钥匙?
12.2 考量的因素
12.3 软件设计中的若干对矛盾
12.4 要马儿跑又要马儿不吃草
小结
13 变中求静
13.1 变在那里?
13.2 针对变化而设计
13.2.1 数据和代码的分离
13.2.2 输入数据和配置参数的分离
13.2.3 不变的和常变的代码分离
13.3 灰色地带
13.4 XML和数据化
小结
14 分层平台
14.1 巨人的肩膀
14.2 为什么软件要分层?
14.2.1 层次提升
14.2.2 隐藏细节
14.2.3 标准互换
14.3 分层的原则
14.3.1 实现和接口分离原则
14.3.2 单向性原则
14.3.3 服务接口的粒度提升原则
14.4 典型的分层设计
14.4.1 OSI模型
14.4.2 三层应用结构
14.5 分层的网络化
14.5.1 客户/服务器计算模式
14.5.2 万维网的拓展
14.6 应用编程接口API
14.7 服务编程接口SPI
小结
15 内外有别
15.1 MVC结构
15.2 万维网应用也要内外有别吗?
15.3 模型的设计
15.4 正交化设计
小结
16 模块封装
16.1 软件芯片
16.2 静态模块的粒度
16.2.1 函数
16.2.2 文件
16.2.3 类
16.2.4 相关类集合
16.2.5 子系统
16.3 动态模块
16.3.1 构件
16.3.2 插入件
16.3.3 进程
16.3.4 可执行应用
16.3.5 企业运行环境
16.4 模块关系的分析
16.4.1 代码类关系
16.4.2 数据类关系
16.5 模块划分
16.5.1 分割的原则
16.5.2 模块间的通信
16.6 软件构件复用的理想
16.6.1 复用情形下的新问题
16.6.2 没有金刚钻, 别揽瓷器活
小结
17 合约接口
17.1 软件世界的“合同”
17.2 编程接口设计的“五项基本原则”
17.3 网络条件的新问题
17.4 从“貌合”到“神合”
17.4.1 隐含规则
17.4.2 言行一致
17.5 非编程程式接口
小结
18 面向对象
18.1 面向对象的三性
18.1.1 继承性和逻辑三段论
18.1.2 封装性
18.1.3 多态性
18.2 继承“税”
18.2.1 多包“含”
18.2.2 单重继承
18.3 面向对象的建模和UML
18.3.1 软件建模
18.3.2 建模语言
18.4 双向工程
18.5 面向对象的编程语言
小结
19 巧用模板
19.1 变模板为“魔”板
19.1.1 编程
19.1.2 代码生成
19.1.3 数据转换
19.1.4 产生文档
19.2 通用模板语言和引擎
19.2.1 Velocity
19.2.2 XSLT
19.3 模板也要正交吗?
19.3.1 模板流水线
19.3.2 模板的模块化
19.3.3 模板MVC
小结
20 能伸能缩
20.1 伸缩性要从设计抓起
20.2 结构设计的适应性
20.2.1 并行度规划
20.2.2 逻辑分层和物理分布
20.2.3 同步还是异步
20.2.4 资源的竞争和平衡
20.3 多线程安全性
20.3.1 调用函数重入
20.3.2 变量可见度
20.3.3 死锁和保护
20.4 算法可伸缩
20.4.1 算法并行的可能性
20.4.2 线性化算法的必要性
20.4.3 递归算法
小结
21 套用成解
21.1框架
21.2 面向对象方法中的设计定式
21.2.1 生成类定式
21.2.2 行为类定式
21.2.3 结构类定式
小结
22 见好就收
22.1 软件设计的使命
22.2 见好不收的误区
22.2.1 追求完美
22.2.2 画蛇添足
22.2.3 清谈误国
小结
实现篇
23 决不重复
23.1 重复是万恶之首
23.2 典型的代码重复
23.2.1 常量重复
23.2.2 变量或者属性的重复
23.2.3 代码重复
23.2.4 逻辑性重复
23.2.5 结构性重复
23.3 代码之外的重复
23.3.1 代码和数据库定义的重复
23.3.2 代码和库函数的重复
23.3.3 代码和注释的重复
23.3.4 测试说明和用户需求的重复
23.3.5 设计和代码的重复
23.3.6 代码注解和文档
小结
24 通俗易懂
24.1 写代码和写文章
24.2 代码的认知模型
24.3 误区种种
24.3.1 飞流直下三千尺, 疑是银河落九天
24.3.2 为人性僻耽佳句, 语不惊人死不休
24.3.3 千呼万唤始出来, 犹抱琵琶半遮面
24.3.4 爱上层楼, 为赋新词强说悉
24.4 入乡随俗
小结
25 精益求精
25.1 回炉改造的目的
25.2 有备才能无患
25.2.1 单元测试的概念和应用
25.2.2 谁来测试测试代码?
25.2.3 集成开发环境
25.2.4 版本控制
25.2.5 两个“动不得”
25.3 典型的回炉办法
25.3.1 去除重复
25.3.2 返朴归真
25.3.3 清理门户
25.3.4 面向侧面编程
小结
26 优化性能
26.1 多一事不如少一事
26.2 擒贼先擒王, 打蛇找七寸
26.3 优化的方法
26.3.1 算法本身
26.3.2 经典代码优化方法
26.3.3 面向对象编程语言的优化
26.3.4 并行计算
26.3.5 体系结构
26.4 也别太执著
小结
27 照猫画虎
27.1 书法临帖的启示
27.2 软件工程中的“拿来主义”
27.3 “猫”在哪里?
27.4 邯郸学步的“戒”鉴
27.5 解剖麻雀
小结
28 严堵漏洞
28.1 资源泄漏
28.1.1 内存泄漏
28.1.2 网络资源泄漏
28.1.3 其他资源泄漏
28.2 防范性编程
28.2.1 空指针检查
28.2.2 返回值检查
28.2.3 存取控制
28.2.4 想不到的命名覆盖
28.2.5 例外不例外
28.2.6 宣检
28.2.7 明知山有虎, 须要绕道行
28.3 习惯成自然
小结
29 雁过留声
29.1 版本控制概念和使用
29.1.1 有迹可循——变化的历史轨迹
29.1.2 协同工作——创建分支互不影响
29.1.3 灵活配置——创建多样性
29.2 使用版本控制工具的注意事项
29.2.1 有所选择
29.2.2 勤做备份
29.3 代码的注解
29.4 Log的使用和一般原则
小结
30 自动流程
30.1 不是选择的选择
30.2 哪些要自动化?
30.2.1 部分代码和文档生成
30.2.2 软件的编译和包装发布
30.2.3 质量测试
30.2.4 日常维护
30.3 与其他信息系统的集成
30.4 还要人的参与吗?小结
31 利器常新
31.1 常用工具
31.2 锦上添花
31.3 语言的语言
31.4 专业联络
31.5 知识库框架
小结
管理篇
32 分工协作
32.1 软件管理的特殊性
32.1.1 人的因素
32.1.2 项目
32.2 组织结构
32.2.1 外科手术队
32.2.2 导演和制片人
32.2.3 三驾马车
32.2.4 分工不分家
32.3 雪球式成长
32.4 民主和集中
小结
33 目标驱动
33.1 代码量之谜
33.2 三个臭皮匠抵上一个诸葛亮?
33.3 “聪明”五项基本原则
33.4 激励机制
33.5 人才战略
33.5.1 管理梯队和技术梯队
33.5.2 师傅和徒弟
33.5.3 培养计划
小结
34 常来常往
34.1 升级须知
34.2 沟通的重要性
34.2.1 与客户的交流
34.2.2 项目团队之间的交流
34.2.3 开发队伍内部的交流
34.3 沟通形式
34.3.1 开会
34.3.2 电子邮件
34.3.3 正式文档
34.4 技术审核
34.5 开发环境的“风水”
34.6 分布式开发团队的沟通
小结
35 有张有驰
35.1 阶段性调整
35.2 发布聚会
35.3 不妨换换口味
35.4 需要锲而不舍吗?
35.5 7+1>8
小结
36 不断总结
36.1 经验之经验
36.2 学而不思则罔, 思而不学则殆
36.3 怎么总结
36.3.1 两个基本原则
36.3.2 总结形式
36.4从实践中来再回到实践中去
小结
后记
参考文献
网络资源
附录 兵法三十六计
</font>
0.1 历史的回顾
0.2 软件的定义
0.3 什么是软件工程?
0.4 软件工程的大环境
0.5 软件工程究竟像什么?
0.5.1 雪球理论——做软件就像滚雪球
0.5.2 软件工程控制论——软件生产过程是个离散多环控制系统
0.5.3 兵法三十六计的启示
0.6 本书的组织
方法篇
1 经济为本
1.1 投入产出的概念
1.2 经济为本的启示
1.2.1 为技术而技术是条死胡同
1.2.2 以经济原则指导软件项目的决策过程
1.2.3 按照产品规律来营销软件产品
1.2.4 以收益为依据规划设计产品
小结
2 用户为先
2.1 用户需求分析
2.2 用户友好的交互界面
2.2.1 界面设计和风格
2.2.2 界面的本地化
2.3 软件安装和部署
2.4 用户培训和技术认正
2.5 用户大会和开发人员网络
2.6 用户文档
2.7 用户支持和反馈
2.8 系统长级和版权管理
2.9 软件咨询服务
小结
3 管理需求
3.1 什么是软件需求?
3.2 了解需求
3.3 记录需求
3.4 追踪需求
3.5 在变化中管理需求
小结
4 及早集成
4.1 软件工程项目的风险
4.2 及早集成才能滚雪球
4.3 少食多餐
小结
5 连续验证
5.1 有关测试的理论
5.2 测试自动化
5.3 软件缺陷跟踪系统的概念和实际应用
5.3.1 软件缺陷的生命周期
5.3.2欲穷千里目, 更上一层楼
5.4 软件的“测不准”原理
5.5 另类的验证
小结
6 控制变化
6.1 循序渐进
6.2 同步协调
小结
7 规范流程
7.1 规范要点
7.2 CMM
7.3 Rational Unified Process
7.4 极限编程
7.5 发展方向
小结
8 快速原型
8.1 软件中的“概念车”
8.2 大行不顾细谨
8.3 走向产品
小结
9 借鸡下蛋
9.1 外包
9.2 买进
9.3 开放代码运动
小结
10 开放标准
10.1 开放的意义
10.2 开放标准的种类
10.3 支持开放标准
小结
设计篇
11 避繁就简
11.1 “不简单”的设计
11.1.1 面向履历表的设计
11.1.2 “难得糊涂”的设计
11.1.3 委员会式的设计
11.2 简单就是金钱
11.3 简单才真切不简单
11.4 关键是平衡
11.5 皇帝的新衣
小结
12 因地制宜
12.1 有没有万能钥匙?
12.2 考量的因素
12.3 软件设计中的若干对矛盾
12.4 要马儿跑又要马儿不吃草
小结
13 变中求静
13.1 变在那里?
13.2 针对变化而设计
13.2.1 数据和代码的分离
13.2.2 输入数据和配置参数的分离
13.2.3 不变的和常变的代码分离
13.3 灰色地带
13.4 XML和数据化
小结
14 分层平台
14.1 巨人的肩膀
14.2 为什么软件要分层?
14.2.1 层次提升
14.2.2 隐藏细节
14.2.3 标准互换
14.3 分层的原则
14.3.1 实现和接口分离原则
14.3.2 单向性原则
14.3.3 服务接口的粒度提升原则
14.4 典型的分层设计
14.4.1 OSI模型
14.4.2 三层应用结构
14.5 分层的网络化
14.5.1 客户/服务器计算模式
14.5.2 万维网的拓展
14.6 应用编程接口API
14.7 服务编程接口SPI
小结
15 内外有别
15.1 MVC结构
15.2 万维网应用也要内外有别吗?
15.3 模型的设计
15.4 正交化设计
小结
16 模块封装
16.1 软件芯片
16.2 静态模块的粒度
16.2.1 函数
16.2.2 文件
16.2.3 类
16.2.4 相关类集合
16.2.5 子系统
16.3 动态模块
16.3.1 构件
16.3.2 插入件
16.3.3 进程
16.3.4 可执行应用
16.3.5 企业运行环境
16.4 模块关系的分析
16.4.1 代码类关系
16.4.2 数据类关系
16.5 模块划分
16.5.1 分割的原则
16.5.2 模块间的通信
16.6 软件构件复用的理想
16.6.1 复用情形下的新问题
16.6.2 没有金刚钻, 别揽瓷器活
小结
17 合约接口
17.1 软件世界的“合同”
17.2 编程接口设计的“五项基本原则”
17.3 网络条件的新问题
17.4 从“貌合”到“神合”
17.4.1 隐含规则
17.4.2 言行一致
17.5 非编程程式接口
小结
18 面向对象
18.1 面向对象的三性
18.1.1 继承性和逻辑三段论
18.1.2 封装性
18.1.3 多态性
18.2 继承“税”
18.2.1 多包“含”
18.2.2 单重继承
18.3 面向对象的建模和UML
18.3.1 软件建模
18.3.2 建模语言
18.4 双向工程
18.5 面向对象的编程语言
小结
19 巧用模板
19.1 变模板为“魔”板
19.1.1 编程
19.1.2 代码生成
19.1.3 数据转换
19.1.4 产生文档
19.2 通用模板语言和引擎
19.2.1 Velocity
19.2.2 XSLT
19.3 模板也要正交吗?
19.3.1 模板流水线
19.3.2 模板的模块化
19.3.3 模板MVC
小结
20 能伸能缩
20.1 伸缩性要从设计抓起
20.2 结构设计的适应性
20.2.1 并行度规划
20.2.2 逻辑分层和物理分布
20.2.3 同步还是异步
20.2.4 资源的竞争和平衡
20.3 多线程安全性
20.3.1 调用函数重入
20.3.2 变量可见度
20.3.3 死锁和保护
20.4 算法可伸缩
20.4.1 算法并行的可能性
20.4.2 线性化算法的必要性
20.4.3 递归算法
小结
21 套用成解
21.1框架
21.2 面向对象方法中的设计定式
21.2.1 生成类定式
21.2.2 行为类定式
21.2.3 结构类定式
小结
22 见好就收
22.1 软件设计的使命
22.2 见好不收的误区
22.2.1 追求完美
22.2.2 画蛇添足
22.2.3 清谈误国
小结
实现篇
23 决不重复
23.1 重复是万恶之首
23.2 典型的代码重复
23.2.1 常量重复
23.2.2 变量或者属性的重复
23.2.3 代码重复
23.2.4 逻辑性重复
23.2.5 结构性重复
23.3 代码之外的重复
23.3.1 代码和数据库定义的重复
23.3.2 代码和库函数的重复
23.3.3 代码和注释的重复
23.3.4 测试说明和用户需求的重复
23.3.5 设计和代码的重复
23.3.6 代码注解和文档
小结
24 通俗易懂
24.1 写代码和写文章
24.2 代码的认知模型
24.3 误区种种
24.3.1 飞流直下三千尺, 疑是银河落九天
24.3.2 为人性僻耽佳句, 语不惊人死不休
24.3.3 千呼万唤始出来, 犹抱琵琶半遮面
24.3.4 爱上层楼, 为赋新词强说悉
24.4 入乡随俗
小结
25 精益求精
25.1 回炉改造的目的
25.2 有备才能无患
25.2.1 单元测试的概念和应用
25.2.2 谁来测试测试代码?
25.2.3 集成开发环境
25.2.4 版本控制
25.2.5 两个“动不得”
25.3 典型的回炉办法
25.3.1 去除重复
25.3.2 返朴归真
25.3.3 清理门户
25.3.4 面向侧面编程
小结
26 优化性能
26.1 多一事不如少一事
26.2 擒贼先擒王, 打蛇找七寸
26.3 优化的方法
26.3.1 算法本身
26.3.2 经典代码优化方法
26.3.3 面向对象编程语言的优化
26.3.4 并行计算
26.3.5 体系结构
26.4 也别太执著
小结
27 照猫画虎
27.1 书法临帖的启示
27.2 软件工程中的“拿来主义”
27.3 “猫”在哪里?
27.4 邯郸学步的“戒”鉴
27.5 解剖麻雀
小结
28 严堵漏洞
28.1 资源泄漏
28.1.1 内存泄漏
28.1.2 网络资源泄漏
28.1.3 其他资源泄漏
28.2 防范性编程
28.2.1 空指针检查
28.2.2 返回值检查
28.2.3 存取控制
28.2.4 想不到的命名覆盖
28.2.5 例外不例外
28.2.6 宣检
28.2.7 明知山有虎, 须要绕道行
28.3 习惯成自然
小结
29 雁过留声
29.1 版本控制概念和使用
29.1.1 有迹可循——变化的历史轨迹
29.1.2 协同工作——创建分支互不影响
29.1.3 灵活配置——创建多样性
29.2 使用版本控制工具的注意事项
29.2.1 有所选择
29.2.2 勤做备份
29.3 代码的注解
29.4 Log的使用和一般原则
小结
30 自动流程
30.1 不是选择的选择
30.2 哪些要自动化?
30.2.1 部分代码和文档生成
30.2.2 软件的编译和包装发布
30.2.3 质量测试
30.2.4 日常维护
30.3 与其他信息系统的集成
30.4 还要人的参与吗?小结
31 利器常新
31.1 常用工具
31.2 锦上添花
31.3 语言的语言
31.4 专业联络
31.5 知识库框架
小结
管理篇
32 分工协作
32.1 软件管理的特殊性
32.1.1 人的因素
32.1.2 项目
32.2 组织结构
32.2.1 外科手术队
32.2.2 导演和制片人
32.2.3 三驾马车
32.2.4 分工不分家
32.3 雪球式成长
32.4 民主和集中
小结
33 目标驱动
33.1 代码量之谜
33.2 三个臭皮匠抵上一个诸葛亮?
33.3 “聪明”五项基本原则
33.4 激励机制
33.5 人才战略
33.5.1 管理梯队和技术梯队
33.5.2 师傅和徒弟
33.5.3 培养计划
小结
34 常来常往
34.1 升级须知
34.2 沟通的重要性
34.2.1 与客户的交流
34.2.2 项目团队之间的交流
34.2.3 开发队伍内部的交流
34.3 沟通形式
34.3.1 开会
34.3.2 电子邮件
34.3.3 正式文档
34.4 技术审核
34.5 开发环境的“风水”
34.6 分布式开发团队的沟通
小结
35 有张有驰
35.1 阶段性调整
35.2 发布聚会
35.3 不妨换换口味
35.4 需要锲而不舍吗?
35.5 7+1>8
小结
36 不断总结
36.1 经验之经验
36.2 学而不思则罔, 思而不学则殆
36.3 怎么总结
36.3.1 两个基本原则
36.3.2 总结形式
36.4从实践中来再回到实践中去
小结
后记
参考文献
网络资源
附录 兵法三十六计
</font>
猜您喜欢