经典Prompt欣赏 - 给代码生成单元测试 - 蝈蝈俊

💡 原文中文,约5400字,阅读约需13分钟。
📝

内容提要

这篇文章介绍了一个在Twitter上看到的给代码生成单元测试的Prompt。该Prompt提供了详细的步骤和指导,包括分析代码、列出测试用例、编写测试代码、复查结果和总结测试覆盖范围等。文章还提到了借鉴XML标签和清晰的步骤来提高指令的理解和生成结果的质量。最后,文章总结了通过这些改进可以生成高质量的输出。

🔎

延伸解读

XML标签在Prompt中的结构化作用

文章指出,使用XML标签可以让提示词具有清晰的结构,比传统分割线更利于大语言模型理解指令。例如,该Prompt用<prompt_explanation>、<response_format>等标签划分不同区域,使模型能准确识别任务说明、输出格式和待测代码。这种结构化方式提高了指令的解析效率,尤其适用于复杂任务。

XML特殊字符转义与CDATA的实用技巧

在XML格式的提示词中,小于号、大于号、和号等字符需转义,否则可能被解析为标签或实体引用。文章建议使用转义字符如&lt;、&gt;、&amp;,或采用CDATA区块包裹原始文本,避免大量转义。但需注意CDATA结束标记]]>不能出现在内容中。这些技巧能提升提示词的兼容性和可读性。

链式思考(CoT)在Prompt设计中的体现

该Prompt通过链式思考引导模型分步执行:先分析代码,再列出测试用例,接着编写测试代码,然后复查,最后总结覆盖范围。每一步的输出作为下一步的输入,确保不遗漏关键信息。这种结构化的思考流程有助于模型生成高质量、全面的测试用例,也便于用户理解模型的推理过程。

明确目标与角色设定的增益效果

文章强调,在Prompt开头明确指令目标(如“创建全面的测试用例以发现漏洞”)能让模型更准确理解预期。同时,设定角色(如“专家级软件测试员”)可引导模型从相关语料中选取内容,使生成结果更贴合测试领域。这两点虽非核心,但能显著提升输出的针对性和质量。

❓

Q&A

这个Prompt的主要目的是什么?

该Prompt的主要目的是生成一套全面的测试用例,以发现代码中的潜在漏洞或问题。

如何使用这个Prompt分析代码?

使用该Prompt时,首先需要仔细分析代码,理解其目的、输入、输出及关键逻辑,然后列出必要的测试用例。

这个Prompt适用于哪些模型?

虽然最初是针对Claude 3设计的,但理论上可以适用于绝大部分模型。

XML标签在Prompt中有什么作用?

XML标签使得文本提示词结构清晰,有助于大语言模型更好地理解指令,提高生成结果的质量。

如何确保测试代码的质量?

确保测试代码遵循准备、执行、验证的流程,并为每个测试提供清晰的注释,说明测试内容及其重要性。

在生成测试用例时需要考虑哪些因素?

在生成测试用例时,需要考虑测试的目的、输入、预期输出和测试类型,以确保全面覆盖所有场景。

🏷️

标签

➡️

继续阅读