Github项目地址 | https://github.com/zhangyingzhangying/PairProgramming.git |
---|---|
结对伙伴的作业地址 | https://home.cnblogs.com/u/mudan/ |
作业地址 | https://www.cnblogs.com/cherish599/p/11577268.html |
一.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
Estimate | 估计这个任务需多少时间 | 300 | 350 |
Development | 开发 | 240 | 260 |
Analysis | 需求分析 (包括学习新技术) | 60 | 60 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 (和同事审核设计文档) | 30 | 60 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 100 | 100 |
Design | 具体设计 | 180 | 160 |
Coding | 具体编码 | 200 | 280 |
Code Review | 代码复审 | 60 | 90 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | 60 | 60 |
Test Report | 测试报告 | 50 | 60 |
Size Measurement | 计算工作量 | 30 | 30 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 50 | 40 |
合计 | 1450 | 1680 |
二.解题思路和代码实现
解题思路
在这个题目下肯定首先是要在windows窗口里面体现点名的具体操作,而且要实现点名就需要数据支持,要有一个全班的名字信息与学号信息。窗体上面要有加载,点名,停止等按钮。
代码实现
在进行代码实现时,我们对于开始,停止的按钮是通过生成一个随机数,然后按照顺序挨着往下读取,直到点击停止按钮。
private void timerCallName_Tick(object sender, EventArgs e)
{
Random ra = new Random();
int i = ra.Next(stuList.Count);
lblName.Text = stuList[i].Name;
}
private void btnStart_Click(object sender, EventArgs e)
{
timerCallName.Start();
}
private void btnStop_Click(object sender, EventArgs e)
{
timerCallName.Stop();
在老师给我们讲解提示之后,在实际操作过程中,我们觉得加载学生的时间进度条过于缓慢,进行了改良,在合适的环境里进行了一些改进。
private void btnLoadStu_Click(object sender, EventArgs e)
{
StudentDAO stuDao = new StudentDAO();
stuList=stuDao.getAllStudents();
int stuCounts = stuList.Count;
progressName.Maximum = stuCounts;
DataTable dt = new DataTable();
dt.Columns.Add("stuID", Type.GetType("System.String"));
dt.Columns.Add("stuName", Type.GetType("System.String"));
foreach (Student stu in stuList)
{
dt.Rows.Add(stu.Id,stu.Name);
progressName.Value += 1;
Thread.Sleep(100);
}
dgvStuList.DataSource = dt;
setControlVisible();
}
然后在学生的编号上面,我们也做了相应的改变,使得人员的信息等更加丰富,方面老师进行信息查询
三.结对过程和代码复审
代码规范
在我们的讨论过程中,发现了一些问题代码冗余,可阅读查性差,逻辑复杂,不利于维护,出了bug,无法快速定位问题等,所以我们制定了一些规范。
1.代码简洁、少嵌套。
2.插入、修改、删除操作,严格执行标准。
3.用方法可功能明确化,增加程序可读性。
4.明确类的功能,精确地实现类的设计。
5.数据类必须重载toString() 方法,返回该类有意义的内容。
代码复审
代码复审的时候我们认真比较了结对共同部分,然后不断完善了自己分工的部分,解决了一些自己没有解决的问题。然后我们按照以下要求进行了一些检查
代码符合需求和规格说明。对功能的实现非常完善。
代码设计有比较周全的考虑。首先,程序对输入有详细的处理,对输入的格式进行了检查,并对输入的数字大小进行了判断
代码有较高的可读性。代码根据功能分为了几个不同的类,对功能的划分较为直观,关键部分有详细的注释
代码的分工十分明确,易于维护。
代码的每一行都执行并检查过了。
在检查过程中 发现了一些问题比如有一个括号没有规范,最后在运行阶段发现了问题,以及引用没有引用成功,最后发现了问题,所以要关注代码的简明,易读,无二义性,以及缩进 ,行宽 ,括号, 断行与空白的{ }行, 分行, 命名。
结对过程
和我进行结对的是母丹同学,下面是我们结对编写代码的照片。
四.单元测试和代码提交
单元测试
因在这次的编码过程中有许多函数与类,代码量较多,所以我们选择了其中的一些进行了单元测试。下面是我们进行单元测试的过程,最后结果显示单元测试成功
最终效果
代码提交
首先我们在各自的github仓库中建立了文件夹,文件夹的名字是自己的学号,然后在自己的本地同名文件夹中进行代码的编写,再上传到github