AutoDev 1.5.3:精准的自动化测试生成、本地模型强化与流程自动化优化

去年年初,我们开源 AutoDev 的初衷是:

AutoDev 是一款基于 JetBrains IDE 的开源 AI 辅助编程插件。AutoDev 能够与您的需求管理系统(例如 Jira、Trello、Github Issue 等)直接对接。在 IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。您所需做的,仅仅是对生成的代码进行质量检查。

而今我们在朝这一目标的努力又更进一步了:一键生成精准的单元测试。在这篇文章中,我们将介绍从 1.4 版本(适用于团队的 Team AI)到 1.5.3 版本的一些特性:

精准的自动化测试生成。增强了静态代码分析能力,使得生成的构造函数更加准确;优化针对于 Spring 项目区分如何测试 Controller、Service 的 prompt;提供不同类型的测试模板能力。

本地模型强化。提供了适合于 AutoDev 的 AutoDev Coder 数据集与模型;支持本地的数据记录功能,方便于进行数据蒸馏;支持部分的系统 prompt 覆盖,即你可以更好的使用自己的模型。

多语言注释文档。新增 JavaScript、Rust、 Python 语言的支持,并且优化了 Kotlin 的文档生成逻辑。

自动流程优化。添加了 PrePush Review,即在 commit 之前,你可以使用 AI 来 review;大大简化提交信息生成的上下文,区分文件变更、依赖变更等场景,使生成的 token 更少。

欢迎来加入我们:https://github.com/unit-mesh/auto-dev/,构建自己的 AI 辅助全流程编码助手。

在开发的过程中,我们选取了 ArchGuard 作为 AutoDev 全流程 AI 辅助的试点,ArchGuard 是一个使用 Kotlin 编写的开源架构治理平台。在过程中持续积累数据和经验,以更好地支撑 Kotlin 语言的使用体验。

精准测试生成

图片

结合在 ArchGuard 项目中生成了 90 个测试类 200+ 测试的用例经验,我们持续优化了的测试生成逻辑(估计还有一些 bug)。

因此,在 AutoDev 中有概率直接生成直接可用的单元测试。

精准上下文

在当前的版本里,测试的上下文除了会包含相关的类信息,还有完整的输入和输出类信息。即通过静态代码分析,获取 Service 相关的信息,也会获取每个函数的输入和输出等等信息。当一个被测试类是一个 Spring 相关的类,会判断是否是 Controller 和 Service,再给定一些测试规则。

代码实现参考 JavaTestContextProvider、 KotlinTestContextProvider 的实现。

单元测试模板:团队 AI

在 ArchGuard 中,由于不可知的历史原因,需要编写一些特殊的注解 —— 而模型并非每次都能生成想要的。考虑到,这样的情况也会出现在大部分的项目中。因此,针对于 Controller 和 Service 与其它测试,你可以自定义单元测试的模板。

每个项目的测试逻辑是不一样的,加上我们推荐采用 prompt 即代码的方式来管理,你更可以将它分享给你的团队。

相关文档:https://ide.unitmesh.cc/customize/custom-test-template.html 。

API 测试数据精准生成

相似的,在使用 AutoDev 的 API 测试数据生成功能时,我们也结合静态代码分析优化了对应的上下文能力,可以直接生成可用的测试数据。

详细见: JavaTestDataBuilder 和 KotlinTestDataBuilder 相关实现。

2. 针对本地模型优化

图片

现在,只需要通过打开 AutoDev 配置页的 AutoDev Coder ,你可以针对私有化的模型做更多的配置。

公开模型数据的蒸馏

为了更好的测试公开的大语言模型,以及进行内部模型与工具的适配。我们在新版本中添加了 Recording Instruction In Local 的功能,即您可以记录与 AI 交互的数据,并以此作为内部模型微调与评估的样本。

同时,还方便于进行对应的 AutoDev Debug。

插件 prompt 覆盖

通过配置页,同样可以配置诸如 Explain code、 Refactor code、 Fix issue、 Generate test四个基本的 AutoDev Chat 相关的 prompt。

在进一步优化和构建内部的上下文之后,也将使用模板的方式释放出更多上下文接口。

3. 多语言文档

图片

在文档上,现在可以支持 Python、 Rust、 JavaScript 语言的注释文档生成。同时,由于 OpenAI 经常为 Kotlin 类生成无用的函数注释,我们也针对这个功能进行了优化,只选取类前的注释代码。

4. 自动流程优化

自动化是 AutoDev 追求的主要特性,我们也在今年针对于日常开发流程初了更多的设计。在这个版本里,主要提供两个新特性。

PrePush 检视

图片

即在代码提交前,你可以让 AI 来辅助你进行一些初步的 review,以避免出现一些不必要的错误。

更流畅的提交信息生成

图片

在 ArchGuard 项目中使用 AutoDev 重构时,我们生成了 167 次的提交信息,占所有功能的 1/3 。也因此,我们花了更多的时间在生成更好的提交信息上 —— 如何更好地控制 token。

