结对项目总结
软件1904陈啸天201926010407
1. 程序整体框架
- 目标:实现一个带UI的小初高数学学习软件
- 编程语言:Java
- 涉及技术:Java SE,Java Swing GUI,腾讯云短信jdk
- 源码结构如下:
- 上述结构,按功能分包
- main:界面的主框架,以及程序的入口
- model:实现各个功能的模块
- page:程序UI的各个界面
- tencentcloudapi:腾讯云短信相关功能
2. 关于复用个人项目
2.1 Paper类的复用
-
个人项目也写过Paper类
-
但当时功能更注重在指定文件夹下生成试卷文件
-
对于结对项目,这些功能被弃用
-
取而代之的是根据业务需求,补充了Paper类应该新增的属性和方法
-
如下是Paper类的一个构造函数,传入年级、数目,即可实例化一个相应年级的试卷
-
这就很好复用了个人项目中的代码以及思想
2.2 Question类的复用
-
个人项目中没有写Question类
-
但是有很多关于Question的方法,比如生成题目,添加括号等等
-
因为结对项目需求多,功能复杂,最终还是决定写一个Question类
-
并将个人项目中关于Question的方法,复用到这个类中
-
如下是Question类中生成题目主体的方法的部分截图:
-
类似还有很多方法,都是复用了个人项目中关于题目功能的函数
2.3 User类的复用
-
个人项目中有User类
-
但当时User类非常简单,仅有一个登录方法
-
结对项目功能需求复杂,不仅有登录,还有注册,还有各种验证
-
所以对于User类的复用,可以简单概括如下
- User类的一些属性:如用户名、密码、年级都保留了下来,但也新增了手机号这个属性
- 当然对于年级这个属性是可以不要的,但我没有代码洁癖,考虑到扩展性,便没有弃用
- 登录方法不好复用,只能重写,因为此时最好使用手机号+密码登录,并且需要进一步验证
-
User类也新增了其他方法:
- 新用户注册
- 修改密码
- 强密码类型检测
-
如下是强密码类型检测方法:(Java正则表达式)(强密码必须包含大小写字母和数字)
-
总结来说,User类不仅仅是复用,更多的是依据需求,新增更多的方法
3. 功能测试
以下仅为基础功能测试,还有很多优化上的细节没有展示,比如对所有输入均有正则表达式的验证等等
3.1 注册功能
- 填写手机发送验证
- 收取验证码
- 填写用户名和密码
- 注册成功
3.2 登录功能
-
登录界面
-
登陆成功后界面
3.3 做题功能
- 做题界面
- 作答结束
3.4 修改密码
- 修改密码界面
- 修改失败
- 修改成功
4. 结对总结
4.1 经验
- 明确分工
- 此次结对项目,分工明确,我负责后台逻辑,张嘉嘉负责界面UI
- 相当于前后台分离开发,项目初期都可以相互独立编码
- 分工明确,耦合度低,大大提高了开发效率
- 及时沟通
- 虽然说前后台分离,不过一些需求界面和功能是不分家的
- 这时候就需要及时联络对方,弄清对方的设计与意图
- 印象较深的沟通点:
- 登录时,未注册账号登录前台重复提示的bug
- 题目数量限定范围,前台要给提示信息,后台要写逻辑判断,需要商定数量的取值
- 修改密码时,需要输入两遍新密码
- 等等
- 及时对接
- 即使前后台分离,互相提供API接口,也会有很多细节需要考虑
- 因为可能对接不上或者对接后出错,如果不及时对接,最后可能会延误工期
- 还好我们对接及时,虽然发现了很多问题,不过来得及修改
- 印象较深的如下:
- 前台接收密码时,给的API是字符数组类型,做正则判断时出错,需要转换成字符串类型
- 后台生成的题目,前台无法正常显示
- 后台用户信息如用户名在前台显示错误
- 等等
4.2 教训
- 编码风格要提前统一
- 我使用的是Google的java风格,而嘉嘉的风格并不是
- 对接时看她的变量方法等等,因为命名不符合规范,读起来没有语义性,不好理解
- 另一方面,缩进换行不统一,和我平时编程习惯有出入,也不是很舒适
- 一些问题需要提前商议,不能按自己的想法写
- 虽然前后台分离,不过一些功能或多或少需要前后台同时考虑
- 此时就不能按照自己的想法写
- 否则就是对接时出错
- 如输入题目数量,嘉嘉那边提示可以传399,我这边却校验只能接收1030,就有问题
- 如果提前商量好,就免去了后续修改的麻烦
- 互相要及时测试
- 通常旁观者清,写代码也是一样
- 我的代码在我看来没有bug,但在前台看来就可能有问题
- 互相测试代码,可以分别站在开发的不同角度寻找bug
- 测试不能拖,要么边开发边测试,要么开发完毕后立即测试
4.3 心得体会
- 结对编程是一次全新的体验,我收获很大,个人编程时我仅仅着眼于自己,不会去考虑别人,更不会想着会有一个团队。
- 而结对编程,就是一次小的团队合作,两个人就是一个团队。
- 此时,我就不能仅仅考虑自己,我还要考虑他人,我不能仅仅着眼于自己的技术,我还需要考虑他人的能力。
- 我擅长写后台代码逻辑,嘉嘉擅长做前台页面UI设计,正好依次分工
- 我们各有所长,各自发挥自己最大的长处,大大提高了整个项目的实现效率
- 当然,对我来说最大的收获是,我开始关注团队了