结对编程

2024-08-22

结对编程(精选三篇)

结对编程 篇1

造成学生学习效果不佳的原因有很多,其中一个重要的问题出现在实践环节。众所周知,要掌握好一门程序设计语言就必须通过大量的实践操作。当前,大多数学校程序设计语言实验课的教学方法是让每位学生在实验课上独立完成教师指定的题目,教师给予个别辅导。而学生多、辅导教师少的现实使得学生与教师之间缺乏足够的交流,导致学生的问题不能得到全面及时解决。一些程序设计能力较差的学生常常无法按时完成作业,部分学生甚至通过抄袭的方式来应付教师的检查。另一些程序设计能力较强的同学早早完成任务而大部分时间无所事事。若能在实践教学环节让学生之间相互交流,以协作方式完成作业,将会使学生体会到团队合作的优点,并学习他人的编程经验,从而达到快速进步的效果。

1 结对编程概述

极限编程(Extreme Programming,以下简称为XP)是1996年由Kent Beck提出的敏捷软件开发方法。XP整合多人的观点与技术经验,以交流、简单、反馈、勇气4个价值观作为基础,其核心是结对编程。所谓结对编程,就是每个模块的编码都是2个人一起完成,共用一台电脑。这样,一个人编码时,另外一个人就可以检查代码,或对编码的思路进行思考,写文档等。不再有另外的测试人员,2个人同时完成代码的测试,并且是先写测试程序然后再编程。这样既避免了编程人员和测试人员的矛盾,又解决了一个人自己检查的局限性。2个人共同检查可以避免大多数的错误。在共同编程中还可以及时地进行经验交流和传授。并且2个人共同工作也增加了工作量的弹性,使项目计划的瓶颈能尽快解决。

在国外,已有众多研究人员对结对编程技术在程序设计教学中的效果以及影响因素进行了一系列的实验研究。结对编程正面效果有结对编程技术具有互相监督、互相协商、互相鼓励、互相复查、互相纠错、互相学习、互相信任等7种激励效应。国内也有学者从事这方面的研究,刘峰等指出将结对编程引入程序设计语言实践教学有如下意义:(1)极限编程有利于培养学生互相学习的良好习惯;(2)极限编程提高了学生的自信心;(3)极限编程促进了团队合作和人际交往。

2 目前存在的问题

当前,学者将结对编程思想引入程序设计语言实践教学的做法还存在一个很大的缺点。问题出现在结对的2个学生学习水平差异比较大的情况下。可能由于程序复杂,也可能因为害怕写错代码,甚至是想偷懒,那些水平较差的学生常常自己不工作,让能力较强的学生来完成大部分工作。这种情况下,水平较差的学生由于减少实践机会,其学习效果反而更糟糕。鉴于此,提出一种改进方案以确保在实践环节中结对编程的2个成员都完成等量工作,使双方均得到锻炼。笔者通过实验来分析新方案的使用对学生学习程序语言的成效和影响。

3 方案设计

(1)结对办法:在前几次实验课中实行自愿配对制度,因为刚开始教师对学生的编程能力及个性特点还无法全面掌握。几次实验课后可实施强制配对,具体做法是能力强的学生带能力差的同学。

(2)任务安排:在每一次实验课上,首先要求队伍中的每位成员独立完成各自的编程任务,需要注意将个人编程任务的难度值及知识点设置成类似的。在他们独立完成各自的任务后,可让他们协作解决一个更复杂的问题,该问题要和他们先前的编程任务有关。表1为一个编程任务分配的样本。

(3)学生在完成个人任务时,原则上不允许其相互讨论。但是,如果某个成员提前完成,并且另外一个成员认为有必要求助同伴时,教师可允许他们讨论但同时要做好记录以备对后续教学过程进行监督。

这样,每堂实验课上学生都可以进行独立编程和合作编程的实践,从而避免了传统实验课上水平差的学生因本身能力的局限和师生沟通少而导致无法完成实验,又避免了以往使用结对编程方法时水平差的学生不作为的问题。