其它

未来我们还将关注于:

流程自动化的强化。即支持更好的向前和向后流程接入,加速开发人员的编码速度。

交互体验优化。我们已经在代码库中引入了更好的加载和出错显示,未来也将持续丰富,毕竟没有 UX,交互上都是靠抄。

测试覆盖率的提升。在过去的一段时间里,由于 UI 测试速度缓慢,并且在 IDE 架构复杂,AutoDev 的测试覆盖率是相对较低。而在静态分析相关的场景,则需要进行充分的测试,所以我们在为 AutoDev 添加更多的单元测试,以使得它更加稳定。

如果你也有兴趣,欢迎来挖坑:https://github.com/unit-mesh/auto-dev/ 。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/504487.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

802.11局域网的 MAC 帧

目录 802.11 局域网的 MAC 帧 802.11 数据帧的三大部分 1.关于 802.11 数据帧的地址 最常用的两种情况 2.序号控制字段、持续期字段和帧控制字段 802.11 局域网的 MAC 帧 802.11 帧共有三种类型:控制帧、数据帧和管理帧。 802.11 数据帧的三大部分 MAC 首部&…

多层控制上身姿态的方法

1选择要施加的clip并调出层控制窗口 2点选motion层控制 3选择并复制pose(注意在哪个层中选中的情况下复制的是那个层中的pose) 4在新建层中分别选择头帧粘贴pose和尾帧粘贴pose因是上半身,因此mask中把下半身去掉即变灰

【K8S类型系统】一文梳理 K8S 各类型概念之间的关系(GVK/GVR/Object/Schema/RestMapper)

参考 k8s 官方文档 https://kubernetes.io/zh-cn/docs/reference/https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/ 重点 Kubernetes源码学习-kubernetes基础数据结构 - 知乎 重点 Kubernetes类型系统 | 李乾坤的博客 重点 k8s源码学习-三大核心数…

uni-app去除页面头部的标题栏

uniapp项目 每个界面都会有一个标题栏 配置在我们项目根目录的 pages.json中 我们将它全部去掉 上面还是有一条黑的 体验非常差 我们只需要在pages.json中 指定page的 style中加入 "navigationStyle": "custom"对应的page 就没有这个标题栏了

rk3568-一种基于wifi的网络环境搭建方案

前言: PC--Ubuntu--开发板 三者之间的网络互相ping通很重要,尤其是ubuntu和开发板互ping成功最关键,关系到nfs,tftp等常用的开发手段。现在大多数开发板都带有wifi芯片,现在提供一种方案可以三个设备无线地搭建网络环境…

qsort函数的模拟实现(冒泡排序模拟)

冒泡排序: 从第一个元素开始,依次比较相邻的两个元素,如果顺序不对就交换它们。 经过一轮遍历后,最大(或最小)的元素会排在最后。 重复进行上述步骤,直到没有任何元素需要交换,即…

ctf_show笔记篇(web入门---命令执行)

目录 命令执行 29:有很多种方法可以使用内联法例如system(cat ls)或者像它提示的一样echo nl fl""ag.php 30:这里与29题原理相同只不过多禁用了一个system和php####请通过29题举一反三 31:这一题有多种解法看自身理解&#xff0…

【hive Hadoop】踩坑 记录

【hive & Hadoop】踩坑 记录 平台部署知识 本文记录的配置 hive Hadoop 时可能会出现的问题以及解决方案。 目录 文章目录 【hive & Hadoop】踩坑 记录目录Hive记录hive 启动报错 Permission denied Unable to determine Hadoop version information.原因解释本次的解…

LeetCode 刷题 [C++] 第226题.翻转二叉树

题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 题目分析 深度优先搜索(DFS)- 递归方式 对于二叉树的镜像问题,很容易想到的就是使用递归来解决,自底向上依次翻转每一个节点…

顶易海关数据怎么做获客?功能详解看这里!

顶易海关数据怎么做获客呢?详解看这里! 海关数据系统登录:hg.smtso.com/?iEF6DCB 如果对开发国外优质客户感兴趣的话,关注Felicia外贸说,一键开发客户不是问题。 海关数据主要功能: 报关单详情查询&#…

GO结构体

1. 结构体 Go语言可以通过自定义的方式形成新的类型,结构体就是这些类型中的一种复合类型,结构体是由零个或多个任意类型的值聚合成的实体,每个值都可以称为结构体的成员。 结构体成员也可以称为“字段”,这些字段有以下特性&am…

Nginx 隐藏版本信息和logo

1.隐藏版本信息 http {### 隐藏版本号 server_tokens off; } 2.隐藏图标 2.1 cd nginx 安装的路径 cd/XXXX/nginx-1.2.0 2.2 编辑文件 vim src/core/nginx.h 修改define nginx_ver 中的内容 vim src/http/ngx_http_special_response.c 修改 u_char ngx_http_error_tail[]…