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 生成时序图根据系统交互描述,生成时序图:
生成结果:
将有依赖关系的类拷贝到 Cursor,生成 ER 类图:生成结果:
输入发布计划内容和格式即可:
将需要优化的代码拷贝到 Cursor,选中后输入:重构优化下面这段代码即可。
将表结构和目标查询 SQL 输入到 Cursor,输入对查询 SQL 进行优化即可:
把表字段和内容设计描述清楚,让其生成相应的语句即可:
可以对文件进行批处理。比如找出某个值,将其替换成某个新的值;或者每一行都新增一个字段等常见操作 :
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 生成需求的时序图。输入输出
使用 Cursor 生成 ER 类图。
3.2 编码阶段
3.2.1 函数级别3.2.1.1 工具函数快速生成
Copilot 可以直接生成通用的工具函数,比如常用的日期比较函数,或者字符串判别函数等。
Copilot 可以学习框架策略的方法,并且能够模仿之前策略方法,快速生成类似方法。比如在下面这个列子中,前两个方法是人工写的,第三个方法是 Copilot 根据注释自动补全的,整体是可用的。
3.2.2.1 枚举类快速生成
在这个枚举类中,前两个枚举是人工定义的,其他的都是 Copilot 自动补全的。
3.2.2.2 模型 DTO 快速生成
在完成第一个字段的注释后,Copilot 会自动补全当前成员变量的定义。还可以推测后续该模型可能存在的字段,能给出不错的建议参考,且符合个人的命名习惯。
Copilot 可以根据注释,快速补全 Stream 逻辑表达式,结果基本正确。取数据做某件事:对数据进行分组:
Copilot 可以快速补全条件语句(如if语句或switch语句)和循环语句(如for循环或while循环)。If条件For循环
3.3 CR 阶段
3.3.1逻辑缺陷分析3.3.1.1 使用 Copilot
Copilot 能够发现部分逻辑缺陷,并且可以给出改造方案,但是有时候并不准确,需要开发人员自己判断甄别。将光标定位到目标方法的下方,通过输入:分析xx方法是否存在逻辑缺陷,如果有给出解决方案。Copolit 会给出下图所示的缺陷提示和解决方案。
Cursor 能够发现逻辑缺陷,并且给出改造方案,准确性相对较高。 输入代码上下文和问题即可:代码+分析这段代码是否有逻辑缺陷,如果有给出解决方案,中文输出。
Cursor 支持代码重构,并且重构准确度较高,符合开发规范。只需要将代码复制到 Cursor,选中后输入重构优化这段代码即可。
3.4 UT阶段
3.4.1 生成单元测试3.4.1.1 使用 Copilot
Copilot 能够分析代码生成 UT 描述,代码行覆盖率可做到100%(每一个分支逻辑)。将光标定位到目标测试方法的下方,通过写注释:“为xx方法生成单元测试,覆盖所有分支情况”,这样 Copilot 会生成 UT 描述和 UT 代码。当然也可通过上面介绍过的预设模版的方式触发生成单元测试。 PS: 生成的单元测试代码不能直接使用,需要不断地反复尝试。目前 Copilot 只能在方法的所在类中生成单元测试代码,无法直接生成单元测试类。
Cursor 可以直接为目标方法生成单元测试类。在 Chat 界面,输入目标代码和”为xx方法生成测试用例,覆盖所有分支情况”即可。
3.5 发布阶段
可以使用 Cursor 生成发布计划。在 Chat 界面输入:“生成一个发布计划模版,内容有发布时间、发布内容、发布分支、发布人员、影响点,表格形式输出”,具体内容和形式可根据实际情况自行调整。
四、总结
4.1 Copilot
4.1.1 使用小 tips- Copilot 的定位是辅助你写代码,提高开发效率,而不是真正地替你写代码。
- 日常使用养成写注释的习惯,在更多场景发挥 Copilot 的优势能力。
- 有意识将大方法拆分成小方法,使用 Copilot 逻辑分析和生成100%覆盖分支的能力保证代码的健壮性。
- Copilot 的使用过程就是不断的调试过程,使用时注意给出足够的上下文,如果上下文信息不足,也可以在注释中告知关键信息(比如当前所在位置和目标对象的类型),让它理解当前的逻辑判断,才能给出更准确的建议,获取的信息越多,效果越好。
- 细化注释的拆分粒度,有时候需要完成一段复杂的逻辑,单行描述不足以让 Copilot 理解,这时候可以将其拆分成多段小逻辑来做,最后拼装成一段完整的大逻辑。
4.1.2 常用快捷键
以下以 Mac 的系统快捷键为例,其他系统取相应键盘映射即可。
4.1.3 提效分析经过团队一段时间的试用,Copilot在各阶段的使用比例和预估提效比例如下所示。
PS:使用比例表示使用到该功能的频次比例。预估提效比例表示完成同一功能时,使用 Copilot 比不使用所提升的时间比例。
4.1.4 小结Copilot 整体上是一款强大的自动补全代码逻辑的插件,在不同研发阶段都有突出表现。但是它同时也存在一些不足之处。暂时不支持跨文件,有时会给出一些类中不存在的属性的补全建议。进行代码逻辑缺陷分析的时候,给到的问题和解决方案可能并不准确,需要开发人员进一步判断甄别。上下文信息不足时,Copilot不会给出补全建议或者建议并不准确。目前只支持在目标方法的类中生成的单元测试代码,并且生成代码不能直接使用,还需要人工将测试代码拷贝到测试类的命名空间下。
4.2 cursor
4.2.1 使用小 tips进行代码 Review 或重构时候,要尽量让 Cursor 获取到相对完整的上下文,上下文越多返回越准确。使用 Cursor 生成相关内容时(时序图或者类图),要描述清楚输出内容的类型(比如PlantUML或者Markdown),一般也需要加下中文输出,否则通常会以英文形式输出。
4.2.2 常用快捷键以下以 Mac的 系统快捷键为例,其他系统取相应键盘映射即可。
4.2.3 提效分析经过统计分析,Cursor在各阶段的预估提效比例如下所示。
4.2.4 小结Cursor 整体上是一款强大的多功能软件,在系统分析、研发迭代的不同阶段都可以提供有力的支持,提高了开发效率。但是它是一款独立的工具软件,暂时并没有集成到我们常用的开发环境中去,使用的时候需要不断的拷贝上下文和软件回切等;再有就是 Cursor 对问题的描述精准度要求较高,描述不不清晰的话通常不能给到正确的建议。但是瑕不掩瑜,希望 Cursor 可以逐步完善,给开发者带来更加完美的使用体验。
Generated by RSStT. The copyright belongs to the original author.