homework-03

1.分工准备

  这次的作业是结对编程,因为一些原因我们的队伍一共有三个人,梁杰、 夏天晗、谢祖三。大家不在一个班,平时碰面机会比较少,于是我们决定周六上午集中在梁杰的寝室讨论这次作业的相关问题。

  第一个比较大的问题是使用什么语言来编写代码。我和梁杰使用的是Python,谢祖三则使用JAVA。而第三次作业实际上是对第二次作业的一次拓展,所以我们对比了一 下第二次的作业代码,选择了我的代码作为第三次作业的基础,编程语言也顺理成章地定为了Python。

  第一个问题敲定之后,下面就是分工了。因为谢祖三同学使用的是JAVA语言,所以编码的工作就落到了我和梁杰的身上。虽然编程语言不通,但是编程思想是相通的,所以我们决定让谢祖三同学来做代码复审以及相关测试的工作。而梁杰之前开发过Python的应用,对wxpython(一个写Python界面的库)比较熟悉,所以决定由梁杰来开发界面部分,由我来处理一些其他工作。

 

 

2.具体思路

  第三次作业乍一看好像和第二次差不多,但是经过仔细分析之后我们发现第3次作业中其实有一些难点。对应每个难点我们又着重讨论,最后确定了一套基本思路:

  难点1:第二次作业的代码不能直接使用,因为第二次作业中只记录了最终的数字和。

  解决办法:我们在第2次作业的基础上进行修改,在找最大值的过程中将最优子矩阵也同时记录下来,这样才能画出对应的矩形。

 

  难点2:保证只有一个界面在系统中运行,并且还要进行更新。

  解决办法:这个确实很难做到。我们查看了设计模式中的单例模式,经过研究后发 现单例模式适用情景是一个程序中只有一个类实例,而第3次作业其实并不是一个单例模式,只能说是“单界面”。单界面本身并不难做到,只要在程序运行的开头 判断一下是否已经有界面即可。但是难点就在于,如果在已经有界面的情况下再次运行命令,不仅要保证单界面,还要使新命令的结果也添加到界面上。这个最主要的问题就是如何使新命令传递给已经存在的界面。经过激烈的讨论,我们最后选定了一个解决方案,就是通过文件的方式来为主界面添加新命令。具体思路就是,我 们有一个data文件,文件当中存储的是当前的所有命令。主界面会定期访问data文件,从文件中读取所有命令,如果发现有新命令就刷新界面。如果在已经 有一个主界面的情况下再次运行命令,则会将新命令添加到data文件中并退出。这样就变相实现了通信。显然不是很漂亮的解决办法,但是至少在一定程度上解决了问题。

 

  难点3:如何让用户可以移动矩形

  解决办法:虽然这个是选做,但是我们还是决定做一下,锻炼一下能力。经过讨论,我们最后的解决方法是,先将当前tab的矩形储存到一个临时数组中,然后再根据用户的移动方向,将临时数组中的矩形移动之后再写回tab中,这样就实现了移动矩形。虽然没有形成轮胎那样直观的图形转化,但还是能让人更好地理解问题的。

 

 

3.实际编写

  讨论出思路之后,我们就开始了实际编写代码。因为之前思路和分工都已经很明确了,所以编写起来也不是很费力。偶尔遇到一些小问题大家就会马上讨论迅速解决。每写完一个小功能,谢祖三同学就会马上进行代码复审以确定代码没有问题。相对于梁杰同学,我的编码能力还是相对薄弱,代码风格也较为混乱,在编码过程中多次被谢祖三、梁杰指出代码中的不规范之处,让我体会到了自己的不足。

 

 

4.测试功能

  我们选择的测试方法是人工测试。因为这次作业涉及到运行多条命令,还有界面的操作,所以我们使用人工进行测试。各功能测试截图如下:

  

  运行主界面:

$ python homework03.py \\v \\a \\h input1.txt

  

  可以看到出现了一个tab,显示的是结果。红色代表最优子矩阵。

 

  在已经有主界面的情况下再次运行命令:

$ python homework03.py \\h input1.txt

  

  可以看到界面中出现了新的tab。同时注意到,根据命令行参数不同,矩形可以移动的方向也会不一样。如果只有\\h参数则只能左右移动。因为\\h是代表水平相连。

 

  点击剪头向右移动:

  

  可以看到矩阵向右移动了一列,之前的最后一列移到了第一列。

 

  然后向左移动两次:

  向左两次

 

  

  关闭tab:

  关闭tab

  可以看到窗口底部有命令解释,关闭当前正在查看的tab

 

 

  点击Close之后:

  点击之后  

  可以看到tab被关掉了

 

  退出程序:

  退出程序

  点击之后退出程序

  

5.总结

  这是我们第一次结对编程,虽然大家开始不太习惯,也不太熟练,但是在交流的过程中慢慢掌握了方法,互相之间越来越熟悉对方的思路。总的来说,虽然有一些小地方还有待继续努力,但是总体来说我们已经感受到了结对编程的意义所在,相信经过一次次磨合,我们能做得更有效率更有质量。

  

 

6、老师的问题

  你的同伴有哪些优点 (列出至少三点), 和那些需要改进的地方 (列出至少三点)

  优点:有毅力,思维活跃,开朗,代码功底扎实。

  缺点:容易走神,不习惯长时间编码,不主动

 

  你的代码从 作业2 到 作业3 经历了哪些变化?  哪些代码需要重构 (看关于代码重构的资料), 哪些需要重写,  为什么?

  主要添加了记录最优子矩阵的代码,重写了返回值,将子矩阵也一起返回,方便主界面调用。

 

  你的设计是如何保证 不同的 maxsum.exe 命令行最后在一个GUI 的界面显示的?  (C++ 的设计模式中有 singleton 的概念, 说明一个类的实例如何在一个进程中保持单例, 我们这里谈的是软件如何在操作系统中保持 singleton)

  参考“具体思路”中的详细解释,这里不再赘述。

 

 

7、时间统计

Personal Software Process Stages

时间百

分比(%)

实际花费的

时间 (分钟)

原来估计的时间 (分钟)

计划

 10%  24  18

·         估计这个任务需要多少时间,

把工作细化并大致排序

 10%  24  18

开发

 85%  204  153

·         需求分析 (包括学习新技术)

 15%  36  27

·         设计复审 (和同事审核设计文

)

 10%  24  18

·         代码规范 (制定合适的规范)

 5%  12  9

·         具体设计

 10%  24  18

·         具体编码

 35%  84  63

·         代码复审

 5%  12 9

·         测试(自我测试,修改代码,

提交修改)

 5%  12 9

总结报告

 5%  12  9
总计 100% 总用时  240
总估计的用时 180
posted @ 2013-10-13 11:10  比企鹅  阅读(199)  评论(0编辑  收藏  举报