结对编程项目总结-带UI的小初高数学学习软件


创新课程结对编程题目及基本需求,可参考:

本篇博客基于创新课程个人编程项目,可参考:

本篇博客主要基于以下几个方面对本次的结对编程进行评价:

           1.  如何复用个人项目及课堂上学到的知识实现结对编程项目的敏捷开发(简易)

          2.  结对编程中收获的诸多经验

          3.  在结对编程项目中的失误及相关教训

          4.  项目总结

一. 如何复用个人项目实现结对编程项目

   我们认为结对编程的两个人实际上已经算是一个小型的项目组了,所以我们考虑运用软件工程导论课程中的相关知识优化我们项目的进

 程,我们尝试构建了用例模型并进行项目的简单敏捷开发实践,以下是相关步骤

           1. 找到所有的参与者用例并进行简单描述

                这里我们考虑结对编程双方作为参与者的模拟,比如做题的学生以及后台的管理人员,用例在需求文档中其实已经

              以需求的形式给出,我们在学生和管理人员的角度又给出了诸如退出系统,跳转返回等用例。

           2. 进行用例的编写,按照事件的重要程度进行划分。         

在这里我们首先将用例分为三大部分:                

1)登录界面的使用

2)登入界面的使用

3)做题完成的后的界面使用

             

           

            再将三个用例更加细化为多个用例,如登录界面要有注册和登录两个用例,登入界面要有答题和修改密码两个用例,结束

            界面要有重新做题和退出系统两个用例,而针对用例的重要程度来讲,因为老师给出的需求是必须要完成的,所以我们将

            包含这些需求的用例设为第一重要,将我们自己想到的用例设为第二重要。值得一提的是:在最后,我们确实因为时间

            题做不完全部的用例,这种分级制度很好地帮助我们舍弃了一些不太重要的需求用例,如查看用户答题情况等需求用例。

            

           下面,我将依据三大用例进行讲解:

  1) 登录界面的使用

      因为要做UI相关的内容,我们考虑了几个不同的语言,最后考虑运用python中的tkinter模块,因为它的风格类似于html,且更加简约高效。

      基本的设计思路为:

             主界面>>背景画幕>>两个输入框接收用户姓名、密码>>一个login按钮跳转到登入界面>>一个regisister按钮跳转到注册界面

             注册界面>>一个输入框接收电话并发送验证码>>一个确认按钮跳转到注册输入界面

             注册输入界面>>输入相关信息的输入框>>一个regisister按钮进行后台注册逻辑并提示相关信息

             验证码:主要通过榛子云所提供的SDK进行验证码发送及验证

             用户数据的储存:主要通过python提供的pickle进行加密存储

                                       界面展示:

                                       

  2) 登入界面的使用

     登入界面的主要需求就是两个内容,一个是进入答题界面,一个是进行修改密码。

     我们设计的基本思路为:

             登入界面>>两个按钮分别进入答题界面和修改密码界面,同时显示开始答题和修改密码

             修改密码>>进入修改密码界面>>几个输入框分别输入修改密码的信息>>一个按钮进入修改密码的判断逻辑>>退出修改密码界面

             开始答题>>一个输入框输入题目数量,并提示输入,一个按钮进入难度选择界面>>进入选择难度界面>>三个按钮分别代表三个难

             度的选择,一个按钮进入答题界面

             答题界面>.>四个选项分别代表四个答案并提示内容,一个文本提示题目,一个按钮进入下一题>> 点击按钮后台进行逻辑判断并

             进入下一题>>最后一题时点击按钮进入登出界面

             答题界面:后台逻辑主要利用个人项目的代码逻辑,但因为语言不同,所以进行了重写。

                                         界面展示:

                                         

                                                                        

 

  3)登出界面的使用

     登入界面的主要需求就是两个内容,一个是重新答题界面,一个是退出界面。

     我们设计的基本思路为:

            重新答题界面>>点击重新答题按钮后,重新进入开始答题的逻辑

            退出界面>>点击退出界面按钮>>进入退出界面逻辑>>退出主界面

                                               界面展示:

                                               

