AI工具在研发流程中的最佳实践

一、引言

随着 ChatGPT 的发布,AI 工具的热度也是越来越高,各种 AI 工具如雨后春笋般层出不穷,在这之中,有两款在研发流程中有显著提效表现:Copilot 和 Cursor。两款工具都是基于人工智能技术开发的,为开发人员提供了强大的支持和功能。Copilot 是⼀种基于⼈⼯智能的代码自动补全插件,支持常见的开发环境和编辑器,比如 IntelliJ IDEA 、VSCode、Visual Studio 等。它经过了训练,学习了超过 10 亿行的代码样本,具备强大的代码理解和生成能力。可以根据你的代码注释,自动补全逻辑块级别或方法级别的代码。这使得在开发过程中,你可以更快速地编写代码,减少了重复性的劳动,大大提高了开发效率。Cursor 是一款多功能的智能工具软件,它不仅支持代码逻辑检查和重构,还提供了一系列其他功能。包括在系统设计阶段生成系统时序图和类文件 ER 图,协助数据库表的设计生成,批量处理文件,甚至生成发布计划等。Cursor 在软件开发的不同阶段都能提供有力的支持,从系统分析到代码编写,再到测试和发布,都能帮助开发团队更高效地完成任务。它是一种强大而多功能的智能工具,能够显著提升研发流程的效率。本文将主要介绍 Cursor 在软件开发不同阶段的能力,在迭代各阶段(编码、代码 Review、单元测试) Copilot 和 Cursor 不同的使用场景,以及一些它们在实际使用中的小技巧和提效分析等,希望可以给你带来帮助。

二、工具最佳实践

2.1 Cursor 下面是 Cursor 在研发过程中一些常用能力的展示,灵活使用 Cursor 的能力,可以帮助我们更加高效的完成产品需求。

2.1.1 生成时序图

根据系统交互描述,生成时序图:

生成结果:

2.1.2 生成ER关系图

将有依赖关系的类拷贝到 Cursor,生成 ER 类图:生成结果:

2.1.3 生成发布计划

输入发布计划内容和格式即可:

2.1.4 代码重构优化

将需要优化的代码拷贝到 Cursor,选中后输入:重构优化下面这段代码即可。

2.1.5 SQL查询优化

将表结构和目标查询 SQL 输入到 Cursor,输入对查询 SQL 进行优化即可:

2.1.6 生成库表DDL和DML语句

把表字段和内容设计描述清楚,让其生成相应的语句即可:

2.1.7 文件批量处理

可以对文件进行批处理。比如找出某个值,将其替换成某个新的值;或者每一行都新增一个字段等常见操作 :

2.2 IDE+copilot

灵活使用 IDE 自带的模版功能和 Copilot 能力,可以帮我们快速完成代码cr。

2.2.1 Java Template + Copilot 快速 CR

将准备好的 Review 问题(比如:"分析xx方法是否有逻辑缺陷,如果有给出解决方案,没有说明理由")配置到 Java LiveTemplate 中,设置好自己习惯的快捷键,比如crBug,当需要对某个方法进行 cr 的时候,直接快捷键补全对应预设的问题即可。 将光标定位到需要 cr 的方法的下方,输入 crbug 选择文案即可。

三、 迭代各阶段最佳实践****

在整个研发迭代的生命周期中,可以在不同迭代阶段,穿插使用 Cursor 和 Copilot 的能力,有效提高了代码质量和开发效率。接下来展示一下,在需求迭代过程中, AI 工具可以帮助我们完成哪些事情。

3.1 系分阶段

3.1.1 生成时序图

根据需求进行系分设计,使用 Cursor 生成需求的时序图。输入 输出

3.1.2 生成 ER 类图

使用 Cursor 生成 ER 类图。

3.2 编码阶段

3.2.1 函数级别

3.2.1.1 工具函数快速生成

Copilot 可以直接生成通用的工具函数,比如常用的日期比较函数,或者字符串判别函数等。

3.2.1.2 策略类型的方法快速生成

Copilot 可以学习框架策略的方法,并且能够模仿之前策略方法,快速生成类似方法。比如在下面这个列子中,前两个方法是人工写的,第三个方法是 Copilot 根据注释自动补全的,整体是可用的。

