0 小组成员

李世钰 / 2017202110264

王成科 / 2017282110249

1 项目 GitHub 地址 && 演示地址

GitHub: https://github.com/lishiyuwhu/Homework/tree/master/SE/HW3

2 预估耗时

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划    
· Estimate · 估计这个任务需要多少时间 20 15
Development 开发    
· Analysis · 需求分析 (包括学习新技术) 420 600
· Design Spec · 生成设计文档 30 20
· Design Review · 设计复审 (和同事审核设计文档) 60 80
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 30 50
· Coding · 具体编码 120 180
· Code Review · 代码复审 30 20
· Test · 测试(自我测试,修改代码,提交修改) 60 40
Reporting 报告    
· Test Report · 测试报告 20 10
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 50
合计   860 1085

3 解题思路

开始的时候, 首先确定使用python进行开发. 之后就GUI工具进行了比较, 选用了PyQt, 最终决定PyQt5+python3的开发环境. 资料并不多, 开始看了使用一些中文资料, 而后PyQt5 tutorial配合官方文档进行学习.

计时模块方面, 原意是直接在旁边写一个时钟. 但学习时发现应该使用多线程, 否则会计时不准. 最后采用的方案是调用clock()函数, 每次检查答案时会返回时间.

三个目标:

  • 记录对错: 生成一个txt用来存储记录

    完成

  • 计时: 主界面旁边再写个计时器模块

    多线程

    调用clock()

  • 多语言: 三个语言的txt, 需要使用时候从中调用

    使用Qt的多语言工具

4 设计实现过程

首先修改了HW2, 得到一个

def produceOpListMid():  # 返回一个[str(OpList), ANS]  i.e.[' 4/3 + 2/3 ÷ 9/7 - 7/8', [Fraction(211, 216)]]

函数作为GUI调用的主体.

实现顺序:

基本功能GUI -> 记录对错 -> 计时功能 -> 多语言切换

5 代码说明

两个槽函数来实现记录存储. 在运行目录下生成一个file.txt记录答对的题目数和已答题的数目

def newfile(self):
f = open('file.txt', 'w')
f.write('0\n0')
f.close()
clock()
self.putstrin()
self.scoreEdit.setText(
'正确题目数: 0 \n题目总数: 0 \n分数: 无 \n时间%.f s' % 0) def loadfile(self):
global rightnum, totalnum
try:
f = open('file.txt', 'r')
except:
f = open('file.txt', 'w')
f.write('0\n0') twonum = f.readlines()
f.close()
rightnum = int(twonum[0])
totalnum = int(twonum[1])
if totalnum == 0:
self.scoreEdit.setText(
'正确题目数: 0 \n题目总数: 0 \n分数: 无 \n时间%.f s' % 0)
else:
self.outputtobox()

6 测试运行

对修改后的convAndPrint2(equList)进行了单元测试, 发现了一个括号处理的问题.

生成题目

输入答案

给出正误判断和用时情况

7 合作情况

7.1 李世钰

  经过前期讨论, 确定由我确定主体框架, 使用的语言, GUI工具等. 我首先负责学习资料的搜集, GUI的绘制和部分功能的实现, 之后王成科负责剩余的功能和文书.

  两个人结对编程的视野会更开阔. 比如我在搜集资料的时候, 看到计时器模块基本都是需要多线程的操作以防主线程卡顿造成计时不准. 但之后对接的时候, 结对伙伴提出其实并不用真的需要一个后台时钟, 只要每次判题显示对错时能够同时显示一个经过的时间即可. 最后采用了clock()函数在每次刷新成绩栏的时候调用.

7.2 王成科

  本次我主要负责实现了计时模块的修改和GUI的部分修改。

  

8 项目小结

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划    
· Estimate · 估计这个任务需要多少时间 20 15
Development 开发    
· Analysis · 需求分析 (包括学习新技术) 420 600
· Design Spec · 生成设计文档 30 20
· Design Review · 设计复审 (和同事审核设计文档) 60 80
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 30 50
· Coding · 具体编码 120 180
· Code Review · 代码复审 30 20
· Test · 测试(自我测试,修改代码,提交修改) 60 40
Reporting 报告    
· Test Report · 测试报告 20 10
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 50
合计   860 1085

8.1 李世钰

最大的问题出现在了多语言动态切换. 首先是中文引起的乱码, 查阅资料发现Qt Linguist不能处理中文转英文, 但可以英文转其他语言, 于是把源文件重写成了英文. 而后通过Qt Linguist进行翻译, 实现了静态加载的翻译. 但动态切换方面, 需要在切换之后刷新GUI, 而刷新GUI的retranslateUi()函数每次使用均会造成GUI崩溃. 暂时查不到原因.

~~初步原因推测是UI和逻辑分离造成?~~
然而并不是

这次最大的收获是有了和别人一起编程的经验, 和想象中还是不太一样的, 要统一两个人的想法和方向, 需要很多的交流. git的使用上也出现了一些问题.还有, 见识到了GUI的大体框架, 没有接触之前觉得GUI的绘制和后端的编码很难整合, 接触了UI和逻辑分离的方法之后感觉打开了思路.

还有一个比较大的收获是关于新技术的学习方面. 开始接触PyQt的时候感觉一头雾水, 各种新的概念都不知道什么意思. 但现在看来浪费了一些时间在某些并不核心的东西上. 重要的是应该先把握开发流程搞清楚, 每一块都是干什么. 理解了UI逻辑分离的概念, 就明白为什么有的demo把所有代码都写在一起, 而使用Qtdesigner的demo都是分块编写的. 先把握主干, 然后简单实现功能work起来再添加功能.