二. 结对编程中的失误与相关教训

         在结对编程中,我们选择了一位同学负责前端一位同学负责后端,然后做完后一起整合的方式进行开发。这很明显是一种非常高效的方式。

  但我们出现了非常之多的问题,我将列举几个比较关键的问题

  1)开发方法的不熟练导致的问题

            虽然我和陆同学知道前后端分开写比较高效,但实际上我们都不明白在tkinter中前后端分别代表着什么意思,很明显在完成任务后,我

      们明白了就是按钮等事件的后台逻辑,但我们刚开始做的时候很明显是一无所知的,所以导致了很多问题,比如后台逻辑我定义的是函数,

      但是陆同学是用类写的,整合起来相当麻烦。同时,我们界面的定义与销毁也相互冲突,可能陆同学用了一个toplevel实现弹出界面,但我

      就直接销毁了主界面并新建了一个界面。同时,我们开发的平台也不一样,我用的是pycharm,陆同学用的是vscode。以及变量的不统一

      等等情况......最后算了下我们整合的时间比开发的时间还要久。

   2)沟通不及时导致的问题

             正如前面所说,我们分好了前后端之后就各自进行了开发,因为开发是这个项目的主题,所以我们预计的7天时间前五天基本就再也没

        有什么交流的情况了,这也是导致问题1出现的原因之一。而且这还带来的一个麻烦的问题就是,我们俩的工作量实际是分配不均与重复的,

        而重复的部分其实就是我们第一次沟通时比较模糊的部分,所以项目的开发时沟通真的时十分重要的。

 

   3) 对代码规范的不熟悉

                我和队员对代码的规范还是不熟悉,首先我们相比个人项目换了语言,其次规范中的内容真的是很多。在这些多种作用下,想要有好

          的规范书写代码的可能真的很低,虽然我们也认真的看了。而且找到了不少不规范的地方,但要大改也非常的麻烦,只能说多去做多学习

          这样我暂时也没找到什么好的速成方法。

   4) 可移植性的问题

                因为前端主要是我来开发的,所以我特意尝试了在几个不同的编码平台去进行运行,发现,在pycharm上运行的结果与在vscode上是不一

          样的,这主要体现在文字、输入框的大小和位置以及画幕的大小位置上。

            

                   我将在pycharm上写的代码原版在pycharm(左)以及vscode(右)上分别进行运行,ABCD四题分别y轴相距100px,但在两个平台

           上四道题有着不同的效果,pycharm上较为正常,但vscode上四题显示不全,因为距离过短,叠加到了一起,导致可视化极差,很影响用

           户的体验和交互。这里我认为是不同编码平台的绝对定位的位置有着不同的大小显示区别,这应该是和软件自身的代码、软件的特性、软

           件的渲染以及不同电脑的分辨率相关的。

三. 得到的相关经验

             对于问题1、3来说,我们虽然在这次结对编程中踩了很多团队开发的坑,导致浪费了非常多的时间,但经历了这一次的结对编程试水,对

      于我们之后的团队开发来讲是非常有效的,从这次的诸多问题中我们都学到了很多,比如了解了前后端的区别,知道了部分较为简单的编码规

      范(这里顺便提一句,c++的规范中很多强调的东西在python中又不强调了,比如说变量最好临近使用空间,但在pyhton的编码规范里又没有了,

      这个非常困惑我,不知道有大佬可以评论区告诉我为什么吗)通过以上的学习经验,我相信我们可以在团队编程中拥有更加高效的开发过程与更

      加好用的开发方法。

             对于问题2来说,我学到的就是去尽量的多跟1开发的同学进行沟通,尤其是在以后的工作中一定要多跟自己代码相关的开发人员等进行多

       样有效的沟通,这是不导致工作白做和工作重做的重要方法。在软件工程导论中,我们学到了修改代码的成本曲线,很显然,我们最好在准备

       阶段就做好相关的交流与实践流程,这会使我们之后的工作是有效的,也会使我们与团队的关系更加的和谐与团结,很显然,这非常有利于我

       们的工作。

              对于问题4来说,我在网上查到了相关的办法。可以选择利用rem单位设置去进行调整,或者直接使用%去进行位置设置,因为这是px的       

       基本特性,很难进行更改。

       

四. 总结

  这次的结对编程,我认为是一次很好的承前启后的项目开发。

        首先,我们通过前期的个人编程训练了一定的代码能力,并与这次结对编程相结合,让我们明白了个人开发与同队开发的不同与区别的

  特点。其次,在这次的结对编程任务中,我学到了UI相关的知识,以及对html、css、javascript等前端方法有了初步的了解,学会了利用pic-

  kle打包文件去进行文件的简单加密与储存,利用榛子云等第三方平台SDK接口去完成一些操作例如短信验证码的发送,使用python中的tkin-

  ter包去完成简单的UI界面的创建,以及前后端代码的交互等等内容,而这种做中学的方式也让我更加深刻的领会到了软件工程导论教授的知

  识在实中的运用以及一些自己似懂非懂的代码与前后端设计在实操的情况下如何去完成,真的极大地提升了我的代码能力与学习兴趣。

        更多的,在这次结对编程中,虽然出现了很多的问题,也造成了我们效率不高,错误频出的结果,但当最终完成了这次的任务,我们得

  到了常多的团队开发的经验。在之后的大型团队编程中,我们运  用在这次编程中学到的方法,那无疑可以让我们更加的上手与高效。所以

  也很想夸夸老师,课程的设置非常的合理,内容难度也衔接有序。 最后,我想说的是,通过这次的开发,我明白了其实很多的困难并不来自

  于代码有多难写,算法有多难实现,而是在于与队员的协作与与    团结,主体设计的宏观结构与思路,开发语言的选择等等问题上。尤其是

  如何学会与团队的其他人相处与合作,真的是非常重要的一件事,这是我在这次的结对编程中学到的非常重要的事,我相信,这也会在我以

  后的学习与工作中,起到非常大的帮助与作用!

        最后,在本次项目的实现过程中,我出现了很多问题,请教了很多人,包括老师、助教、以及班内同学,我发现人还是要厚脸皮一点,

  这种请教的效率要比我自己冥思苦想很久要来的高效很多,而我也会去给一些别的同学去解答问题,这无疑极大地提高了我的团结协作的

  能力,也充分的培养了我的团队精神。当然,在此之前,我一般会先选择去查询相关的资料,在csdn上找解决方案。这也很好地提高了我

  的自我学习能力与资料查找能力。只能说这次项目真的从多方面和多维度提升了我个人的全面素质,真的是一次非常不错的项目经历。

  只想高兴和自豪的说:

  Pair programming, over!

  

 

        

                                       

 

 

相关