3.2.2 逻辑块级别

3.2.2.1 枚举类快速生成

在这个枚举类中,前两个枚举是人工定义的,其他的都是 Copilot 自动补全的。

3.2.2.2 模型 DTO 快速生成

在完成第一个字段的注释后,Copilot 会自动补全当前成员变量的定义。还可以推测后续该模型可能存在的字段,能给出不错的建议参考,且符合个人的命名习惯。

3.2.2.3 Stream逻辑表达式自动完成

Copilot 可以根据注释,快速补全 Stream 逻辑表达式,结果基本正确。取数据做某件事:对数据进行分组:

3.2.2.4 条件语句和循环快速补偿

Copilot 可以快速补全条件语句(如if语句或switch语句)和循环语句(如for循环或while循环)。If条件 For循环

3.3 CR 阶段

3.3.1逻辑缺陷分析

3.3.1.1 使用 Copilot

Copilot 能够发现部分逻辑缺陷,并且可以给出改造方案,但是有时候并不准确,需要开发人员自己判断甄别。将光标定位到目标方法的下方,通过输入:分析xx方法是否存在逻辑缺陷,如果有给出解决方案。Copolit 会给出下图所示的缺陷提示和解决方案。

3.3.1.2 使用 Cursor

Cursor 能够发现逻辑缺陷,并且给出改造方案,准确性相对较高。 输入代码上下文和问题即可:代码+分析这段代码是否有逻辑缺陷,如果有给出解决方案,中文输出。

3.3.2 代码重构

Cursor 支持代码重构,并且重构准确度较高,符合开发规范。只需要将代码复制到 Cursor,选中后输入重构优化这段代码即可。

3.4 UT阶段

3.4.1 生成单元测试

3.4.1.1 使用 Copilot

Copilot 能够分析代码生成 UT 描述,代码行覆盖率可做到100%(每一个分支逻辑)。将光标定位到目标测试方法的下方,通过写注释:"为xx方法生成单元测试,覆盖所有分支情况",这样 Copilot 会生成 UT 描述和 UT 代码。当然也可通过上面介绍过的预设模版的方式触发生成单元测试。 PS: 生成的单元测试代码不能直接使用,需要不断地反复尝试。目前 Copilot 只能在方法的所在类中生成单元测试代码,无法直接生成单元测试类。

3.4.1.2 使用 Cursor

Cursor 可以直接为目标方法生成单元测试类。在 Chat 界面,输入目标代码和"为xx方法生成测试用例,覆盖所有分支情况"即可。

3.5 发布阶段

可以使用 Cursor 生成发布计划。在 Chat 界面输入:"生成一个发布计划模版,内容有发布时间、发布内容、发布分支、发布人员、影响点,表格形式输出",具体内容和形式可根据实际情况自行调整。

四、总结

4.1 Copilot

4.1.1 使用小 tips

  • Copilot 的定位是辅助你写代码,提高开发效率,而不是真正地替你写代码。
  • 日常使用养成写注释的习惯,在更多场景发挥 Copilot 的优势能力。
  • 有意识将大方法拆分成小方法,使用 Copilot 逻辑分析和生成100%覆盖分支的能力保证代码的健壮性。
  • Copilot 的使用过程就是不断的调试过程,使用时注意给出足够的上下文,如果上下文信息不足,也可以在注释中告知关键信息(比如当前所在位置和目标对象的类型),让它理解当前的逻辑判断,才能给出更准确的建议,获取的信息越多,效果越好。
  • 细化注释的拆分粒度,有时候需要完成一段复杂的逻辑,单行描述不足以让 Copilot 理解,这时候可以将其拆分成多段小逻辑来做,最后拼装成一段完整的大逻辑。

4.1.2 常用快捷键

以下以 Mac 的系统快捷键为例,其他系统取相应键盘映射即可。

