图书目录

目录

第1部分引言与系统工程

第1章引言3

1.1什么是软件工程3

1.2为什么要用软件工程4

1.3软件生命周期行为5

1.3.1软件开发过程5

1.3.2软件质量保证8

1.3.3软件项目管理9

1.4面向对象的软件工程10

1.4.1面向对象的建模和设计

语言10

1.4.2面向对象的开发

过程10

1.4.3面向对象的开发

方法11

1.4.4OO会取代传统的

方法吗11

1.5软件工程和计算机科学11

小结12

深入阅读12

章节复习问题13

练习13

第2章软件过程和方法14

2.1系统开发的挑战14

2.2软件过程15

2.3瀑布模型的优势和问题16

2.4软件开发是一个险恶问题16

2.5软件过程模型17

2.5.1原型过程18

2.5.2演化过程18

2.5.3螺旋模型18

2.5.4统一过程19

2.5.5个人软件过程20

2.5.6团队软件过程24

2.5.7敏捷过程26

2.6软件开发方法30

2.6.1过程和方法的区别30

2.6.2方法的好处31

2.6.3结构化方法32

2.6.4经典的面向对象

方法32

2.7敏捷方法32

2.7.1动态系统开发

方法(DSDM)34

2.7.2Scrum35

2.7.3特征驱动的开发35

2.7.4极限编程36

2.7.5敏捷还是计划驱动36

2.8本书中的过程和方法一览37

小结41

深入阅读41

章节复习问题42

练习42

第3章系统工程43

3.1什么是系统43

3.2什么是系统工程44

3.3系统需求定义47

3.3.1识别业务需求47

3.3.2定义系统需求48

3.4系统结构设计48

3.4.1系统分解49

3.4.2需求分配51

3.4.3结构设计图52

3.4.4子系统功能和接口规

格说明55

3.5子系统开发56

3.5.1面向对象的上下文图56

3.5.2面向对象的上下文图

的用途57

3.5.3工程团队的协作58

3.6系统集成、测试和部署58

3.7系统配置管理58

小结60

深入阅读60

章节复习问题60

练习60

第2部分分析和体系结构设计

第4章获取软件需求65

4.1什么是需求获取65

4.2获取需求的重要性67

4.3获取需求的挑战67

4.4需求的类型68

4.5获取需求的步骤69

4.5.1收集信息70

4.5.2构建分析模型73

4.5.3获取需求和约束74

4.5.4需求规格标准77

4.5.5进行可行性研究77

4.5.6审查需求规格说

明书77

4.6应用敏捷原则79

4.7需求管理和工具80

小结81

深入阅读81

章节复习问题81

练习82

第5章领域建模84

5.1什么是领域建模84

5.2为什么要进行领域建模85

5.3面向对象和类图85

5.3.1外延定义和意向

定义85

5.3.2类和对象86

5.3.3对象和属性87

5.3.4关联88

5.3.5多重性和角色89

5.3.6聚合90

5.3.7继承90

5.3.8继承和多态91

5.3.9关联类91

5.4领域建模的步骤93

5.4.1收集应用领域信息94

5.4.2头脑风暴94

5.4.3对头脑风暴结果

分类95

5.4.4领域模型可视化98

5.4.5领域建模审查

清单102

5.5综合103

5.6领域建模的方针105

5.7应用敏捷原则106

5.8领域建模的工具支持107

小结108

深入阅读109

章节复习问题109

练习109

第6章架构设计111

6.1什么是架构设计111

6.2架构设计的重要性112

6.3架构设计过程112

6.3.1确定架构设计

目标113

6.3.2确定系统类型114

6.3.3应用架构样式117

6.3.4进行定制的架构

设计124

6.3.5明确子系统功能和

接口124

6.3.6审查架构设计125

6.4架构样式和包图125

6.5应用软件设计准则126

6.5.1什么是软件设计

准则127

6.5.2为改变而设计127