4 教学实验

采用实验法来检测设计方案的实施效果。在教学实验中,自变项为2种不同的实验课教学方法,因变项为学生的测验成绩。实验过程中,实验组2的学生实验课上采用笔者提出的结对编程方案;实验组1的学生则采用独立编程模式。两组教学内容和学时数完全相同。实验结束后,两组采用相同的测试题目进行考试,并要求各填写一份程序设计语言教学问卷。本实验的研究工具包括:课程讲义、合作编程学习记录单、VB测试卷、教学问卷。

实验过程共实行16周,每班每周4节课,2节理论课,2节上机课。16周后实施测试和填写教学问卷。数据资料包括实验课程序代码完成情况统计、测试成绩和教学问卷3部分。表2~表4是根据收集到的数据资料进行分析后得到的结果。

可以看到,采用改进结对编程方式进行实践教学的班级普遍在编程能力和质量上优于采用独立编程方式进行实践教学的班级。

学生对于课程活动的相关评价在调查问卷中使用开放式的问题呈现。实验组2中71.2%的学生认为结对编程有利于提高自己的学习效果,92%的学生表示结对编程让他们更自信,感觉更好。下面摘录了一些学生对结对编程实践的看法。

学生1:“我觉得,在帮助同伴解决问题的过程中得到了进一步提高。”

学生2:“同伴经常能发现我平时没注意的错误。”

学生3:“上课时有些问题一知半解,实验课上与同伴的合作让我对很多内容有了更深入地理解。”

参与实验的教师普遍认为该实践教学模式减轻了他们的工作负担。以往实验课上,辅导教师虽然忙得焦头烂额,但是仍有很多学生的问题无法得到及时解决。采用新模式后,学生遇到问题可相互讨论,合作解决。另外,他们也觉得学生上交的程序质量提高了很多,而且抄袭现象明显减少了。

5 结束语

结对编程在教学实验中取得了很好的应用效果。在程序设计语言的实验课中,学生采取了与传统方法不同的编程方式,即结对编程方式。通过在合作任务部分应用结对编程,发现结对的成本并没有比单独编程时高,极大地提高了程序质量,显著增强了结对学生分析和解决问题的能力,如分析时遇到不少问题,通过结对双方的及时沟通和不断探讨,最终找出较好的解决方案。此外,结对编程的过程也是一个互相督促的过程。由于这种督促的压力,使得结对学生在实验环节更认真地学习。通过这种实践模式的应用,学生的自信心和成就感得到了极大增强,从而进一步激发其学习热情。

笔者通过教学实验的实施过程总结出一些经验,遵从这些建议和经验,可以让结对学生的编程实践变得更容易、更有效率。具体有以下几点:(1)尽量将性格融合的,技术互补的配对。在不同阶段,有针对性地组合,可以起到很好的作用。(2)任务出错或不能完成,应让所有成员共同负责。(3)结对成员在完成合作任务出现意见不同时,可由教师帮助解决。(4)在教学过程中,教师应给结对学生多点鼓励,让其产生共同的荣誉感和责任感。

参考文献

[1]B.Hanks.Student attitudes toward pair programming[J].In ITiCSE,2006

[2]P.Sfetsos,I.Stamelos,L.Angelis,and I.Deligiannis.An experimental investigation of personality types impact on pair effectiveness in pair programming[J].Empirical Softw.Eng.,2009,14(2):187~226

[3]L.Williams,L.Layman,J.Osborne,and N.Katira.Examining the compatibility of student pair programmers[J].In Proc.AGILE,2006

敏捷结对编程实践 篇2

你了解结对编程吗?你尝试过结对编程实践吗?也许你还未曾尝试甚至还不曾了解,那么我们一起来学习和了解敏捷结对编程实践,相信对敏捷感兴趣的你会有收获。

什么是结对编程