动作 快捷键
接受建议 Tab
拒绝建议 Esc
单词级别接受建议 Alt/Option + enter
下一条建议 Alt/Option + ]
上一条建议 Alt/Option + [

4.1.3 提效分析

经过团队一段时间的试用,Copilot在各阶段的使用比例和预估提效比例如下所示。

阶段 主要功能 使用比例 预估提效比例
编码 评论生成完整函数 40% 15%
编码 评论生成代码块 70% 15%
CR 逻辑漏洞分析 10% 15%
CR 性能分析 10% 15%
UT 生成单测用例 20% 40%
UT 根据单测用例生成代码 20% 30%

PS:使用比例表示使用到该功能的频次比例。预估提效比例表示完成同一功能时,使用 Copilot 比不使用所提升的时间比例。

4.1.4 小结

Copilot 整体上是一款强大的自动补全代码逻辑的插件,在不同研发阶段都有突出表现。但是它同时也存在一些不足之处。暂时不支持跨文件,有时会给出一些类中不存在的属性的补全建议。进行代码逻辑缺陷分析的时候,给到的问题和解决方案可能并不准确,需要开发人员进一步判断甄别。上下文信息不足时,Copilot不会给出补全建议或者建议并不准确。目前只支持在目标方法的类中生成的单元测试代码,并且生成代码不能直接使用,还需要人工将测试代码拷贝到测试类的命名空间下。

4.2 cursor

4.2.1 使用小 tips

进行代码 Review 或重构时候,要尽量让 Cursor 获取到相对完整的上下文,上下文越多返回越准确。使用 Cursor 生成相关内容时(时序图或者类图),要描述清楚输出内容的类型(比如PlantUML或者Markdown),一般也需要加下中文输出,否则通常会以英文形式输出。

4.2.2 常用快捷键

以下以 Mac的 系统快捷键为例,其他系统取相应键盘映射即可。

动作 快捷键
Chat 界面 command + L
指令编辑界面 command + K

4.2.3 提效分析

经过统计分析,Cursor在各阶段的预估提效比例如下所示。

阶段 主要功能 预估提效比例
系分阶段 生成时序图、ER图 15%
CR 逻辑漏洞分析、代码重构 15%
UT 生成单测用例 30%

4.2.4 小结

Cursor 整体上是一款强大的多功能软件,在系统分析、研发迭代的不同阶段都可以提供有力的支持,提高了开发效率。但是它是一款独立的工具软件,暂时并没有集成到我们常用的开发环境中去,使用的时候需要不断的拷贝上下文和软件回切等;再有就是 Cursor 对问题的描述精准度要求较高,描述不不清晰的话通常不能给到正确的建议。但是瑕不掩瑜,希望 Cursor 可以逐步完善,给开发者带来更加完美的使用体验。

相关推荐
KuaFuAI23 分钟前
微软推出的AI无代码编程微应用平台GitHub Spark和国产AI原生无代码工具CodeFlying比到底咋样?
人工智能·github·aigc·ai编程·codeflying·github spark·自然语言开发软件
扫地的小何尚7 小时前
NVIDIA RTX 系统上使用 llama.cpp 加速 LLM
人工智能·aigc·llama·gpu·nvidia·cuda·英伟达
程序员X小鹿15 小时前
免费,手机可用!一款AI数字人生成工具,200+数字人形象任选,3分钟定制专属数字人!(附教程)
aigc
狼爷21 小时前
Reddit 舞台上的 AI:解码用户生活密码,隐私警钟敲响
安全·aigc
AI极客菌1 天前
[ComfyUI]Flux:繁荣生态魔盒已开启,6款LORA已来,更有MJ6&写实&动漫&风景&艺术&迪士尼全套
ai作画·stable diffusion·aigc·midjourney·人工智能作画·comfyui·风景
袁庭新1 天前
安装luasocket模块时提示“sudo: luarocks:找不到命令“问题,该如何解决?
java·人工智能·ai·aigc·lua·luarocks·袁庭新
阿牛牛阿1 天前
多模态大模型(1)--CLIP
算法·机器学习·ai·aigc
想成为高手4991 天前
成功男人背后的女人--解析AIGC幕后的算法原理
算法·aigc
量子位2 天前
百度打通两大国民产品!六边形 AI 创作新物种「自由画布」来了
人工智能·aigc
全域观察2 天前
出海攻略,如何一键保存Facebook视频素材
人工智能·新媒体运营·aigc·内容运营·程序员创富