程序结构分析
-
第一次作业
(1)类方法复杂度
(2)类图
可以看出本次作业总体来说类的耦合程度比较小,因为本次作业比较简单也不会涉及到类的复用问题,由于第一次写Java程序,基本复杂度ev(G)和循环复杂度v(G)都比较高,在输入处理方法中特别明显,需要加以改进。
-
第二次作业
(1)类方法复杂度
(2)类图
其中大部分复杂度高的原因与第一次作业相同,这里不再赘述,第二次作业难度与第一次相比不是很大,对Java语言更加熟练的使用使部分类的复杂度甚至下降。通过类图可以看出本次作业的大体架构,设Item这一个类使得此次作业得意快速完成。
-
第三次作业
(1)类方法复杂度
。
(2)类图
本次作业的架构相对前两次改动较大,几乎从头开始改写了程序。因为本次作业会有多层括号嵌套问题,由于需要多层判断,所以复杂度相对比较高。通过主类递归调用方法进行输入检测以及求导。
个人bug分析
- 第一次作业爆栈问题
原因:正则表达式匹配过程中回溯造成爆栈。
解决措施:在正则表达式尾加上'+'符号,采用独立匹配。
- 第三次作业括号嵌套问题
原因:在读入如sin((((x))))会发生错误。
解决措施:将括号不传进表达式。
互测策略
- 下载下各个同学的程序,使用git批量处理;
- 盲测自己在写程序的过程中发现的bug;
- 观察正则表达式,发现bug;
- 随机生成测试用例。
Applying Creational Pattern
本单元的第三次作业中可以使用二叉树构建,更多的使用继承以及接口,简化程序。