软件工程实验二---结对编程

img

一、实验目标:

1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。

二、实验内容:

1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求;
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

三、问题描述(二选一)

生命游戏:
生命游戏是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。
游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行。例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。图中,用黑色的方格表示该细胞为“死”, 其它颜色表示该细胞为“生” 。游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:

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

四、实验过程

第一阶段

  • 组队情况
  • 确认选题:生命游戏
  • 开发平台:IntelliJ IDEA(Java 编译运行工具)
  • 协同工具:Team Viewer(可以实现控制伙伴电脑沟通协作),GitHub(用来托管项目代码)
  • 课题理解: 我们先参考了一些生命游戏的制作,关键的设计在于规则的运行,以及GUI的处理,并且需要两者配合,可能需要两个线程,一个用来处理图像的变化,另外一个用来处理规则的运行。

第二阶段

1).代码规范

命名规范:使用驼峰式的命名方式,函数和变量以及类名使用简介且容易理解的英文名称
代码书写规范:需要正确的缩进,对于函数需要有简单易懂的注解;排版避免再一个语句里给多个变量赋值等
其他:尽力参考阿里巴巴的Java代码约束

2).程序的总体设计
  经过讨论之后确定总体设计分为如下几个模块,以及各个模块的关系如下:

  • 初始化模块
  • 界面模块
  • 程序规则控制模块
  • 刷新模块

3).结对编程过程
  经过协商我们决定先写好程序的架构,以及完成初始化模块,界面模块的设计,然后再完成规则控制和刷新模块,并且在此期间参考了网上的文档。
  初始化模块和GUI模块
  初始化模块主要包括初始化随机数组,界面模块设计主要包括可获取行列,以及刷新频率等,还有显示地图信息。首先我们开始设计各个函数,划分好各个函数的作用,项目的架构设计完成之后开始结对编程。过程很缓慢,不时的切换导航员和驾驶员的角色,但是最终完成了初始化模块和界面的设计,此阶段commit id:c74728be16c1bd594fd492390a99c8a5f9347b17。

  程序规则控制模块和刷新模块
  这两个模块需要使用到额外的线程来完成刷新。因为线程资源的控制不合理,导致在程序几乎完成时出现bug,也就是程序只能运行一次(细胞只能完成一次迭代),不可以在此基础上修改行列频率,重新运行规则。在和partner进行讨论,并且查看了许多blog之后,才发现是线程资源控制的问题,最终使用Java的线程控制工具完成了设计。此阶段的commit id:208b2d591fef2ad87a0f52964feadea2c511b6c6

  程序运行结果

  4).github地址
代码如仓库中代码所示:仓库链接

5).总结
  程序基本实现了规划中的功能。由于对Jva API的某些部分还不是很熟悉,所有结对的过程几乎是:无从下手->需求功能描述->查看某些API的使用->编写代码,这种效率是非常缓慢的,很大部分时间花在了查找API的过程中;还有在结对的过程中,由于两个人的风格不同,需要进行磨合,慢慢的速度才会有所提升,下次希望总结这些问题并改善!谈谈收获,首先你能够更深的理解Java的API,其次你可以从你的partner学习到很多东西,而且在此过程中认识到自己的不足。

原文地址:https://www.cnblogs.com/elward-lv/p/12502090.html