一、单元测试
1.设计思路
固定返回值的函数通过对比与预期结果是否一致进行测试判断
- 随机返回值的函数通过对比是否在预期结果范围内进行测试判断
调度场算法通过函数异常中转进行测试判断
2.部分代码
import static org.junit.Assert.*;
import org.junit.Test;
public class ParameterTest {
@Test
public void DealData() {
String[] args = {"-n","10","-Grade","3"};
//assertTrue测试boolean
assertTrue(new Parameter(args).DealData(args));
}
@Test
public void GetNumber() {
String[] args = {"-n","10","-Grade","3"};
//assertEquals测试boolean,long,int等
assertEquals(10, new Parameter(args).GetNumber());
}
@Test
public void GetGrade() {
String[] args = {"-n","10","-Grade","3"};
//assertEquals测试boolean,long,int等
assertEquals(3, new Parameter(args).GetGrade());
}
}
3.测试覆盖率
二、结构优化
1.UML类图
2.运行流程图
暂无
3.代码重构
(1)重构部分
- 题目生成
- 参数处理
(2)重构原因
- 便于单元测试
- 代码模块化
- 增加代码耦合度
(3)当前模块功能
- MathExam为主类,用于接收参数
- File为文件类,用于写出文件
- Parameter为参数处理类,用于检查接收到的参数是否合格并进行处理
- ShuntingYard为调度场算法类,用于实现调度场算法,计算表达式结果
- TaskMake为题目生成类,用于随机生成题目
三、性能调优
1.优化前效能分析
2.性能瓶颈
- String.toArray()方法处理效率较低
3.解决方案
- 使用String.charAt(index)方法替代
4.优化后效能分析
四、总结
同类功能的函数应该封装到同一个类中
多次使用的方法封装为函数,减少代码量,且代码美观