结对编程之经验教训总结

“宝剑锋从磨砺出,梅花香自苦寒来。”

整整做了一个星期,终于将结对编程项目做完了,多少心酸只有自己知道,多少成就感也只有自己知道。这是真正自己动手,从最初的一头雾水到现在水到渠成,为自己鞠一把辛酸泪的同时,不禁也有一丝自豪:我还是很厉害的,用心去做还是能做出来的。

项目思路

我和队友的个人项目都是用C++写的,因此,这个结对编程我们选择的软件是QT。

我们把项目分为了两个部分:登录注册部分、题目显示部分。

登录注册部分我们做了四个界面:登录界面、注册界面、设置密码界面和修改密码界面;

题目显示部分有三个界面:选择类型界面、答题界面和成绩界面。

在制作时,我们先做出界面的基本框架,运用现学的知识,使用槽对界面进行连接,通过这种方式建立类与类之间的内部关系。然后我们再实现各个部件的功能,完成相应模块的代码,当然这其中出现了很多bug,我们一直在不停的debug。最后,当功能点都实现了之后,我们又花了一天半的时间对界面进行布局美化,同时测试运行,完善功能。

个人项目复用

虽然这个结对编程和个人项目有所关联,但是在实现的时候并不是很一样,除了生成试卷的函数进行了复用,其他的基本上都是重新写的。因为这里用户名和密码不是固定的几个,而是要用手机号注册,密码也是用户自己设置的,因此,个人项目的登录在这里就无法直接用了。个人项目中并没有计算出题目的答案,而在结对编程中又要有正确答案的选项,因此这部分也是要重新写的。而查重那一部分,由于个人项目的要求是同一个账户生成的试题不能重复,因此需要从文件的角度来进行查重,但是结对编程只需要保证一套卷子的试题不重复就可以了,这里使用vector数组就可以了。个人项目需要切换账号,但是结对编程并没有这个要求。综上所述,我和队友都感觉只有生成试卷那部分代码重用了,其余都是要重新写。当然,生成试卷的这部分代码是整个项目的核心,由于个人项目完成了,在这方面我们就省了很多时间,所以我们的结对编程的时间基本上都在可视化界面上。

教训总结

1、结对编程中,我得到一个结论,那就是1+1>2,我自认为,如果不是合作编程,在遇到问题我一定会花费更多的时间解决,我做出来的东西也会有很多功能没有实现,很多细节没有考虑。最重要的是,当思路陷入死局的时候,两个人一起讨论更容易打开思路,走出困境。

2、要养成一个记录的好习惯。在我们结对编程刚开始的时候,遇到很多错误,但是通常我们是遇到一个解决一个,可是到了最后却发现前面解决过的问题,后面又不会解决了。这里最明显的是输出问题,由于我们对qt语言的不熟悉,不怎么会debug,结果不对的时候就把中间变量输出,但是又不知道怎么输出QString变量。最初找到了一种解决方案,输出了一次,解决了当时的问题,但是后来需要的时候,又忘了如何输出,又重新百度,浪费了很多时间。然后从这个时候开始,我们才意识到应该用一个文档记录我们遇到的问题,并附上解决方案,这样才会学到更多的东西。文章最后附上了我们从开始记录之后记录到的问题。

3、学无止境。虽然这个项目做完了,但是我知道,这个项目实现的功能其实很简陋,还有可能在后面测试的时候又发现了现在没有发现的问题。在最后完善代码的阶段,每次我们感觉已经很完美了,但是一测试,又有一些小小的问题,然后我们就要开始修改。好在,这个项目我们都是分类写的,遇到问题修改起来还是有头绪有思路的,这又一次证明了模块化编程对于维护修改的重要性。

4、沟通很重要。在整个项目,由于沟通的问题,原本想表达的意思对方get不到,因此起了好多次争执,其中还有几次我们争执到最后发现我们要表达的意思是一样的。这样子的情况花费了我们很多时间,但同时也锻炼了我们,到后面我们交流起来就比开始的时候顺畅多了。同时,我个人习惯的不同,我个人习惯由难到简,由面到点,但是队友习惯从简入难,由点及面,这个也不能说谁对谁错,主要还是要交流沟通,互通有无,取长补短。

5、控制情绪,心态平和的写代码。由于这个结对编程的工作量大,时间紧,中间又夹杂着很多其他的事情,因此我们都有些暴躁,尤其是遇到问题,就更加暴躁了,唉声叹气传递负能量,最终也不能解决问题。后来我们学习其他小组,彼此打气,互相鼓励,效率高多了。

总而言之,每次的实验都是一次学习进步的机会,这次的结对编程,真的让我们受益颇多。

附录:

1、输出QString user;
方法一:
QByteArray userName = userRead.toLocal8Bit();
std::cout<<userName.data()<<std::endl;//需要头文件iostream
方法二:
user.sprintf("%s",user);
方法三:
cout<<code.toStdString()<<endl;//需要头文件iostream和using namespace std;
2、connect函数中槽不能和自定义命名相同,不然会执行两次,比如说logindialog中。
3、正则表达式验证密码6-10位,必须包含大小写字母和数字
4、逐行读取文件:
QFile readFile(userRead);
QTextStream readStream(&readFile);
while(!readStream.atEnd()){//注意这里是readStream而不是readFile
}
5、头文件中有using namespace std的时候,可以直接当做C++使用,即string、cout等都可以直接用。
6、在定义对象的时候,会自动调用构造函数。在构造函数的时候,传参还没有完成,因此从构造函数中输出的是固定的初始值。
7、界面美化问题
由于不同电脑的分辨率等不同,因此会出现在一台电脑上看起来正常,但是在其他电脑上控件不能完全显示的问题。
解决方案是将文本框与界面同宽,然后居中设置、右对齐设置等。
8、当关闭一个界面的时候,里面的所有数据都关闭了,因此如果需要保留数据,在重新打开的时候,一定要再次进行赋值。
这里是因为我们测试修改密码的那个功能时,登录状态下不能修改两次以上,我们不停的尝试,后来发现,从修改界面回到选择界面的时候,是新建的窗口,因此原来从登录界面传过来的数据就已经不在了,如果想要一直保存这个数据,在修改界面回到选择界面之前,将用户名再次传入。

