首页 > 其他分享 >基于人工智能的代码分析与 Bug 检测实战

基于人工智能的代码分析与 Bug 检测实战

时间:2024-08-05 17:28:39浏览次数:12  
标签:实战 人工智能 代码 list 报错 copilot Bug

简介

在人工智能还未盛行的时候,检测 Bug 通常是通过以下几种方式完成:

  1. 研发编写单元测试。
  2. 代码扫描工具,SonarQube、findbugs。
  3. 测试人员进行集成测试。

而现在其中的一部分工作,都可以通过人工智能提升效率,辅助开发与测试发现更多的问题,降低成本和提高软件质量。

对应流程 相关工具
单元测试 Copilot+Codex
集成测试 通过 ChatGPT 或者辅助工具,例如 AutoGPT 开发脚本、编写测试用例

在本章节,可以先了解一下在代码层面,基于人工智能工具,可以帮助我们提升哪些效率。

实践演练

人工智能可以帮助我们发现各种类型的 bug,包含:

  1. 代码执行报错。
  2. 没有实现需求。
  3. 变量命名不规范。

代码执行报错

以下代码的逻辑非常简单,给定一段列表 a,列表 a 中有四个元素,要从列表 a 中找到索引为 5 的元素,很容易就会发现,这段代码一定是跑不通的。这种会执行报错的代码,copilot 可以很容易帮我们定位到其中的问题。

  1. 输入错误代码:

    a = [1, 2, 3, 4]
    print(a[5])
    
  2. 给到提示词:请找出以上代码的bug,先说明错误在哪并修复。

  3. 根据 copilot 的智能提示展示后面的代码内容。以下为 copilot 返回的信息,精准的定位到了问题。

# 请找出以上代码的bug,先说明错误在哪并修复
# 1. IndexError: list index out of range
# 2. a[5] 为列表中的第6个元素,而列表中只有4个元素,所以会报错
# 3. a[3] 为列表中的第4个元素,所以应该是a[3]

没有实现需求

以下代码原本是一段冒泡排序的代码,但是冒泡排序通常要求:从小到大排序,但是这段代码是从大到小排序。接下来,可以通过 copilot 发现其中的 Bug 所在。

  1. 输入错误代码:
def bubble_sort(list):
    for i in range(len(list)):
        for j in range(i+1,len(list)):
            if list[i] < list[j]:
                list[i],list[j] = list[j],list[i]
    return list
  1. 给到提示词:# bubble_sort()是一段实现了冒泡排序算法的函数请找出缺陷,先提示在问题是什么,然后再给出修改后的代码

  2. 根据 copilot 的智能提示展示后面的代码内容。以下为 copilot 返回的信息,精准的定位到了问题。

# bubble_sort()是一段实现了冒泡排序算法的函数请找出缺陷,先提示在问题是什么,然后再给出修改后的代码
# 问题:冒泡排序是从小到大排序,但是这段代码是从大到小排序
# 修改后的代码:
def bubble_sort(list):
    for i in range(len(list)):
        for j in range(i+1,len(list)):
            if list[i] > list[j]:
                list[i],list[j] = list[j],list[i]
    return list

变量命名不规范

以下代码没有什么特别严重的问题,只是在变量名命名上面不符合 Python PEP8 的规范。但是 copilot 偶尔也能发现这种命名不规范的问题:

  1. 输入不规范的代码:

def getAge():
    pass
  1. 给到提示词:请指出以上代码不符合规范的地方,并予以修改

  2. 根据 copilot 的智能提示展示后面的代码内容。以下为 copilot 返回的信息:

# 请指出以上代码不符合规范的地方,并予以修改
# 1. 函数名应该小写,且用下划线分隔
  1. 但是这种类型的问题, copilot 也有很多时候发现不了,或者给出的提示毫无价值。所以也不能完全依赖 copilot 返回的结果内容。

总结

在这个章节,主要学习了在代码层面,基于人工智能工具,如何帮助我们查找Bug的技巧。其中Bug的类型也分为多种,主要包含以下几种:

  1. 代码执行报错。
  2. 没有实现需求。
  3. 变量命名不规范。

标签:实战,人工智能,代码,list,报错,copilot,Bug
From: https://www.cnblogs.com/hogwarts/p/18343673

