教育>本科研究生>计算机类
基于案例的软件构造教程(第2版)  

基于案例的软件构造教程(第2版)  "

作者:李劲华,陈宇,周强
ISBN:9787121446528
定价:¥65.0
字数:544千字
页数:316
出版时间:2022-12
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书以一个案例的演变模拟不断变化的用户需求,按照增量迭代的开发模式,将碎片化的功能开发、用户交互、数据处理等知识,以及软件设计、软件测试及敏捷开发的最佳实践,与软件开发的原理、技术和工具融合到设计、编码、调试及测试的构造过程。内容包括软件构造的一般原理(如依赖倒转原则、增量迭代)、常用技术(如表驱动编程、测试驱动开发)、软件设计(契约式设计、设计模式)、软件知识(如软件测试、软件复用)及软件构造的工作要素(如编码规范、构造工具)和活动(如设计、编码、调试、测试、交付)。本书提供配套的电子课件、案例源程序、例子代码、教学参考方案等。

前言

第2版前言 在数字经济时代,软件在经济、社会、生活中的作用愈加重要。梅宏院士在“软件定义一切”的演讲中认为:万物皆可互联、一切均可编程。无论是基础软件、行业软件、工业软件、平台软件,还是嵌入式软件,无论是SaaS(软件即服务)、小程序、Web应用,还是传统的桌面软件,程序构造都是开发软件的基础。 本书第1版于2016年首次出版,已经印刷了15次,入选2020 年山东省普通高等教育一流教材。感谢全国各类院校师生使用本书以及提出宝贵的意见和建议。结合我们的研究和教学,第2版保留了教材的内容、结构和编写风格,更正了错误,润色了全书,更新、增补、完善了部分内容,主要修订如下。 (1)新增了技术文档的内容,以适应“实用软件工程”等课程。第1章引入,第2章开始讲解如何针对案例构造增量编写相关文档,包括每章给出案例构造的主要类结构图,在最后一章提供了案例的所有文档。 (2)新增了代码管理与工具。第1章简述了代码管理与工具,后续章节按需逐步讲解并应用在案例构造中,建议读者学习和使用。 (3)新增了课程思政内容。根据教材内容在每章的“讨论与提高”中增加了阅读和思考的思政材料,旨在培养学生的家国情怀、创新能力、工匠精神和批判性思维。教师可以根据社会和专业发展补充更新。 (4)新增了软件工具和程序库。用Git管理并在CODING DevOps上托管案例代码,用EclEmma统计测试的代码覆盖率,用Spire.Doc for Java完成编码生成Word文档的构造任务。 (5)重构了案例实现。把类Exercise中对练习文件的操作移动到第4章的类Practice;第5章的例子和案例代码增加了实现菜单动作的两种技术:①普通方式,在菜单类或功能类中实现菜单选项的操作;②表驱动编程,用Java反射机制实现菜单动作;更正了例6.1的代码,使其显示借书单中的书籍价格;在第7章添加了对GUI(图形用户界面)设计及代码的重构;第9章,把构造任务11和12集成到GUI版本。 实现案例的JDK(Java Development Kit)8、测试工具JUnit 4和GUI界面工具WindowBuilder等没有更新至最新版本。基本考虑是,本书的重点是传授软件构造的专业知识和能力,而非编程语言和工具的使用。使用者可按需采用最新的Java语言和工具版本,在实现本书案例代码时,不同版本工具的使用方法差异不大。 在第2版教材中,陈宇编写了课程思政、代码管理、技术文档的内容,制作了相关的短视频;李劲华完成了其他修改,并进行了全书校审。 本书至今还是软件工程知识领域“软件构造”为数不多的教材。案例驱动课程、按需学习知识、构造提升能力,特别适合应用型高校的软件工程专业使用,也可供其他专业的读者学习编码技术。作者团队倾力打造的在线课程在中国大学MOOC(https://www.icourse163.org/course/QDU- 1206501801)上发布,包含讲课视频、单元测试、考试题库、教学方案等教学资源,以此为基础的线上线下混合课程入选山东省一流本科课程。欢迎师生使用、共学共进,提出意见和建议。 本书在编写和使用过程中得到了有关校院和电子工业出版社的大力支持,在此表示感谢! 本书内容谨代表作者们对软件构造的理解与教学探索。由于才疏学浅、时间仓促,难免存在疏漏和谬误,欢迎读者批评指正。相关问题可反馈给出版社(wangxq@phei.com.cn)或作者(E-mail:qduli@126.com,QQ:1487220149)。 作 者 2022年12月

目录

目 录 第1章 软件开发概述 1 1.1 程序与软件 1 1.1.1 从程序到软件 1 1.1.2 软件类型 2 1.1.3 程序设计与软件开发 2 1.2 软件生存周期 4 1.2.1 使用角度的软件生存周期 4 1.2.2 开发角度的软件生存周期 4 1.3 软件开发过程 6 1.3.1 瀑布式开发过程 7 1.3.2 增量开发过程 7 1.3.3 个体软件过程 8 1.4 敏捷开发 9 1.4.1 概述 10 1.4.2 Scrum方法 12 1.5 软件构造 13 1.5.1 有关概念 13 1.5.2 构造与开发过程 14 1.5.3 主要内容 14 1.5.4 软件构造的重要性 15 1.6 为什么不直接编写软件 15 1.6.1 软件开发语言 16 1.6.2 编程工具与集成化开发环境 18 1.6.3 软件运行环境 19 1.6.4 软件开发的最佳实践 19 1.6.5 开发过程与管理 22 1.7 案例导读 22 1.8 讨论与提高 24 1.8.1 案例的文档管理 24 1.8.2 课程思政 25 1.9 思考与练习题 25 第2章 模块化软件构造 27 2.1 分解与模块化 28 2.1.1 分解 28 2.1.2 模块化 29 2.2 数据结构与算法 30 2.2.1 数据结构与算法的关系 31 2.2.2 选择与设计数据结构 32 2.2.3 选择与设计算法 35 2.3 模块化设计理论初步 37 2.3.1 模块化原则 37 2.3.2 模块的内聚性 37 2.3.3 模块的耦合性 38 2.4 测试程序 40 2.4.1 测试需求 41 2.4.2 测试设计与测试用例 42 2.4.3 测试覆盖与黑盒测试 43 2.5 调试程序 48 2.5.1 缺陷的相关术语 48 2.5.2 调试基础 48 2.6 案例分析与实践 49 2.6.1 案例程序的初始构造 49 2.6.2 无相同算式的基础构造 51 2.6.3 编程实现测试 54 2.6.4 创建代码仓库 57 2.7 讨论与提高 57 2.7.1 软件质量 57 2.7.2 软件测试的其他观点 58 2.7.3 编程风格 59 2.7.4 撰写软件需求说明书 60 2.7.5 课程思政 61 2.8 思考与练习题 61 第3章 面向对象的软件构造 63 3.1 抽象与封装 63 3.1.1 模块产生与合成 63 3.1.2 抽象与封装 64 3.1.3 抽象数据类型 65 3.2 认识面向对象 67 3.2.1 软件设计 67 3.2.2 设计类 67 3.2.3 设计操作 68 3.2.4 分类 69 3.3 面向对象的设计 70 3.3.1 面向对象的设计符号 70 3.3.2 案例设计一 71 3.3.3 案例设计二 75 3.4 调试的基本技术 82 3.4.1 单步调试源程序 83 3.4.2 检查或更改变量的值 84 3.4.3 设置监视点观察变量 84 3.4.4 上下移动调用栈 84 3.5 软件的自动化测试 85 3.5.1 初识JUnit 85 3.5.2 编写JUnit测试代码 87 3.6 案例分析与实践 89 3.6.1 分析 89 3.6.2 构造 89 3.6.3 代码托管 92 3.7 讨论与提高 93 3.7.1 进一步认识调试 93 3.7.2 设计原则与设计模式 93 3.7.3 面向对象的设计原则 95 3.7.4 课程思政 98 3.8 思考与练习题 98 第4章 数据处理的软件构造 102 4.1 数据及其持久性 103 4.2 文件与输入/输出流 104 4.2.1 文件 104 4.2.2 输入/输出流 105 4.2.3 数据序列化 106 4.2.4 CSV格式的文本文件 107 4.3 编写健壮的程序 107 4.3.1 防御性编程 108 4.3.2 使用断言 111 4.4 字符串处理与正则表达式 112 4.5 持久使用程序中的数据集 115 4.5.1 算式基 115 4.5.2 表驱动编程 116 4.6 基于程序结构的测试 118 4.6.1 语句覆盖测试 118 4.6.2 程序控制测试 119 4.6.3 逻辑覆盖测试 120 4.6.4 路径覆盖测试 121 4.7 运用JUnit 123 4.7.1 异常测试 123 4.7.2 参数化测试 124 4.7.3 测试套件 125 4.7.4 JUnit断言 126 4.7.5 JUnit使用指南 126 4.8 案例分析与实践 126 4.8.1 批量生成100以内算式 128 4.8.2 构造并应用算式基 130 4.8.3 批改练习并存储 132 4.8.4 管理测试 134 4.9 讨论与提高 134 4.9.1 应用表驱动编程 134 4.9.2 使用文件还是数据库 136 4.9.3 契约式编程 136 4.9.4 撰写设计文档 136 4.9.5 课程思政 137 4.10 思考与练习题 137 第5章 用户交互的软件构造 140 5.1 程序及其功能的使用 141 5.1.1 程序的两个观察视角 141 5.1.2 多个功能程序的整合 141 5.1.3 多个功能的组织与呈现 142 5.1.4 基于菜单式功能选择的用户交互 143 5.2 用户交互概述 148 5.2.1 基本概念 148 5.2.2 交互设备 148 5.2.3 交互风格 148 5.2.4 交互界面 149 5.2.5 交互设计的原则 150 5.3 用户交互的开发 151 5.3.1 交互设计的基本过程 151 5.3.2 快速原型法 152 5.4 静态测试 153 5.4.1 程序的可用性与静态测试 153 5.4.2 基本的静态测试 153 5.4.3 检查表 155 5.4.4 静态程序分析 155 5.4.5 代码覆盖率与工具 156 5.5 软件集成与测试 157 5.5.1 驱动模块和桩模块 158 5.5.2 集成策略 159 5.5.3 回归测试 160 5.5.4 集成测试与策略 160 5.6 案例分析与实践 162 5.6.1 分析与设计 162 5.6.2 案例的菜单式用户交互的构造 163 5.6.3 循环语句的路径测试 170 5.7 讨论与提高 170 5.7.1 软件建模 170 5.7.2 基于模型的测试 172 5.7.3 执行函数名符号串的表驱动编程 174 5.7.4 持续集成 175 5.7.5 测试报告的撰写 176 5.7.6 课程思政 176 5.8 思考与练习题 176 第6章 软件重构与交付 178 6.1 代码重构 178 6.1.1 代码重构的案例研究 178 6.1.2 代码重构概述 189 6.2 软件交付 190 6.2.1 构建与打包 190 6.2.2 实现构建自动化的工具 191 6.2.3 Java程序的打包与交付 193 6.3 案例分析与实践 196 6.3.1 代码重构的案例分析 196 6.3.2 代码重构实践 197 6.3.3 提交案例程序 198 6.4 讨论与提高 199 6.4.1 测试层次 199 6.4.2 测试驱动开发 200 6.4.3 软件交付及其发展 207 6.4.4 撰写用户手册 207 6.4.5 课程思政 207 6.5 思考与练习题 207 第7章 GUI软件构造 210 7.1 GUI简介 210 7.1.1 Java GUI发展轨迹 210 7.1.2 Java GUI的构造工具 210 7.2 GUI的基本元素与设计规范 211 7.2.1 GUI的基本元素 212 7.2.2 GUI基本设计规范 215 7.3 Java GUI设计模式 215 7.3.1 观察者模式 216 7.3.2 MVC模式 218 7.4 事件驱动编程 218 7.4.1 事件捕捉与处理 218 7.4.2 焦点事件和Tab顺序 219 7.4.3 实例讲解 220 7.5 案例分析与实践 223 7.5.1 探路的案例GUI构造 223 7.5.2 重构GUI构造任务 228 7.5.3 重构任务9.2的案例代码 234 7.6 讨论与提高 236 7.6.1 GUI的设计原则 236 7.6.2 GUI的测试 237 7.6.3 课程思政 239 7.7 思考与练习题 239 第8章 应用数据库 240 8.1 数据库概述 240 8.1.1 关系数据库 240 8.1.2 关系数据库的数据模型 244 8.2 结构化查询语言SQL 244 8.2.1 SQL概述 244 8.2.2 创建基本表的CREATE语句 245 8.2.3 插入元组的INSERT语句 247 8.2.4 删除元组的DELETE语句 247 8.2.5 更新元组的UPDATE语句 247 8.2.6 选择元组的SELECT语句 248 8.3 数据库的开发过程 252 8.4 编程操作数据库 255 8.4.1 连接数据库 256 8.4.2 查询数据库 257 8.5 案例分析与实践 259 8.5.1 分析与设计 259 8.5.2 设计数据库 259 8.5.3 开发数据库应用程序 261 8.6 讨论与提高 265 8.6.1 事务与并发 265 8.6.2 使用存储过程 266 8.6.3 查询优化——消除不必要的循环 268 8.6.4 测试数据库 269 8.6.5 课程思政 270 8.7 思考与练习题 270 第9章 基于复用的软件构造 272 9.1 软件复用 272 9.1.1 软件产品复用 273 9.1.2 基于复用的软件开发 274 9.1.3 程序库 275 9.2 设计模式 275 9.2.1 基本概念 275 9.2.2 基本设计模式目录 276 9.2.3 设计模式举例 276 9.3 框架 283 9.3.1 基本概念 283 9.3.2 框架和设计模式 284 9.3.3 框架开发 285 9.3.4 软件测试框架JUnit 285 9.4 案例分析与实践 286 9.4.1 生成Word格式的习题 286 9.4.2 口算习题练习得分的可视化展示 291 9.4.3 完整案例的软件构造 295 9.5 讨论与提高 297 9.5.1 案例的Web应用程序 297 9.5.2 Android应用框架 297 9.5.3 课程思政 298 9.6 思考与练习题 298 参考文献 300

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个