《普通高等教育"十三五"规划教材·高等学校计算机规划教材:基于案例的软件构造教程》 李劲华, 周强, 陈宇 9787121282720,7121282720

配送至
$ $ USD 美元

编辑推荐

提供配套电子课件、案例源程序、例子代码、教学参考方案等;提供三种教学参考方案,教师可根据需要调整。__

作者简介

李劲华,博士,教授,毕业于(德国)斯图加特大学,青岛大学软件工程系系主任。科技部国际合作重大项目评审专家;《小型微型计算机系统》、《同济大学学报》等核心期刊审稿人;曾任信息技术与计算机科学国际大会(ICIS 2008)分会主席。近五年,在国内外发表学术论文30余篇,其中SCI检索1篇、EI检索10篇。参加国家和省自然科学基金项目2项,主持完成横向课题2项。主持或参与完成青岛市软件产业、“十一五”信息化发展、“十二五”科技发展、蓝色经济区信息化建设等多项产业和战略发展规划。讲授编译原理、软件测试、软件工程、软件项目管理、面向对象分析与设计、Java程序设计基础等本科生课程,IT项目管理、软构件技术、软件测试理论与技术、UML面向对象建模、算法设计与分析、软件体系结构等研究生课程。

目录

第1章软件开发概述
1.1程序与软件
1.1.1从程序到软件
1.1.2软件类型
1.1.3程序设计与软件开发
1.2软件生存周期
1.2.1使用角度的软件生存周期
1.2.2开发角度的软件生存周期
1.3软件开发过程
1.3.1瀑布式开发过程
1.3.2增量开发模型
1.3.3个体软件过程
1.4敏捷开发
1.4.1概述
1.4.2Scrum方法
1.5软件构造
1.5.1有关概念
1.5.2构造与开发过程
1.5.3主要内容
1.5.4软件构造的重要性
1.6为什么不直接编写软件?
1.6.1软件开发语言
1.6.2编程工具与集成化开发环境
1.6.3软件运行环境
1.6.4软件开发的最佳实践
1.6.5开发过程与管理
1.7案例导读
1.8思考与练习题
第2章模块化软件构造
2.1分解与模块化
2.1.1分解的含义
2.1.2模块化与结构化
2.2数据结构与算法
2.2.1数据结构与算法的关系
2.2.2选择与设计数据结构
2.2.3选择与设计算法
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.6案例分析与实践
2.6.1案例程序的初始构造
2.6.2无相同算式的基础构造
2.6.3编程实现测试
2.7讨论与提高
2.7.1软件质量
2.7.2软件测试的其他观点
2.7.3测试设计
2.7.4编程风格
2.8思考与练习题
第3章面向对象的软件构造
3.1抽象与封装
3.1.1模块产生与合成
3.1.2抽象与封装
3.1.3抽象数据类型
3.2认识面向对象
3.2.1设计类
3.2.2设计操作
3.2.3分类
3.3面向对象的设计
3.3.1面向对象的设计符号
3.3.2案例设计一
3.3.3案例设计二
3.4调试的基本技术
3.4.1单步调试源程序
3.4.2检查/更改变量的值
3.4.3设置监视点观察变量
3.4.4上下移动调用栈
3.5软件自动化测试
3.5.1初识JUnit
3.5.2编写JUnit测试代码
3.6案例分析与实践
3.6.1分析
3.6.2构造
3.7讨论与提高
3.7.1对调试的进一步认识
3.7.2设计原则与设计模式
3.7.3面向对象的设计原则
3.8思考与练习题
第4章数据处理的软件构造
4.1数据及其持久性
4.2文件与输入/输出流
4.2.1文件
4.2.2输入/输出流
4.2.3数据序列化
4.2.4CSV格式的文本文件
4.3编写健壮的程序
4.3.1防御性编程
4.3.2使用断言
4.4字符串处理与正则表达式
4.5程序中数据集的使用
4.5.1算式基
4.5.2表驱动编程
4.6基于程序结构的测试
4.6.1语句覆盖测试
4.6.2程序控制流图
4.6.3逻辑覆盖测试
4.6.4路径覆盖测试
4.7运用JUnit
4.7.1异常测试
4.7.2参数化测试
4.7.3测试套件
4.7.4JUnit的断言
4.7.5JUnit使用指南
4.8案例分析与实践
4.8.1批量生成100以内算式的习题
4.8.2批改练习并存储
4.8.3算式基的构造与应用
4.9讨论与提高
4.9.1应用表驱动编程
4.9.2使用文件还是数据库
4.9.3契约式编程
4.10思考与练习题
第5章用户交互的软件构造
5.1程序及其功能的使用
5.1.1程序的两个观察视角
5.1.2多个功能程序的整合
5.1.3多个功能的组织与呈现
5.1.4基于菜单式功能选择的
用户交互
5.2用户交互概述
5.2.1基本概念
5.2.2交互设备
5.2.3交互风格
5.2.4交互界面
5.2.5交互设计的原则
5.3用户交互的开发
5.3.1交互设计基本过程
5.3.2快速原型法
5.4静态测试
5.4.1程序的可用性与静态测试
5.4.2桌面检查
5.4.3代码走查
5.4.4正式审查
5.4.5同行评审
5.4.6检查表
5.4.7静态程序分析
5.5软件集成与测试
5.5.1驱动模块和桩模块
5.5.2集成策略
5.5.3回归测试
5.5.4集成测试与策略
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持续集成
5.8思考与练习题
第6章软件重构与交付
6.1代码重构
6.1.1代码重构的案例研究
6.1.2代码重构概述
6.2软件交付
6.2.1构建与打包
6.2.2实现构建自动化的工具
6.2.3Java程序的打包与交付
6.3案例分析与实践
6.3.1代码重构的案例分析
6.3.2代码重构实践
6.3.3提交案例程序
6.4讨论与提高
6.4.1测试层次
6.4.2测试驱动开发
6.4.3软件交付及其发展
6.5思考与练习题
第7章GUI软件构造
7.1GUI简介
7.1.1GUI发展轨迹
7.1.2JavaGUI的构造工具
7.2GUI的基本元素与设计规范
7.2.1GUI的基本元素
7.2.2GUI基本设计规范
7.3JavaGUI设计模式
7.3.1观察者模式
7.3.2MVC模式
7.4事件驱动编程
7.4.1事件捕捉与处理
7.4.2焦点事件和Tab顺序
7.4.3实例讲解
7.5案例分析与实践
7.5.1探路的GUI构造任务
7.5.2重构GUI构造任务
7.6讨论与提高
7.6.1GUI的设计原则
7.6.2GUI的测试
7.7思考与练习题
第8章应用数据库
8.1数据库概述
8.1.1关系数据库
8.1.2关系数据库的数据模型
8.2结构化查询语言SQL
8.2.1SQL概述
8.2.2创建基本表的CREATE
语句
8.2.3插入元组的INSERT语句
8.2.4删除元组的DELETE语句
8.2.5更新元组的UPDATE语句
8.2.6选择元组的SELECT语句
8.3数据库的开发过程
8.4编程操作数据库
8.4.1连接数据库
8.4.2查询数据库
8.5案例分析与实践
8.5.1分析与设计
8.5.2设计数据库
8.5.3开发数据库应用程序
8.6讨论与提高
8.6.1事务与并发
8.6.2使用存储过程
8.6.3查询优化——消除不必要的循环
8.6.4测试数据库
8.7思考与练习题
第9章基于复用的软件构造
9.1软件复用
9.1.1软件产品复用
9.1.2基于复用的软件开发
9.1.3程序库
9.2设计模式
9.2.1基本概念
9.2.2基本设计模式目录
9.2.3设计模式举例
9.3框架
9.3.1基本概念
9.3.2框架和设计模式
9.3.3框架开发
9.3.4软件测试框架JUnit
9.4案例分析与实践
9.4.1生成Word格式的习题
9.4.2口算习题练习得分的可视化展示
9.4.3完整案例的软件构造
9.5讨论与提高
9.5.1案例的Web应用程序
9.5.2Android应用框架
9.6思考与练习题
参考文献

