软件工程
2009-3
史济民、顾春华、 郑红 高等教育出版社 (2009-03出版)
史济民,顾春华,郑红 著
372
本书第2版自2002年12月首印,迄今已5年有半了。许多高等院校的计算机专业和软件学院相关专业采用该版书作为本科生“软件工程”课程的教材。为了更好地满足读者需要,我们决定编写第.3版,并确定了如下的编写方针:一、继续保持“注重实践”的风格软件工程具有很强的实践性,但早期的软件工程教材往往偏重于理论,介绍原理有余,联系应用不足。由于缺乏可供借鉴的示例,使读者在具体开发时常有不知从何处入手的感觉。本书取名《软件工程——原理、方法与应用》,就是希望从“应用”出发,兼顾“原理”与“方法”两个方面:讲解方法时精选例题,方便模仿:上升到原理时提纲挈领,画龙点睛。目的是让读者一方面掌握软件工程的常用方法及其具体操作,另一方面又提升到以原理为指导,不致被具体方法中繁琐的细节所淹没。从本书第1版起,编者就参照国际知名教材《软件工程:实践者的方法》(Pressman著)的做法,广举例题,注重实践,因而取得第1版连续发行12年近12万册,第2版在5年半中重印12次、累计发行14.1万册的好成绩。本版保持了上述风格,力求使之名副其实地成为理论结合实际、注重能力培养的实践型教材。
《软件工程:原理方法与应用》结构合理、文字通俗、例题丰富、可读性强,主要面向计算机及相关专业本科生,亦可供软件开发人员作为参考。作为一本注重能力培养的实践型教材,第3版继承并保持了“注重实践”的风格,将全书分编为绪论和上、中、下3篇,共14章。内容分别为:上篇为传统软件工程,包括软件生存周期与软件过程、结构化分析与设计;中篇为面向对象软件工程,包括面向对象与UML、需求工程与需求分析、面向对象分析、面向对象设计、编码与测试;下篇为软件工程的近期进展、管理与环境,包括软件维护、软件复用、软件工程管理、软件质量管理、软件工程环境、软件工程高级课题。与第2版相比,本版将“并行介绍传统的和面向对象的软件工程”改变为“重点介绍面向对象的软件工程”,并在“面向对象分析”和“面向对象设计”两章分别给出案例;通过“软件工程高级课题”,对Web工程及基于体系结构的软件开发等热门课题集中进行了简要的讲解。
史济民,教授,毕业于上海交通大学电机工程系,在原成都科技大学历任教研室主任、副教授和教授,现为华东理工大学计算中心顾问、全国高校计算机基础教育研究会荣誉副会长。长期从事计算机软件的教学与研究。近20年来先后编写高校计算机教材近30种,发行逾300万册,有6种教材获得教育部或上海市普通高校优秀教材一、二等奖等奖励,其中《软件工程——原理、方法与应用》(第1、2版)在17年内发行量近30万册。
第1章 绪论1.1 软件和软件危机1.1.1 软件的定义1.1.2 软件的特征1.1.3 软件危机1.2 软件工程学的范畴1.2.1 软件开发方法学1.2.2 软件工具1.2.3 软件工程环境1.2.4 软件工程管理1.3 软件工程的发展1.3.1 3种编程范型1.3.2 3代软件工程1.4 软件工程的应用1.4.1 在各种规模软件开发中的应用1.4.2 软件工程的成就与发展展望1.5 软件工程的教学:本书导读小结习题上篇 传统软件工程第2章 软件生存周期与软件过程2.1 软件生存周期2.1.1 软件生存周期的主要活动2.1.2 生存周期与软件过程的关系2.2 传统的软件过程2.2.1 瀑布模型2.2.2 快速原型模型2.3 软件演化模型2.3.1 增量模型2.3.2 螺旋模型2.3.3 构件集成模型2.4 形式化方法模型2.4.1 转换模型2.4.2 净室模型2.5 统一过程和敏捷过程2.5.1 统一过程2.5.2 敏捷过程2.5.3 极限编程2.6 软件可行性研究2.6.1 可行性研究的内容与步骤2.6.2 软件风险分析2.6.3 项目实施计划小结习题第3章 结构化分析与设计3.1 概述3.1.1 结构化分析与设计的由来3.1.2 SA模型的组成与描述3.1.3 SD模型的组成与描述3.2 结构化系统分析3.2.1 画分层数据流图3.2.2 确定数据定义与加工策略3.2.3 需求分析的复审3.3 结构化系统设计3.3.1 SD概述3.3.2 SD的步骤:从DFD图到SC图3.3.3 变换映射3.3.4 事务映射3.3.5 优化初始SC图的指导规则3.3.6 教材购销系统的总体结构3.4 模块设计3.4.1 目的与任务3.4.2 模块设计的原则与方法3.4.3 常用的表达工具小结习题中篇 面向对象软件工程第4章 面向对象与uML4.1 面向对象概述4.1.1 对象和类4.1.2 面向对象的基本特征4.1.3 面向对象开发的优点4.2 uML简介4.2.1 UML的组成4.2.2 UML的特点4.2.3 UML的应用4.3 静态建模4.3.1 用例图与用例模型4.3.2 类图和对象图4.3.3 包4.4 动态建模4.4.1 消息4.4.2 状态图4.4.3 时序图和协作图4.4.4 活动图4.5 物理架构建模4.5.1 物理架构4.5.2 构件图和部署图4.6 UML工具4.6.1 RationalRose4.6.2 StarUML小结习题第5章 需求工程与需求分析5.1 软件需求工程5.1.1 软件需求的定义5.1.2 软件需求的特性5.1.3 需求工程的由来5.2 需求分析与建模5.2.1 需求分析的步骤5.2.2 需求分析是迭代过程5.3 需求获取的常用方法5.3.1 常规的需求获取方法5.3.2 用快速原型法获取需求5.4 需求模型5.4.1 需求模型概述5.4.2 面向对象的需求建模5.5 软件需求描述5.6 需求管理5.6.1 需求管理的内容5.6.2 需求变更控制5.6.3 需求管理工具5.7 需求建模示例5.7.1 问题陈述5.7.2 用例模型5.7.3 补充规约5.7.4 术语表小结习题第6章 面向对象分析6.1 软件分析概述6.1.1 面向对象软件分析6.1.2 面向对象分析模型6.2 面向对象分析建模6.2.1 识别与确定分析类6.2.2 建立对象-行为模型6.2.3 建立对象-关系模型6.3 面向对象分析示例6.3.1 注册6.3.2 维护个人信息6.3.3 维护购物车6.3.4 生成订单6.3.5 管理订单小结习题第7章 面向对象设计7.1 软件设计概述7.1.1 软件设计的概念7.1.2 软件设计的任务7.1.3 模块化设计7.2 面向对象设计建模7.2.1 面向对象设计模型7.2.2 面向对象设计的任务7.2.3 模式的应用7.3 系统架构设计7.3.1 系统高层结构设计7.3.2 确定设计元素7.3.3 任务管理策略7.3.4 分布式实现机制7.3.5 数据存储设计7.3.6 人机交互设计7.4 系统元素设计7.4.1 子系统设计7.4.2 分包设计7.4.3 类/对象设计7.5 面向对象设计示例7.5.1 关联关系的具体化7.5.2 网上购物系统的架构设计7.5.3 网上购物系统的类/对象设计小结习题第8章 编码与测试8.1 编码概述8.1.1 编码的目的8.1.2 编码的风格8.2 编码语言与编码工具8.2.1 编码语言的发展8.2.2 常用的编程语言8.2.3 编码语言的选择8.2.4 编码工具8.3 编码示例8.3.1 注册功能编码实现8.3.2 维护购物车功能编码实现8.4 测试的基誉概念8.4.1 目的与任务8.4.2 测试的特性8.4.3 测试的种类8.4.4 测试的文档8.4.5 软件测试过程8.5 黑盒测试和白盒测试8.5.1 黑盒测试8.5.2 白盒测试8.6 测试用例设计8.6.1 黑盒测试用例设计8.6.2 白盒测试用例设计8.7 多模块程序的测试策略8.7.1 测试的层次性8.7.2 单元测试8.7.3 集成测试8.7.4 确认测试8.7.5 系统测试8.7.6 终止测试的标准8.8 面向对象系统的测试8.8.1 OO软件的测试策略8.8.2 OO软件测试用例设计小结习题下篇 软件工程的近期进展、管理与环境第9章 软件维护9.1 软件维护的种类9.2 软件可维护性9.3 软件维护的实施9.4 软件维护的管理9.5 软件配置管理9.6 软件再工程小结习题第10章 软件复用10.1 软件复用的基本概念10.1.1 软件复用的定义10.1.2 软件复用的措施10.1.3 软件复用的粒度10.2 领域工程10.2.1 横向复用和纵向复用10.2.2 实施领域分析10.2.3 开发可复用构件10.2.4 建立可复用构件库10.3 基于构件的软件开发10.3.1 构件集成模型10.3.2 应用系统工程10.4 面向对象与软件复用10.4.1 OO方法对软件复用的支持10.4.2 复用技术对OO方法的支持10.4.3 基于构件软件开发的现状与问题小结习题第11章 软件工程管理11.1 管理的目的与内容11.2 软件估算模型11.2.1 资源估算模型11.2.2 COCOMO模型11.3 软件成本估计11.4 人员的分配与组织11.5 项目进度安排小结习题第12章 软件质量管理12.1 从质量保证到质量认证12.2 质量保证……第13章 软件工程环境第14章 软件工程高级课题附录 缩略语中英文对照表主要参考文献
插图:2.细化阶段识别出剩余的大多数用例。对当前迭代的每个用例进行细化,分析用例的处理流程、状态细节以及可能发生的状态变化。细化流程时,可以使用程序框图和协作图,还可以使用活动图、类图分析用例对风险的处理。这一阶段主要应完成以下工作:进行需求风险分析。考虑项目的目标是否偏离了用户的需求。为了解决需求风险要充分了解用户需求以及各需求的优先级,还应尽量列出所有的用例,并要建立领域的概念模型。进行技术风险分析。通过建立原型等方法,考察所选的技术方案是否可行。进行技能风险分析。考虑实施项目的人员素质能否胜任项目的要求。进行政策风险分析。考虑政策性因素对项目的影响。进行高层分析和设计,并作出结构性决策。产生简要体系结构,包括用例列表、领域概念模型和技术平台等。在以后的阶段中对细化阶段所建立的体系结构不能进行过大的变动。为构造阶段制定计划。3.构造阶段识别出剩余的用例。每一次迭代开发都是针对用例进行分析、设计、编码、测试和集成的过程,所得到的产品是满足项目需求的一个子集。由于细化阶段的软件设计已经完成,这样各项目组可以并行开发。在代码完成后,要保证其符合标准和设计规则,并要进行质量检查。对于新出现的变化,要通过逆向工具把代码转换为模型,对模型进行修改,再重新生成代码,以保证软件与模型同步。
《软件工程:原理、方法与应用(第3版)》:从“应用”出发,兼顾“原理”与“方法”,在讲解方法时精选例题,以便读者理解;当升华到原理时提纲挈领,画龙点睛。重点介绍面向对象的软件工程,同时对基于构件的软件工程进行简单的对比和介绍。加强实践环节,以案例为先行和归宿。加强对部分新技术的介绍,反映Web软件工程等新进展。