第三次作业--结对编程
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 60 |
· Estimate | · 估计这个任务需要多少时间 | 1690 | 2730 |
Development | 开发 | 720 | 1040 |
· Analysis | · 需求分析 (包括学习新技术) | 30 | 30 |
· Design Spec | · 生成设计文档 | 30 | 60 |
· Design Review | · 设计复审 (和同事审核设计文档) | 60 | 80 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范 | 60 | 60 |
· Design | · 具体设计 | 60 | 100 |
· Coding | · 具体编码 | 360 | 720 |
· Code Review | · 代码复审 | 60 | 100 |
· Test | · 测试(自我测试,修改代码,提交修改) | 80 | 160 |
Reporting | 报告 | 100 | 130 |
· Test Report | · 测试报告 | 60 | 80 |
· Size Measurement | · 计算工作量 | 20 | 30 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 80 |
合计 | 1690 | 2730 |
这一次主要是结对编程的作业,可能是上一次的太难了,所以这一次老师给了模板,我们主要是在老师的模板的基础上面进行的改动。
主要增加了排序和自动点名的功能。
- 排序(正、逆序排列)
思路是:每点击一次排序按钮,就进行排序,并且更改flag的值(flag主要控制排序的规则——学号正序排序还是逆序排序)
progressName.Value =0;
//获取学生数据源
StudentDAO stuDao = new StudentDAO();
stuList = stuDao.getAllStudents();
if (flag)
{
stuList.Sort((x, y) =>
{
if (int.Parse(x.Id) < int.Parse(y.Id))
{
return -1;
}
else if (int.Parse(x.Id) > int.Parse(y.Id))
{
return 1;
}
else
return 0;
});
flag = false;
}
else {
stuList.Sort((x, y) =>
{
if (int.Parse(x.Id) > int.Parse(y.Id))
{
return -1;
}
else if (int.Parse(x.Id) < int.Parse(y.Id))
{
return 1;
}
else
return 0;
});
flag = true;
}
效果图:
- 三秒自动随机点名
思路是:先开始随机显示学生姓名,新建一个线程,在3秒后停止随机显示学生姓名
private void autoButton_Click(object sender, EventArgs e)
{
timerCallName.Start();
Thread thread3 = new Thread(() => {
string curTime = (DateTime.Now.Second + 3).ToString();
while (DateTime.Now.Second.ToString() != curTime)
{
}
timerCallName.Stop();
});
thread3.Start();
}
效果图:
- PS:还将老师在界面进入加载学生的时候过慢的效果改变了了
老师的效果是加载一个人进度条前进一点,往往根据实际情况来说是很耗时间的,所以我们直接改成了瞬间加载,直接全部显示出来,加载速度就只跟网络状况或者是计算机性能有关了,更加方便
//数据加载以进度条方式展现
foreach(Student stu in stuList)
{
dt.Rows.Add(stu.Id,stu.Name)
progressName.Value += 1;//一个学生,进度条加1;
Thread.Sleep(500);
}
(搞不来加入动图,这里的加载过程就没有了,嘻嘻嘻😆)
- 显示学生总人数
点击加载按钮后,给名为studentsNum 的Label赋值为学生人数
//显式学生人数
this.studentsNum.Text = "学生人数:" + stuDao.getStudentRecordsNums();
效果图:
- 克隆赵荣泽创建的项目(先fork,再克隆)
- 修改代码后进行提交
- 请求赵荣泽拉取
- 赵荣泽同意拉取我的请求
- 单元测试
测试代码:主要测试StudentDAO的
using System;
using Xunit;
using DaoLayer;
namespace XUnitTestProject1
{
public class UnitTest1
{
[Fact]
public void Test1()
{
DaoLayer.StudentDAO dao = new DaoLayer.StudentDAO();
Assert.Equal(dao.getStudentRecordsNums(), 84);
}
}
}
效果图:
2. 效能测试
这里主要是对于三秒的自动点名的 测试
先放结对丑图:
总结:
- 这一次是两人的结对编程任务,是一个新的方式,主要的时间就花在了熟悉规则和完成所有细节要求上
- 这次主要是抱大腿了,伙伴牛皮嗷😀,我们主要是增加了一些功能,排序和三秒的自动点名,还有就是加载速度的改变
- 结对编程最难得部分在于两个人的相互沟通,最好是确定一个C位,有的放矢,不然两人在那边为了用谁的方法就可以耽误很长时间,不过我们处于初级阶段,必要的讨论可以促进我们的学习
- 这次在git 上面提交就比行一次好多了,不过我们把顺序搞错了,最开始没有在助教的里面去搞,而是自己新建了一个仓库,就无法在提交的里面找到我们两的,返工很难受啊😱
- 总的来说,受到水平的限制,我们的作业都用时较长,希望下次可以快一点,更好点!