相关文章

  • 创新舞台的幕后:一位项目负责人的实战经验与应对策略
    创新舞台的幕后:一位项目负责人的实战经验与应对策略前言技术故障:预防与应对时间管理:精确控制意外中断:保持冷静参与者问题:灵活应对技术故障与主题偏离:清晰传达评委反应:积极互动个人状况:自我调节结语前言  在创新的浪潮中,每一位项目负责人都是勇敢的航海家,驾驭着团队......
  • cmake引入第三方库的debug和release版本之Windows版本
    概述#本文将介绍cmak引入第三方库debug和release不同配置。Windows上,习惯将debug模式下生成的动态库名后缀添加D以作和release区分。cmake创建一个项目A,A引入动态库B,cmake怎么配置A链接动态库B的debug和release对应的库呢本文的教程是基于 这里,如果没有看,我推荐你先看......
  • 3GPP RAN TSG#102闭幕及R19启动项目-5(NR 中的人工智能 (AI)/机器学习 (ML) 研究)
    Rel-19StudyonArtificialIntelligence(AI)/MachineLearning(ML)formobilityinNR-主体提案编号:RP-234055一、文档摘要(AI生成)工作项目描述:本文介绍了一个名为FS_NR_AIML_Mob的工作项目,目的是研究在NR中使用人工智能/机器学习(AI/ML)来提升移动性。研究内容:本文主要......
  • AI绘画进阶 ComfyUI 实战教程:轻松给图片添加文字,附工作流教程使用
    大家好,我是设计师阿威在AI绘画中书写文字一直是个老大难的问题,直到SDXL的出现,文字生成才迎来转机,可以在提示词中指定一些英文字符,不过也是经常出错,生成中文就更加不可求了。本文介绍一种在图片中稳定生成文字的方法,可以自定义字体、颜色、大小,以及文字书写方向,有兴趣的同......
  • 改变行业的人工智能模型Top10!
    随着人工智能技术的飞速发展,人工智能大模型在各个领域展现出了前所未有的潜力和应用价值,正在彻底改变着行业格局。本文讨论了当今在各个行业掀起波澜的十大人工智能模型,探索它们的独特功能以及对技术和行业未来的变革性影响。 1.CNN卷积神经网络 (CNN)是一类深度神经网络......
  • Django5+Vue3:OA系统前后端分离项目实战-异步优化Ajax请求(12)
    Django5+Vue3系列文章前言本节开始,全文仅对会员开放。若点赞和收藏数量超过100,全文将免费开放。此项目采用Django框架的5.0.7版本进行开发。Django5.0支持的Python版本为3.10、3.11和3.12。OA系统系列文章将持续更新,直至项目的Docker部署阶段。专栏链接:......
  • Django5+Vue3:OA系统前后端分离项目实战-Pinia用户和token信息管理(11)
    Django5+Vue3系列文章前言本节开始,全文仅对会员开放。若点赞和收藏数量超过100,全文将免费开放。此项目采用Django框架的5.0.7版本进行开发。Django5.0支持的Python版本为3.10、3.11和3.12。OA系统系列文章将持续更新,直至项目的Docker部署阶段。专栏链接:......
  • 【包邮送书】LaTeX 从入门到实战
    欢迎关注博主Mindtechnist或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关注公粽号《机器和智能》回复关键词“python项目实战......
  • “命令行利器:sort、uniq、date、ntpdate详解与实战“
    当今操作系统中的命令行工具不仅是管理和调试系统的利器,也是程序员和系统管理员的重要工具。在Unix和类Unix系统中,sort、uniq、date和ntpdate是几个常用的命令,它们各自拥有独特的功能,可以在日常工作中极大地提高效率。本文将深入探讨这些命令的用法和实际应用。1. sort命令s......
  • Mybatis实战:#{} 和 ${}的使用区别和数据库连接池
    一.#{}和${}#{}和${}在MyBatis框架中都是用于SQL语句中参数替换的标记,但它们在使用方式和处理参数值上存在一些显著的区别。#{}的作用:#{}是MyBatis中用于预编译SQL语句的参数占位符。它会将参数值放入一个预编译的PreparedStatement中,确保参数值被正确地转义和引用,从......