对数器的使用----bug测试,文章中含有测试源码

简介: 对数器的使用----bug测试,文章中含有测试源码

当我们选择排序没有出现问题时,我们可以发现一个随机数组是有序的,会打印出 ‘选择排序没有毛病’。说明此时选择排序没有毛病。

package cn.Text;
public class LogarithmicDetector {
    //TODO      选择排序
    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j > arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            swap(arr, i, minIndex);
        }
    }
    //TODO  交换
    public static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    public static void insertionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 1; i < arr.length; i++) { // 0 ~ i 做到有序
            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                swap(arr, j, j + 1);
            }
        }
    }
    // TODO 返回一个数组arr,arr长度[0,maxLen-1],arr中的每个值[0,maxValue-1]
    public static int[] lenRandomValueRandom(int maxLen, int maxValue) {
        int len = (int) (Math.random() * maxLen);
        int[] ans = new int[len];
        for (int i = 0; i < len; i++) {
            ans[i] = (int) (Math.random() * maxValue);
        }
        return ans;
    }
    //TODO  备份数组
    public static int[] copyArray(int[] arr) {
        int[] ans = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            ans[i] = arr[i];
        }
        return ans;
    }
    /**
     * 判断是否是升序的
     * arr1和arr2一定等长
     * @param arr
     * @return
     */
    public static boolean isSorted(int[] arr) {
        //  没到两个数还比较啥升序,没他就越界了兄弟
        if (arr.length < 2) {
            return true;
        }
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max > arr[i]) {
                return false;
            }
            max = Math.max(max, arr[i]);
        }
        return true;
    }
    public static void main(String[] args) {
        int maxLen = 5;
        int maxValue = 1000;
        int testTime = 10000;
        for (int i = 0; i < testTime; i++) {
            int[] arr1 = lenRandomValueRandom(maxLen, maxValue);
            //  TODO  备份arr1
            int[] tmp = copyArray(arr1);
            selectionSort(arr1);
            //如果是无序的
            if (!isSorted(arr1)) {
                //TODO 打印备份,找到例子
                for (int j = 0; j < tmp.length; j++) {
                    System.out.print(tmp[j] + " ");
                }
                System.out.println();
                System.out.println("选择排序错了!!!");
                break;
            }
            else{
                System.out.println("选择排序没毛病!!!");
            }
        }
    }
}

image.png当我们故意修改选择排序,将原本的正确选择排序修改为错误的选择排序时,会打印出 ‘选择排序错了’,因为上面写了一个copy函数,所以会打印出错误的例子,这个时候我们可以根据例子去寻找bug。(当然当例子范围很大的时候我们可以修改是范围的大小,此处就是数组的大小)

package cn.Text;
public class LogarithmicDetector {
    //TODO      选择排序
    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j > arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            swap(arr, i, minIndex);
        }
    }
    //TODO  交换
    public static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    public static void insertionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 1; i < arr.length; i++) { // 0 ~ i 做到有序
            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                swap(arr, j, j + 1);
            }
        }
    }
    // TODO 返回一个数组arr,arr长度[0,maxLen-1],arr中的每个值[0,maxValue-1]
    public static int[] lenRandomValueRandom(int maxLen, int maxValue) {
        int len = (int) (Math.random() * maxLen);
        int[] ans = new int[len];
        for (int i = 0; i < len; i++) {
            ans[i] = (int) (Math.random() * maxValue);
        }
        return ans;
    }
    //TODO  备份数组
    public static int[] copyArray(int[] arr) {
        int[] ans = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            ans[i] = arr[i];
        }
        return ans;
    }
    /**
     * 判断是否是升序的
     * arr1和arr2一定等长
     * @param arr
     * @return
     */
    public static boolean isSorted(int[] arr) {
        //  没到两个数还比较啥升序,没他就越界了兄弟
        if (arr.length < 2) {
            return true;
        }
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max > arr[i]) {
                return false;
            }
            max = Math.max(max, arr[i]);
        }
        return true;
    }
    public static void main(String[] args) {
        int maxLen = 5;
        int maxValue = 1000;
        int testTime = 10000;
        for (int i = 0; i < testTime; i++) {
            int[] arr1 = lenRandomValueRandom(maxLen, maxValue);
            //  TODO  备份arr1
            int[] tmp = copyArray(arr1);
            selectionSort(arr1);
            //如果是无序的
            if (!isSorted(arr1)) {
                //TODO 打印备份,找到例子
                for (int j = 0; j < tmp.length; j++) {
                    System.out.print(tmp[j] + " ");
                }
                System.out.println();
                System.out.println("选择排序错了!!!");
                break;
            }
            else{
                System.out.println("选择排序没毛病!!!");
            }
        }
    }
}

image.png

目录
相关文章
|
1月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
55 3
|
2月前
|
SQL 安全 测试技术
『软件测试6』bug一两是小事,但安全漏洞是大事!
该文章强调了在软件测试中识别与处理安全漏洞的重要性,并详细介绍了常见的安全测试类型、测试流程及使用的主要工具,帮助测试人员有效地检测和防止安全问题。
『软件测试6』bug一两是小事,但安全漏洞是大事!
|
1月前
|
计算机视觉 异构计算
目标检测实战(四):YOLOV4-Tiny 源码训练、测试、验证详细步骤
这篇文章详细介绍了使用YOLOv4-Tiny进行目标检测的实战步骤,包括下载源码和权重文件、配置编译环境、进行简单测试、训练VOC数据集、生成训练文件、准备训练、开始训练以及多GPU训练的步骤。文章还提供了相应的代码示例,帮助读者理解和实践YOLOv4-Tiny模型的训练和测试过程。
113 0
|
3月前
|
测试技术 Python
python自动化测试中装饰器@ddt与@data源码深入解析
综上所述,使用 `@ddt`和 `@data`可以大大简化写作测试用例的过程,让我们能专注于测试逻辑的本身,而无需编写重复的测试方法。通过讲解了 `@ddt`和 `@data`源码的关键部分,我们可以更深入地理解其背后的工作原理。
53 1
|
4月前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
67 3
|
4月前
|
测试技术 API 持续交付
【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分
【7月更文挑战第2天】【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分:1) 自动化测试的重要性与Python的易用性、库支持、跨平台和社区优势;2) Unittest作为标准测试框架的基础用法,及Pytest的灵活性与强大功能;3) 实践中包括Selenium的Web UI测试、Requests的API测试,强调测试隔离、持续集成等最佳实践。Python助力高效稳定的软件测试。
57 2
|
5月前
|
监控 Shell 测试技术
一篇文章讲明白MonkeyAPP压力稳定性测试
一篇文章讲明白MonkeyAPP压力稳定性测试
320 1
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的高中信息技术课程在线测试系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的高中信息技术课程在线测试系统附带文章和源代码部署视频讲解等
51 6
|
4月前
|
机器学习/深度学习 存储 Linux
我的OS Copilot测试文章
在阿里云管理控制台尝试重置密码时遇到错误,未能成功跳转至相应实例;但后续的密码重置流程顺利,安全组设置和SSH连接快速无阻,且体验到AccessKey预警系统的实用性。在处理代码时曾因未替换特殊字符报错,但最终解决了问题,实现了Python代码分析功能,确认系统为Linux,并对OS工具的交互性和实用性表示赞赏,特别是其与Linux环境的兼容性。遇到过一次生成实例的错误,但整体体验良好,有兴趣参与OS Copilot的开源开发。
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的高中信息技术课程在线测试系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的高中信息技术课程在线测试系统的详细设计和实现(源码+lw+部署文档+讲解等)
37 0