随着计算机与互联网在社会经济与日常生活中的渗透,各种形态的软件层出不穷,如传统的桌面软件、Web应用、软件和服务SaaS及移动应用程序app等,社会对软件的需求日益增长。本课程旨在学习如何把编程语言、软件设计的原则和方法、软件测试技术及数据处理、用户交互等方面的知识和工具,融合到增量迭代的开发流程,通过“设计、编写、测试和调试”的软件构造过程把实际问题逐步地转换为实用软件的能力。
软件构造实际上就是学习如何构造一个有用的软件,类比如何写出一手好文章:正如你掌握了丰富的单词和句型、精读了优秀范文,不足以写出一篇漂亮文章。学习了编程语言、数据结构等知识,不能保证你自然而然地写出好程序。作为程序员的你还需要学习如何把知识、工具、技能融合在编程中,构造出一个好的软件。
学完本课程,你能够:
l 理解和应用软件构造的一般原理:模块化,信息隐藏,逐步求精,面向对象原则,增量迭代,软件复用,软件质量。
l 使用软件构造的常用技巧:表驱动编程,防御式编程,按意图编程,事件驱动编程,代码重构,框架与程序包,测试驱动开发。
l 使用基本的软件设计:软件建模及UML,E-R图,控制流图,状态图,设计原则,设计模式,契约式设计,面向对象设计,用户交互,数据库的设计与实现。并能评价设计和实现。
l 选择、评价和运用软件知识:软件过程,敏捷开发,最佳实践,面向对象编程,数据结构与算法,数据库编程,软件复用。
l 深入理解软件构造的工作要素(如编码及其规范),使用构造工具如IDE、JUnit、jchart、windowBuilder以及其它开源工具。
l 熟练应用软件构造的活动:设计-编码-调试-集成-测试(单元测试、回归测试、集成测试、静态测试)。
课程设计:依据能力优先知识、理论支撑应用、灵活自主学习的原则,对知识的引入遵循足够、按需和渐进的策略,通过案例的展开由浅及深地融合软件构造的原理、原则、方法、技术、流程和工具。多方面的知识(如调试、测试、设计、复用)逐步深入地分布在若干章节。习者最好把书中的知识通过案例连写起来,根据需要,提前看某个章节、跳过某个章节、需要时回过头来再看前面章节的内容或者查阅相关资料。强烈建议习者一边思考和分析案例问题,一边补充必要的知识、动手构造案例。只有同时完成案例构造和理论测评才可能通过本课程。
课程以授课团队的山东省一流教材《基于案例的软件构造》为基础,按照MOOC的原则、方法和技术,优化课程内容、重构授课组织和授课方式,将教材、录课、PPT、程序代码、课后辅助材料以及在线辅导等有机整合,形成一体化教学。
建议教师采用混合式教学方式,按需增补知识和工具使用,并一起研讨教学。
课程适合我国普通高校计算机类本科大学生。学完课程之后,学生能够:
1、理解SEBOK3.0“软件构造”知识域的主要内容:软件构造的一般原理、常用方法、工作要素、构造活动以及软件设计技术和软件知识;
2、根据任务需求,整合应用碎片化的软件知识(如编程语言、数据结构、算法、数据库、UI)和软件工具,迭代运用“设计、编码、调试、测试”的构造过程,增量开发出具有多个功能、处理数据和用户交互等特征的高质量软件(3千行左右Java源码),能评价构造的设计与实现的优劣;
3、应用问题导向、目标牵引、用现代软件构造技术解决问题,加快从程序编写到软件开发的转变,通过后续课程(如软件工程、综合课程设计和实习实训),奠定能解决实际复杂工程问题的软件工程师的基础。
第 1 章 软件开发概述
1.1 程序与软件 &1.2 软件生存周期
1.3 软件开发过程
1.4 敏捷开发
1.5 软件构造
1.6 为什么不直接编写软件
1.7 案例导读
1 软件开发概述-单元测验1
第 2 章 模块化软件构造
2.1 分解与模块化
2.2 数据结构与算法
2.3 模块化设计理论初步
2.4 测试程序
2.5 调试程序
2.6 案例分析与实践
2.7 讨论与提高
构造实践作业1 —— warm up
2 模块化软件构造测验- 单元测试2
第 3 章 面向对象的软件构造
3.1 抽象与封装
3.2 认识面向对象
3.3 面向对象的设计
3.4 调试的基本技术
3.5 软件自动化测试
3.6 案例分析与实践
3.7 讨论与提高
构造任务3.2:面向对象构造加法、减法、加减混合50道题- 阶段1
3 面向对象的软件构造测验 - 单元测试3
第 4 章 数据处理的软件构造
4.1 数据及其持久化
4.2 文件与输入/输出流
4.3 编写健壮的程序
4.4 字符串处理与正则表达式
4.5 程序中数据集的使用
4.6 基于程序结构的调试
4.7 运用JUnit
4.8 案例分析与实践
4.9 讨论与提高
面向数据的案例构造任务-阶段2
4 数据处理的软件构造测验 - 单元测试4
第 5 章 用户交互的软件构造
5.1 程序及其功能的使用
5.2 用户交互概述
5.3 用户交互的开发
5.4 静态测试
5.5 软件集成与测试
5.6 案例分析与实践
5.7 讨论与提高
基于菜单的交互构造任务
用户交互的软件构造测验
第 6 章 软件重构与交付
6.1 代码重构
6.2 软件交付
6.3 案例分析与实践
6.4 讨论与提高
软件重构与交付测验
第 7 章 GUI软件构造
7.1 GUI简介
7.2 GUI的基本元素与设计规范
7.3 Java GUI设计模式
7.4 事件驱动编程
7.5 案例分析与实践
案例构造GUI及最终交付版
GUI 软件构造测验
第 8 章 应用数据库
8.1 数据库概述
8.2 结构化查询语言
8.3 数据库的开发过程
8.4 编程操作数据库
8.5 案例分析与实践
第 9 章 基于复用的软件构造
9.1 软件复用
9.2 设计模式
9.3 框架
9.4 案例分析与实践
9.5 讨论与提高
9 基于复用的软件构造测验
1. 高级语言程序设计,Java编程基础或面向对象程序设计
2. 数据结构基础
教材:李劲华 等:基于案例的软件构造,电子工业出版社
Java语言 https://www.oracle.com/java/
集成化开发环境Eclipse https://www.eclipse.org/downloads/
其它参考资料:
[1] S. McConnel. 金戈,等译. 代码大全(第二版). 北京:电子工业出版社,2011.
[2] B. Liskov, J. Guttag. 裘健,译. 程序开发原理. 北京:电子工业出版社,2006.
[3] 骆斌. 软件工程与计算(三卷). 北京:机械工业出版社,2012.
[4] M. Fowler. 熊节,译. 重构:改进既有代码的设计. 北京:人民邮电出版社,2010.
[5] Robert C. Martin. 邓辉,译. 敏捷软件开发:原则、模式与实践. 北京:清华大学出版社,2003.
[6] Capers Jones. 吴舜贤,等译. 软件工程最佳实践. 北京:机械工业出版社,2014.
[7] E. Gamma, R.Helm, R. Johnson, and J. Vlissides. 李英军,等译. 设计模式. 北京:机械工业出版社,2004.
[8] C. Larman. 李洋,等译. UML和模式应用(原书3rd Ed.),北京:机械工业出版社,2006.