徐昊 · AI 时代的软件工程
徐昊
Thoughtworks 全球技术策略顾问
2965 人已学习
新⼈⾸单¥98
登录后,你可以任选4讲全文学习
课程目录
已更新 23 讲/共 36 讲
徐昊 · AI 时代的软件工程
15
15
1.0x
00:00/00:00
登录|注册

20|使用 LLM 按照测试策略生成代码

你好,我是徐昊,今天我们来继续学习 AI 时代的软件工程。
上节课,我们讲解了如何利用架构划分功能上下文,以及如何为不同的架构组件,选择恰当的测试替身技术(Test Double),从而构造恰当的测试策略。
那么构建了测试策略之后,对于我们使用大语言模型(Large Language Model)生成代码有什么帮助呢?那么今天就让我们来看一看。

按照测试策略构造提示词模板

我们仍然使用上节课的例子,在上节课的讨论中,我们最后得到的测试策略是这样的:
也就是说,我们将架构中的三种不同的组件分别进行测试,其中 Persistent 层中的组件,使用假对象(Fake,内存数据库)作为测试替身。而 HTTP interface 和 Application Logic 层则通过存根(Stub)作为测试替身。最后,再通过功能测试,对整个系统进行验证。
接下来让我们按照测试策略,针对不同的组件构造提示词模板(Prompting template)。我们先从 Persistent 层开始:
架构描述
=======
当前系统技术栈为 Spring Boot,Jersey 和 MyBatis。
 
当前系统采用典型的三层架构设计,分布为:
- HTTP interface 层,负责提供 RESTful API,命名规则为 XXXAPI,比如 OrdersAPI;
– Application Logic 层,负责提供核心逻辑,命名规则为 XXXService,比如 OrderService;
– Persistent 层,负责与持久化数据交互,命名规则为 XXXDAO,比如 OrderDAO;
– DAO 通过 MyBatis 的 Mapper 实现
– 在对 DAO 进行测试时,使用 H2 数据库作为 fake implementation,也就是在测试中,初始化 H2 数据库,然后保证应用程序链接到这个数据库,并在测试结束后销毁这个数据库。
 
功能需求
=======
{functionalities}
 
任务
====
上面功能需求描述的场景,在 Persistent 层中需要哪些组件(目标组件);
列出需求描述的场景使用到目标组件的功能(目标功能);
列出目标功能需要测试的场景。描述场景,并给出相关的测试数据。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

1. 构建测试策略,选择恰当的测试替身技术,如假对象和存根,以及通过功能测试验证整个系统。 2. 使用提示词模板按照测试策略,针对不同的组件构造场景和测试数据,确保LLM在后续交互中保持上下文连贯。 3. 利用大语言模型(LLM)生成测试代码,如为目标功能场景提供测试代码和ProductDAO的实现。 4. 提供架构描述和任务描述,列出需求描述的场景使用到目标组件的功能,以及列出目标功能需要测试的场景,并描述场景并给出相关的测试数据. 5. 通过LLM生成HTTP Interface层的测试代码,包括发送GET请求到端点、获取响应并验证状态码、从响应中获取产品目录列表等. 6. 通过LLM生成Application Logic层的测试代码,包括配置和测试核心逻辑,使用存根(Stub)对服务进行测试等.

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《徐昊 · AI 时代的软件工程》
新⼈⾸单¥98
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)