结对编程(Pair Programming)是一种敏捷软件开发实践,指两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘和鼠标一起工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员), 两个程序员定期互换角色。他们在一起完成需求分析、系统设计、编码、单元测试、整合测试(Integration Test)、写文档等工作。基本上所有的开发环节都一起肩并肩地、平等地、互补地进行工作(如图1所示)。

图1 共用一台电脑进行结对编程

上面是极限编程(eXtreme Programming,XP)对结对编程的描述,它有如下主要的优点:

有利于提升项目质量,减少Bug;

有利于知识传递,降低学习成本;

多人熟悉同一段代码,减少项目风险;

与别人一起工作会增加责任和纪律性等。

尽管结对编程有诸多诱人的优点,但实行结对编程实践的却为数不多,其主要原因可能有:

结对编程需要投入更多的资源;

结对双方需同时注意力集中,否则效率更低;

结对人员能力要求相适,否则起不到观察者的作用,甚至产生依赖;

不成功的配对,经常引发争吵,产生内耗,导致团队不和谐等。

结对编程是颇具争议的敏捷实践之一,除上述一些优缺点外,可能大家还有更多不同的看法,但分析利弊不是本文所要讨论的重点。

实践经验

就我所在的项目团队而言,6人左右的开发团队需要支持多个中小型独立产品的需求开发,在繁重的业务压力下,用户价值的快速交付是首要的,所以想尝试共用一台电脑进行结对开发的实践只能是一种奢望。让团队开发人员尽可能熟悉相互间的产品代码,提升项目开发效率以及保证良好的项目质量,是我们在项目开发过程中需要重点解决的问题。

我们试图通过集体Code Review和设计交流分享等活动,来提升代码质量以及相互间业务代码的熟悉度,但一直收效甚微。问题主要在于这种集中式活动时间较难安排,人多交流效果不佳,性价比不高。后来,得益于公司的导师机制,在一对新人和导师身上,找到了敏捷结对的原型。由于他们的紧密合作,遇到问题及时沟通,新人在项目进度和质量都有不错表现,很好地融入了团队,

在后续的项目过程中,我们不断地尝试和优化这种结对形式,逐渐形成相对固定的工作方法。

与XP结对编程相比,敏捷结对编程最为显著的差异是结对进行需求分析、系统设计和问题讨论,但分别编码实现,通过过程中频繁的Review来实现结对的效果。开发人员两两结对,共同认领开发任务,一起对所承担的开发任务负责。在需求理解、设计阶段双方一起设计和讨论,然后分工各自编码实现,并通过Code Review以确保实现与设计一致。对结对过程中发现的问题,随时沟通和讨论。由于产品业务逻辑相对不是特别复杂,所以通过这种小范围、高效的沟通,可以解决项目中的绝大部分问题,实现更高的开发效率并确保代码质量。目前,在开发流程中的主要结对活动如图2所示。

图2 敏捷结对的主要活动

结对活动(如图3所示)给我们带来了哪些好处?

提升项目质量。结对开发人员在需求理解、设计思路上进行了充分的沟通和讨论,能尽早地发现和解决问题,避免前期因需求理解偏差、设计缺陷问题造成返工。

知识传递。对于新员工或经验略逊的开发人员,通过经常性的沟通和讨论,能迅速地进入角色和积累经验,发挥了传帮带的作用。

backup,规避项目风险。结对人员之间互为backup,有利于团队成员之间熟悉业务代码,若有人员异动时有利于项目风险控制。

图3 结对人员充分讨论设计细节及问题

无论新老结对还是强弱结对,都要尽力避免一方对另一方产生依赖,要给新人足够的成长和锻炼空间,让其独立思考和解决问题,并允许在可控范围内尝试失败,以获取宝贵经验得到成长。否则,团队只会多一个执行者,结对难以达到预想的效果。同时,一定程度的独立活动,可以让大家保留自己的工作习惯,而且形式更为自由和灵活。当然,大家可能会有疑问,如何保证结对人选中资深工程师工作的正确性,因为新人和弱者很有可能无法提出想要的Review帮助。这个问题在我们的结对中不可避免,有选择地邀请其他资深专家Review,也许会是个不错的解决方案,特别是对于一些重要的复杂业务逻辑。

