湖南大学结对编程项目总结
一,概述
本次项目,我与罗湘然同学进行了结对编程。对需求文档进行分析后,我们选择使用java swing实现一个符合要求的桌面应用。
二、项目需求的实现与对个人项目的复用
1.需求一:用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册;
此需求由于需要实现用户的注册功能,所以我们决定沿用并且扩展之前个人项目的User类。个人项目的User类中只包含用户名与密码这两种信息,我们决定在此类中加上用户的手机号和收到的验证码这两个属性。当用户输入手机号,选择发送验证码时,就创建一个User类的对象,将输入框中的手机号和服务器返回的验证码传入作为此对象的属性之一。User类中设置一个函数,将GUI界面文本输入框中接收到的验证码作为参数传入,如果与对象的验证码属性相同,就设置用户的验证码为空(防止一个验证码重复注册),并且进入下一步用户名和密码的设置。
2.需求二:用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字。用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功;
此需求需要实现用户名的注册和密码的设置功能。个人项目的User类中虽然包含用户名和密码这两个属性,却没有实现添加User类对象的功能。于是我们增添了对User类对象的追加,每次创建成功后,都在存储用户的txt文件中保存新的一行用户数据。至于密码的验证等直接一个正则表达式进行匹配就行了。
3、需求三:密码设置成功后,跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;
此需求与个人项目中的需求完全一致,只不过个人需求的提示与输入等显示在控制台,而此处要求显示新的界面。直接沿用以前的代码,在完成后设置函数进行返回,使用swing中的dispose函数对之前的窗口进行关闭,并且打开新的窗口。
4、需求四:用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,…,直至最 后一题;
由于此需求涉及到了题目的自动生成,因此我们两人选择了直接复用我个人项目中的题目生成代码PaperGeneration.java,为结对编程项目提供生成题目的现成代码。但是个人项目中只有题目的生成,没有题目答案的计算,于是我们利用堆栈的思想对题目的答案进行了计算。得到正确答案后,随机出两个数分别用于正确答案的整数部分和小数部分,以此来生成三个错误的答案。将题目和四个答案一起保存在题目文件中。为了显示,设置了几个label标签,读取到题目等信息后,更改label标签的内容,以此来实现了试卷的显示与选择。
5、需求五:最后一题提交后,界面显示分数,分数根据答对的百分比计算;
由于用于存储题目的文件中也存储了正确答案,所以直接读取比较,就能进行分数的计算。
6、需求六:用户在分数界面可选择退出或继续做题;
此处的逻辑十分简单,设置监听器,判断用户点击了哪一个按钮,就新建哪一个类的窗口,并且关闭当前窗口。
7.需求七:实现图形化的程序
此处图形化程序使用了java swing。由于java swing的界面有一些丑,所以我们选择了使用插件windowbuilder来加快开发与美化界面的操作。做好界面后,只需要调用User和Paper中的一些接口,进行页面的创建和关闭或者弹窗提醒等操作就行了。
三,经验与总结
结对编程中最重要的还是交流。例如编程初期,我们对前端的显示风格以及界面和后端的接口产生了很多不同的意见。例如我做页面,完成了之后她却不喜欢显示的风格。她完成后端留下的一些接口存在问题,有一些接口并不利于界面的实现。这些问题,应该提前交流清楚再做,这样完成之后再重新修改浪费了很多的时间。还有一些具体的任务没有分配清楚,例如用户名和密码的验证,我觉得这是界面获取文本框输入时就该判断的事情,于是使用了正则表达式进行判断,她觉得这是后端该负责的事,写了一个函数来判断,我们都认为这是自己的工作,都没有与对方进一步的确认与交流。于是到了我们工作对接的时候,发现了一些工作的重复。总的来说,这些都是缺少沟通所造成的问题。
我觉得这次结对编程主要有以下几条经验:
1、合作编码,重在沟通
由于编程初期的交流的缺乏,我们浪费了许多的时间。不过后来我们意识到了这件事,参照对方的意见与经验对程序进行了改进与对接。在友好沟通的基础上,我们的开发速度明显有了提高,很快就完成了任务。如果与人合作,交流真的是非常重要的。良好的交流能使你避免重复的,无意义的工作,做出大家都满意的程序。此外,由于对对方所完成部分的不熟悉,充分的交流能够使对接的速度明显提高。
2. 前后端分离,提高效率
此次编码,我负责前端界面的制作,罗大宝同学则负责后端程序的完善,这样分开开发,只需要完成自己该做的部分,专注于自己的部分,开发的效率很快。不过这一开发应该是在进行了良好交流的基础之上实现的,没有交流和规划,一切都是白谈。
3.充分测试
程序做好后,应该设想出可能遇到的各种情况,对程序的可靠性作充分的验证,然后对程序的功能做出完善与改进。我们完成程序后,从不同的角度去进行测试,确实发现了许多的问题。如此重复测试,程序的可靠性得到了提高。
浙公网安备 33010602011771号