周 倩,王志军
(山东农业大学 信息科学与工程学院,山东 泰安 271018)
为了克服软件危机,人们提出了采用工程化的思想开发软件,软件工程应运而生。在这种工业化的软件生产中,构件是核心和基础,重用是必需的手段[1]3。
软件体系结构作为软件工程领域的一门独立学科,是整个软件系统的骨架,在软件开发中起着非常重要的作用。软件体系结构是构件的集合,也是实现软件重用的重要因素,因此完成有效、合理的软件体系结构设计能够提高软件生产效率和软件系统的质量,同时,优秀的软件架构设计师也是软件开发行业迫切需要的高端人才。因此,在高校开设软件体系结构课程,能够适应软件行业的发展需求[2],但是对于刚刚接触软件开发、缺乏大型软件开发经验的本科生来说,要理解软件体系结构相关理论知识并应用,还比较困难,这就需要教师根据教育心理学理论进行正确的引导,帮助学生构建知识框架,达到较好的教学效果。
学习迁移也称训练迁移,是教育心理学介绍和研究的一个重要内容,是指一种学习对另一种学习的影响,或习得的经验对完成其他活动的影响[3]。学习迁移理论主要有形式训练说、相同要素说、概括化理论、关系理论等,有学者分析认为:两种学习、经验、技能之间具有共同要素、成分是迁移的最基本前提条件,因此具有相同元素是产生迁移的最重要条件[4]。
运用学习迁移理论,将构件这一软件体系结构的重要组成元素作为软件体系结构理论知识的共同要素,可以使学生在掌握构件的相关理论下,能够在软件体系结构风格、软件体系结构描述语言和软件体系结构评估等知识中迁移,搭建以构件为主的软件体系结构知识框架,并将软件体系结构知识应用到软件开发中。
在软件体系结构教学中,学生普遍反映该课程概念抽象、理论性较强、内容繁多无规律,理解起来较为困难,导致难以体会软件体系结构在克服软件危机、提高软件生产效率和影响软件产品质量属性方面的实际作用,从而在学习上缺乏主观能动性。具体原因包括以下几个方面。
(1)软件体系结构概念抽象,学生掌握困难。目前关于软件体系结构的定义有60多种,有的定义从构造的角度来审视软件体系结构,有的侧重于从体系结构风格、模式和规则的角度来考虑[1]18,导致一些教材给出的定义非常抽象,学生理解起来较为困难。
(2)软件体系结构风格丰富,学生较易混乱。对于刚刚接触软件开发、缺少开发经验的本科生来说,接触的软件体系结构风格有限,学生缺乏经验,不能较好地区分不同的软件体系结构风格,这时候就需要教师在教学中给予相应的归纳分类,并结合实例促进理解。
(3)没有统一的软件体系结构描述语言(Architecture Description Language,ADL)。抽象是认识事物本质的惯用法,抽象是人类对实际事物在针对某一特定观点下的简化,这样就能突出希望认识的各个元素,辨识和分析关注的结构和行为,并用特殊符号表示,当构建新的实例时可以作为蓝图。因此在描述软件体系结构时会采用类似程序设计语言一样的软件体系结构描述语言来描述不同的软件体系结构。由于没有统一的描述语言,学生需要掌握不同的描述语言,难度较高,容易失去学习兴趣。
迁移是学习的普遍现象,广泛存在于各种知识、技能、行为规范和态度的学习中,平时所说的“举一反三”“触类旁通”等即是典型的迁移形式[3]。通过迁移,各种经验得以沟通,经验结构得以整合,促进学习者对知识的理解。
在早期的学习迁移理论中,桑代克认为,迁移是非常具体的、有条件的,需要有共同的要素。只有当两个技能因素中有相同要素时,一个机能的变化才会改变另一个机能的习得。两种情境中的刺激相似,反应也相似时,迁移才会发生。两种情境中相同要素越多,迁移的量就越大。因此,两种学习活动含有共同成分,无论学习者是否意识到这种成分的共同性,都会有迁移现象的产生[3]。
在软件体系结构课程的学习中,构件就是该课程各知识点的共同成分之一,以构件为中心,将知识迁移到软件体系结构不同的学习内容中去。
以张友生教授所著《软件体系结构原理、方法与实践》一书为例,学习迁移理论在软件体系结构概论、软件体系结构风格、软件体系结构描述中的应用过程如下。
根据著名的教育心理学家布卢姆对教育目标的分类,将教学目标分为知识与技能、过程与方法、情感态度和价值观3个维度进行分析,见表1。
表1 软件体系结构课程的教学目标
采用布鲁纳以学生为中心的发现学习策略。发现学习指给学生提供学习资料,让学生通过探索、操作和思考,自行发现知识、理解概念和原理的教学方法,具体流程见图1。
图1 发现学习策略流程
3.3.1 软件体系结构概念
在讲授软件体系结构概念时,引导学生对不同学者给出的定义进行归纳总结。例如,对Mary Shaw和David Garlan给出的定义,总结出构件、连接件、约束;对Barry Boehm给出的定义,总结出构件、连接件、约束、不同人员的需求和准则;对Bass,Ctements 和 Kazman给出的定义,总结出构件、外部可见特性、相互关系。通过分析,软件体系结构概念离不开几个基本的元素:构件、连接件(相互关系)、配置(约束)。根据这些基本元素,可以确定软件体系结构是以构件为基础的结构,并能提供一种高级抽象的描述,站在较高层次来描述构件之间的关系和约束。
通过归纳软件体系结构概念的一些共同元素,学生对软件体系结构概念有了一个清晰的认识,能够更加具象化地理解构件的基本理论,为后续学习的迁移做好准备。
3.3.2 软件体系结构风格
在讲授软件体系结构风格时,教师可以根据前面的归纳总结给出关键元素:构件、连接件、配置,让学生确定不同的软件体系结构风格对应的这3个元素,并填好相应表格。
这种顺向迁移让学生在接下来的学习中能够带有目的性地对不同的软件体系结构风格进行归纳分类,加深学生对不同的软件体系结构风格的理解,继而应用到实际的开发中去。
表格可采用自主学习与小组合作等形式完成,小组成员5人左右为宜,组内异质、组间同质,这样有助于培养学生的独立思考能力和团队合作精神。
例如,在对管道—过滤器这一经典数据流风格的归纳中,学生通过小组合作判断出该风格的构件就是过滤器,管道就是连接件,配置就是所有数据按照流的形式进行传送,一个活动的输出就可以作为下一个活动的输入。合作学习小组通过调研发现这种风格可以应用在ATM机的部分交易系统中,持卡人信息处理、代理行账务处理、交易数据分配等都可以看作过滤器,它们之间可以通过管道进行数据传递;还可以应用在汽车牌照识别系统中,灰度拉伸、边缘处理、字符风格等操作都可看做过滤器。
在3层B/S体系结构风格中,web服务器和客户端浏览器都可看做构件,它们通过网络进行通信,网络可以看做连接件。应用程序以网页的形式存放在web服务器上,用户运行某个应用服务器时只需要在客户端的浏览器中输入相应的网址,调用web服务器上的应用程序对数据库进行操作并完成相应的数据处理工作,最后将结果通过浏览器显示给用户,那么这就是配置的一个实例。3层B/S体系结构风格是一种常用的、应用较广泛的风格,合作学习小组能够列举出很多应用实例。
通过完成风格统计表,学生能够较好地区分不同的风格,并按照构件、连接件、配置这3要素进行归纳,再结合生动、形象的实例进行分析和讨论,将理论知识具体化,在未来的软件系统开发实践中,能够站在较高层次抽象系统,设计系统的软件体系结构及相应的构件。
3.3.3 软件体系结构描述
由于ADL种类较多,学生掌握起来有难度,容易失去学习兴趣。教师可以将每一描述语言分成3个部分,帮助学生理解,这3个部分就是构件(component)、连接件(connector)、配置,每一构件具有1~N个端口,每一连接件具有1~N个角色。
例如,使用ACME描述一个简单的2层C/S体系结构如下所示[1]120:
再有,用XBA描述一个简单的2层C/S体系结构的配置如下所示[1]174:
根据前面软件体系结构风格的小组合作学习已经确定不同的风格对应的构件、连接件、配置,再按照划分好的结构使用ADL,这是一种正迁移。在实际教学中可以配以一些生活中的实例,例如让学生用ADL描述去超市买东西这样的场景活动,提高学生的学习兴趣,营造出一种贴近生活的、轻松愉悦的课堂氛围。
采用的评价方法是在课堂上进行的形成性评价。在进行前面3部分内容的教学实施之后,利用雨课堂教学软件向171位学生发送了8个相关例题,包括7个客观题和1个描述输入输出系统的主观题。最后监测数据显示,在平均答题率89.5%的情况下,7个客观题的平均正确率高达85.2%,大部分学生都能较好地完成主观题,仅存在一些细节的语法描述错误,基本都能按照划分好的构件、连接件、配置结构进行描述。
学生在面对一门理论内容较多的课程时,容易失去学习兴趣,教师也容易陷入“填鸭式”教学模式,因此掌握教育心理学理念并应用在实际教学过程中显得非常重要。本文将学习迁移理论中的相同要素理念运用在软件体系结构的基础理论教学中,充分利用构件、连接件等软件体系结构相关知识的共同要素,引导学生在不同内容迁移,取得了良好的教学效果,也极大地提高了学生的学习兴趣。此外,在领域工程、软件体系结构评估等知识当中也涉及了构件,下一步考虑能否利用这一共同要素,实现更多的迁移,设计更为科学的教学过程。经过研究发现,本方法只适用于本科生学习软件体系结构的基础性知识,并不适用于软件体系结构更复杂的内容,因为此时相关构件模型较为复杂,难以确定和描述。