
扫描上方图片二维码查找系列全部教材~
✦
图书信息
✦


软件工程理论与实践
主编:李莉
副主编:刘志光,李琰
丛书名:“国家级一流本科课程”配套教材系列
定价:59.00元
印次:1-2
ISBN: 9787302679387
出版日期:2025年3月
责任编辑:龙启铭,王玉梅

内容简介
本书是国家级一流本科课程“软件工程”指定教材。本书利用知识图谱为读者构建了软件工程理论 的清晰框架,系统地介绍了软件工程的概念、原理、过程、主要方法、软件分析与设计的原则、建模工 具和技术,并以实际的软件项目——“大学生在线学习系统”为案例,贯穿每章涉及的理论知识。本书 除介绍经典和常用的软件工程思想与方法外,还引入了敏捷软件分析与设计、面向服务的方法、微服务 以及人工智能大模型下的软件工程应用新方法和新理念。本书共10章,第1章介绍了软件工程的基本概 念;第2~8章顺序介绍了软件生存周期各阶段的任务、过程、方法、工具等,并介绍软件工程新方法; 第9章介绍软件项目管理;第10章通过综合实例完整展示软件工程从分析到维护的整个理论应用过程。
读者对象
本书理论与实践结合,使读者能快速掌握软件工程的基础知识与项目管理技能,适合作为高等院校 计算机科学与技术、软件工程等专业的教材或教学参考书,也可作为有一定经验的软件开发人员的参考用书。
编辑荐语
理论与案例结合
以“大学生在线学习系统”这一完整项目案例贯穿全书。本书不仅覆盖了传统软件工程的基础知识,还引入了敏捷过程、面向服务思想、微服务、人工智能等现代软件工程的新理念、新方
法、新技术和新工具,旨在引导读者适应不断变化的软件行业。
✦
精彩试读
✦
软件工程的产生和发展
1. 软件危机
20世纪60年代末期,随着软件的规模越来越大,复杂度不断提高,软件需求量也不断增大,而当时生产作坊式的软件开发模式及技术已不能满足软件发展的需要。
软件开发过程是一种高密集度的脑力劳动,需要投入大量的人力、物力和财力;由于软件开发的模式及技术不能适应软件发展的需要,大量质量低劣的软件产品涌向市场,有的甚至在开发过程中就夭折了。国外在开发一些大型软件系统时,遇到了许多困难,有的系统最终彻底失败了;有的系统则比原计划推迟了好多年,而费用大大超过了预算;有的系统功能不符合用户的需求,也无法进行修改维护。典型的例子如下:
IBM公司的OS/360,共约100万条指令,花费了5000个人年,经费达数亿美元,而结果却令人沮丧,错误多达2000个及以上,系统根本无法正常运行。OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中做垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够摆脱淹没在泥潭中的命运……”
1967年,苏联“联盟一号”载人宇宙飞船返航时打不开降落伞(由于其软件忽略了一个小数点的错误),当进入大气层时因摩擦力太大而被烧毁,造成机毁人亡的巨大损失。
还有,可以称为20世纪世界上最精心设计,并花费了巨额投资的美国阿波罗登月飞行计划的软件,也仍然没有避免出错。例如,阿波罗8号太空飞船由于计算机软件的一个错误,丢失了存储器的一部分信息;阿波罗14号在飞行的10天中,出现了18个软件错误。
2. 软件危机的表现
软件危机,反映在软件可靠性没有保障、软件维护工作量大、费用不断上升、进度无法预测、成本增长无法控制、程序人员无限度地增加等各方面,以至于形成人们难以控制软件开发的局面。
软件危机主要表现在三方面:
(1)软件生产效率低,不能满足需要。
(2)软件设计的进度无法控制。
(3)开发费用经常超出预算。
3. 软件工程的概念形成
软件危机所造成的严重后果已使世界各国的软件产业危机四伏,面临崩溃,克服软件危机刻不容缓。
自软件可靠性学术会议举行以来,世界各国的软件工作者为克服软件危机进行了许多开创性的工作,在软件工程的理论研究和工程实践两方面都取得了长足进步,缓解了软件危机。但距离实现彻底克服软件危机这个软件工程的最终目标,任重道远,还需要软件工作者付出长期且艰苦的努力。
从“软件工程”的概念提出至今,软件工程的发展已经历了四个重要阶段:
(1)第一代软件工程阶段。20世纪60年代末出现的“软件危机”,其表现为软件生产效率低,大量质量低劣的软件涌入市场,甚至在软件开发过程中夭折,使软件产业濒临瘫痪。
为克服“软件危机”,在软件可靠性学术会议上第一次提出了“软件工程”这一术语,这标志着将软件开发纳入了工程化的轨道,基本形成了软件工程的概念、框架、技术和方法。这一阶段又称为传统的软件工程阶段。
(2)第二代软件工程阶段。20世纪80年代中期,以Smalltalk为代表的面向对象的程序设计语言相继推出,面向对象的方法与技术得到发展;从20世纪90年代起,研究的重点从程序设计语言逐渐转移到面向对象的分析与设计,进而演化为一种完整的软件开发方法和系统的技术体系。20世纪90年代以来,出现了许多面向对象的开发方法的流派,面向对象的方法逐渐成为软件开发的主流方法。所以这一阶段又称为对象工程阶段。
(3)第三代软件工程阶段。随着软件规模和复杂度的不断增大,开发人员也随之增多,开发周期也相应延长,加之软件是知识密集型的逻辑思维产品,这些都增加了软件工程管理的难度。从20世纪80年代中期开始,人们在软件开发的实践过程中认识到:提高软件生产效率并保证软件质量的关键是对“软件过程”的控制和管理能力,即对软件开发和维护的管理和支持能力。这一阶段,对软件项目管理的计划、组织、成本估算、质量保证、软件配置管理等技术与策略相继提出,并逐步形成了软件过程工程。
(4)第四代软件工程阶段。20世纪90年代至今,基于组件的开发方法取得重要进展,软件系统的开发可通过使用现存的可重用组件组装完成,而无须从头开始构造,以此达到提高效率和质量、降低成本的目的。软件重用技术及组件技术的发展,为克服软件危机提供了一条有效途径,这一阶段称为组件工程阶段。
4. 软件工程的基本原则
软件工程的基本原则是随着软件工程的发展而变化的。过去软件工程的基本原则是抽象、模块化、清晰的结构、精确的设计规格说明。但今天软件工程的基本原则已经发生了很大的变化,具体如下:
(1)必须认识软件需求的变动性,以便采取适当措施来保证产品能最好地满足用户要求。在软件设计中,通常要考虑模块化、抽象与信息隐蔽、局部化、一致性等原则。
(2)稳妥的设计方法将大大方便软件开发,以实现软件工程的目标。软件工具与环境对软件设计的支持来说,颇为重要。
(3)软件工程项目的质量与经济开销取决于对它所提出的支撑质量与效用。
(4)只有在强调对软件过程进行有效管理的情况下,才能实现有效的软件工程。
✦
精彩样章
✦
向上滑动阅览



















