结对作业 | |
---|---|
github项目地址 | 链接 |
结对伙伴博客地址 | 链接 |
作业链接 | 链接 |
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 15 | 15 |
· Estimate | · 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 30 | 40 |
· Analysis | · 需求分析 (包括学习新技术) | 50 | 80 |
· Design Spec | · 生成设计文档 | 20 | 20 |
· Design Review | · 设计复审 (和同事审核设计文档) | 15 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 20 |
· Design | · 具体设计 | 40 | 80 |
· Coding | · 具体编码 | 150 | 250 |
· Code Review | · 代码复审 | 60 | 70 |
· Test | · 测试(自我测试,修改代码,提交修改) | 100 | 120 |
Reporting | 报告 | 70 | 120 |
· Test Report | · 测试报告 | 60 | 120 |
· Size Measurement | · 计算工作量 | 25 | 25 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 合计 | 700 | 1030 |
二、解题思路
这次作业发布以后,我们都感觉跟以前做过的几个项目有很大的不同。这次项目要求是做一个课堂点名系统。这个项目的两个基本功能点是,加载学生名单、随机抽取学生,该项目依靠WinForm实现。
此次项目,老师在课堂上给予了我们很大的帮助。该项目的主要功能由以下几个类共同实现:
1、DaoLayer(实现操作)
2、DataBase(数据)
3、Entity(操作)
接口的名字,功能,接口与接口间的继承关系进行设计;好的接口设计可以增强代码可读性和易用性,便于操作。
三、代码复审
1、代码规范
参考链接:链接
2、代码互审
我们是室友在一间寝室,所以我们完成这个项目都是一起讨论编程的,因此没有发现什么大的问题,只是在合并时遇到了很大的问题,并按照代码规范做了一定的修改。
四、代码说明
(1) 登录代码,与设置的窗体属性连接,我们在代码中添加了admin账户名与密码,并没有使用数据库,并且添加新的线程实现窗体跳转的功能
public partial class FrmLogin : Form
{
public FrmLogin()
{
InitializeComponent();
}
/// <summary>
/// 退出程序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
/// <summary>
/// 登录事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLogin_Click(object sender, EventArgs e)
{
//1. 获取数据
//从TextBox中获取用户输入信息
string userName = this.txtUserNo.Text;
string userPassword = this.txtpassword.Text;
//2. 验证数据
// 验证用户输入是否为空,若为空,提示用户信息
if (userName.Equals("") || userPassword.Equals(""))
{
MessageBox.Show("用户名或密码不能为空!");
}
// 若不为空,验证用户名和密码是否与数据库匹配
// 这里只做字符串对比验证
else
{
//用户名和密码验证正确,提示成功,并执行跳转界面。
if (userName.Equals("admin") && userPassword.Equals("admin"))
{
MessageBox.Show("登录成功!");
this.DialogResult = DialogResult.OK;
this.Dispose();
this.Close();
Thread thread = new Thread(()=> {
Application.Run(new WinformControlUse.FrmStudent());
});
thread.Start();
}
//用户名和密码验证错误,提示错误。
else
{
MessageBox.Show("用户名或密码错误!");
}
}
}
(2) 加载总人数,我引用了老师所写的一个方法,成功显示人数
this.stunum.Text = "学生人数:" + stuDao.getStudentRecordsNums();
(3) 其余主窗体的代码说明,请参考我的结对队友的博客。链接
效果图
五、单元测试功能
1、单元测试思路
我在老师的代码基础上找寻方法时只找到了我们之前所使用的的StudentRecordsNums方法能够引用并且适合单元测试,于是我们设置了一个返回值,判断结果是否正确。
2、单元测试代码
public class UnitTest1
{
[Fact]
public void Test1()
{
int num = new DaoLayer.StudentDAO().getStudentRecordsNums();
Assert.Equal(84, num);
}
}
3、单元测试结果
六、创新部分
我们在老师的代码基础上,增加了登录功能,并且实现了窗体之间的跳转,对点名程序增加了安全性,另外附加了一个显示学生人数的小功能,最后我们将加载数据的数据进度调快了。
七、结对过程及照片
此次和我结对的是师志杰同学,我们一起讨论了我们的设计思路的可行性,在老师的代码基础上进行创新,再一起填写PSP表格并且进行了分工,中途我们遇到了很多问题,但我们都通过查阅资料完成。
八、总结和感想
1、这次作业因为有老师的帮助,所以在代码编辑方面我们做的不是特别多,做起来也比较顺利。
2、我觉得结对编程这种项目比较考验两个人的合作性,是能提高效率的一种方法。
3、PSP表格合理安排了时间,从而提高了一定的效率。
4、在GIT的操作还是比较困难,在提交代码的过程中我们还是遇到了很多问题,比如在代码合并的过程中,我不小心上传了错误的文件夹导致合并代码有两个程序,最后我们重新上传并且成功,git我们还需要多加练习,熟悉操作才行。