随着计算机与互联网在社会经济与日常生活中的渗透,各种形态的软件层出不穷,如传统的桌面软件、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. 高级语言程序设计,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.