6.5.3关注点分离128

6.5.4信息隐藏129

6.5.5高内聚129

6.5.6低耦合129

6.5.7保持简单和直接130

6.6架构设计的方针131

6.7架构设计和设计模式131

6.8应用敏捷原则132

小结132

深入阅读132

章节复习问题133

练习133

第3部分交互式系统的建模和设计

第7章从需求获取用例137

7.1什么是参与者137

7.2什么是用例138

7.3业务过程、操作和活动138

7.4从需求获取用例的步骤140

7.4.1识别用例140

7.4.2明确用例范围146

7.4.3用例上下文可

视化147

7.4.4检查用例规约151

7.4.5将用例分配给

迭代152

7.5导出用例的方针153

7.6应用敏捷原则155

7.7用例建模的工具支持155

小结157

深入阅读157

章节复习问题157

练习158

第8章参与者系统交互建模159

8.1什么是参与者系统交互

建模159

8.2参与者系统交互建模的

重要性160

8.3参与者系统交互建模的

步骤160

8.3.1初始化一个两列

的表161

8.3.2明确参与者系统交互

的步骤161

8.3.3检查参与者系统交互

规约161

8.4明确可替换的流162

8.5使用用户界面原型163

8.6不要显示异常处理166

8.7用例的先决条件和后置

条件166

8.8包含其他用例167

8.9用其他用例继续167

8.10常见问题168

8.11应用敏捷原则170

小结170

深入阅读171

章节复习问题171

练习171

第9章对象交互建模172

9.1什么是对象交互建模172

9.2UML顺序图173

9.2.1概念和表示法173

9.2.2展示类的实例173

9.2.3顺序图说明174

9.2.4顺序图用于分析和

设计176

9.2.5正确使用表示

方法178

9.3对象交互建模的步骤179

9.3.1收集业务过程的

信息180

9.3.2识别非普通步骤180

9.3.3为非普通步骤书写

场景181

9.3.4构建场景表183

9.3.5怎么写场景183

9.3.6从场景表得到顺

序图188

9.3.7对象交互建模检查

清单194

9.4应用敏捷原则195

9.5对象交互建模的工具支持197

小结197

深入阅读197

章节复习问题197

练习198

第10章应用职责分配模式199

10.1什么是设计模式199

10.2为什么要用设计模式200

10.3情景特定模式和职责分配

模式200

10.4模式规约201

10.5控制器模式202

10.5.1激励示例202

10.5.2什么是控制器204

10.5.3应用控制器

模式204

10.5.4控制器的类型206

10.5.5跟踪记录用例

状态 206

10.5.6臃肿的控制器207

10.5.7比较不同的

设计208

10.5.8何时应用控制器

模式209

10.5.9使用控制器的

方针210

10.6专家模式210

10.6.1信息专家210

10.6.2应用专家模式211

10.6.3包含不止一个对象

的专家模式212

10.6.4何时应用专家

模式213

10.6.5使用专家模式的

方针213

10.7创建者模式213

10.7.1什么是创建者213

10.7.2应用创建者

模式214

10.7.3创建者模式的

优势215

10.7.4何时应用创建者

模式215

小结216

深入阅读216

章节复习问题216

练习217

第11章获取设计类图219

11.1什么是设计类图220

11.2设计类图的用途220

11.3获取设计类图的步骤221

11.3.1识别类221

11.3.2识别方法222

11.3.3识别属性224

11.3.4类之间的关系226

11.3.5识别关系226

11.3.6设计类图检查

清单228

11.4用包图组织类228

11.5应用敏捷原则230

11.6设计类图的工具支持231

小结231

深入阅读231

章节复习问题231

练习231

第12章用户接口设计232

12.1什么是用户接口设计232

12.2用户接口设计为什么

重要233

12.3图形用户接口组件234

12.3.1容器组件235

12.3.2输入、输出和信息

展示组件235

12.3.3使用GUI组件的

