极限编程在JAVA编程教学中的应用
作者:葛宪强 许杰
来源:《计算机光盘软件与应用》2013年第21
        要:Java是计算机专业教学中使用的主要编程语言,针对Java语言教学的现状,文中提出了一种将XP极限编程应用到Java编程教学的方式,该教学方式提高了学生的程序编写质量,转变了学生的编程习惯,取得了良好的教学效果。
        关键词:极限编程;Java教学;教学改革
        中图分类号:TP311.11-4
        1 当前编程教学现状
        Java是计算机软件工程专业教学中使用的主要编程语言之一。在以往的Java编程教学中发现,学生在学习过程中普遍存在如下问题:
        编写出的程序错误多,查错误、修改错误占用了大量时间。程序设计和代码的质量比较
差。编写的程序即使能够运行,但也经常出错。通过调查分析,究其原因主要是,每个学生都是传统的单打独斗编程方式,编程过程缺少与他人的沟通交流;遇到问题后,个人单独解决,考虑不够周全。二是,学生对编程质量的认识较弱,没有养成编写良好运行的健壮程序的习惯。
        本文通过将XP极限编程的核心方法引入Java编程教学,有利于帮助学生养成良好的编程习惯,增强了学生对编程质量的认识,取得了良好的教学效果。
        2 极限编程(eXtreme ProgrammingXP
        XP极限编程是近年来使用广泛的软件敏捷开发方法之一。与一次性针对所有需求完成设计、实现、测试的传统开发模式不同,XP将开发过程分解为测试、编码、设计/重构三个短小周期,针对每一个需求模块采用增量、迭代方式完成测试、编码、重构,在迭代过程中优化设计。如图1所示。
        1 XP极限编程
        XP极限编程通过强调结对编程、测试驱动、重构、简单设计核心方法,使整个开发流
程简单、高效,且是软件质量得到有效保证。
        2.1 结对编程
        结对编程是两人一组连续协作共同完成软件设计、实现和测试的开发方式。在文献[1]指出,结对编程与单独编程相比,完成的程序具有更好的设计,更加简短有效,且具有更少的错误和缺陷。结对两人工作时,交流中彼此传递着知识,分享知识,并且互相学习编程技巧。因此,结对编程方式有利于结对的人充分沟通和交流,既能互相促进和补充知识和技能、彼此受益;又能提高编程质量和减少所用时间。
        2.2 测试驱动开发
        与传统开发方式不同,测试驱动开发(Test Drived DevelopmentTDD)提倡以测试为中心。在编写任何实际功能的实现代码前,先编写该功能的测试;编写功能的实现代码是以通过该功能的所有测试为目标。测试驱动开发可以尽早地发现错误和避免错误,极大地降低了错误的出现几率和修改成本;从而保证最终软件有可靠的质量。
        2.3 重构
        重构(Refactor)是指在不改变功能的外部行为的前提下,对功能的内部实现进行优化,去除冗余部分,提高代码可读性。增加新的测试和功能后,通过重构对代码进行重新设计,增进内部的清晰性和一致性。
        2.4 简单设计
        简单设计(Simple Design)以最简单方式设计、实现每个功能,去除一切不必要的冗余部分,只要能通过当前的预定的所有测试即可。并在后续的不断重构中,根据需求变化进行修改和优化。
        另外,在为每一个类和方法设计其功能职责时,XP提倡所有的设计元素从命名和形式上能够表述其承但的功能职责,并且其承担的功能职责应尽可能简单、单一,以符合单一职责原则。
        3 XP极限编程在Java教学中的应用
        经过实践,按照以下步骤可以将XP编程方法有效应用到Java编程教学过程中。把每一个编程实践练习题目看作一个简单的软件项目,由指导老师向所有的学生讲解练习题目并明
确题目要求,完成需求分析。例如,在进行编写一个计算器的题目时,指导老师讲解并明确题目的具体的功能需求:实现给定两个数值的加、减、乘、除的计算功能,以及计算结果的输出。
        3.1 分组结对
        指导老师根据学生的以往成绩以两人一组进行分组结对。分组结对时,可以先按照以往成绩对所有学生进行排名,假如共有10名学生,从排序中间位置开始分组,让16273849510进行结对,如图2所示。
        2 结对分组
用java编写一个简单的计算器        结对的两名学生需要在整个过程中进行大量的讨论,彼此交换掌握的知识和技巧,如若遇到两人都不善言语,交流困难等特殊情况,需要在此基础上做少量调整,将其中一人调换为善于沟通交流的学生。
        3.2 为需求编写测试列表
        首先,根据题目明确的需求功能,结对两人在经过讨论后,以望文生义的方式为需求中的所有元素命名。比如,将计算器命名为Calculator,将计算器的加、减、乘、除、乘方运算功能命名为addsubmultidividepower;计算结果为result,输出计算结果功能命名为printOut
        然后,结对两人根据题目明确的功能需求,通过讨论的方式,共同为每一个功能需求编写需通过的测试列表。结对两人讨论过程中,考虑越细致,测试覆盖越全面,程序质量越高。
        在编写测试列表时,指导学生注意每一个测试应明确输入以及预期的输出。例如,为divide运算功能编写测试列表,可按如图所示编写。
        1 divide运算功能测试列表
        序号 说明 输入 输出
        1 Result0.0,传入参数2.0 2.0 Result0.0
        2 Result0.0,传入参数0.0 0.0 提示除数为0”错误
        3 Result(非0)为10.0,传入参数2.0 2.0 Result5.0
        4 Result(非0)为10.0,传入参数0.0 0.0 提示除数为0”错误
        3.3 编写测试用例
        测试用例是对功能需求的具体体现,根据TDD测试驱动开发原则,在编写功能实现代码前,需先编写测试该功能的用例。为了方便编写测试用例,可提前向学生介绍xUnitTestNG类测试工具的使用。
        结对两人根据已明确的需求,编写测试用例。比如,定义计算器的测试用例类为CaculatorTest,并根据需求列表中的第1个需求,编写第一个测试方法。
        public void testZeroDivide(){
        //getResult()返回0.0
        calculator.divide2.0);
        assertEquals0.0 Result());
        }
        3.4 编写实现代码
        结对两人共同编写能够通过当前所有测试的实现代码。在该环节,学生最容易犯的错误是,编写实现代码时,主观随意、即兴发挥,实现代码并非都是为了通过当前所有测试而编写。与通过测试不相关的代码部分,无法进行测试验证其正确性,所以,根据简单设计原则,应该避免和去除与当前测试无关的部分。
        另外,编写代码时,可由一人进行代码编写,同时另一人在边上观看,并且两人时常交换。一方面,两人可以及时发现代码错误,并减少错误出现的几率,保证代码的编写质量;二是,代码编写过程中,两人在查代码错误、修改错误及尽力避免错误的大量讨论,彼此的知识、技巧和经验得到了充分的交换和补充,是对已学的书本内容进行了又一次生动而深刻学习。
        3.5 运行测试、重构
        运行当前所有测试,验证实现代码的正确性。如果实现代码存在错误,未通过所有测试,
