敏捷软件开发课程评价指标体系及应用

2017-04-12 02:02赵学龙于立功
计算机教育 2017年3期
关键词:编程动态工具

严 悍,赵学龙,于立功

(南京理工大学 计算机科学与工程学院,江苏 南京 210094 )

敏捷软件开发课程评价指标体系及应用

严 悍,赵学龙,于立功

(南京理工大学 计算机科学与工程学院,江苏 南京 210094 )

针对敏捷软件开发课程的评价指标问题,对引进的评价指标体系进行改进并给出应用实例。通过实例分析,该评价指标体系不仅能指明教学内容和实践的基本方向,而且能定量分析每一种敏捷能力的变化,有效评价教学效果,精准分析优势与缺陷,从而指导和改进教学实践。

敏捷软件开发;评价指标;动态指标

0 引 言

敏捷软件开发Agile Software Development(下文简称ASD)采用一组轻量级方法,作为传统软件工程的改进与革新,从2001年至今得到广泛关注和应用[12]。高校在教学中也积极引进ASD课程,如德国波恩大学于2003年率先引进ASD作为研究生课程;在美国,Texas Austin大学于2006年创办敏捷技术培训中心,Bowling Green州立大学创办ASF(Agile Software Factory)培训机构,Johns Hopkins大学创建ASD课程;清华大学、北京大学等国内高校也陆续开设相关课程。南京理工大学于2007年从德国波恩大学引进极限编程eXtreme Programing(下文简称XP)实践课程,用于计算机相关专业高年级本科生和研究生的暑期实践[3]。该课程主要是单纯项目开发训练,同时引进一套相应的评价指标。从2010年开始,ASD被纳入研究生正规课程体系,增加了课堂环节,以弥补单纯项目训练的不足。针对ASD课程评价指标问题,需要探索改进方法。

1 主要问题

目前,ASD作为计算机专业课程面临的主要问题如下:

(1)缺乏统一标准。尽管IEEE在2011年推出了一个工程推荐标准P1648[4],但对ASD课程的统一标准仍缺乏指导,导致ASD课程的教材选用、内容形式和课程计划都取决于教师个人兴趣和能力。这与传统软件工程课程体系的标准化规范化形成鲜明对比[5]。

(2)缺乏适用的评价指标体系。尽管前期引进了极限编程XP和SCRUM[6]的定量评价指标,但该指标主要针对集中式的团队项目开发活动,如结对编程[7]、迭代周期等,缺少针对ASD课堂教学内容的评价,如测试驱动开发、代码重构[8]等。原有指标适用于单团队、单项目、单平台的项目实践,即学生人数相对少(少于12人)、训练时间集中(主要是暑期时间,每天8学时,共4周)且教学资源充足(有专用实验室)的环境条件,但ASD成为正规课程后,学生人数剧增(往往多于40人),教学时间碎片化(如每次2~3学时,每周2次,共5~7周)且缺少集中实践场所。此时就需要改进评价指标,以适应分散式的多团队、多项目、多平台的变化。

2 评价指标的改进与应用实例

评价指标的改进主要包括两方面:一方面,整合与缩减。原有指标包含14项定量指标,经过整合与缩减,最后形成10项指标,对应10种敏捷能力;另一方面,增加动态指标。

2.1 动态指标

动态指标是每次课程根据教学对象、内容、形式、资源(包括时间和场所)的不同而确定的可变指标。动态指标受到当前软件工程新进展的影响。静态指标是ASD基本教学内容所决定的指标,并不随教学对象形式而改变。

之所以需要动态指标,是因为ASD作为传统软件工程的改进与革新,应适应当前软件工程在编程语言、工具等方面的最新进展。如在2010—2014年,设计模式成为热点,设计模式就作为ASD课程的动态内容和指标。2015—2016年,Java8成为新的Java语言标准,C++11/14成为新的C++语言标准而得到广泛关注,新语言需要及时引入ASD以改进编程。建议采用技术讲座形式来对应动态指标。ASD动态内容与指标所占比例需根据学生已学的课程和ASD教学目标来确定,动态内容与指标建议占ASD总课程10%~15%的比例。

2.2 评价指标应用实例

2016年部分研究生ASD课程的10项指标评价结果如图1 所示,其中新语言应用能力作为动态指标。

图1 定量评价指标应用实例

在图1中,一种敏捷能力指标对应一张图。对于一种能力,一名学生对应图中一个点(x,y)。其中x表示课程前能力,y表示课程后能力,x和y范围是从0~10。评价原始数据来自课程结束时的学生匿名调查问卷,由原始数据形成散点图后计算平均斜率,而且将对角线(斜率为1)作为基准。该图常用于衡量一个群体在某方面定量变化程度。斜率越大表示变化程度越大,教学效果越明显;斜率越小(趋近1),表示教学效果相对不明显。这种斜率称为作用系数。除了作用系数,散点图可观察和分析学生个体的能力分布情况。

课程前后学生的能力平均值的增长对比情况如图2所示。计算方法是对10种能力分别计算x和y的平均值,然后制图。下面基于定量指标评价结果进行具体分析。

图2 敏捷能力增长对比图

3 优势能力分析

从图2直观来看新语言应用能力和交流沟通能力的显著增长。其中新语言应用能力的课前分值最低,交流沟通能力课后分值最高。原因分析如下:

(1)新语言应用能力分析。课堂上用15%课时介绍新语言(包括Java8和AspectJ/AOP),新语言对于实际工程开发具有重要作用。从图1中能发现个别学生对于新语言是零知识,起点x=0,导致课程前平均分偏低,进而导致增长分值相对较高。同时也发现个别学生“零变化”,即y=x,原因是本课程未限定Java作为唯一编程语言,而且这些学生所选项目并未使用Java语言。对于动态指标的预期作用为y=1.2x,图1中结果为y=1.322x,评价效果超过预期,说明动态引入新语言内容能有效增强学生的能力。

(2)交流沟通能力分析。团队项目中要求每个人发言,对任何团队决策都必须发表个人意见,表明个人态度,这种强制性对于交流沟通能力起到积极作用。此外团队计划游戏也对促进交流沟通能力提高。

从图2可以看出,测试驱动开发能力和软件难度评估能力也得到显著提高。分析原因如下:

(1)测试驱动开发能力分析。虽然部分学生事先学过软件测试相关课程,但传统课程往往不包含测试驱动开发TDD,而TDD是ASD最重要特征之一。ASD课堂实践中提供2个具体实例,分别占用2次课时,课堂上教师给出问题之后要求各团队研讨40分钟,然后提交测试用例和关键编码,最后教师立即讲解要点和注意事项。这种实践方式起到了积极作用。

(2)软件难度评估能力分析。课堂上给出4种实践方式:①用卡片书写待解决的问题和待完成的任务。该方法在极限编程XP中用来描述用户素材与设计任务。②用扑克牌1~10作为每个人对于问题难度和工作量的定量评估(1分最容易,10分最难工作量最大)。③团队计划游戏。这是一种SCRUM方法[6],在每个迭代周期第一天对每个新问题和新任务投票评估,评估过程中要求给出最高值和最低值的学生说明原因。④迭代式反馈修正。每完成一个任务都将实际工作量与预期相比较,逐渐使评估趋向准确。这种方法简便易行,具有趣味性和互动性,得到学生认可。

4 不足之处及改进方法

从图2中可以看出,工具能力和软件表达能力提高相对不明显。原因分析如下:

(1)工具能力分析。ASD相关工具涉及较多,主要分为个人工具(如编码、测试与重构工具)与团队工具(如代码共享与版本控制工具)。研究生ASD课程中每周只有4学时开发实践,而工具应用能力的提高需要较多的开发实践做基础,因此工具能力难以在短时间内明显提高。另外,不同团队允许采用不同语言和工具来开发不同项目,这使得工具应用多样化,教师难以具体指导,导致工具应用能力与编程技能都难以在短时间内得到明显提高。如果是全天课程且多项目都采用相同工具,即便4周时间,评估效果也能得到明显提高。

(2)软件表达能力分析。ASD课程强调两方面表达能力:口头表达(团队项目展示与答辩)与字面表达(小论文或个性化论文,要求学生就某事情表明个人态度并给出理由,并非撰写软件文档)。ASD课程需要培养学生的文字表达能力的原因是:通过每人提交小论文的形式,给每个学生一个平等的机会来表达自己态度和意见,避免团队负责人或骨干的个人意见覆盖所有成员的情况。大多学生对于小论文撰写难以掌握,这成为本课程一个缺点。其改进方法有:①用2学时分析、总结往届学生小论文的优点和缺点,并说明撰写方法,强调实践性、逻辑符合性与形式一致性;②放弃正规论文和软件文档的形式要求,着重强调学生个性化表达并鼓励创新思维。

5 结 语

ASD课程建立明确的评价指标体系有两个作用:①反映课程教学目标,指明教学与实践的基本方向;②定量分析每一种能力的变化,有效评价教学效果,精准分析优势、缺陷和不足,指导和改进ASD教学实践。尽管ASD目前无法形成国际或国内标准,评价指标也可能因人而异,但ASD课程评价指标是动态可改变的,能适应当前软件工程的最新进展,成为受学生欢迎的专业课程。

[1] Martin R C. 敏捷软件开发: 原理、模式与实践[M]. 邓辉, 译. 北京: 清华大学出版社, 2003.

[2] Cockburn A. Agile software develoment[M]. 2nd ed. New York: Pearson Education, Inc, 2007.

[3] Beck K. Extreme programming explained: Embrace change[M]. Boston: Addison-Wesley, 2004.

[4] Software & Systems Engineering Standards Committee (C/S2ESC). 1648 WG-RP for establishing and managing software development efforts using agile methods[EB/OL]. [2016-09-18]. http://standards.ieee.org/develop/wg/1648_WG.html.

[5] Devedzic V. Teaching agile software development: A case study[J]. IEEE Transactions on Education, 2011, 54(2): 273-278.

[6] Schwaber K, Beedle M. Agile software development with SCRUM[M]. New Jersey: Prentice Hall, 2002.

[7] 严悍, 苑俊旺, 邵帅, 等. 极限编程中结对编程的不良现象分析及对策[J]. 计算机教育, 2014(8): 51-53.

[8] Fowler M. Refactoring: Improving the design of existing code[M]. Boston: Addison-Wesley Longman, 2000.

(见习编辑:张 勋)

1672-5913(2017)03-0148-04

G642

南京理工大学研究生教育优秀工程项目(海外共建课程2014年第一批)。

严悍,男,副教授,研究方向为软件工程与信息安全,yanhan@njust.edu.cn。

猜你喜欢
编程动态工具
国内动态
国内动态
国内动态
编程,是一种态度
元征X-431实测:奔驰发动机编程
波比的工具
波比的工具
编程小能手
纺织机上诞生的编程
动态