一、实验目标
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、实验过程
1、代码规范
(1)语句规范:每行至少包含一个简单语句,括号位置匹配,每一个‘{‘必须在代码结束后的相应位置有与其匹配的‘}’;
(2)命名规范:函数中的方法名用英文显示,申请的变量都用小写显示;
(4)注释规范:必要的单行注释用‘//’跟在代码下方或后方,注释通常用于重要的代码行或段落提示。虽然注释有助于理解代码,但注意不可过多地使用注释。程序中的注释不可喧宾夺主,注释太多会让人眼花缭乱。边写代码边注释,修改代码的同时要修改相应的注释,以保证注释与代码的一致性,不再有用的注释要删除。宏定义的右边必须要有注释,说明其作用。对前期进行测试的无效代码进行删除或注释。
(5)空行规范:方法与方法之间基本会有一到两个Enter键。空行起着分隔程序段落的作用,空行得体将使程序的布局更加清晰,空行不会浪费内存。
(6)缩进规范:避免一行长度超过60个字符,基本实现一行一操作代码,增强代码阅读可读性。
2、程序的总体设计
3、程序结对编程过程(附图)及功能实现情况(附代码和图)
主要通过QQ进行沟通讨论,利用QQ的屏幕分享功能实现一人编程一人监督。
(1)在队友的审查下我提交了第一个commit并推送到远程仓库中。
(2)在github上接收到队友的pull requests,无冲突点击merge,在git bash中拉取更新git pull命令,此时输入git status命令即可看到我和队友提交的commit。
(3)继续切换身份提交代码,完成编程。
(4)功能实现情况
#include
#include
#include
#include
#define W 60
// 全局变量
int cells[L][W]; // 所有位置细胞生1或死0
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
{
int i,j;
for (i=0;i
cells[i][j] = 1;
}
}
{
gotoxy(0,0); // 清屏
int i,j;
for (i=1;i<=L-1;i++)
{
for (j=1;j<=W-1;j++)
{
if (cells[i][j]==1)
printf("●"); // 输出活的细胞
else
printf("○"); // 输出空格
}
printf("\n");
}
Sleep(500); // 运行画面间隔500毫秒
}
{
int NewCells[L][W]; // 下一帧的细胞情况
int NeibourNumber; //统计周围细胞的个数
int i,j;
for (i=1;i<=L-1;i++)
{
for (j=1;j<=W-1;j++)
{
NeibourNumber = cells[i-1][j-1] + cells[i-1][j] + cells[i-1][j+1]+ cells[i][j-1] + cells[i][j+1] + cells[i+1][j-1] + cells[i+1][j] + cells[i+1][j+1];
if (NeibourNumber==3)
NewCells[i][j] = 1;
else if (NeibourNumber==2)
NewCells[i][j] = cells[i][j];
else
NewCells[i][j] = 0;
}
}
for (i=1;i<=L-1;i++)
for (j=1;j<=W-1;j++)
cells[i][j] = NewCells[i][j]
}
{
}
{
startup(); // 数据初始化
while (1) // 游戏循环执行
{
show(); // 显示画面
updateWithoutInput(); // 与用户输入无关的更新
updateWithInput(); // 与用户输入有关的更新
}
}
(4)运行截图
4、项目github地址
仓库地址:https://github.com/DKLA5/software-test
5、实验总结
实验初期非常困难,通过问同学和查看学习通视频资料文字教学了解了做法流程。实验过程中经常遇到错误,通过百度多次修改尝试完成了git操作和代码的编写。第一个pull request成功时我和队友非常激动,因为对我们俩来说太不容易了。在结对编程中,体会到了结对编程的优点,遇到问题时可以一起讨论解决,一人编写一人审查更是提高了编程效率,同时两个人可以互相督促,一起收获,一同进步。