李秀娟,郭晔,赵夫群
(西安财经大学 信息学院,陕西 西安)
以计算机为核心的信息社会,软件技术日新月异,飞速发展。这也为高校软件工程专业相关课程带来挑战,目前大部分高校的计算机科学与技术和软件工程等专业都已开设《软件设计与体系结构》这门课程,课程为软件分析师、软件工程师及软件架构设计师的培养打下了一定的基础。随着软件规模的逐渐增大,软件复杂度的不断上升,软件危机的加剧,软件体系结构设计在整个软件设计与开发过程中的作用突显,人们已经意识到软件体系结构设计比对算法的设计和数据结构的选择重要的多。
最近几年对于软件体系结构的研究已完全独立于软件工程的研究,成为计算机科学的一个最新的研究方向和独立学科分支。《软件设计与体系结构》这门课程正是适应了行业的发展,针对软件工程更高的人才培养要求而开设的课程。通过该课程的学习,使学生能够理解在软件设计和开发中,软件体系结构的地位与作用,正确选择体系结构风格,通过Kruchten “4+1”模型对体系结构的组成进行描述,掌握基于体系结构的软件开发方法,并通过应用实例使学生掌握软件体系结构相应的理论与实践。
《软件设计与体系结构》课程针对大型复杂软件设计中遇到的各种问题,以工程的思想、技术和方法,对软件体系结构理论和方法系统讲解和介绍。主要内容包括Kruchten “4+1”体系结构建模,管道/过滤器为主的数据流风格,调用/返回风格,虚拟机风格等经典的体系结构风格讲解,ADL、UML体系结构描述语言,动态软件体系结构模型建立,SOA基于服务的体系结构,软件体系结构分析、测试、评估,软件产品线体系结构,云计算的体系结构等内容。
(1)建立构建软件系统架构一般方法的感性认识,理解并掌握软件系统架构分析、体系结构建模与架构设计的相关理论知识,培养软件架构设计的基本能力,能从内部模块规划设计、系统层次结构的构建开始,掌握构建系统结构的一般技术和方法。
(2)在构建软件系统的过程中,学习应对不同需求的系统对策和设计实现技术,初步具备一定的系统架构分析与设计能力,深入理解各种典型框架技术及原理,并具备运用设计思想模式及辅助工具开展软件详细设计的能力。
(3)理解并掌握软件体系结构的重要概念、术语和系统化方法,建立软件架构设计的理念,了解当前流行的框架技术,并理解其原理。另一方面,以加深知识理解和培养初步架构设计能力为目的,并在项目开发中加以实践;在实践环节中重点培养运用典型框架进行项目构建的能力和使用设计模式进行细化设计的能力。
通过历年的教学实践,以及不同高校教学研讨和同课程教师的探讨与交流,总结出该课程自身发展和教学中存在的问题有:
软件行业是迅速发展的行业,我国起步相对较晚,对于体系结构没有引起足够的重视,相关 研究开展也相对较晚。软件体系结构研究早期对体系结构的定义、建模、描述和标记方法也比较模糊,没有统一的规范,寻找解决方案也没有固定统一的途径可遵循。
《软件设计与体系结构》是在《数据结构》《算法分析与设计》《面向对象编程》等核心专业课程后开设的课程。课程内容高度抽象,难度递进。要结合前面专业课程内容,引导对大型软件顶层架构设计的学习,要求学生以UML、ADL等为工具,完成体系结构的描述和架构。这一过程抽象程度较高,对于大部分从未实际参与过大型软件研发工作的学生来讲难以理解,也容易感到枯燥。
课堂教学环节教师理论讲解多,而学生基本处于被动的学习状态。课堂气氛不活跃,学生积极性不高,教学效果不理想。大量理论知识的学习,却少有参加到软件设计与开发的具体工作中,更不要说复杂度高的大型软件,学生难以将所学理论运用到体系结构设计实践中,致使部分学生对该课程学习兴趣不高,教学效果差强人意。
OBE基于学习成果为导向的教育模式(Outcomes-based Education)最早在1981年由美国的Spady提出,提倡以明确的课程结束后取得的成果、达到的目标为导向的教学理念。该教育模式自提出以后,经过多年的实践、完善,从目标设计,过程实现、监督,到课程评价整个体系结构完善,目前在美国、加拿大、新西兰、南非等国家受到欢迎及普及。2013年6月,我们国家引入OBE教育理念引导工程教育改革。所谓的成果即课程结束后达到的学习结果,学生能够证明用所学内容和自己知道的实际能做什么。这个成果能够反映出学生使用信息、内容、构思和具体工具的能力的表现。OBE教育模式强调关注学生运用知识的能力和实践能力,是对传统重视理论学习,高分低能现象的改革。我们可以很好结合互联网+下微课、慕课等碎片化的知识学习方法,提高时间利用率。而学生能力的提升是全面的、整体性的。借助该全新的教育理念推动我国高校工科类专业教育质量的全面提升探索。OBE教学模式注重责任机制的重要性,责任机制者为任课教师及课程评价人员,他们能对学生的表现负责,给予学生指导。
OBE教学模式实质上体现了规划、交付和评估的全新教学模式。要求评估者、管理者、任课教师和学生将学习的关注力和努力集中在期望的教育成果上。作者将以西安财经大学软件工程专业《软件设计与体系结构》课程为例,课程改革引入OBE教育模式,课程目标细化、教学内容、教学方法和考核等方面探索课程教学改革,以期提高教学效果。
基于OBE的课程设置,我们将课程目标和毕业要求分解到各章知识点中。首先,我们将《软件设计与体系结构》课程的教学目标分为四个层次:
(1)通过本课程的学习,使学生理解软件体系结构的基本概念和理论,熟悉软件体系结构的研究范围和应用现状,了解软件体系结构的应用前景和发展方向。
(2)理解软件体系结构的不同风格和特点,熟悉软件体系结构描述语言、软件体系结构生命周期模型等内容,掌握现代软件体系结构的内容和设计方法。
(3)掌握软件体系结构的建模方法、描述方法,并通过实践对软件体系结构产生感性认识,进一步提高学生综合运用所学的软件体系结构风格,进行软件设计和开发的能力,为日后从事软件设计与开发工作打下良好的基础。
(4)通过该课程的学习,培养学生具有分析和解决问题的基本思路,能够把所学的原理应用到具体的实践中去,培养学生发现、分析和解决问题的能力等。
并给出以上目标对专业毕业要求的支撑。例如专业毕业要求3为:能够设计针对软件工程领域复杂工程问题的解决方案,设计与开发满足特定需求的软件系统,并能够在复杂软件系统设计环节中体现创新意识,考虑社会、健康、安全、法律、文化以及环境等因素。而我们的目标2和3是对以上毕业要求的支撑。
课程教学内容的组织,要服务于课程目标的达成,助于学生专业能力的提升,这也正是OBE的设计理念。我们根据课程目标及专业毕业能力要求,对《软件设计与体系结构》课程章节知识具体到每一章节,进行内容的整合和优化。对于目标达成意义不大的内容压缩课时或者作为选读内容,列出具体的核心能力,每一个核心能力应有明确的要求,每个要求应有详细的课程对应。在学时分配上,适当压缩理论教学,向案例教学和项目实践倾斜,以教学中“典型软件体系结构风格与应用”章节为例,教学要求包括:
(1)熟悉管道-过滤器风格、公共对象请求代理体系结构风格、正交软件体系结构风格、基于层次消息总线的体系结构风格以及主程序-子程序等各种经典软件体系结构风格的特点及其应用场景。
(2)在具体的项目实践中能正确选择和应用体系结构风格完成体系结构设计。
以上内容及重点对应到课程目标2和课程目标3,对应到我校该专业毕业要求为:
1)能够基于科学原理并采用科学方法对软件工程领域的复杂问题进行研究,包括设计实验、分析与解释数据、并通过信息综合得到合理有效的结论。
2)能够开发、选择与使用恰当的计算机技术、软件和设备,对软件工程领域的复杂工程问题进行分析和设计,并能够理解相关技术与设备的局限性。
例如,对于软件体系结构风格的讲解,我们的教学要求为熟悉课程讲授的各种经典软件体系结构风格的特点及其应用模式;能够运用这些软件体系结构风格;并参考其在工程实践中的应用案例来解决实际的软件系统体系结构的设计问题。对应的是课程目标2理解软件体系结构的不同风格和特点,掌握现代软件体系结构的内容和设计方法。课程目标3掌握软件体系结构的建模方法、描述方法,进一步提高学生综合运用所学的软件体系结构风格,进行软件设计和开发的能力。
好的教学效果一定要有好的教学实施过程。案例教学对于这门课程是必不可少的。但是不能流于形式,对于案例选择和设计都需要精心准备。我们的课程改革在经典的传统MIS系统设计与开发基础上,校企结合,增加了微信小程序设计与开发项目案例。在体系架构中,我们引入**市一码通架构,介绍了项目中所运用Spring、Spring MVC、Struts、Hibernate等主要框架技术,以及微信小程序WXSS、WXS等前端相关技术,从实际项目入手分析,教学效果良好。
考虑人工智能的迅速发展,也大胆尝试了将相关案例引入课堂。例如我们引入了深度学习中经典的手写识别图像分类案例,这些案例深深吸引了学生的注意力,学习热情极高。让学生意识的软件及人工智能开发的迅速发展,如何应对环境及框架的发展,如何快速上手。上手之前,讲解所需预备知识,如图像基础,给学生推荐高质量学习资料,以及开发环境搭建和框架基础知识,让学生主动自觉学习。这些内容紧跟技术发展前沿,和行业对接,因此学生积极性极高。教师在课堂教学中对架构及程序的讲解帮助学生对手写识别分类深刻理解,再动手实践。通过精心挑选的案例的讲解和完成,不仅提高了学生学习积极性,也极大增强了学生自信心。通过这个案例,教师起到抛砖引玉的作用,很多同学举一反三去学习目标检测、分类及分割相关模型及知识。
案例讲解的目的是要让学生先会,因过程和生产是软件设计课程中不可或缺的一部分,布置项目任务是非常重要的,项目任务以团队的形式完成提交。帮助学生分阶段迭代式完成可工作的软件产品,扶学生“上马”,在开发过程中逐步建立从基本编程到开发系统的信心,通过反馈机制监督和督促学生,适时调整课程内容与节奏,帮助控制小组项目开发的落地实施。
在具体的教学过程中我们还采用启发式教学手段,在课堂上留有一定时间专门就案例展开讨论,鼓励学生通过争论来比较和掌握软件构架设计方案。例如,学生都实际使用过选课系统,选取该系统作为案例,学生就很乐意参与讨论并给出建议。这些手段的采用取得良好的教学效果,加深了学生对抽象的软件架构设计思想的理解。
传统的理论考试对于《软件设计与体系结构》这门课的考核弊端比较明显,很多学生通过记背,对课程内容的理解,能取得不错的成绩。但是一上手对系统建模、设计和开发就显得力不从心,无从下手,达不到相应的课程目标和毕业要求。因此,我们强调了学生前面提到的任务驱动的完成情况,通过不断的反馈机制对学生软件设计及开发能力给予客观评价。
为此我们设计多个规模较大的、完整的软件项目作为考评,项目要求涵盖体系结构设计各个阶段,包括分析、设计、实现、软件维护、软件重用、对现有软件的扩展,以及团队合作、项目管理等等。学生以小组的形式提交作业方案,不仅提交纸质版的设计实验报告,更重要的是架构设计方案及程序等相关内容。课程结束时,安排专门的时间,由每个团队向全班同学演示自己的实验成果,并由学生和教师共同对实验结果进行评价和给分,极大地调动了学生的积极性,评分过程中的议论则帮助学生进一步加深了对软件架构设计方法的理解。
随着软件技术的向前发展,《软件设计与体系结构》课程的改革与完善永远在路上。笔者以OBE的理念,从教学目标、课程内容,案例教学和任务驱动的教学方法以及过程评价等方面试图探索《软件设计与体系结构》课程的改革,调动学生的主体学习作用,激发学生的学习热情和创造力。同时也形成“目标—教学—考核—改进”的课堂生态体系,让我们的课堂活起来,让学生的手动起来,最终目的是教学目标的达成,让课程专业知识与专业就业对接,学生分析问题、解决问题能力的培养和提高。