方针237

12.4用户接口设计过程237

12.4.1案例研究: 为状态

图编辑器设计用户

接口238

12.4.2识别系统主要显示

方式238

12.4.3生成布局设计

草图240

12.4.4明确交互行为242

12.4.5构建原型242

12.4.6用户评估用户接口

设计243

12.4.7用户接口设计检查

清单244

12.5设计用户支持功能245

12.6用户接口设计的方针245

12.7应用敏捷原则247

12.8用户接口设计的工具

支持247

小结248

深入阅读248

章节复习问题248

练习249

第4部分其他类型系统的建模和设计

第13章事件驱动系统的对象状态

建模253

13.1什么是对象状态建模253

13.2为什么要进行对象状态

建模254

13.3基本定义254

13.4对象状态建模的步骤255

13.4.1收集和分类状态

行为信息256

13.4.2构建领域模型来

展示上下文258

13.4.3构建状态迁移表260

13.4.4状态迁移表的

用途261

13.4.5将状态迁移表转换

为分析状态图262

13.4.6将分析状态图转换

为设计状态图264

13.4.7状态建模检查

清单265

13.5状态模式265

13.5.1约定的方法265

13.5.2什么是状态

模式266

13.5.3应用状态模式266

13.6实时系统的建模与设计269

13.6.1转换图式270

13.6.2定时状态机271

13.6.3中断处理272

13.7应用敏捷原则273

13.8对象状态建模的工具

支持274

小结274

深入阅读275

章节复习问题275

练习275

第14章转换型系统的活动建模278

14.1什么是活动建模278

14.2为什么使用活动建模279

14.3活动建模: 技术背景279

14.3.1流程图280

14.3.2佩特里网280

14.3.3数据流图281

14.4UML活动图282

14.5活动建模的步骤283

14.5.1识别活动和工

作流284

14.5.2产生一个初步活

动图286

14.5.3引入条件分支、分叉

和连接287

14.5.4精炼复杂的活动287

14.5.5活动建模审核检

查表288

14.6与其他图之间的关系288

14.7应用敏捷原则289

14.8活动建模的工具支持289

小结289

深入阅读290

章节复习问题290

练习290

第15章基于规则的系统的建模与

设计291

15.1什么是决策表292

15.2决策表的用处293

15.3系统化的决策表构造293

15.4渐进式决策表构造294

15.5检查所需的属性295

15.6决策表合并296

15.7根据决策表生成代码296

15.8应用解释器模式297

15.8.1定义业务规则

语法297

15.8.2在类图中表示

规则298

15.8.3构建解析器和变量

查找上下文299

15.8.4解释业务规则299

15.8.5动态更新规则300

15.8.6解释方法的

优点300

15.9在测试驱动开发中使用

决策表300

15.10决策树301

15.11应用敏捷原则301

小结302

深入阅读302

章节复习问题302

练习303第5部分应用情景特定模式

第16章应用模式来设计状态图

编辑器307

16.1应用模型的过程308

16.2案例研究: 状态图编

辑器310

16.3处理复杂的结构311

16.3.1表示递归的整体

部分结构311

16.3.2使用策略提供布局

选择315

16.3.3用迭代器访问复杂

的结构316

16.3.4通过访问者分析复

杂的结构317

16.3.5通过备忘录存储和

恢复对象状态320

16.4创建和构造复杂的对象321

16.4.1创建系列产品321

16.4.2构建大型的复杂

对象324

16.4.3通过享元重用

对象326

16.5图形用户界面的设计和

显示327

16.5.1跟踪编辑状态327

16.5.2响应编辑事件328

16.5.3转换接口330

16.5.4提供上下文相关的

帮助333

16.5.5使用装饰增强显示

能力335

16.6应用敏捷原则338

小结338

深入阅读338

章节复习问题339

练习339第17章应用模式来设计持久性

框架340

17.1直接访问数据库会出现的