不足的地方就是, 看到别人写的之后, 觉得还是直接写一个table然后生成题目放在里面的展示形式更好, 我这个操作有点麻烦了. 还有程序中全局变量使用总是胆战心惊的, 还是写一个专门管理这几个变量的函数更安全一点.

8.2 王成科

上一阶段计算器是java实现的,这次实现界面使用python,又一次学习机会,结对编程也收获很多。

一开始不喜欢有人对自己写着东西指手画脚的,但是队友提供的思路,给出的意见,会帮助自己换一个新思路,慢慢的效率也会提升一些,更早发现问题也更快能解决,团队的重要性应该就是从两个人的合作开始体现的吧。
另外一个比较大的收获是从PyQt5实例源码中看到的python编程的精悍之处,自己本身逻辑思考能力一般,感觉对PyQt5的了解还只是冰山一角,但是这应该是很好的学习教材,无论是对于编程,代码规范和思考能力,我会继续膜拜的。

9 结对照片

10 中程汇报

进展:

  实现了作业2基本功能的GUI. 作业3要求尚未添加

问题:

  网上PyQt5的资料不多, 全靠读文档, 功能添加进展缓慢. 以及一个未查原因的几率崩溃Bug

软件工程结对编程-2017282110264&2017282110249的更多相关文章

  1. 11061160_11061151_Pair Project: Elevator Scheduler软件工程结对编程作业总结

    软件工程结对编程作业总结 11061160  顾泽鹏 11061151  庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...

  2. [2019BUAA软件工程]结对编程感想

    结对编程感想 写在前面   本博客为笔者在完成软件工程结对编程任务后对于编程过程.最终得分的一些感想与经验分享.此外笔者还对于本课程的结对编程部分提出了一些建议. Tips Link 作业要求博客 2 ...

  3. 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结

    1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...

  4. 【BUAA软工】结对编程作业

    项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:BUAA软件工程结对编程项目作业 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 完 ...

  5. 集大软件工程15级结对编程week1

    集大软件工程15级结对编程week1 0. 团队成员 姓名 学号 博客园首页 码云主页 孙志威 20152112307 Agt Eurekaaa 孙慧君 201521123098 野原泽君 野原泽君 ...

  6. 软件工程启程篇章:结对编程和进阶四则运算(197 & 199)

    0x01 :序言:无关的事 I wrote a sign called "Dead End" in front of myself, but love crossed it wit ...

  7. BUAA软件工程_结对编程

    1.写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 结对项目作业 课程目标 培养软件开发能力 本作业对实现目标的具体作用 培养结对编程开发项目的能力 ...

  8. 【软件工程第三次作业】结对编程:四则运算( Java 实现)

    1. GitHub 地址 本项目由 莫少政(3117004667).余泽端(3117004679)结对完成. 项目 GitHub 地址:https://github.com/Yuzeduan/Arit ...

  9. 软件工程 in MSRA 黄金点游戏-第一次结对编程

    简单介绍 第一次结对编程,邹欣老师选择了一个博弈游戏作为题目.博弈论是一门非常有趣的学科.之前竞赛时接触的博弈论大部分都是存在均衡点/必胜策略的.像这次这种多人参与,没有完美策略,你方唱罢我登台的游戏 ...

随机推荐

  1. 异常-----freemarker.core.InvalidReferenceException问题解决

    案例一 1.1.错误描述 五月 28, 2014 9:56:48 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template ...

  2. Android外部存储

    WeTest 导读 外部存储作为开发中经常接触的一个重要系统组成,在Android历代版本中,有过许许多多重要的变更.我也曾疑惑过,为什么一个简简单单外部存储,会存在存在这么多奇奇怪怪的路径:/sdc ...

  3. Latex基础__如何用latex编写矩阵、矩阵等式、方程组、等式左对齐

    数学矩阵和方程组是数学工作者经常遇到的,那么如何用latex书写处漂亮的方程组.矩阵.多个等式呢,下面将对这个问题一一做介绍.1. 写矩阵. 代码: \begin{equation} \left[ \ ...

  4. [Luogu2444][POI2000]病毒

    Luogu sol 如果存在一个合法的无限长的串,那势必说明在\(AC\)自动机上存在一个合法的环.由此转化为判环,只要判断搜到的点是否已经在搜索栈中即可. code #include<cstd ...

  5. 使用 vscode将本地项目上传到github以及删除github上的某个文件夹

    安装Git后,可以看到windows环境下有两个命令输入窗口Git CMD 和Git Bash Git GUI是可视化图形界面 Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能 ...

  6. linux下线程的两种封装方式

    在网络编程的时候往往需要对Linux下原生的pthread库中的函数进行封装,使其使用起来更加方便,封装方法一般有两种:面向对象和基于对象,下面将分别介绍这两种方式,最后统一分析这两种方式的优缺点: ...

  7. asp.net WebApi 使用总结

    如果想让服务端直接返回json或者xml的话,可以考虑使用webservice.wcf,或者webapi.webservice基于xml,效率较慢,wcf虽然可以返回json,但是配置繁琐.webap ...

  8. js备战春招の四のdevtool中各种错误、调试的使用技巧

    try 语句允许我们定义在执行时进行错误测试的代码块. catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块. JavaScript 语句 try 和 catch 是成对出现的. ...

  9. Linux解决MySQL-python安装失败问题

    使用python的pip直接安装MySQL-python的时候遇到如下报错: Collecting mysql-python Using cached MySQL-python-1.2.5.zip C ...

  10. 本地mysql无法连接原来是这里有问题啊。。。。。。

    1.怎么解决localhost无法链接本地mysql数据库问题_百度经验http://jingyan.baidu.com/article/d45ad14896d1cd69542b805c.html 2 ...