第三次作业--结对编程项目

一、地址

GiitHub项目地址项目地址
伙伴地址 博客
作业地址 作业

二、PSP表格

PSP2.1Personal 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();

效果图:

在这里插入图片描述

五、克隆、修改、提交代码

  1. 克隆赵荣泽创建的项目(先fork,再克隆)

在这里插入图片描述

在这里插入图片描述

  1. 修改代码后进行提交
    在这里插入图片描述
    在这里插入图片描述
  2. 请求赵荣泽拉取
    在这里插入图片描述
    在这里插入图片描述
  3. 赵荣泽同意拉取我的请求
    在这里插入图片描述

六、代码复审

  1. 代码规范:代码规范简书
  2. 复审操作:复审细节
    (PS:我们这里做的只是一个比较小的项目,所以我们的复审环节只做了100mins,是比较简单的,大体时间还是花在了熟悉复审环节上面)

七、测试

  1. 单元测试

在这里插入图片描述

在这里插入图片描述

测试代码:主要测试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. 效能测试
这里主要是对于三秒的自动点名的 测试在这里插入图片描述

八、提交

在这里插入图片描述

九、总结和思考

先放结对丑图:

在这里插入图片描述

总结:

    1. 这一次是两人的结对编程任务,是一个新的方式,主要的时间就花在了熟悉规则和完成所有细节要求上
    2. 这次主要是抱大腿了,伙伴牛皮嗷😀,我们主要是增加了一些功能,排序和三秒的自动点名,还有就是加载速度的改变
    3. 结对编程最难得部分在于两个人的相互沟通,最好是确定一个C位,有的放矢,不然两人在那边为了用谁的方法就可以耽误很长时间,不过我们处于初级阶段,必要的讨论可以促进我们的学习
    4. 这次在git 上面提交就比行一次好多了,不过我们把顺序搞错了,最开始没有在助教的里面去搞,而是自己新建了一个仓库,就无法在提交的里面找到我们两的,返工很难受啊😱
    5. 总的来说,受到水平的限制,我们的作业都用时较长,希望下次可以快一点,更好点!
posted @ 2019-09-30 20:57  地信张伟  阅读(146)  评论(1编辑  收藏  举报