个人第3次作业:结对编程

个人第3次作业:结对编程


Github项目地址 项目地址
结对伙伴的作业地址 作业地址

1.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 60
· Estimate · 估计这个任务需要多少时间 1760 1888
Development 开发 600 540
· Analysis 需求分析 (包括学习新技术) 60 90
· Design Spec · 生成设计文档 10 8
Design Review · 设计复审 (和同事审核设计文档) 20 25
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 30
· Design · 具体设计 120 180
· Coding · 具体编码 600 720
· Code Review · 代码复审 60 60
· Test · 测试(自我测试,修改代码,提交修改) 30 40
Reporting 报告 120 140
· Test Report · 测试报告 20 15
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 30
合计 1760 1888

2.实现过程(共同完成)

(1)WinForm界面设计

在设计winform界面时,经过和队友讨论后,在老师原有的基础上增加了进度条读取界面,增加了缺勤记录的新功能,可以记录学生缺勤的次数。

设计界面图:
在这里插入图片描述
在这里插入图片描述

(2)代码设计基本思路

我和队友分别创建了3个类库,Stu_DatabaseStu_EntityStu_Layer,这三个类库的主要作用分别是Stu_Database创建了学生信息Database类,在类里录入了学生信息。Stu_Entity创建了Entity类,主要用于创建学生实例。Stu_Layer创建了Layer类主要用于得到学生信息,在主函数中调用。

在这里插入图片描述
Stu_Database这个类库用来存储学生的基本信息,在这个基础上增加了缺勤次数的信息。
部分代码截图:
public class Databse
{
//模拟数据库中的学生集合

    private static List<Entity> studengList;


    public static List<Entity> getAll()// 学生信息库
    {
        studengList = new List<Entity>();
        Entity stu1 = new Entity("001", "王川",0);
        studengList.Add(stu1);
                        ...
         Entity stu84 = new Entity("084", "杨也", 0);
        studengList.Add(stu84);
        return studengList;
    }
}

Stu_Entity这个内库是将Stu_Database内库中的学生信息进行实例化,用以进行数据的读写输入。
部分代码截图:
public class Entity
{
private String id;

    public String Id//学号
    {
        get { return id; }
        set { id = value; }
    }


    private String name;

    public String Name//姓名
    {
        get { return name; }
        set { name = value; }
    }

    private int abse;

    public int Abse//缺勤次数
    {
        get { return abse; }
        set { abse = value; }
    }

    public Entity()
    {

    }
    public Entity(String id, String name,int Abs)
    {
        this.id = id;
        this.name = name;
        this.abse = abse;
    }
}}

Stu_Layer是用来计算学生总人数,或者随机点一个学生,还可以在这个内库中增加其他新的功能,方便修改。
部分代码截图:

    public class Layer
    {
      public int getStudentRecordsNums()
    {
        List<Entity> studengList = Databse.getAll();
          return studengList.Count;
    }
  public List<Entity> getAllStudents()
    {
        List<Entity> studengList = Databse.getAll();
        return studengList;
    }
   }
3,新功能

我们在原有的基础上增加了进度条读取界面,和增加了缺勤次数的记录。
在这里插入图片描述
在这里插入图片描述
部分代码截图:
public partial class Form2 : Form
{
public int i;
List stuList;
Layer Stulayer = new Layer();

    public Form2()
    {
        InitializeComponent();
        Layer Stulayer = new Layer();
        stuList = Stulayer.getAllStudents();//获取学生数据

        DataTable dt = new DataTable();
        dt.Columns.Add("stuNo", Type.GetType("System.String"));
        dt.Columns.Add("stuName", Type.GetType("System.String"));
        dt.Columns.Add("abs", Type.GetType("System.String"));//构造数据源

        foreach (Entity  stu in stuList)
        {
            dt.Rows.Add(stu.Id, stu.Name,stu.Abse);
        }


        dataGridView1.DataSource = dt;
    }


    private void BtnStart_Click(object sender, EventArgs e)
    {
        timerCallName.Start();
    }

    private void TimerCallName_Tick(object sender, EventArgs e)
    {
        Random ra = new Random();
         i = ra.Next(stuList.Count);
        label2.Text = stuList[i].Name;

    }

    private void BtnAbs_Click(object sender, EventArgs e)
    {

        stuList[i].Abse= stuList[i].Abse+1;
        MessageBox.Show("添加成功!");
    }
}
5,单元测试

代码思路:测试的函数有 Assert.IsNotNullAssert.ReferenceEquals。通过测试函数Assert.IsNotNull来判断程序是否调用了getAllStudents方法,结果是调用了这个方法。通过测试函数Assert.ReferenceEquals来判断getAllStudents方法的实例是否是Layer实例。
部分代码截图:

 namespace Stu_Layer.Tests
{
[TestClass()]
public class LayerTests
{
    [TestMethod()]
    public void getStudentRecordsNumsTest()
    {
        Layer test = new Layer();
        
        Assert.IsNotNull(test.getAllStudents());//测试是否为空

        Assert.ReferenceEquals(test,test.getAllStudents());//测试实例是否是相同实例
    }
}

}


3.代码复审过程

  • 在代码复审时我和组员发现部分代码命名不规范,导致了后面的引用实例和调用方法时不知道使用哪个,我们在修改过后使得代码变得更易读,更有逻辑性。
  • 在代码合作时队员发现我没有引用命名空间,于是纠正我使用了命名空间。
  • 在合并代码时我们遇到了很大困难,就是代码很多名字都不一样,导致了合并不成功,于是我们又互相修改了命名。

4.单元测试

测试的函数有 Assert.IsNotNullAssert.ReferenceEquals。通过测试函数Assert.IsNotNull来判断程序是否调用了getAllStudents方法,结果是调用了这个方法。通过测试函数Assert.ReferenceEquals来判断getAllStudents方法的实例是否是Layer实例。
部分代码如下:

namespace Stu_Layer.Tests
{
[TestClass()]
public class LayerTests
{
    [TestMethod()]
    public void getStudentRecordsNumsTest()
    {
        Layer test = new Layer();
        
        Assert.IsNotNull(test.getAllStudents());//测试是否为空

        Assert.ReferenceEquals(test,test.getAllStudents());//测试实例是否是相同实例
    }
}


5.结对过程

总体来说我和队员的这次结对编程还是很成功的。因为是第一次编程,所以我们之间的默契还不够,还在相互磨合阶段,我相信之后合作多了就会变得更有默契。这次结对编程还大大增加了我们编程的效率,因为我们在编程时会互相提示哪里编写错了,哪里的思路不正确。我们在代码互审发现了许多问题,通过线下沟通我们还是慢慢解决了这些问题。
结对照片:
在这里插入图片描述

6.附加功能

这次编程的主要附加功能是可以通过 学生点名界面缺勤 按钮来对缺勤的同学进行有效的记录。这个功能主要是通过添加一个新的学生int型来对同学的考勤次数进行初始化,然后再通过缺勤按钮来对学生int型的记录进行增加,从而实现对缺勤的同学进行记录。

posted @ 2019-10-01 09:05  IE吃饭  阅读(287)  评论(0编辑  收藏  举报