✦
目录
✦
向上滑动阅览
第 1 章 软件工程概述
1.1 软件和软件工程的概念
1.1.1 软件的概念和特点
1.1.2 软件工程的定义
1.2 软件工程的产生和发展
1.2.1 软件危机与软件工程
1.2.2 软件工程的基本原则
1.2.3 软件工程研究的内容
1.3 软件过程
1.3.1 软件生存周期
1.3.2 软件工程过程及产品
1.4 软件过程模型
1.4.1 瀑布模型
1.4.2 增量模型
1.4.3 螺旋模型
1.4.4 喷泉模型
1.4.5 原型模型
1.4.6 智能模型
1.5 软件开发方法
1.5.1 结构化开发方法
1.5.2 原型化开发方法
1.5.3 面向对象的开发方法
1.5.4 敏捷开发方法
章节习题
第 2 章 可行性研究
2.1 可行性研究的任务
2.2 可行性研究的过程
2.2.1 复查系统规模和目标
2.2.2 研究目前正在使用的系统
2.2.3 导出新系统的高层逻辑模型
2.2.4 重新定义问题
2.2.5 导出和评价供选择的解法
2.2.6 推荐行动方针
2.2.7 草拟开发计划
2.2.8 书写文档并提交审查
2.3 可行性研究阶段使用的工具
2.3.1 系统流程图
2.3.2 数据流图
2.3.3 数据字典
章节习题
第 3 章 需求分析
3.1 需求分析的任务
3.1.1 需求分析的任务概述
3.1.2 需求分析的任务详解
3.2 需求分析的步骤
3.2.1 具体步骤
3.2.2 具体例子
3.3 需求获取的方法
3.4 需求分析的方法
3.4.1 结构化分析
3.4.2 面向对象的需求分析
3.4.3 需求分析的新方法
章节习题
第 4 章 系统概要设计
4.1 概要设计的任务
4.2 概要设计的基本方法
4.2.1 结构化设计方法
4.2.2 面向对象设计方法
4.2.3 面向数据结构设计方法
4.3 概要设计的基本原理
4.3.1 模块化
4.3.2 抽象
4.3.3 逐步求精
4.3.4 信息隐蔽和局部化
4.3.5 模块独立性
4.4 软件结构的优化准则
章节习题
第 5 章 详细设计
5.1 详细设计的内容
5.2 详细设计工具
5.2.1 结构化详细设计工具
5.2.2 面向对象的详细设计及工具
5.3 数据库设计
5.4 人机界面设计
5.5 程序软件结构复杂性的定量度量
5.5.1 McCabe 方法
5.5.2 Halstead 方法
5.6 详细设计的原则
5.6.1 面向过程的详细设计的原则
5.6.2 面向对象设计的准则
5.7 详细设计新方法
5.7.1 面向服务的设计
5.7.2 微服务架构
5.7.3 ChatGPT 在详细设计中的应用
章节习题
第 6 章 软件编码
6.1 程序设计语言的分类
6.1.1 程序设计语言软件工程角度划分
6.1.2 程序设计语言代际划分
6.2 程序设计语言的选择
6.3 程序设计风格
章节习题
第 7 章 软件测试
7.1 软件测试概述
7.1.1 软件测试的重要性
7.1.2 软件测试的概念
7.1.3 软件测试的特点
7.1.4 软件测试的基本原则
7.1.5 软件测试模型
7.2 软件测试步骤
7.2.1 制订软件项目测试计划
7.2.2 软件测试人员管理
7.2.3 进行分阶段测试
7.2.4 软件测试过程文档管理
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.5 软件调试
7.5.1 软件调试过程
7.5.2 软件调试的困难
7.5.3 软件调试策略
7.6 自动化测试
7.6.1 自动化测试概述
7.6.2 实施自动化测试的前提条件
7.6.3 自动化测试过程
7.6.4 自动化测试的原则
7.6.5 敏捷测试
7.7 人工智能下的软件测试
章节习题
第 8 章 软件维护
8.1 软件维护概述
8.1.1 软件维护的概念
8.1.2 软件维护的特点
8.1.3 软件的可维护性
8.2 软件维护过程
8.2.1 建立维护组织
8.2.2 维护申请与实施
8.2.3 软件维护记录与文档管理
8.2.4 软件维护活动评价
8.3 用户手册的主要内容及写作要求
章节习题
第 9 章 软件项目管理
9.1 软件项目管理概述
9.1.1 软件项目管理的特点
9.1.2 软件项目管理的主要活动
9.2 软件项目风险管理
9.2.1 软件项目风险管理概述
9.2.2 风险的特性
9.2.3 风险应对策略
9.3 软件进度计划管理
9.3.1 进度计划管理概述
9.3.2 进度计划编制方法
9.3.3 进度计划控制
9.4 软件质量管理
9.4.1 软件质量
9.4.2 软件质量保证措施
9.4.3 软件能力成熟度模型
9.5 软件成本管理
9.5.1 软件成本分析
9.5.2 软件成本估算
9.5.3 软件成本控制
9.6 配置管理
9.6.1 配置管理概述
9.6.2 配置管理的组织
9.6.3 配置管理的主要活动
9.7 人力资源管理
9.7.1 软件项目人力资源的特征
9.7.2 人力资源管理的主要内容
9.7.3 人员的组织与分工
9.8 沟通管理
章节习题
第 10 章 大学生在线学习系统案例
10.1 大学生在线学习系统的可行性分析
10.2 大学生在线学习系统的需求分析
10.3 大学生在线学习系统的概要设计
10.4 大学生在线学习系统的详细设计
10.5 大学生在线学习系统的编码规范说明
10.6 大学生在线学习系统的软件测试
10.7 大学生在线学习系统的软件维护


夜雨聆风