实验二 结对编程(阶段一)

实验目标

1. 体验敏捷开发中的两人合作。

2. 进一步提高个人编程技巧与实践。

 

实验内容

1. 根据以下问题描述,练习结对编程(pair programming)实践;

2. 要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求;

3. 要求在结对编程工作期间,两人的角色至少切换 4 次;

4. 编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

 

实验记录

阶段一:

一、查阅相关资料对敏捷开发和结对编程的理解

  • 敏捷开发:敏捷开发是一种从1990年代开始逐渐引起广泛关注的新型软件开发方法,是一种能应对快速变化需求的软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于"非敏捷",更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重做为软件开发中人的作用。敏捷软件开发描述了一套软件开发的价值和原则,在这些开发中,需求和解决方案皆通过自组织跨功能团队达成。敏捷软件开发主张适度的计划、进化开发、提前交付与持续改进,并且鼓励快速与灵活的面对开发与变更。这些原则支援许多软件开发方法的定义和持续进化。
  • 结对编程:结对编程技术是一个非常简单和直观的概念,能达到事半功倍的工作效果。但是,人与人之间的合作不是一件简单的事情——尤其当人们都早已习惯了独自工作的时候。实施结对编程技术将给软件项目的开发工作带来好处,只是这些好处必须经过缜密的思考和计划才能真正体现出来。而另一方面,两个有经验的人可能会发现配对编程里没有什么技能的转移,但是让他们在不同的抽象层次解决同一个问题会让他们更快地找到解决方案,而且错误更少。两个程序员具有相同的缺点和盲点的可能性很小,所以当我们采用结对编程的时候会获得一个强大的解决方案。而这个解决方案恰恰是其它软件工程方法学中所没有的。在我们平时的编程当中,如果遇到一个非常难解决的问题(困难到对该项目产生厌烦的态度),那么你势必会希望录求帮助,无论是从信息量庞大的网上,还是从身边的技术大师那里,你都会努力去解决(前提是你有对计算机知识的热爱)。这个时候不妨采用结对编程试一下,其它的不说,可能感觉就不同。

二、组队情况

1. 队名:

做的都队

2. 队伍信息:

队员1 饶童心

博客地址:https://www.cnblogs.com/999xxx/

队员2 潘武振

博客地址:https://www.cnblogs.com/zuiaixinxin/

3. 仓库地址:https://github.com/pp9527/LifeGame/blob/master/LifeGame.py

三、选题

生命游戏

    生命游戏是英国数学家约翰.何顿.康威在1970年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。

    游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行。例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:"生"或"死"。图中,用黑色的方格表示该细胞为"死", 其它颜色表示该细胞为"生" 。

    游戏开始时, 每个细胞可以随机地(或给定地)被设定为"生"或"死"之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:

  • 每个细胞的状态由该细胞及周围 8 个细胞上一次的状态所决定;
  • 如果一个细胞周围有 3 个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;
  • 如果一个细胞周围有 2 个细胞为生,则该细胞的生死状态保持不变;
  • 在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。

四、针对课题查阅的资料,对课题的理解

       我们可以把计算机中的宇宙想象成是一堆方格子构成的封闭空间,尺寸为N的空间就有N*N个格子。而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。每个格子的生死遵循下面的原则:

(1)如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) :

(2) 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;

(3) 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变)设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案。这样就把这些若干个格子(生命体)构成了一个复杂的动态世界。运用简单的3条作用规则构成的群体会涌现出很多意想不到的复杂性为,这就是复杂性科学的研究焦点。生命游戏有一个通用的形式化的模型,每个格子(或细胞)的状态可以在一个有限的状态集合S中取值,格子的邻居范围是一个半径r,也就是以这个格子为中心,在距离它r远的所有格子构成了这个格子的邻居集合,还要有一套演化规则,可以看成是一个与该格子当前状态以及邻居状态相关的一个函数,可以写成f:S*S^((2r)^N-1)->S。

五、开发前工作

1. 结对编程平台:

       经过讨论本组决定使用python语言编写生命游戏,以pycharm作为开发平台,在github上进行代码的托管。在开发过程中使用QQ远程桌面进行屏幕共享,使用QQ语音进行讨论问题、协作编程。在结对编程过程中一个人写一个人看着,中间交换角色,实现两个人控制一台电脑。

2. 实现模块:

(1)初始列表:使用随机数函数,确定细胞个数与位置;

(2)运用函数,根据细胞法则衍生出下一个地图;

(3)输出:运用pygame库对界面进行美化,模拟细胞动态演变过程;

(4)地图大小自行输入,加入一个合法性判断的函数。

3. 代码规范:

(http://www.360doc.com/content/17/1027/23/277688_698706939.shtml)

        通过查阅资料,我们从上图的三个大方面进行了讨论与总结,把最值得注意与最常见的不规范的方面着重进行了检查。我们在使用pycharm时自带静态检查工具,不规范时会有提示,更加能减少整个编程过程中代码不规范的可能性。

 

至此第一阶段的结对编程准备工作已经完成。

 

posted @ 2020-03-22 16:38  阿X  阅读(202)  评论(0编辑  收藏  举报