转载于:https://www.cnblogs.com/qszy-yhh/p/11601249.html

结对编程——经验教训总结相关推荐

  1. 结对编程项目的收获与总结(支持UI背景与背景音乐的刷题器)

    本次的结对编程项目在假期前就公布了需求,也让我们这次的假期很是充实,感觉本次结对与搭档合作很愉快也收获颇多,接下来具体讲下对我们组本次结对编程项目的一些收获与总结,主要分为后端个人项目复用,前端UI设 ...

  2. 结对编程之经验教训总结

    一.项目要求 用户: 小学.初中和高中学生. 功能: 1.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: 2.用户完成注册后,界面提示设置密码,用户输入两次密码 ...

  3. 程序编写经验教训_编写38本编程书籍的经验教训

    程序编写经验教训 重点 (Top highlight) Unless you've spent a couple of decades coding, you may not remember the ...

  4. 总结在java编程中的经验教训

    J2EE综合--总结在java编程中的经验教训 我实际工作中的经验教训,在这里与大家共享,空的字符串是"",不带空格outputStream在打印时,打印的内容后面不要加/n,否则 ...

  5. 软工结对编程之二——UI设计(10061191洪虹10061162刘俊伟)

    本次作业是软工课最后一次大作业,电梯程序的改良优化,我们的工程共有以下几个文件: 代码量约为1500行,以下为代码截图: 运行时虽然速度慢点,但是功能上没有问题,部分运行截图如下: 本次结对编程,时间 ...

  6. 使用Flutter完成10个商业项目后的经验教训

    作者:Łukasz Kosman 和 Jakub Wojtczak 原文:https://medium.com/swlh/lessons-learned-after-making-the-first- ...

  7. 使用Flutter完成10个商业项目后的经验教训,2021大厂安卓面试集合

    自从我们交付了第一个应用程序并从客户那里收集到了五星级好评,我们认为,我们应该开始更加积极地向客户推荐Flutter.从2019年5月开始,我们决定Flutter将是我们移动技术的第一选择.同时,我们 ...

  8. 结对编程项目总结 by:陈宏伟刘益

    结对编程项目在欢快的国庆假期中也顺利结束了.从最初拿到结对编程项目的思考,再到一步一步实现,中间经历了一个漫长的过程.在我和队友的多次协商下,最终我们还是选择使用基于python来实现这一次结对编程项 ...

  9. 结对编程_导航之前,即使不结对编程,也要学会驾驶

    结对编程 有一天,我18岁那年,我和另外29个男孩坐在一个小小的演讲厅里. 这是我们在墨尔本大学获得计算机科学学位的第一天早晨. 一个男人,节,有点ha,走进来,站在讲台上,扫视着我们的脸,叹了口气, ...

最新文章

  1. 用css绘制各种形状
  2. n分频器 verilog_基于Verilog的分频器实现
  3. python发微信工资条_帮公司财务妹子写了个“群发工资条”的Python脚本!
  4. TCP/IP参考模型、五层参考模型
  5. sql server2008数据库迁移的两种方案
  6. bat 命令返回结果_【批处理】带你入门命令行
  7. 如何查看chrome的版本
  8. 非线性方程求解 matlab,MATLAB应用 求解非线性方程
  9. html语言标题怎么居中,html标题栏代码 HTML中怎么设置标题居中
  10. 皮亚诺的数概念起点和算术公理1-2告诉我们什么?—— 皮亚诺读后之四
  11. Ubuntu清理系统垃圾 命令
  12. 计算机系统结构复习(四):Pipelining流水线
  13. Pytorch transformers tokenizer 分词器词汇表添加新的词语和embedding
  14. GPS从入门到放弃(三)、GPS坐标系
  15. 随机森林输出特征重要程度
  16. 华为计算机技能,华为笔记本电脑技术参数及功能一览
  17. 第三人称的英语作文我和我的计算机,以第三人称介绍自己的朋友英语作文
  18. MATLAB App Designer GUI开发从0到1(一)
  19. 跟着iMeta学做图|circlize绘制和弦图展示样本物种相对丰度
  20. nginx和gunicorn相关,反向代理和正向代理区别,静态资源和动态资源

热门文章

  1. 近期技术讨论贴(持续更新:12-10)
  2. app注册协议做法和注意事项
  3. 开源进企业8月27日活动
  4. ice java例子,ICE java 范例
  5. WPF--3Dmax+blend+WPF综合运用
  6. Tomcat构建企业级高负载WEB服务器之部署jspgou商城
  7. HEVD--Win7_x32下内核池溢出利用
  8. 利用Java实现的图片中文字识别,你学会了吗?
  9. 2014阿里实习生面试题——mysql如何实现索引的
  10. 苹果CMS海螺模板V16魔改版2.0修复bug分享给大家