问题340

17.2通过桥隐藏持久存储341

17.3将数据库请求封装为

命令344

17.4用远程代理隐藏网络

访问348

17.5用模板方法共享通用

代码351

17.6通过工厂方法检索不同

的对象353

17.7用原型减少类的数量355

17.8应用敏捷原则358

小结358

深入阅读358

章节复习问题358

练习358

第6部分实现和质量保证

第18章实现方面的考虑363

18.1编码标准363

18.1.1什么是编码

标准363

18.1.2为什么要建立

编码标准367

18.1.3代码审查清单367

18.1.4编码标准实施

准则367

18.2组织实现部件369

18.3根据设计生成代码370

18.3.1实现类和接口370

18.3.2从顺序图到方法

代码骨架370

18.3.3实现关联关系371

18.4给团队成员分配任务372

18.5结对编程372

18.6测试驱动开发373

18.6.1测试驱动开发的

工作流程373

18.6.2测试驱动开发的

优点375

18.6.3潜在问题375

18.7应用敏捷原则376

18.8对实现的工具支持376

小结376

深入阅读377

章节复习问题377

练习377

第19章软件质量保证379

19.1软件质量保证的益处379

19.2软件质量属性379

19.3质量测量和度量381

19.3.1质量测量和度量的

实用性382

19.3.2常规质量度量382

19.3.3对面向对象软件

重用传统度量387

19.3.4面向对象质量

度量387

19.4软件验证与确认技术389

19.4.1审查389

19.4.2走查390

19.4.3同行审查391

19.5生命周期中的验证和

确认392

19.6软件质量保证功能393

19.6.1过程和标准的

定义394

19.6.2质量管理396

19.6.3过程改进397

19.7应用敏捷原则398

19.8SQA的工具支持399

小结399

深入阅读400

章节复习问题400

练习400

第20章软件测试401

20.1什么是软件测试402

20.2为什么进行软件测试402

20.3传统的黑盒测试403

20.3.1功能性测试: 一个

例子403

20.3.2等价类划分404

20.3.3边界值分析405

20.3.4因果分析407

20.4传统的白盒测试407

20.4.1基路径测试408

20.4.2圈复杂度409

20.4.3流图测试覆盖

准则409

20.4.4测试循环410

20.4.5数据流测试411

20.4.6数据流测试的覆盖

准则412

20.4.7过程间数据流

测试412

20.5测试覆盖率413

20.6一个通用的软件测试

过程413

20.7面向对象的软件测试415

20.7.1基于用例的

测试415

20.7.2用ClassBench进行

对象状态测试416

20.7.3测试类的层次

结构418

20.7.4测试异常处理

能力419

20.8测试Web应用程序420

20.8.1Web应用程序测试

的面向对象模型420

20.8.2使用面向对象模型进

行静态分析421

20.8.3使用面向对象模型生

成测试用例421

20.8.4用httpUnit进行Web

应用程序测试422

20.9非功能性需求的测试422

20.9.1性能和压力

测试422

20.9.2安全测试423

20.9.3测试用户界面423

20.10生命周期中的软件测试424

20.11回归测试426

20.12什么时候停止

测试426

20.13应用敏捷原则427

20.14测试的工具支持427

小结427

深入阅读428

章节复习问题428

练习428

第7部分维护和配置管理

第21章软件维护433

21.1什么是软件维护433

21.2软件变化的因素434

21.3系统演化的雷曼定律434

21.4软件维护的类型435

21.5软件维护过程和活动435

21.5.1维护过程模型436

21.5.2理解程序437

21.5.3变更识别和

分析437

21.5.4配置变更控制439

21.5.5变更实施、测试和

交付440

21.6逆向工程440

21.6.1逆向工程工作流

440

21.6.2逆向工程的用途

440

21.6.3逆向工程: 案例

研究441

21.7软件再工程441

21.7.1再工程的目标441

21.7.2软件再工程的

