结对作业

结对作业

项目要求:

这个作业属于哪个课程 软件工程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

最后总结:

  1. 上次对于psp的理解出现较大偏差,运用也不太注意;
  2. 没有完全按规范流程操作,各部分操作的时间只能估算;
  3. 以后还是以小时为单位吧。

二、代码结构分析

各部分分析:

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.关系图:

运行主流程:

文档操作:

剔除不合法计算式的原理:

查重操作的原理:

三、测试运行

未解决问题:

  1. 可以尝试增加更多的exception,尤其是针对输入异常的处理;

    答题时,输入答案的值错误与形式错误可再做区分,如25/3与8'1/3 ;

    输入“0”与“1”确定是否答题时,对于除“1”和“0”以为的情况也可再做区分;

  2. 可以尝试加入图形化界面操作,使界面更美观;

  3. 未能解决所有Warming;

  4. 筛除重复的功能只采用了“暴力筛除”;

  5. 计算式中没有实现除号;

  6. 生成的计算式顶多只加入一个括号,暂未实现加入多个括号的操作;

  7. 由于二人分工,项目的编程在各自的电脑中完成,彼此间项目传递过程中,想要接续上次的上传和上传到同一库中十分困难,且对于GitHub上传不成体系,所以每人都只上传最后结果。

四、项目小结

刘朝坤:

1.结对感受:

受各种原因,结对编程无法按老师所说的规范的结对操作流程来进行,而且,各自的分工难以划分清楚,彼此仍需要更多的实践经历。

2.对方闪光点:

对于算法有个人的理解,钻研能力强。

3.予对方建议:

尽早选定个人方向和语言,加强基础和练习。

4.个人问题:

对于test的理解和运用仍有很大欠缺。

遇到难以解决的问题容易放弃,专注力仍需提高。

曾郑耿:

1.结对感受:

由于自身的能力并不够,用了许多天才能基本解决测试中遇到的bug,但这也是一个锻炼,能够更好地进行团队合作。

2.对方闪光点:

能力强、知识基础牢、程序逻辑清晰简洁。

3.予对方建议:

加强对 @test 的理解和运用。

4.个人问题:

对 Java 理解与运用完全不透彻,仍需加强对 Java 的各种功能的理解。

posted @ 2024-03-26 13:26  超困  阅读(8)  评论(0编辑  收藏  举报