一、实验目标
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、问题描述
四则运算:开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生
四则运算,然后用户回答,并且进行打分。
规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),
商不为小数或分数(即必须整除)。要求总计输出10个运算式,每输出一个运算式,等待输入结果,然后进
行对错判断并输出。最后输出统计答对的题数与分。
实验第一阶段
(1)敏捷开发与结对编程
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。敏捷开发中计划是可调整的,并不是像以往的开发过程中,需求分析->概要设计->详细设计->开发 ->测试->交付,每一个阶段都是有计划的进行,一个阶段结束便开始下一个阶段。而敏捷开发中只有一次一次的迭代,小版本的发布,根据客户反馈随时作出相应的调整和变化。敏捷开发过程与传统的开发过程有很大不同,在这过程中,团队是有激情有活力的,能够适应更大的变化,做出更高质量的软件。
结对编程技术是一个非常简单和直观的概念:两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计。同一个算法、同一段代码或同一组测试、与两位程序员各自独立工作相比.结对编程往往只需花费大约一半的时间就能编写出质量更高的代码, 但是,人与人之间的合作不是一件简单的事情——尤其当人们都早已习惯了独自工作的时候、实施结对编程技术将给软件项目的开发工作带来好处.只是这些好处必须经过缜密的思考和计划才能真正体现出来。而另一方面,两个有经验的人可能会发现配对编程里没有什么技能的转移,但是让他们在不同的抽象层次解决同一个问题会让他们更快地找到解决方案,而且错误更少。
结对编程还有其他多种好处:
1、直接的、连续的代码回顾。
2、与别人工作会增加责任和纪律性。
3、同时理解一个问题。
4、在有人盯着的时候去偷懒要困难得多!结对编程技术是一个非常简单和直观的概念:两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计。同一个算法、同一段代码或同一组测试、与两位程序员各自独立工作相比.结对编程往往只需花费大约一半的时间就能编写出质量更高的代码, 但是,人与人之间的合作不是一件简单的事情——尤其当人们都早已习惯了独自工作的时候、实施结对编程技术将给软件项目的开发工作带来好处.只是这些好处必须经过缜密的思考和计划才能真正体现出来。而另一方面,两个有经验的人可能会发现配对编程里没有什么技能的转移,但是让他们在不同的抽象层次解决同一个问题会让他们更快地找到解决方案,而且错误更少。
结对编程还有其他多种好处:
1、直接的、连续的代码回顾。
2、与别人工作会增加责任和纪律性。
3、同时理解一个问题。
4、在有人盯着的时候去偷懒要困难得多!
参考资料:https://blog.csdn.net/Max__Payne/article/details/3622755
(2)组队情况
组长:刘元元
组员:孙习雅
博客地址:刘元元(https://www.cnblogs.com/321ending/) 孙习雅(https://www.cnblogs.com/sxyfzq/)
github仓库地址:https://github.com/end57/my-nihotel-plans
所选择的课题:四则运算
(3)资料查阅与课题理解
在进行课题开发的准备工作中,我和我的小伙伴进行了网络查询,在CSDN博客和《构建之法》第一章的程序例子中,我了解四则运算题目的“命令行软件”。
我们首先想到的是整数化分数的运算,再对分子分母进行化简,我们试图生成两个分子和两个分母(分母至少一个为零时则全置为1,从而达到生成整数而
用分数去运算的效果)来实现让整数和分数的计算可以同步。对分数(不论是结果还是题目)进行判断,是假分数则化为带分数的形式,是真分数保持不变。
通过对不同文件的操作输出题目,答案以及统计答题者情况。程序需求中的查重功能没有实现。
由于小学不同年级,算数的难易程度不同,最好能做到可以用户自由选择题目难易程度,是否有乘除法,是否有分数。(对于识别分数,当读入a/b时,先将
a,b转化为整型,再将a除以b的结果保存为c,与题目结果相比较。或者对于分数问题,直接读入"'int'+'/'+'int'"格式的数据,并给出特殊情况“2/1=2 这种结果
为整数”的解决办法)
2.能够接受键入的答案,并判断对错,并给出成绩/正确率,以及答题时间(最好能给定时间记时,超出时间不能答题)。
3.实现能够使用参数控制生成题目的个数。虽然实现了随机生成指定个数的题目,还包含真分数运算以及判断对错,给出正确率。但是还尚未实现用户自由选择
题目难易程度,是否有乘除法,是否有分数。对于使用参数来控制生成题目数量虽然实现了随机生成指定个数的题目,还包含真分数运算以及判断对错,给出正
确率。但是还尚未实现用户自由选择题目难易程度,是否有乘除法,是否有分数。对于使用参数来控制生成题目数量。
(4)开发平台和技术工具
通过对课题的深入了解,以及对以往学习知识的回顾,我们决定使用 java 语言进行开发,java 语言是一门面向对象编程语言,不仅吸收了C++语言的各种优点,
还摒弃了C++里难以理解的多继承,指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了
面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
利用 java 语言进行开发,因此我们采用 Eclipse开发平台。Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组
服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具。
(5)讨论与收获
在这一个星期的时间里,我们完成了结对编程的组队和课题的讨论,进一步理解了四则运算命令行软件的算法思想。我们首先思考运算数字范围,
考虑小学生的运算能力,然后分类运算方法,分为加减乘除混合运算,然后可以选择是继续做题还是退出程序,可以总结做对或者做错的题数,方
便计算正确以及错误的题数。
在这个过程中我学会了如何利用 Github 进行代码的托管和与同伴进行代码的分享,明白了结对编程的意义,通过代码的形式来进行人与人之
间的交流不失为一种好的方法,在这个过程中我们培养了团队协作的能力和与他人交际的能力,同时也促使自身的编程能力不断提高,这使我们
都受益匪浅。