李 暾,文艳军,刘万伟,董 威,罗 宇
(国防科技大学 计算机学院 ,湖南 长沙 410003)
摘 要:针对当前软件体系结构课程教学的挑战,提出基于案例式教学、翻转课堂和开源软件的课程教学改革思路,阐述在软件工程硕士中进行课程教改的实施过程并说明效果。
教育期刊网 http://www.jyqkw.com
关键词 :软件体系结构;翻转课堂;开源软件
第一作者简介:李暾,男,副教授,研究方向为微处理器设计与验证、嵌入式软件系统开发等,tunli@nudt.edu.cn。
0 引 言
随着软件规模的不断扩大,软件体系结构理论产生。软件体系结构的设计在中大型软件项目中更易于显示它的意义,软件体系结构课程因此也成为软件工程学科中的一门重要课程。软件体系结构的主题是针对复杂软件系统高层结构、组织单元之间相关关系的描述,以及围绕这种描述开展的各项活动,如设计、评估、管理、测试等。目前,工业界对软件架构师的要求和需求越来越高,对软件体系结构课程教学也提出新的要求——真实,即在课程教学中让学生用真实软件体验架构师的工作。
1 课程特点和面临的问题
软件体系结构课程有其自身的特点,具体表现为以下几方面。
(1)知识面涵盖极为广泛。软件体系结构各阶段的活动大量涉及网络、数据库、操作系统、软件工程等课程的知识,是对这些知识的综合考虑和运用,对学生的背景知识要求非常高。
(2)课程知识抽象程度高。软件体系结构设计着重于对软件宏观层面的探索,这种探索与学生非常熟悉的具体编码距离非常远,如果主要依赖于课堂讲授,学生难于理解和掌握。
(3)理论与实践的平衡。理论知识是能适用于全体软件体系结构设计的一般知识,而实践要求在尽可能真实的系统上进行真正的设计折中,以便将一般化的知识与具体软件项目相结合,获得更好的学习效果。
国防科技大学软件体系结构课程面向软件工程硕士开设,学生的特点是专业背景知识和工作经历参差不齐,学生主要是来自于计算机专业和软件工程专业的本科生,有的参与过商业软件开发,也有的只参与过毕业设计,但普遍基本缺乏完整项目的体验。
我们在近几年的教学中发现,将全部的课堂时间用于讲授软件体系结构的抽象理论会使学生感到枯燥乏味,容易将这门课变成一门需要背诵大量原则而后又无法具体应用的课,难以体现和理解软件体系结构在软件开发中的重要地位。此外,在考察了大部分教材后,我们发现教材上的案例规模较小,只适合于教学而无法让学生进行实践。最后,课时有限,只有36学时,但跨度较长,有12周,如何利用好课时和较长的授课周期,安排好课堂和实践内容,一直是困扰我们的主要问题之一。针对课程特点和存在的问题,我们提出从课堂授课内容、授课形式和实践环节对课程教学进行改进,具体来说,授课内容上以学生动手后进行总结为主、授课形式上以案例式教学为主、实践环节上以开源软件的设计与分析为主,三者结合,尽可能地在较为真实的环境下,使学生体验并运用软件体系结构理论知识于具体的项目中,提升教学效果。
2 教学改革方案和实施
国防科技大学软件体系结构课是软件工程硕士的专业必修课,共36学时,每周一次课,每次3学时,共持续12周。教学内容安排如下:① 8学时:软件体系结构基础知识;② 10学时:3个教材案例;③ 12学时:外聘专家授课;④ 4学时:学生报告开源项目实践结果;⑤ 2学时:考试。
上述内容安排按顺序开展,实验环节与课程教学同步进行。在教材案例实验教学中,我们采用先学生设计再教师讲授的方式,开源项目的实验与外聘专家授课互不影响。
2.1 案例式教学与翻转课堂的结合
在课程教学过程中,教师可首先讲授软件体系结构的基础知识,包括定义、视图、软件质量属性、软件体系结构设计方法与流程,该阶段的理论授课必不可少,是后续课程和实践的基础。在该阶段不应再引入更多的理论知识,原因是介绍的这些知识已足够学生开始初步的设计实践活动,而更多的知识如软件体系结构模式等内容的引入将增加学生的负担,却对实践环节没有帮助。
在介绍软件体系结构设计方法和流程时,教师可选用Client/Server体系结构风格实现的ATM系统[1]为案例,在课堂上详细介绍如何从软件需求分析开始,得到最后体系结构设计的过程、方法,同时穿插大量的随堂练习。例如,针对ATM系统的全部用例,选取一个用例作为课堂示范,在详细介绍完针对该用例的静态模型、动态模型、控制状态机的设计后,要求学生在课堂上及时完成ATM系统其他用例的设计,为后续的实践环节打好基础。
在后续的授课中,教师可以案例式教学为主,形式上采用翻转课堂的形式。该阶段授课的案例以各种教材收集的案例为主,目的是循序渐进,使学生能逐步适应软件体系结构的设计任务。我们选取的案例有面向服务体系结构风格的在线销售系统、基于构件软件体系结构模式的紧急事件监控系统、实时软件体系结构的自动行车系统等。在该教学环节,针对每一个案例,教师可采用以下教学模式。
(1)课堂上不会首先介绍和案例相关的理论知识,而是依序将每个案例以作业的形式先布置给学生,每个学生有一周的时间分析该案例并完成作业要求的设计任务,作业涉及的新知识需要学生自己查资料学习。
(2)在下一次课之前要求学生必须交作业,在下一次课上,围绕上次布置的案例进行详细讲解并以参考设计的形式介绍给学生。
(3)在该案例的每个设计阶段,指出学生作业中的普遍问题并引导学生将其作业与参考设计进行对比,找出不足之处。
(4)在案例讲授过程中,逐渐引入其所采用软件体系结构模式的知识。
这种教学模式将进行3轮,分别将选取的案例讲授并实践完毕。经过该教学环节,学生首先能在课程的早期就进入较大项目的实践,而不需要等到所有的理论知识都介绍完;其次,对每个案例的每个设计阶段和结果,学生都已在作业中进行过深入的思考和实践,因此能在课堂上马上抓住设计的重点并发现自己设计的不足之处;最后,教师结合具体案例介绍各种软件体系结构模式将抽象知识具体化,使学生通过对几个体系结构风格的学习进一步(自学)掌握更多的风格,理解体系结构风格的意义。
2.2 开源软件的作用
在学生掌握并实践了软件体系结构设计方法和过程,并且见识并理解了一些常用的软件体系结构模式后,教师就可以引导学生用真实的大型软件进行实践。我们选择开源软件作为课程实践的主要项目,首先将学生分成3~4人一组,要求每组从文献[2]和[3]中选择一种软件作为实践对象,这些开源项目主要依托SourceForge进行开发,也允许学生从GitHub选择项目进行实践,这些项目都是非常经典的开源项目,共同特点是规模大、用户多、文档多,便于学生开展学习和分析。在具体实践时,学生将经历以下几个阶段。
(1)了解项目。对所选择的项目,首先阅读文献[2]或[3]对应的章节,了解该开源软件的需求、应用背景、体系结构概貌等知识。
(2)识别利益攸关者(stakeholder)。仔细分析所选的项目,假想作为架构师开发这样的项目,该项目涉及的利益攸关者会有哪些、各自的利益诉求是什么等。
(3)标识质量属性。根据已学的质量属性及其度量,分析所选项目会有哪些主要的、潜在可能的质量属性需求,并利用文献[4]中介绍的方法对质量属性进行建模。
(4)体系结构描述。根据所学的“4+1”视图,对所选开源项目的体系结构视图进行描述和刻画。
(5)体系结构评估。根据提取的体系结构设计和质量属性,组内学生分别扮演不同的利益攸关者,实践ATAM等软件体系结构评估活动。
(6)源代码分析。在模块级别层面上阅读和分析所选项目的源代码,绘制模块级别的软件结构图,并与软件体系结构设计视图进行映射。
这些实践将持续5周,授课教师和辅导教师需要全程跟踪每个小组的活动。经过该环节,学生可以利用真实的大型软件项目体验软件体系结构相关的活动,包括需求分析、体系结构设计与评估等;通过阅读源代码,与体系结构设计进行比较,体验体系结构设计的决策在实践中如何体现;通过质量属性的建模和体系结构评估活动,体验体系结构设计中折中是如何进行的。
2.3 业界专家授课
在利用开源软件进行实践的同时,我们邀请业界一线架构师进行授课。聘请的专家来自各个行业,开发的商业项目多种多样,如医院信息管理系统、健康信息管理系统、在线照片分享系统、智能楼宇监控系统等,这些项目有实际的应用背景、用户、利益攸关者、质量属性等,不再是教材中的假想案例。专家会结合每个具体案例介绍从需求到体系结构设计、软件发布的整个软件开发过程,带着学生一起思考和设计,课堂上安排适量的随堂练习。与理论知识相呼应,专家重点介绍在体系结构设计阶段的具体考量和取舍及其原因。同时,专家也会从自身的角度讲述对软件体系结构的认识以及对软件体系结构设计的一些感悟,如软件体系结构不是一次设计出来,而是“磨”出来的等。
通过该授课环节,学生将具体见识到一线架构师的工作及其在软件团队中的作用。一线架构师对软件体系结构结合具体项目的讲授用的是平实、具体的语言,更容易让学生接受和理解。学生再与课堂上学到的理论知识对照,能发掘出理论知识更深一层的含义,也能在具体的项目中发现理论知识的应用。
我们认为专家授课对学生影响最大的是软件工程中一般原则的具体应用方法,每位专家都有自己一套独特的分析设计方法,虽然看起来不一样,但是对软件工程、软件体系结构等设计原则的体现是一致的,使学生认识到课堂上学习到的一般原则是如何灵活地体现在设计中的。
3 实施与效果
我们在近3届软件工程硕士“软件体系结构”课程教学中实施该教改方案,3届学生人数分别为70人、37人、40人。课堂教学上严格按照安排的学时展开,授课教师和辅导教师全程跟踪指导,随时发现学生学习中的问题,全部课程在12周内完成。问卷调查显示,与以前的教学效果相比,学生对软件体系结构及其相关技术、方法的理解更深,突出体现在以下几方面。
(1)通过安排的实验,学生能在理论学习的同时尽早开始实践,对软件体系结构方法和技术的运用紧跟理论学习,将抽象知识具象化。
(2)在案例的选择上从教材案例到实际开源项目,循序渐进,学生在各实验中能马上运用所学知识,不会出现无从下手的情况。实际开源项目上的实验能考验学生的综合应用能力,增强学生的信心。
(3)授课方式上先做再讲,比简单的预习和阅读资料更能给学生带来挑战,学生上课时的疑问更多,听课时注意力更集中,能及时发现自己的不足并改进。
(4)一线架构师的授课非常受学生欢迎,学生认识到抽象原则知识在实践中如何运用:原则上遵循,实际操作时灵活。
4 结 语
我们在软件体系结构课程教学方面进行探索和实践,设计的教学内容、授课形式和安排的实验对提升教学效果非常有效,但在实践中也发现要坚持这种教学方案,对教师和学生的要求都非常高,每年都需要重新设计教学案例并聘请一线架构师,工作量非常大。对学生而言,要坚持做完所有的实验需要花费大量时间,如能坚持下来必有收获,但实际教学中存在搭便车和抄袭的现象。今后,针对新的问题,我们还将在软件体系结构课程教学上不断探索,寻求更好的培养方式,以期达到更佳的培养效果。
教育期刊网 http://www.jyqkw.com
参考文献:
[1] Gomaa H. Software modeling and design[M]. Cambridge: Cambridge University Press, 2011.
[2] Brown A, Wilson G. The architecture of open source applications (Volume I) [M]. Raleigh: Lulu Press, 2011.
[3] Brown A, Wilson G. The architecture of open source applications (Volume II) [M]. Raleigh: Lulu Press, 2012.
[4] Bass L, Clements P, Kazman R. Software architecture in practice[M]. 3rd ed. Indianapolis: Addison-Wesley Professional, 2012.
(编辑:宋文婷)