序言

随着计算机与互联网在经济与日常生活中的渗透,各种形态的软件层出不穷,如传统的桌面软件、浏览器-服务器结构的Web应用、软件和服务SaaS及移动应用程序APP等,国家和社会对各类软件的需求不断增加。特别是移动APP的出现,再次凸显了小型软件开发的重要性。
传统计算机学科的课程体系涵盖了大量软件开发的知识,如高级语言程序设计、数据结构与算法、数据库、计算机网络、操作系统、编译原理、软件工程等,传授方式理论化、知识碎片化。设置和讲授这些课程的主要目的,甚至有些课程的唯独目的不是提升编程解决问题的能力,而是理解和研制计算机及系统软件。软件工程课程的核心作用是培养软件开发的需求分析、软件建模及团队协作、项目管理等实际工作需要的综合能力,但其基本前提是要求学生具备软件构造能力,即通过设计、编码、单元测试、集成测试和调试的组合,创建有用的软件。现代软件开发方法包括极限编程、测试驱动开发等敏捷方法,突出特点是每个程序员都具有高超的软件开发能力。他们不仅熟练掌握多种类型的编程语言、框架与中间件、设计模式、软件设计和测试技术及数据处理、用户交互等方面的知识,还要熟悉开发流程,具备把实际问题转换成软件的分析、设计和构造能力。
本书旨在以案例为引导,通过集成化解决软件知识的碎片化,提升个人的软件构造能力,加快从程序编写到软件开发的转变,在孤立的基础课程与软件工程课程之间搭建桥梁。目标是把学生培养成能独立地综合运用技术、开发可用产品的高级程序员,再通过后续课程(如软件工程、综合课程设计和实习实训)培养成软件工程师。
主要内容与结构
本书内容涵盖IEEE计算机学会最新颁布的“软件工程知识体系”中“软件构造”知识域的95%以上,以及软件设计、软件测试和敏捷开发的最佳实践,主要包括:
?软件构造的一般原理:模块化,信息隐藏,逐步求精,面向对象原则,增量迭代,软件复用,软件质量。
?软件构造的常用技巧:表驱动编程,防御式编程,按意图编程,事件驱动编程,代码重构,框架与程序包,测试驱动开发。
?软件设计:软件建模及其语言UML,E-R图,控制流图,状态图,设计原则,设计模式,契约式设计,面向对象,用户交互,数据库的设计与实现。
?软件知识:软件过程,敏捷开发,最佳实践,面向对象编程,数据结构与算法的实现,数据库编程,软件复用。
?软件构造的工作要素:编码及其规范,构造工具如IDE、Ant、JUnit。
?软件构造的活动:设计,编码,调试,集成,测试(单元测试、回归测试、集成测试、静态测试)。
不同于传统软件教材按照开发活动或知识域的编写方式,本书以一个案例的演变,模拟不断变化的用户需求,以增量迭代的开发模式,编排这些教学内容。每章完成之后都有可用的、实现了用户要求功能或特性的程序。每章以案例故事引出构造问题,通过例子及设计和代码,讨论解决问题的基本原理、方法、技术等最佳实践,给出一个可操作的构造方案,问题的可选设计、扩展则作为提升或留作练习。
全书共9章。第1章概述软件与软件开发的基本概念,说明软件构造的含义及其在整个软件开发过程中的地位和作用,引入本书案例。第2~9章以增量迭代方式,将功能开发、用户交互及数据处理等知识,与软件开发的原理、技术和工具融合到设计、编码、调试及测试的构造过程。第2章说明模块化概念及其软件的构造技术。第3章描述面向对象的设计原则及其软件的构造技术。第4章学习容器类数据结构与文件的使用和构造。第5章学习用户界面与软件集成的基础,说明非图形菜单式用户交互的设计与实现。第6章学习重构技术、自动化的软件打包与交付。第7章深入学习图形用户界面软件的构造。第8章学习数据库的设计并在应用程序中使用数据库。第9章学习软件复用,使用框架和程序包构造软件。
作者借鉴了国内外计算机科学与软件工程领域的研究与教学成果。首先是主编在德国斯图加特大学计算机系进修期间,其导师路德维希教授于20世纪末在德国大学开创性地设立了“软件工程”示范专业。其次是最近10多年我国软件工程领域教育先行者的大胆探索和实践。最后,在学科和专业技术方面对本书产生巨大影响的是“个体软件过程PSP”、软件复用、敏捷开发方法及软件测试。在此对这些研究者和教育者表示崇高敬意和衷心感谢!
李劲华设计了本书的结构、内容及风格,编写了第1~6章、第9章内容及程序,审阅、校对了全书。周强编写了第7章内容及程序,陈宇编写了第8章内容及程序。
本书在编写过程中得到了学校、学院和电子工业出版社的大力支持,在此表示感谢!
本书谨代表作者们对软件构造的理解与探索。由于认识有限,加之时间仓促,难免存在疏漏和谬误,欢迎读者批评指正。
使用建议
本书试图将软件构造的原理、原则、方法、技术、流程和技能整合,通过案例的展开由浅及深地学习。对知识的引入遵循足够、按需和渐进的原则。很多方面的知识(如调试、测试、设计、复用)分布在若干章节。读者最好把书中的知识通过案例串连起来,根据需要,可以跳过某个章节、提前看某个章节、需要时回过头来再看前面章节的内容或者查阅相关资料。建议读者一边思考案例问题,一边学习,一边动手实践。
就作者所知,目前国内外的课程体系中缺乏《软件构造》及相应的教材。本书可作为“软件构造”、“Java面向对象课程设计”的教材,也可以选作部分专业面向实用的“软件工程”的参考书。用于“软件工程课程设计”、“软件工程综合实训”等课程时,需补充软件建模、项目管理、团队合作、应用领域等方面的知识。
受篇幅限制,书中对介绍的最佳实践仅给出了关键的实现代码,建议授课教师根据课时选择性采纳或改写。本书提供配套电子课件、案例源程序、例子代码、教学参考方案等。
本书面向计算机学科的本科学生,也适合学习软件开发的其他学生及爱好者。建议在第4~6学期使用。要求读者具备程序设计和面向对象编程基础。有些内容可在需要时适当补充。对软件工程专业,后续课程可以是:软件工程、软件设计、软件测试、软件项目管理等。对计算机及其他应用程序设计技术的专业,建议选修“软件工程”或概论/导论,学习团队开发大型软件的技术和方法。
关于案例
案例的目的是模仿实际工作,传授软件构造的基本知识、主要活动、技术与工具的综合运用能力。案例不宜太难,需求简单明了,使没有多少经验的学生容易理解,把重点放在软件的设计与构造,在一个学期就完成一个可运行的、有意义的程序。设计的案例产生3000行左右的代码,计划持续3个月、60人时的工作量。案例开发不指定某种具体编辑语言和软件过程。
案例是开发一个“50道100以内的加减法口算习题”的程序。具体要求模拟现实生活,在用户使用程序的过程中,不断提出新的要求和功能。
案例看似简单,却可以有多种理解方式及扩展。例如,100以内的运算数可包含100或0;可将运算数值扩大到500、1000;算式可以是至多包含两个运算符的加减法算术运算,还可以是至多包含4个运算符的四则算术运算。每章的提升与课后练习对案例提出了一些变化、延伸及构造,满足不同层次的教学要求。
本书程序主要采用Java语言。除个别情况外,书中不提供完整代码,意在培养学生独立解决问题的能力,构造不同的、可运行的软件。
教学方案
本书面向普通高校本科学生,提供3种教学参考方案,任课教师可更根据需要调整。例如,如果面向对象程序设计的基础较弱,可减少第2章学时;如果仅用GUI界面的用户交互,可减少第5章学时;如果学生程序设计能力较强,可减少第5章之前的实验,增加第9章学时。
(1)基本教学方案(方案1),72学时(18学时×5周),讲课38学时,实验34学时。
章 节 基 本 内 容 讲课 实验内容 实验
1 掌握1.3节、1.5节和1.6节,理解1.1节、1.2节和1.4节,阅读案例1.7节 掌握程序与软件的异同、影响软件开发的因素、典型的软件开发过程、软件构造,理解软件的相关概念、软件生存周期和敏捷开发,阅读案例 3
2 掌握2.2~2.4节、2.7.3节、2.7.4节,理解2.1节、2.5节、2.7.1节,阅读与实践2.6节,其余了解 掌握模块化设计、数据结构与算法的选择、测试设计、编码风格,理解模块化概念、测试概念、调试概念,阅读案例,其余了解 4 构造1、2 4
3 掌握3.2~3.5节,理解3.1节、3.7.2节、3.7.3节,阅读与实践3.6节,其余了解 掌握基本的面向对象设计技术、调试技术、测试框架,理解抽象、封装、ADT、面向对象的概念、设计模式、设计原则,阅读案例,其余了解 5 构造3 4
4 掌握4.2~4.4节、4.5.2节、4.6节、4.7.1~4.7.3节,理解4.1节、4.5.1节、4.7.4节,阅读与实践4.8节,其余了解 掌握文件/输入/输出流的编程、防御性编程、正则表达式、表驱动编程、白盒测试设计、JUnit其他测试,理解数据持久性、算式基及测试断言,阅读案例,其余了解 5 构造4、5、6 6
5 掌握5.1.4节、5.3节、5.4.3节、5.5节、5.7.1节、5.7.2节,理解5.1节其他、5.2节、5.4节,阅读与实践5.6节,其他了解 掌握菜单式用户交互的设计与编程、原型法、代码走查、静态分析工具、软件集成与测试、基于状态图的测试,理解用户交互的原则和开发过程、回归测试、静态测试,阅读案例,其余了解 5 构造7 4
6 掌握6.1.1节、6.2.2节、6.2.3节,理解6.1.2节、6.2.1节,阅读与实践6.3节、6.4.2节,其余了解 掌握基本的重构技术和过程、Java程序打包/交付,理解代码重构、软件交付,阅读案例和TDD,其余了解 4

