结对作业
结对作业
项目要求:
这个作业属于哪个课程 | 软件工程2024 |
---|---|
这个作业要求在哪里 | 结对项目 |
项目要求 | 结对完成项目,实现一个自动生成小学四则运算题目的命令行程序 |
个人信息:
姓名 | 学号 | Github地址 |
---|---|---|
刘朝坤 | 3122004534 | 3122004534 |
曾郑耿 | 3122004499 | 3122004499 |
一、psp表格
预估与实际耗时:
*PSP2.1* | *Personal Software Process Stages* | *预估耗时(分钟)* | *实际耗时(分钟)* |
---|---|---|---|
Planning | 计划 | 2040 | 2400 |
· Estimate | · 估计这个任务需要多少时间 | 2040 | 2400 |
Development | 开发 | 1800 | 2160 |
· Analysis | · 需求分析 (包括学习新技术) | 420 | 420 |
· Design Spec | · 生成设计文档 | 120 | 120 |
· Design Review | · 设计复审 (和同事审核设计文档) | 120 | 240 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 120 | 120 |
· Design | · 具体设计 | 180 | 180 |
· Coding | · 具体编码 | 420 | 390 |
· Code Review | · 代码复审 | 60 | 150 |
· Test | · 测试(自我测试,修改代码,提交修改) | 360 | 480 |
Reporting | 报告 | 240 | 300 |
· Test Report | · 测试报告 | 120 | 120 |
· Size Measurement | · 计算工作量 | 60 | 60 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 120 |
合计 | 2100 | 2400 |
最后总结:
- 上次对于psp的理解出现较大偏差,运用也不太注意;
- 没有完全按规范流程操作,各部分操作的时间只能估算;
- 以后还是以小时为单位吧。
二、代码结构分析
各部分分析:
1.各个类的功能及其基本原理:
Calculate
1.功能:采用数值和符号分别入队列的方式,将计算式转化为后缀表达式,再以借队列的非递归算法求后缀表达式的值。
2.运行:求计算式2+6*(5-1+6/2-1+2)+1的后缀表达式和答案:
3.对应的test类运行:求计算式2 * ( 7 / 3 - 2 ) =的后缀表达式和答案:
Expression
1.功能:生成计算式:生成不带括号的算术式 ------》加入一个括号或不加入括号------》合法化------》查重------》生成答案;最后将计算式和带答案的完整式子均写入对应文档。
2.运行:生成10000个计算式
3.对应test类运行:生成10000个计算式
FileIO
1.功能:文件操作,这里只有文件写入方法。
2.test类运行:
Fraction
1.功能:分数类,分数的相关操作;将所有的数值化作分数,然后采取分别计算分子和分母的方式,进行计算;
2.对应的test类的运行:
Grade
1.功能:成绩类,根据输入的答案进行答题记录,把输入的答案写入Grade文档,并在控制台打印答题情况,计算正确率。
2.运行:
Save
1.功能:查重操作的关键,把每次循环的生成中间结果保存起来,不用再通过函数进行返回。
2.无对应运行。
Examination
1.功能:Examination类并不参与程序步骤,而是我们对于查重算法的一种替换:
原本的查重算法:
直接以计算式答案为标准进行筛除,属于“暴力筛除”,会筛除一些原本符合规则的计算式;同时,这样的算法也会不允许出现答案一致的计算式,因此,当计算式的规模过大时(>=1000),生成计算式的速度会逐渐下降,以及计算式答案会逐渐趋近于零。
新的查重算法:
计以算式的后缀表达式为标准进行筛除,理论上讲不会出现“不必要筛除”的情况,而且,也不会对答案重复造成多余的限制。但是,由于时间问题和个人能力,这个算法仍然存在许多问题:
1.会对“/”的情况造成误判:
如:3 / ( 3 + 4 ) + 3 = 与 3 + ( 4 + 3 ) / 3 =
( 8 * 7 ) / 8 * 8 = 与 8 / ( 7 * 8 ) * 8 =
2.时间复杂度和空间复杂度很低:
1)采取的循环遍历、一一比对的方式;
2)每次调用都会创建一个大数组;
3.与原程序的结合还没有开始
2.因此,只在本类中生成未经过“答案查重”的计算式,在以“后缀表达式”查重计算式,并输出显示不合规的计算式的后缀表达式及其编号:
2.关系图:
运行主流程:
文档操作:
剔除不合法计算式的原理:
查重操作的原理:
三、测试运行
未解决问题:
-
可以尝试增加更多的exception,尤其是针对输入异常的处理;
答题时,输入答案的值错误与形式错误可再做区分,如25/3与8'1/3 ;
输入“0”与“1”确定是否答题时,对于除“1”和“0”以为的情况也可再做区分;
-
可以尝试加入图形化界面操作,使界面更美观;
-
未能解决所有Warming;
-
筛除重复的功能只采用了“暴力筛除”;
-
计算式中没有实现除号;
-
生成的计算式顶多只加入一个括号,暂未实现加入多个括号的操作;
-
由于二人分工,项目的编程在各自的电脑中完成,彼此间项目传递过程中,想要接续上次的上传和上传到同一库中十分困难,且对于GitHub上传不成体系,所以每人都只上传最后结果。
四、项目小结
刘朝坤:
1.结对感受:
受各种原因,结对编程无法按老师所说的规范的结对操作流程来进行,而且,各自的分工难以划分清楚,彼此仍需要更多的实践经历。
2.对方闪光点:
对于算法有个人的理解,钻研能力强。
3.予对方建议:
尽早选定个人方向和语言,加强基础和练习。
4.个人问题:
对于test的理解和运用仍有很大欠缺。
遇到难以解决的问题容易放弃,专注力仍需提高。
曾郑耿:
1.结对感受:
由于自身的能力并不够,用了许多天才能基本解决测试中遇到的bug,但这也是一个锻炼,能够更好地进行团队合作。
2.对方闪光点:
能力强、知识基础牢、程序逻辑清晰简洁。
3.予对方建议:
加强对 @test 的理解和运用。
4.个人问题:
对 Java 理解与运用完全不透彻,仍需加强对 Java 的各种功能的理解。