github copilot 是微软与openai共同推出的一款ai编程工具,基于github及其他网站的源代码,根据上文提示为程序员自动编写下文代码,可以极大地提高编写代码的效率。
先看看chatgpt是怎么回答copilot的功能特点:
给大家简单提取一些关键信息,github copilot 是微软与openai共同推出的一款ai编程工具,基于github及其他网站的源代码,根据上文提示为程序员自动编写下文代码,可以极大地提高编写代码的效率,核心功能如下:
- 根据已有上下文补全代码
- 根据函数名和参数,生成方法体
- 根据注释自动生成代码
- 代码优化
- 生成测试代码
copilot使用的是openai烧了数千万美元研发出来的gpt-3.5模型,copilot在gpt-3模型基础之上通过对github的开源代码进行学习,得到了codex模型,该模型具备强大的代码生成能力
在使用copilot之前,需要一些准备工作
1.github copilot订阅服务
首先你要有一个github账号,没有账号的自行注册即可
点击此处注册:https://github.com/signup?ref_cta=sign+up&ref_loc=header+logged+out&ref_page=%2f&source=header-home
有了github账号之后,进入copilot官网,点击申请。
大家可以先点击start trail体验一下
进入之后可以填写自己的相关信息
2.idea安装copilot
要求:idea版本应不低于2021.2,否则无法搜到copilot插件
重启idea之后便可使用
3.idea使用copilot
安装后重启,点击tools->copilot登录到github之后来获取使用资格
点击cop and open
将设备码复制到此处
3.1 代码补全
copilot能将整行进行补全,并且自可以自动填充到参数
copilot也能自动识别到上文中出现过的workbook变量及其getsheetat方法,没有发生语法错误的问题。
虽然在上一个例子中补全效果较好,没有出现语法错误的问题,但是copilot依然会在很多情况下生成存在语法错误的代码片段。如下图所示,stringutils类是在本地工程中创建的,类下面只有一个readtestfile方法,然而copilot却生成了print方法,因为copilot是根据数亿的开源代码学习到的,不能及时的去学习本地工程的代码信息,所以本质上跟tabnine一样是会存在语法错误的问题,只是由于模型更强大,所以错误的概率更小,但是一旦涉及到本地工程的代码,错误的概率就会非常高。
copilot方法级的代码生成也有很多错误的时候,比如生成读取xml文件的代码,结果生成的是读取excel的代码,可能是因为类开头import了较多excel相关的api。
3.2 单元测试
用copilot写单元测试是非常方便的,它能帮助我们生成很多测试数据,减少mock数据的烦恼。
假设我们有一个名为calculator的类,其中有一个add方法,用于将两个数字加。我们希望使用copilot生成一个测试类来测试这个方法。
// calculator.java
public class calculator {
public int add(int a, int b) {
return a + b;
}
}
首先,我们需要创建一个测试类。让我们在源代码目录下创建一个名为calculatortest的java类。
// calculatortest.java
import org.junit.jupiter.api.assertions;
import org.junit.jupiter.api.test;
public class calculatortest {
@test
public void testadd() {
calculator calculator = new calculator();
int result = calculator.add(2, 3);
assertions.assertequals(5, result, "addition is incorrect");
}
}
在上述代码中,我们使用了junit jupiter库中的assertions类来进行断言。在testadd方法中,我们创建了一个calculator实例,然后调用add方法,将结果与期望值进行比较。
现在,我们可以使用copilot来生成这段测试代码。在intellij idea中,选择calculator类中的add方法,然后按下快捷键ctrl + shift + t。
copilot将根据代码片段生成一个相关的测试方法。
// copilot生成的测试方法
@test
void add() {
calculator calculator = new calculator();
int result = calculator.add(2, 3);
assertions.assertequals(5, result, "addition is incorrect");
}
发表评论