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