结对模式驱动的软件工程协作教学机制研究
2019-02-26夏小娜戚万学
夏小娜,戚万学
(1.曲阜师范大学 统计学院,山东 曲阜 273165;2.曲阜师范大学 信息科学与工程学院,山东 日照 276826;3.曲阜师范大学 中国教育大数据研究院,山东 曲阜 273165)
0 引言
软件工程是计算机科学与技术和软件工程等工程类专业的基础课程[1],在工程性团队协作素养的培养和提升方面,具有重要地位[2]。在软件工程的教学过程中,需要考虑课程实践过程的群体协作训练[3-4],加大学习者自主和互助解决问题的力度[5]。
首先,授课者应根据课程内容,找出课程知识点的线索走向和前后联系,将课程教学规划为课堂学习、应用实践和专题研讨3 个层次;其次,将课程内容分成不同的学习阶段和学习子目标,在每个阶段,制定不同的实践内容和执行步骤,设定不同阶段的考核指标和评定规则;再次,将学习者分成不同的参与组,针对应用实践和专题研讨两个层次,每个组设定相应的参与Title(主题),每个Title 部署为一系列的执行任务。
为提高学习者参与软件工程课程教学的主动性和自觉性,基于翻转课堂的基本理念[6-7],在课程授课时间有限且任务多的前提下,本研究结合软件工程方法学的极限编程模型思想,提出结对模式驱动的协作教学机制。跟踪软件工程一学期的教学过程,抽取两个专业学习者的学习行为数据,设计参与度计算方法,并结合统计检验指标展开实证分析。
1 结对模式的概念和原理
“结对编程(Pair programming)”[8]是软件工程过程模型——极限编程(Extreme Programming,简称XP)的核心理念。它要求两人为一个“Pair”参与合作同一段代码,一人(思考者)分析问题另一人(编程者)编码实现。思考者需要保持软件顶层概念,而非仅关注当前问题,编程者只需要关注局部问题解决的可计算化和可编程化。如果编程者遇到了问题,两个人就需要角色互换。如果两者都处于问题解决的“瓶颈”,可以邀请本系统的其他人参与讨论。这种理念可以保证整个团队实现“自顶向下、逐步求精”的研发互助目标。将团队成员分解成多个相对独立又可以适时沟通的“Pair”单元,不同的“Pair”先完成各自的分配任务,再从整体上分层次、分阶段地实现“Pair”工作的有效集成。
“结对”理念运用于软件工程课程教学,需要先剖析课程知识结构,这里按照横向和纵向两条线索展开,横向是结构化和面向对象两种方法体系,纵向是软件的生命周期线索。根据纵向的脉络阶段划分,横向任务交叉进行。纵向根据软件生命周期的定义,从时间维度划分成相互关联的多个阶段。
“结对”是采用“Pair”为基本参与单元的多层次、多阶段迭代的组织模式,每一项参与任务,都是两人结对协作。在任务推进过程中,不同的“Pair”适时沟通,及时融合,不时迭代,有效集成。图1 是“结对”模式驱动的软件工程协作教学机制剖面图,图的中间部分是软件生命周期的相关阶段,不同阶段之间存在严格的先后次序,自顶向上有序进行,每一阶段的任务都以上一阶段的执行结果为依据,也是下一阶段任务开始的前提条件。每一阶段的执行结果,也可以反馈到相邻的上一阶段。
图1 “结对”模式驱动的软件工程协作教学机制
基于图1 的逻辑部署,需要在软件工程的教学过程中设计不同Title 的应用实践和专题研讨案例。每个Title 指定一个负责人(Leader),Leader 根据Title 的实施目标,制定任务执行的标准和规模,担任“监督者”和“调控者”的角色。并配置一定数量的参与成员,一般为4~5 人,两两结合形成“Pair”。同时要求属于同一Title 的Pair 之间保持沟通,做到任务执行过程的透明化和公开化。不同Pair 的任务关联过程采用渐增式的集成思路,即每一次的集成,只引入一个Pair任务关联,这样做利于发现问题和解决问题。
2 结对模式的参与度计算方法
“结对模式”驱动的协作教学机制具有共同的组织原理。无论Pair 参与的是哪一个Title,都遵循软件生命周期的8 个阶段,将这8 个步骤的任务集定义为X1、X2......X8,每个步骤对应的课堂学习、应用实践和专题研讨的参与度分别定义为Li、Ci和Ri,取值区间为[0,1],其经验权重系数通常设定为0.5、0.3 和0.2,则Xi=0.5Li+0.3Ci+0.2Ri。软件生命周期的任务权重系数定义为a1、a2......a8,一般情况下,默认取值为1,表明每一个阶段的任务都很重要,每个Pair 的参与度平均值计算模型表示为,其中φt是调节Title 难易程度的因子,取值范围为[1,1.5],由Title 的规模、任务量和技术研发目标等共同决定,通常取自经验值。
同一Title 的任务量计算是一个迭代过程。从两个最基本的Pair 任务集成一个子整体开始,之后的每一次集成,只发生在子整体与一个Pair 的任务之间。这样,就产生了子整体和每一个Pair 任务集成的额外工作量。工作量会随着集成度的增加,难度系数将呈放大趋势。将任务集成难度的定性系数表示为F(s),其中F(1)=1,F(2)=1,F(s)=F(s-1)+F(s-2)。任务量的难度值计算模型设计为f(s,F(s))=f(2,F(2))+φt×f(s-1,F(s-1))。由于每一次渐增集成过程都是两两集成,可以将f(2,F(2))作为难度函数的常量平衡值。其中s=|Pair|-1,表示集成的次数,|Pair|是一个Title 所分成的Pair 个数。
结对模式的参与度计算方法是关于Title 任务集成的定性描述,得到的结果可以衡量参与Title 的任务难度,适合用于不同Title 的参与情况比较。
3 结对模式的实施方案
分别选择一届软件工程和计算机科学与技术两个专业15 名研究生的课程学习行为数据为样本,运用第2 部分的参与度计算方法,统计分析课堂学习、应用实践和专题研讨中取得的成绩,实证检验结对模式在个体学习积极性、任务难易度、考核成绩等方面的应用效果。
图2 Pair模式的组建方法
为此将应用实践设定为3 个特定的训练Title:PT1.考勤系统、PT2.招聘系统和PT3.图书系统,专题研讨Title 包括RT1.区块链、RT2.电子商务和RT3.大数据。15 人中指定3 个Leader,由Leader 分别组建5 人参与小组,每组采用随机方式选择实用实践和专题研讨题目。
在Pair 规划时,Leader 自主与其他成员组成Pair,完成不同任务目标的分析与设计,5 人组的Pair 组建方式如图2 所示。A、B、C 和D 是4 个成员,假设A 与C 的分工是类似的,B 和D的分工是类似的,L 是Leader,A 和B、C、D可以分别组成合作Pair,L 设定为任务可兼顾的角色,分别和A 和B、C、D 中的一个组成Pair,这样每个组就可以形成4 个Pair。同样的,A 和D、B、D 也可以分别组成合作Pair,也可以有4种组合方法。这里将图中8 个单元右侧的学习者定义为编程者,左边的学习者为思考者。
表1 是应用实践和专题研讨两部分的相关指标。Leader根据Title的目标要求,规划Title任务。基于Leader 的技术和能力特点,根据图2 的Pair组建方法,选择合适的“4-Pair”单元。根据以往软件研发经验,3 个训练Title 的研发规模近似,则Pair 的任务渐增集成工作量可以设定为同值。3 个研讨Title 的主旨目标是一样的,但是Leader规划的任务目标和要求是不一样的,执行要求也有所不同,从系统的开发技术、支持跨平台和支持移动设备3 个方面考虑,所对应的应用实践和专题研讨的难易度也就不一样,Title 的φt应具有不同的权重值。从表中可以看出,两个专业虽然选题一样,但不同的Pair 组建方式不同、研发目标不同、参与人不同、Leader 的编程和组织协调能力不同等,都会影响团队合作效果和任务执行难度。
在软件工程课程的授课过程中,由授课者不定期组织应用实践和专题研讨的进度交流会,讨论不同Title 前期工作存在的问题。每组的Leader 主讲,Pair 做任务的针对性陈述,所有参与人及时了解不同Title 的进展状态,总结参与过程存在的优缺点。应用实践和专题研讨的考核一般在学期末完成,通过组建评审小组,建立评审标准和衡量指标,统一进行评分。最后由授课者和Leader共同参与计算每一个Pair 的参与度。
4 结对模式的课程实践结果
课程学习结束,产生了与课程相关的考试成绩、系统研发文档、系统代码和专题报告等数据,也是学习者学习行为的描述载体。课堂学习、应用实践和专题研讨分别对应不同的考核标准,见表2。讲授者主导的课堂学习侧重基础知识的考核,主要体现为期末笔试;应用实践从系统验收的角度设立考核标准;专题研讨从学术报告质量角度进行考量。
课程3 个考核方面的成绩分布见表3。课程学习的成绩均分布在70~100 之间,应用实践和专题研讨的最高分均出现在两个专业的第3 个Title,其实现难度是中等偏上。这两个分组的共同点是Leader 的组织协调能力强,有较好的编程能力,分组成员也取得了良好的课程学习成绩。可以看出,有效的团队合作可以提高团队成员的课程学习效果,开发出一个应用操作友好、功能相对完备的软件强过面面俱到的高难度技术追求,符合软件工程的基本理念。
表1 课程应用实践和专题研讨相关指标
表2 考核标准 %
表3 课程考核成绩分布
每个Title 分化为4 个Pair 的结对参与过程,其中ThreePair 和FourPair 的成员之一是Leader,即Leader 在一个组内参与2 个Pair。训练Title 和专题Title 得分最高的分组,负责人所在的ThreePair 和FourPair 参与度都比较高,说明Leader 的参与度会影响团队的凝聚力和执行力。4 个Pair 都服务于Title 的整体目标,任务合作的相关性也将影响整体目标。对“Pair—Pair”的任务相关性进行统计分析得到表4,ThreePair与FourPair 的合作相关性在0.05 级别(双尾)相关性显著。这与Leader 的Pair 参与有直接关系。
对Pair 为基本单元的Title 实施进行样本的统计指标描述,以验证不同分工的配对显著性,检验结果见表5,训练Title 和专题Title 的难度指标检验结果存在显著性差异,这是两个不同类别的主题,具有明显的执行差异,满足样本检验的前提条件。
对同一Title 的Pair 配对显著性进行检验。配对有OnePair-TwoPair 和ThreePair-FourPair,OnePair和TwoPair 再 分 别 与Leader 参 与 的ThreePair、FourPair 分别配对,以此检验非Leader 参与的Pair 与Leader 参与的Pair 之间是否存在配对差异。通过t 检验得到Pair 的参与度配对不存在显著性差异,说明同一Title 的Pair 配对是易于融合的,也利于课堂学习、应用实践和专业研讨3 个方面的成绩考核。
表4 Pair模式的合作相关性
表5 Pair模式的配对样本检验
5 结语
结对模式是软件工程过程模型的一种重要实施范式,它在提高现代软件研发团队协作和研发质量方面具有推动意义。本研究针对软件工程课程多角度的学习手段和考核方式需求,在课程的应用实践和专题研讨训练中,采用了“结对”合作模式。为此,抽取两个专业的15 名学习者为研究样本,形成同等规模的组单元,指定具有一定的编程或组织管理能力的学习者为分组Title 的Leader,由Leader 根 据Title 实 施目标制定不同阶段不同层次的各级参与任务。组成员两两组合,形成任务执行的“Pair”单元。通过统计、分析和对比一个学期软件工程课程的学习行为数据,可以得出这样的结论:结对模式可以增强分组的任务协作力和课程学习积极性,具有较好编程能力和组织协调能力的分组Leader,利于提高团队的应用研发质量和专题报告水平,提升任务执行的规范性和全局性。因此,结对模式可以改进具有团作协作特性的课程教学效果,具有理论和实践的借鉴意义和参考价值。