《软件工程(第2版)》以软件生存周期为主线,遵循软件开发“工程化思想”,主要讲述软件工程各个知识领域的基础内容,系统地介绍了软件工程学的概念、原理和方法,重点介绍应用技术。内容包括:软件工程的基本概念、软件过程和软件开发模型、软件需求分析、软件设计、软件编码、软件测试、软件维护、软件质量和软件工程标准化、软件项目管理等。《软件工程(第2版)》在强调基本理论体系的基础上,融入当前软件工程的最新发展和技术,深入浅出,语言简洁,注重培养实际开发能力和文档写作能力,具有较强的实用性。为方便教学和自学.每
章都附有学习目的与要求、小结及习题。《软件工程(第2版)》可作为高等院校软件工程课程的教材或教学参考书,也可作为软件工程管理者和技术人员的参考书。
软件工程是指导计算机软件开发和维护的一门工程学科,强调采用工程的概念、原理、技术和方法来开发与维护软件。软件工程的最终目的是以较少的成本获得易理解、易维护、可靠性高、符合用户需要的软件产品。软件工程主要研究一套符合软件产品开发特点的工程方法,包括软件设计与维护方法、软件工具与环境、软件工程标准与规范、软件开发技术与管理技术等。随着计算机技术的飞速发展和软件项目的复杂多样化,软件工程的理论和方法也在不断地更新和进步。根据软件工程的发展现状和教学实践的经验总结,本书对基本原理和方法更加凝练,略去过多的概念论述,在强调知识领域的重要性、完整性和衔接性的同时,更加注重理论与实际的结合,突出了统一建模语言(DML)的使用。
全书共分10章。第1章主要讲述软件、软件危机、软件工程等基本概念,简要介绍了软件开发方法和软件工具与环境。第2章讲述各种软件过程、软件生存周期等基本知识,重点讲述软件过程模型和统一建模语言(UMD)。第3章主要讲述需求分析的任务、原则和方法,重点讲述结构化分析、功能建模、数据建模和行为建模的原理和实现方法。第4章主要讲述.软件设计的基本概念和原则、概要设计和详细设计的任务和工具,以及程序设计语言的选择和软件编码准则,重点讲述了结构化设计方法和面向数据结构的设计方法。第5章主要讲述面向对象方法学的基本概念和面向对象的分析,重点讲述运用用例分析建立功能模型、运用类图建立对象模型和运用各种交互图建立动态模型的方法。第6章主要讲述面向对象设计的基本概念,重点讲述系统设计、详细设计和面向对象的编码。第7章主要讲述软件测试的基本概念,重点讲述白盒测试技术、黑盒测试技术、灰盒测试技术、面向对象的测试技术、软件测试过程、测试工具和测试文档等。第8章主要讲述软件配置和软件维护的基本概念,重点讲述版本管理和变更管理的方法、软件维护的实施方法等。第9章主要讲述软件质量、软件可靠性和复杂性、软件工程标准化和软件能力成熟度模型等基本概念,重点讲述软件质量保证体系和软件可靠性评价方法。第10章主要讲述软件项目管理的基本概念,包括风险管理、人员管理、进度管理、成本管理和文档管理等多方面内容,重点讲述软件规模估算、风险识别和评估方法及进度跟踪与控制技术等。
为方便教学,书中每章都附有学习目的与要求、小结及习题。另外还将出版与本书配套的教学辅导材料。
本书是在2006年第一版的基础上修订完成的,是作者多年来软件工程课程及相关课程的教学和实践的总结。本书适用面广,内容满足软件工程教学的基本要求,可作为高等院校软件工程课程的教材或教学参考书,也可作为软件工程管理者和技术人员的参考书。
第1章 软件工程概述
1.1 计算机漱件
1.1.1 软件的概念
1.1.2 软件的特点
1.1.3 软件的分类
1.1.4 软件的发展历程
1.1.5 软件危机及其解决危机的途径
1.2 软件工程
1.2.1 软件工程的概念
1.2.2 软件工程的基本原理和原则
1.2.3 软件工程学研究的内容
1.2.4 软件开发方法简述
1.2.5 软件工具与环境
本章小结
习题
第2章 软件过程和模型
2.1 软件过程与软件生存周期
2.1.1 软件过程
2.1.2 软件生存周期
2.2 典型软件过程模型
2.2.1 瀑布模型
2.2.2 快速原型模型
2.2.3 螺旋模型
2.2.4 增量模型
2.3面向对象的软件过程模型
2.3.1 构件复用模型
2.3.2 统一过程模型RUP
2.4 统一建模语言切VIL
2.4.1 UML的结构
2.4.2 UML建模机制
2.4.3 UML图形示例
本章小结
习题
第3章 需求分析与建模
3.1 需求分析
3.1.1 需求分析的任务和原则
3.1.2 获取需求的方法
3.1.3 需求分析的模型和方法
3.1.4 需求分析的主要过程
3.2 结构化分析方法
3.2.1 基本思想和分析过程
3.2.2 系统流程图
3.2.3 数据流图
3.2.4 数据字典
3.2.5 加工逻辑说明
3.3 功能建模
3.3.1 IDEF0模型
3.3.2 IDEF0建模方法
3.3.3 IDEF0建模步骤
3.4 数据建模与ER图
3.4.1 实体、属性与联系
3.4.2 实体.联系图
3.4.3 扩充实体联系图
3.4.4 数据建模步骤
3.5 行为建模与STD图
3.5.1 处理模型和控制模型之间的关系
3.5.2 控制流图
3.5.3 状态转换图
3.6 需求规格说明与验证
3.6.1 需求规格说明书的主要内容
3.6.2 软件需求的验证
本章小结
习题
第4章 软件设计与编码
114.1 软件设计的基苯概念和原则
4.1.1 模块化
4.1.2 抽象
4.1.3 求精
4.1.4 信息隐藏
4.1.5 体系结构
4.1.6 设计模式
4.1.7 重构
4.1.8 功能独立性
4.2 概要设计
4.2.1 概要设计的任务和过程
4.2.2 概要设计的原则
4.2.3 常见的软件体系结构
4.2.4 体系结构设计
4.2.5 数据库的概念结构设计
4.2.6 概要设计中常用的图形工具
4.3 结构化设计方法
4.3.1 数据流的类型
4.3.2 变换分析
4.3.3 事务分析
4.3.4 设计过程和原则
4.4 详细设计
4.4.1 详细设计的目标与任务
4.4.2 过程设计的常用工具
4.4.3 数据库逻辑结构设计和物理设计
4.4.4 人机界面设计
4.5 面向数据结构的设计方法
4.5.1 Jackson方法
4.5.2 Wamier方法
4.6 编码
4.6.1 选择程序设计语言
4.6.2 编码的准则
本章小结
习题
第5章 面向对象的分析与建模
5.1 面向对象方法学概述
5.1.1 面向对象方法学的概念
5.1.2 面向对象方法学的基本特点
5.1.3 面向对象的软件工程及开发模型
5.1.4 常用的面向对象的开发方法
5.2 面向对象的分析
5.2.1 面向对象分析的任务和模型
5.2.2 面向对象分析的过程
5.3用例分析建立功能模型
5.3.1 用例分析的步骤
5.3.2 确定系统边界和参与者
5.3.3 建立场景和用例
5.3.4 定义关系和建立用例图
5.3.5 用户界面草案
5.3.6 系统用例的优先级处理
5.4 建立对象模型
5.4.1 确定类与对象
5.4.2 定义属性与服务
5.4.3 定义关系和建立类图
5.5 建立动态模型
5.5.1 画顺序图
5.5.2 画协作图
5.5.3 画状态图
5.5.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 数据管理子系统设计
6.3.6 设计优化
6.4 面向对象的编码
6.4.1 程序设计语言的特点
6.4.2 程序设计语言的选择
6.4.3 编码的风格与准则
6.4 A.类的实现
6.4.5 泛化和聚合关系的实现
6.4.6 关联关系的实现
6.4.7 依赖关系的实现
……
第7章 软件测试技术
第8章 软件配置与软件维护
第9章 质量保证与软件工程标准化
第10章 软件项目管理
参考文献
(5)一致性。保持软件系统中模块、接口等各个部分在概念、定义、操作的一致性,避免产生异义和歧义。
(6)完备性。软件系统不丢失任何有效成员,保持软件功能在需求规范中的完整性。
(7)可验证性。在“自顶向下,逐步求精”的分解过程中,对所有分解得到的模块,必须易于检查、测试和评审。
1.2.3软件工程学研究的内容
从20世纪70年代软件工程学科创立以来,人们不断地总结软件工程研究的成果,形成了一门新兴的学科一软件工程学。这是一个跨学科、跨领域、范围广泛的新兴学科,是计算机软件理论研究的前沿和核心之一,是当前一个十分活跃的研究方向。
软件工程学研究的内容包含三个方面:软件工程理论、软件工程方法学、软件工程管理。
(1)软件工程理论:程序正确性证明、软件可靠性理论、成本估计模型、软件开发模型等。
(2)软件工程方法学:是研究软件开发方法的学科,包括以下三个方面:
①方法:完成软件开发各项任务的技术方法。回答“技术上如何做”的问题。
②工具:为方法的应用提供自动或半自动的软件支撑环境和软件工具。
⑨过程:为了获得高质量软件而需要执行的一系列任务的框架(开发模型)和工作步骤。回答?怎么做才能做好”的问题。
(3)软件工程管理:所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。管理技术包括:软件质量管理、软件项目管理、软件经济等。1。2.4软件开发方法简述
20世纪60年代中期爆发了众所周知的软件危机。为了克服这一危机,在1968年和1969年连续召开的两次著名的NATO会议上提出了软件工程这一术语,并在以后不断发展并完善。与此同时,软件研究人员也在不断探索新的软件开发方法,至今已形成多种软件开发方法,简要介绍如下。
1.Parnas方法
最早的软件开发方法是由D.Pamas在1972年提出的。由于当时软件在可维护性和可靠性方面存在着严重问题,因此Parnas针对这两个问题提出了以下两个原则:
(1)信息隐蔽原则。在概要设计时列出将来可能发生变化的因素,并在模块划分时将这些因素放到个别模块的内部。这样,在将来由于这些因素变化而需修改软件时,只需修改这些个别的模块,其他模块不受影响。
(2)在软件设计时应对可能发生的种种意外故障采取措施。软件是很脆弱的,很可能因为一个微小的错误而引发严重的事故,所以必须加强防范。如在分配使用设备前,应该读取设备状态字,检查设备是否正常。此外,模块之间也要加强检查,防止错误蔓延。