过程442

21.7.3软件再工程: 案例

研究443

21.8软件维护的模式444

21.8.1用外观模式简化

客户端接口444

21.8.2用中介者模式简化

组件交互445

21.8.3软件维护的

模式445

21.9应用敏捷原则449

21.10软件维护的工具支持449

小结450

深入阅读450

章节复习问题450

练习450

第22章软件配置管理452

22.1软件生命周期的基准452

22.2什么是软件配置管理453

22.3为什么需要软件配置

管理454

22.4软件配置管理的功能454

22.4.1软件配置识别455

22.4.2软件配置变更

控制456

22.4.3软件配置审核457

22.4.4软件配置状态的

审计458

22.5敏捷项目中的配置管理458

22.6软件配置管理工具458

小结460

深入阅读460

章节复习问题460

练习461

第8部分项目管理和软件安全

第23章软件项目管理465

23.1项目组织466

23.1.1项目形式466

23.1.2团队结构467

23.2工作量评估方法468

23.2.1功能点方法468

23.2.2COCOMO Ⅱ模型

469

23.2.3Delphi评估方法

474

23.2.4敏捷评估474

23.3项目计划和调度476

23.3.1PERT图476

23.3.2Gantt图和人员

分配477

23.3.3敏捷规划478

23.4风险管理479

23.4.1风险识别479

23.4.2风险分析和优先级

划分480

23.4.3风险管理规划482

23.4.4风险解决和监控

482

23.5过程改进482

23.6应用敏捷原则484

23.7项目管理的工具支持484

小结485

深入阅读485

章节复习问题486

练习486

第24章软件安全488

24.1什么是软件安全489

24.2安全要求489

24.3安全软件设计原则490

24.4安全软件设计模式491

24.5软件安全的7个最佳

实践493

24.6通过攻击树进行风险

分析494

24.7生命周期中的软件安

全性494

24.7.1规划阶段的安全

495

24.7.2迭代阶段的安全

501

24.8应用敏捷原则503

24.9软件安全的工具支持504

小结504

深入阅读505

章节复习问题505

练习506

附录A个人软件过程: 估计、规划和

质量保证507

A.1PSP中的工作量估计507

A.2PSP中的软件质量保证508

A.3设计和质量508

附录BJava技术510

B.1使用数据库连接510

B.1.1什么是数据库连接

510

B.1.2设置数据源510

B.1.3从程序中访问数据库

511

B.2使用Swing512

B.2.1用JFrame创建主

窗口512

B.2.2利用布局管理器

来布局组件513

B.2.3使用动作监听器

处理按钮事件515

B.2.4实现绘图功能515

B.3使用JSP517

B.3.1什么是JSP517

B.3.2JSP工作流517

B.3.3用JSP容器安装Web

服务器518

B.3.4使用JSP518

附录C软件工具521

C.1NetBeans521

C.2使用JUnit522

C.3在NetBeans中运行

JUnit525

C.4Emma覆盖工具525

C.5Cobertura覆盖工具526

C.6使用HttpUnit测试Web

应用程序527

C.6.1配置IDE以使用

HttpUnit527

C.6.2在HttpUnit中实现

测试用例528

C.7在NetBeans中使用cvs和

Subversion529

C.7.1创建CVS远程存

储库529

C.7.2在NetBeans中安装

Subversion530

C.7.3从存储库检出文件

531

C.7.4编辑源和查看变更

533

C.7.5查看文件状态533

C.7.6比较文件版本534

C.7.7合并存储库中的

更改534

C.7.8解决冲突534

C.7.9更新本地副本534

C.7.10提交本地文件到

存储库535

C.7.11导入文件到存储库

535

附录D项目概要536

D.1汽车租赁系统536

D.2国家贸易展览服务系统536

D.3海外留学管理系统537

D.4UML类图编辑器539

D.5无线电通信模拟器540

D.6对象状态测试环境541

参考文献543