引言
随着chatGPT的发布,AI工具的热度也是越来越高,各种AI工具如雨后春笋般层出不穷,在这之中,有两款在研发流程中有显著提效表现:copilot和cursor。两款工具都是基于人工智能技术开发的,为开发人员提供了强大的支持和功能。
copilot是⼀种基于⼈⼯智能的代码⾃动补全插件,支持常见的开发环境和编辑器,比如IntelliJ IDEA 、VSCode、Visual Studio等。它经过了训练,学习了超过 10 亿行的代码样本,具备强大的代码理解和生成能力。可以根据你的代码注释,自动补全逻辑块级别或方法级别的代码。这使得在开发过程中,你可以更快速地编写代码,减少了重复性的劳动,大大提高了开发效率。
cursor 则是一款多功能的智能工具软件,它不仅支持代码逻辑检查和重构,还提供了一系列其他功能。包括在系统设计阶段生成系统时序图和类文件ER图,协助数据库表的设计生成,批量处理文件,甚至生成发布计划等。cursor 在软件开发的不同阶段都能提供有力的支持,从系统分析到代码编写,再到测试和发布,都能帮助开发团队更高效地完成任务。它是一种强大而多功能的智能工具,能够显著提升研发流程的效率。
本文将主要介绍cursor在软件开发不同阶段的能力,在迭代各阶段(编码、代码review、单元测试)copilot和cursor不同的使用场景,以及一些它们在实际使用中的小技巧和提效分析等,希望可以给你带来帮助。
工具最佳实践
cursor
下面是cursor 在研发过程中一些常用能力的展示,灵活使用cursor的能力,可以帮助我们更加高效的完成产品需求。
1.生成时序图
- 根据系统交互描述,生成时序图
- 生成结果
2.生成ER关系图
- 将有依赖关系的类拷贝到cursor,生成ER类图
- 生成结果
3.生成发布计划
- 输入发布计划内容和格式即可
4.代码重构优化
- 将需要优化的代码拷贝到cursor,选中后输入:重构优化下面这段代码即可
5.sql查询优化
- 将表结构和目标查询sql 输入到cursor,输入对查询sql进行优化即可
6.生成库表DDL和DML语句
- 把表字段和内容设计描述清楚,让其生成相应的语句即可
7.文件批量处理
- 可以对文件进行批处理。比如找出某个值,将其替换成某个新的值;或者每一行都新增一个字段等常见操作
IDE+copilot
灵活使用IDE自带的模版功能和copilot能力,可以帮我们快速完成代码cr。
1.java template + copilot 快速cr
将准备好的Review问题(比如:“分析xx方法是否有逻辑缺陷,如果有给出解决方案,没有说明理由”)配置到java LiveTemplate中,设置好自己习惯的快捷键,比如crBug,当需要对某个方法进行cr的时候,直接快捷键补全对应预设的问题即可。
将光标定位到需要cr的方法的下方,输入crbug选择文案即可。
迭代各阶段最佳实践
在整个研发迭代的生命周期中,可以在不同迭代阶段,穿插使用cursor和copilot的能力,有效提高了代码质量和开发效率。接下来展示一下,在需求迭代过程中,AI工具可以帮助我们完成哪些事情。
系分阶段
1.生成时序图
根据需求进行系分设计,使用cursor生成需求的时序图。
- 输入
- 输出
2.生成ER类图
使用cursor生成ER类图。
编码阶段
1.函数级别
1.1 工具函数快速生成
copilot可以直接生成通用的工具函数,比如常用的日期比较函数,或者字符串判别函数等。
1.2 策略类型的方法快速生成
copilot可以学习框架策略的方法,并且能够模仿之前策略方法,快速生成类似方法。
比如在下面这个列子中,前两个方法是人工写的,第三个方法是copilot根据注释自动补全的,整体是可用的。
2.逻辑块级别
2.1 枚举类快速生成
在这个枚举类中,前两个枚举是人工定义的,其他的都是copilot自动补全的。
2.2 模型DTO快速生成
在完成第一个字段的注释后,copilot会自动补全当前成员变量的定义。还可以推测后续该模型可能存在的字段,能给出不错的建议参考,且符合个人的命名习惯。
2.3 Stream逻辑表达式自动完成
copilot可以根据注释,快速补全Stream逻辑表达式,结果基本正确。
- 取数据做某件事
- 对数据进行分组
2.4 条件语句和循环快速补偿
copilot可以快速补全条件语句(如if语句或switch语句)和循环语句(如for循环或while循环)。
- if条件
- for循环
CR阶段
1.逻辑缺陷分析
1.1 使用copilot
copilot 能够发现部分逻辑缺陷,并且可以给出改造方案,但是有时候并不准确,需要开发人员自己判断甄别。
将光标定位到目标方法的下方,通过输入:分析xx方法是否存在逻辑缺陷,如果有给出解决方案。copolit会给出下图所示的缺陷提示和解决方案。
1.2 使用cursor
cursor 能够发现逻辑缺陷,并且给出改造方案,准确性相对较高。
输入代码上下文和问题即可:代码+分析这段代码是否有逻辑缺陷,如果有给出解决方案,中文输出。
2.代码重构
cursor 支持代码重构,并且重构准确度较高,符合开发规范。
只需要将代码复制到cursor,选中后输入重构优化这段代码即可。
UT阶段
1.生成单元测试
1.1 使用 copilot
copilot能够分析代码生成UT描述,代码行覆盖率可做到100%(每一个分支逻辑)。
将光标定位到目标测试方法的下方,通过写注释:“为xx方法生成单元测试,覆盖所有分支情况”,这样copilot会生成UT描述和UT代码。当然也可通过上面介绍过的预设模版的方式触发生成单元测试。
ps: 生成的单元测试代码不能直接使用,需要不断的反复尝试。目前copilot只能在方法的所在类中生成单元测试代码,无法直接生成单元测试类。
1.2 使用 cursor
cursor可以直接为目标方法生成单元测试类。
在chat界面,输入目标代码和”为xx方法生成测试用例,覆盖所有分支情况”即可。
发布阶段
可以使用cursor生成发布计划。
在chat界面输入:“生成一个发布计划模版,内容有发布时间、发布内容、发布分支、发布人员、影响点,表格形式输出”,具体内容和形式可根据实际情况自行调整。
总结
copilot
1.使用小 tips
- copilot的定位是辅助你写代码,提高开发效率,而不是真正的替你写代码。
- 日常使用养成写注释的习惯,在更多场景发挥copilot的优势能力。有意识将大方法拆分成小方法,使用copilot 逻辑分析和生成100%覆盖分支的能力保证代码的健壮性。
- copilot的使用过程就是不断的调试过程,使用时注意给出足够的上下文,如果上下文信息不足,也可以在注释中告知关键信息(比如当前所在位置和目标对象的类型),让它理解当前的逻辑判断,才能给出更准确的建议,获取的信息越多,效果越好。
- 注释代码的拆分粒度,有时候你要做的一件复杂的逻辑,单行描述不足以让copilot 理解,这时候可以将其拆分成多件小逻辑来做,最后拼装成一件完整的大逻辑。
2.常用快捷键
以下以mac的系统快捷键为例,其他系统取相应键盘映射即可。
3.提效分析
经过一段时间的使用,copilot在各阶段的使用比例和预估提效比例如下所示(以下为个人预估比例)。
ps:使用比例表示使用到该功能的频次比例。
预估提效比例表示完成同一功能时,使用copilot比不使用所提升的时间比例。
4.小结
copilot整体上是一款强大的自动补全代码逻辑的插件,在不同研发阶段都有突出表现。但是它同时也存在一些不足之处。
- 暂时不支持跨文件,有时会给出一些类中不存在的属性的补全建议。
- 进行代码逻辑缺陷分析的时候,给到的问题和解决方案可能并不准确,需要开发人员进一步判断甄别。
- 上下文信息不足时,copilot不会给出补全建议或者建议并不准确。
- 目前只支持在目标方法的类中生成的单元测试代码,并且生成代码不能直接使用,还需要人工将测试代码拷贝到测试类的命名空间下。
cursor
1.使用小 tips
- 进行代码review或重构时候,要尽量让cursor 获取到相对完整的上下文,上下文越多返回越准确。
- 使用cursor生成相关内容时(时序图或者类图),要描述清楚输出内容的类型(比如PlantUML或者Markdown),一般也需要加下中文输出,否则通常会以英文形式输出。
2.常用快捷键
以下以mac的系统快捷键为例,其他系统取相应键盘映射即可。
3.提效分析
经过统计分析,cursor在各阶段的预估提效比例如下所示(以下为个人预估比例)。
4.小结
cursor整体上是一款强大的多功能软件,在系统分析、研发迭代的不同阶段都可以提供有力的支持,提高了开发效率。但是它是一款独立的工具软件,暂时并没有集成到我们常用的开发环境中去,使用的时候需要不断的拷贝上下文和软件回切等;再有就是cursor对问题的描述精准度要求较高,描述不不清晰的话通常不能给到正确的建议。但是瑕不掩瑜,希望cursor可以逐步完善,给开发者带来更加完美的使用体验。
(本文作者:杜广全)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。