则返回步骤4检查实现代码,修改错误。修改后,并再次运行测试。在多次的修改代码-运行测试的迭代中,如发现冗余的、无关的代码,应重构当前程序,优化和修改设计,及时去除冗余部分,从而提高代码质量。
        实现代码能够通过当前所有测试后,跳回步骤3,按照测试列表,在测试用例中编写增加一个新的测试,继续编写实现代码、运行测试,直到通过所有测试。
        这种增量的、迭代方式的过程中,程序不断地被重构,既可以根据变化进行修改,又可以通过优化提高质量,使得最终的程序具有良好的质量和健壮性。
        在基于XP极限编程的这种增量的、迭代方式的过程中,学生的知识和技巧不断地得到了强化学习和提高,并且学生养成了良好的软件开发习惯,提高了对软件开发的质量意识,为后续课程的学习奠定了坚实的基础。
        4 结论
        经过实践发现,按照上述方法将XP极限编程应用到Java编程教学中,教学效果有了明显的改善:
        1)提高了学生编写程序的质量和健壮性。学生的程序代码中,随意命名“a1b1”的情况和冗余代码明显减少,程序编码的规范性和质量有了较大提高。程序运行不再频繁出错,程序具有了一定的健壮性。
        2)增强了对软件开发的质量意识。学生不再只是以程序能够运行为目标,在开发过程中,能够主动通过多次迭代、重构来优化程序,提高程序质量,质量意识有了明显增强。
        3)软件开发习惯有了明显改变。学生逐渐熟悉了测试驱动、结对编程的增量、迭代开发方式,以前的单打独斗编程习惯有了明显的转变。
        参考文献:
        [1]W.LaurieK.Robert,结对编程技术[M].北京:机械工业出版社,2004.
        [2]Kent Beck.解析极限编程拥抱变化[M].北京:机械工业出版社,2011.
        [3]A.CockburnL.WilliamsThe Costs and Benefits of Pair Programming[J].Proceedings of the First International Conference2000.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。