文摘

版权页:



1.6.3软件运行环境
软件作为产品,其程序和数据不能只在开发者的计算机上运行,它要发布和交付,在其他计算机上运行。一般情况下,软件的开发环境不同于实际的运行环境。
软件运行环境,广义上说,是一个软件运行所要求的各种条件,包括软件环境和硬件环境。许多应用软件不仅仅要求特定的硬件条件,还对软件提出明确的支撑条件。简单地说,针对Intel处理器编写的程序一般不能在Power或ARM处理器的计算机上运行,因为它们的体系结构和指令系统是不一样的。除了硬件差异,还有软件差异,例如,Windows支持的软件,Linux不一定支持;单机版软件不能在Web客户端运行;只为Android开发的应用不能在iPhone上运行。
操作系统将计算机的硬件细节屏蔽,将计算机抽象成虚拟资源。例如,操作系统中的虚拟内存是对物理内存的虚拟,伪终端是对终端的虚拟,套接字是对网络接口的虚拟,逻辑卷是对物理存储设备的虚拟。结合了操作系统功能的编译系统——包括编译程序、连接程序、加载程序等使得应用程序的运行从计算机硬件中独立出来。通常把计算机硬件和操作系统称为平台。
为了能够使同一种编程语言的程序独立于操作系统,实现程序运行的独立性,即“一次编写程序、到处运行”,在操作系统层面提出并出现了语言虚拟机或运行容器。它为程序的运行提供所需的运行时资源,包括把程序翻译成计算机指令、分配内存,通过操作系统调用计算资源等。例如,Java虚拟机(Java Virtual Machine,JVM)可以理解成一台运行Java程序的抽象的计算机,它有自己完善的硬件架构,如处理器、堆栈、寄存器及相应的指令系统。
ISBN9787121282720,7121282720
出版社电子工业出版社
作者李劲华
尺寸16