//归并排序:public static void mergeSort(int[] a,int left,int right){if(left >= right)return;int mid = left+(right -left)/2;mergeSort(a,left,mid);mergeSort(a,mid+1,right);int[] tmp = new int[a.length];int l = left,r = mid+1,k = left;while(l<=mid && r<=right){if(a[l] <= a[r]){tmp[k++] = a[l++];}else{tmp[k++] = a[r++];}}//处理l或者r其中一个没有遍历完的情况:while(l<=mid)tmp[k++] = a[l++];while(r<=right)tmp[k++] = a[r++];//将这一段排好序的数组返回到原数组:for (int i = left; i <= right; i++) {a[i] = tmp[i];}}
对函数进行分析
易知:该函数的主要功能是将一个int类型的数组从小到大排序
对函数的设计可以从一下几点入手:
从参数上进行设计
比如:该函数的的参数是int[]类型,
- 有效等价类:int[]
- 无效等价类:String[],float[],double[],List
数组过长,数组为空,不传参数等 - 特殊:long[]的兼容性
从代码逻辑上进行设计
我们知道对于这种:知道代码内部逻辑并且可以运行测试的测试种类属于白盒测试里的动态测试,因此可以考虑:条件覆盖,语句覆盖,条件组合覆盖等.
拿一个小模块来举例:
从代码性能方面进行设计
数组过大时时间复杂度和空间复杂度是否符合预期
考虑异常情况
循环计算过程中,时间过长的话程序是否会出现故障,要不要加上异常处理trycatch
设计测试用例
测试结果(部分截图)
-
数组里的数据很长
-
边界值:
-
数组逆序
-
数组包含相同元素