参加结对的工程师应具备独立思考和解决问题的能力,并且具备较好的团队协作意识。否则,不仅不能有好的结对效果,反而会带来一些新问题。此外,结对也不仅限在研发工程师之间,研发和测试工程师之间或同产品经理之间的结对(如图4所示),同样可以带来不错的效果。

图4 研发、前端工程师测试之间结对解决问题

引入敏捷实践,贵在充分理解、结合实际,能扬长避短,且是一个适应、发展的过程,而按部就班绝对不是个好主意。有选择地结对对我们来说也许是上策,在结对的人选、场合、结对的环节等方面进行选择性的实施。

结对编程 篇3

Mike告诉我们,从本质上讲,想要“更快”,必须“更好”:

你牺牲质量,能换来更多的功能吗?不仅不是这样,而且恰恰相反:你追求的效率越高,你越应该提高内部质量标准。

......

想要提高生产水平,首先提高内部质量。

然后他告诉我们为什么会这样:

所以,为什么会这样呢?

因为内部质量和外部质量并不是一回事儿。

因为恰恰就是昨天的产品质量唯一决定了今天的生产水平。

因为打字现在不是,永远也不是编写代码的瓶颈所在。

Mike随后展开叙述这3个理由。首先,他用单词“质量”阐述外部质量与内部质量的区别,外部质量可以认为是产品有多少功能,而内部质量指的是实现这些功能的代码。他这样加以区分,是为了说明想缩短市场投放时间,可以降低外部质量,但是决不能降低内部质量。

接下来,Mike描述了“昨天怎样决定今天”,或者说已有代码的内部质量何以影响当前的生产效率。

一整天,每当你开始动手,都要依赖已有的代码。要研究的每一行代码会降低你的速度。每一个对外开放的依赖关系会降低你的速度;每一个糟糕的变量名称会降低你的速度;每一个设计时的错误决定,不论大小,都会降低你的速度,

管理资料

如果你想尽可能快地工作,就需要编写干净整洁的代码。

最后,Mike对这个常见的误区进行了反驳:即很多人认为结对编程和测试驱动开发由于“只有一半的人打字,只有一半代码是产品代码”,所以会降低产出(生产效率)。为此,Mike列举了“编程”时常见的11种活动,然后说道:

请注意往电脑里打字只占列表很小的一部分,因为编程时真正有难度的是思考,而不是打字。列表中所有其它内容(可能扔东西要除外)都是关于思考的,而不是打字。

测试驱动开发可以提高生产效率,因为它有助于思考。它避免了你编写代码时从头再来和对功能的画蛇添足,减少了代码的反复研究和调试。结对编程由于同样的原因也会提高你的生产效率。两个开发者在一块并不能像分开打字那么快,但是我们并不担心:软件开发的瓶颈是思考[不是打字],而结对编程和测试驱动开发都能提高思考效率。

Mike概括总结了3个建议,可以提高团队的生产效率:

如果你想提高团队的生产效率,就照这3条做:

修改任何代码前先编写一个会失败的简短测试

遵循“不结对,不干活”的原则

所有人要认识到内部质量的重要性

如果你知道有人(或者就是你自己)认为他们“没有时间结对或者测试驱动开发”。希望Mike的文章能够有所帮助。

查看英文原文:How TDD and Pairing Increase Production

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【结对编程】相关文章:

结对编程软件工程论文04-20

程序编程05-17

数控编程05-30

编程计算05-09

编程探讨05-26

调试编程05-28

实例编程07-10

编程应用08-09

高级编程08-10

编程处理08-27

上一篇:ASA数据库下一篇:汽车空调故障诊断课