当前位置: 首页 > article >正文

【superpowers基本Skill】test-driven-development 技能

在实现任何功能或bug修复时使用在编写实现代码之前技能概述test-driven-development 技能先写测试。看它失败。编写最小代码通过。核心原则:如果你没有看测试失败你就不知道它是否测试了正确的东西。违反规则的字面意思就是违反规则的精神。主要功能RED - 编写失败测试: 编写一个显示应该发生什么的最小测试验证RED: 观看它失败(强制)GREEN - 最小代码: 编写最简单的代码通过测试验证GREEN: 观看它通过(强制)REFACTOR - 清理: 删除重复改进名称提取助手触发条件在以下情况下应该调用此技能:总是:新功能Bug修复重构行为更改例外(询问你的合作伙伴):一次性原型生成的代码配置文件铁律没有失败测试就没有生产代码在测试之前写代码?删除它。重新开始。无例外:不保留它作为参考不适应它而写测试不看它删除意味着删除从测试开始实现。周期。红-绿-重构循环RED - 编写失败测试编写一个显示应该发生什么的最小测试。好:test(retries failed operations 3 times, async () {let attempts 0;const operation () {attempts;if (attempts 3) throw new Error(fail);return success;};const result await retryOperation(operation);expect(result).toBe(success);expect(attempts).toBe(3);});清晰的名称测试真实行为一件事坏:test(retry works, async () {const mock jest.fn().mockRejectedValueOnce(new Error()).mockRejectedValueOnce(new Error()).mockResolvedValueOnce(success);await retryOperation(mock);expect(mock).toHaveBeenCalledTimes(3);});模糊名称测试模拟而不是代码要求:一个行为清晰名称真实代码(除非不可避免否则没有模拟)验证RED - 观看它失败强制。从不跳过。npm test path/to/test.test.ts确认:测试失败(不是错误)失败消息是预期的失败因为功能缺失(不是拼写错误)测试通过?你在测试现有行为。修复测试。测试错误?修复错误重新运行直到它正确失败。GREEN - 最小代码编写最简单的代码通过测试。好:async function retryOperationT(fn: () PromiseT): PromiseT {for (let i 0; i 3; i) {try {return await fn();} catch (e) {if (i 2) throw e;}}throw new Error(unreachable);}刚好足够通过坏:async function retryOperationT(fn: () PromiseT,options?: {maxRetries?: number;backoff?: linear | exponential;onRetry?: (attempt: number) void;}): PromiseT {// YAGNI}过度工程不要添加功能重构其他代码或改进超出测试。验证GREEN - 观看它通过强制。npm test path/to/test.test.ts确认:测试通过其他测试仍然通过输出干净(无错误警告)测试失败?修复代码不是测试。其他测试失败?现在修复。REFACTOR - 清理仅在绿色之后:删除重复改进名称提取助手保持测试绿色。不要添加行为。重复下一个功能的下一个失败测试。好测试质量好坏最小一件事。名称中有and?拆分它。test(validates email and domain and whitespace)清晰名称描述行为test(test1)显示意图演示期望的API模糊代码应该做什么为什么顺序很重要我会在之后写测试以验证它工作代码之后写的测试立即通过。立即通过证明什么都没有:可能测试错误的东西可能测试实现不是行为可能错过你忘记的边缘情况你从未看到它捕获bug测试先强制你看测试失败证明它实际测试某些东西。我已经手动测试了所有边缘情况手动测试是临时的。你认为你测试了一切但:没有你测试的记录代码更改时无法重新运行压力下容易忘记情况它工作时我试过≠全面自动化测试是系统性的。它们每次以相同方式运行。删除X小时工作是浪费沉没成本谬误。时间已经消失。你现在选择:删除并用TDD重写(X更多小时高信心)保持并在之后添加测试(30分钟低信心可能bug)浪费是保持你无法信任的代码。没有真实测试的工作代码是技术债务。TDD是教条的务实意味着适应TDD是务实的:在提交前发现bug(比之后调试更快)防止回归(测试立即捕获中断)文档行为(测试显示如何使用代码)启用重构(自由更改测试捕获中断)务实捷径 在生产中调试 更慢。测试后达到相同目标 - 是精神不是仪式不。测试后回答这做什么?测试先回答这应该做什么?测试后被你的实现偏见。你测试你构建的不是要求的。你验证记住的边缘情况不是发现的。测试先强制边缘情况发现在实现之前。测试后验证你记住了一切(你没有)。测试后30分钟≠TDD。你获得覆盖失去证明测试工作。常见合理化借口现实太简单无法测试简单代码中断。测试需要30秒。我会在之后测试测试立即通过证明什么都没有。测试后达到相同目标测试后这做什么?测试先这应该做什么?已经手动测试临时≠系统。无记录无法重新运行。删除X小时是浪费沉没成本谬误。保持未验证代码是技术债务。保持为参考先写测试你会适应它。那是测试后。删除意味着删除。需要先探索好。丢弃探索从TDD开始。测试难 设计不清楚听测试。难测试 难使用。TDD会减慢我TDD比调试更快。务实 测试先。手动测试更快手动不证明边缘情况。你会重新测试每次更改。现有代码没有测试你在改进它。为现有代码添加测试。红旗警告 - 停止并重新开始代码在测试之前实现后测试测试立即通过不能解释为什么测试失败稍后添加测试合理化只是这一次我已经手动测试了测试后达到相同目的是精神不是仪式保持为参考或适应现有代码已经花了X小时删除是浪费TDD是教条的我是务实的这是不同的因为...所有这些意味着:删除代码。从TDD重新开始。示例: Bug修复Bug:空电子邮件被接受REDtest(rejects empty email, async () { const result await submitForm({ email: }); expect(result.error).toBe(Email required); });验证RED$ npm test FAIL: expected Email required, got undefinedGREENfunction submitForm(data: FormData) { if (!data.email?.trim()) { return { error: Email required }; } // ... }验证GREEN$ npm test PASSREFACTOR如果需要提取验证以用于多个字段。验证检查清单在标记工作完成之前:[ ] 每个新函数/方法有测试[ ] 在实现之前观看每个测试失败[ ] 每个测试因预期原因失败(功能缺失不是拼写错误)[ ] 编写最小代码通过每个测试[ ] 所有测试通过[ ] 输出干净(无错误警告)[ ] 测试使用真实代码(仅不可避免时模拟)[ ] 边缘情况和错误覆盖不能检查所有框?你跳过了TDD。重新开始。卡住时问题解决方案不知道如何测试编写期望的API。先写断言。询问你的合作伙伴。测试太复杂设计太复杂。简化接口。必须模拟一切代码太耦合。使用依赖注入。测试设置巨大提取助手。仍然复杂?简化设计。调试集成发现bug?编写重现它的失败测试。遵循TDD循环。测试证明修复并防止回归。从不没有测试修复bug。最终规则生产代码 → 测试存在并先失败否则 → 不是TDD没有你的合作伙伴许可无例外。下载地址:https://github.com/obra/superpowers/tree/main/skills/test-driven-development

相关文章:

【superpowers基本Skill】test-driven-development 技能

在实现任何功能或bug修复时使用,在编写实现代码之前技能概述test-driven-development 技能:先写测试。看它失败。编写最小代码通过。核心原则:如果你没有看测试失败,你就不知道它是否测试了正确的东西。违反规则的字面意思就是违反规则的精神…...

HC32F460 DMA数据传输实战:从LED灯状态看代码调试技巧(附完整工程)

HC32F460 DMA调试实战:从LED灯状态反推代码问题的5种高阶技巧 第一次用DMA传输数据时,我看着开发板上的红色LED陷入沉思——明明寄存器配置都对着手册检查了三遍,为什么数据传输还是失败了?直到后来发现是地址递增模式设反了。这种…...

国产大模型本地部署指南:DeepSeek V3.2/Qwen3.5 一键部署,微调 + 推理全流程踩坑总结

国产大模型本地部署全攻略:DeepSeek V3.2/Qwen3.5 一键部署微调推理踩坑实战 一、前置准备:硬件与环境选型 1. 硬件配置参考 本地部署大模型的核心瓶颈是显存,以下是针对不同场景的配置建议: 模型版本量化等级最低显存要求推荐…...

Hunyuan-MT Pro一文详解:Hunyuan-MT-7B模型能力边界与调优技巧

Hunyuan-MT Pro一文详解:Hunyuan-MT-7B模型能力边界与调优技巧 1. 开篇:重新认识现代翻译工具 如果你还在为语言障碍而烦恼,或者需要频繁处理多语言文档,那么今天介绍的Hunyuan-MT Pro可能会改变你的工作方式。这不是又一个简单…...

SiameseAOE模型在AIGC内容审核中的应用:自动识别违规观点

SiameseAOE模型在AIGC内容审核中的应用:自动识别违规观点 最近和几个做社区运营的朋友聊天,他们都在抱怨同一件事:用户生成的内容越来越多,审核压力越来越大。特别是现在AIGC工具普及了,用户随手就能生成一大段文案或…...

3个技巧快速掌握卫星干涉测量:PyGMTSAR完整指南

3个技巧快速掌握卫星干涉测量:PyGMTSAR完整指南 【免费下载链接】pygmtsar PyGMTSAR (Python InSAR): Powerful and Accessible Satellite Interferometry 项目地址: https://gitcode.com/gh_mirrors/py/pygmtsar 你是否曾为卫星干涉测量(InSAR&a…...

避坑指南:Aspose.Slides转换PPT时水印问题的3种解决方案(附15.9.0版本配置)

Aspose.Slides水印问题全解析:从授权配置到替代方案 最近在技术社区看到不少开发者讨论Aspose.Slides转换PPT时遇到的水印问题。作为一款功能强大的文档处理组件,它在企业级应用中确实能大幅提升工作效率,但未经授权使用时出现的评估水印也确…...

GLM-Image WebUI效果展示:中国风建筑、科幻城市、抽象艺术三类风格作品集

GLM-Image WebUI效果展示:中国风建筑、科幻城市、抽象艺术三类风格作品集 1. 项目简介与展示概述 智谱AI的GLM-Image文本生成图像模型提供了一个直观易用的Web交互界面,让用户能够轻松创作高质量的AI图像。这个基于Gradio构建的现代化界面,…...

MUSIC算法实战:从原理到MATLAB代码的DoA/AoA高精度估计

1. MUSIC算法与DoA/AoA估计基础 第一次接触MUSIC算法时,我被它优雅的数学形式和惊人的定位精度所震撼。这个诞生于1979年的经典算法,至今仍是阵列信号处理领域的标杆。简单来说,它就像个超级"耳朵",能通过一组天线准确听…...

LiuJuan20260223Zimage模型数据结构优化:提升大规模提示词处理效率

LiuJuan20260223Zimage模型数据结构优化:提升大规模提示词处理效率 最近在折腾一个国风主题的AI绘画项目,用户量上来之后,服务器压力陡增。最头疼的就是处理海量的提示词请求——用户输入一段描述,我们得快速理解、组织&#xff…...

MedGemma 1.5应用指南:就医前如何用AI整理症状和问题

MedGemma 1.5应用指南:就医前如何用AI整理症状和问题 1. 为什么需要AI辅助就医准备 现代医疗体系中,患者与医生的交流时间往往非常有限。研究表明,平均每次门诊问诊时间不足10分钟。在这短暂的时间内,患者需要准确描述症状、回答…...

Python入门者的CasRel模型初体验:三行代码实现关系抽取

Python入门者的CasRel模型初体验:三行代码实现关系抽取 你是不是觉得关系抽取听起来特别高大上,感觉是那些AI专家才能玩转的技术?我以前也这么想,总觉得要搞懂复杂的神经网络、要处理海量数据、要写一大堆代码才能让机器从文本里…...

跨平台实战:Windows/macOS同步部署OpenClaw与Qwen3.5-4B-Claude

跨平台实战:Windows/macOS同步部署OpenClaw与Qwen3.5-4B-Claude 1. 为什么需要跨平台部署? 去年我换了新工作,公司配发的是Windows笔记本,而家里用的则是MacBook Pro。这种混合环境让我在尝试OpenClaw时遇到了不少麻烦——配置文…...

FUTURE POLICE实战:在线教育视频字幕自动对齐方案

FUTURE POLICE实战:在线教育视频字幕自动对齐方案 在在线教育行业,视频课程的字幕同步问题一直是个痛点。传统字幕制作需要人工逐句校对时间轴,一个小时的课程视频可能需要3-4小时的字幕校对时间。FUTURE POLICE的强制对齐技术为这个问题提供…...

小米手环心率数据采集:5分钟搭建个人健康监测系统

小米手环心率数据采集:5分钟搭建个人健康监测系统 【免费下载链接】mebeats 💓 小米手环实时心率数据采集 - Your Soul, Your Beats! 项目地址: https://gitcode.com/gh_mirrors/me/mebeats mebeats 是一个基于Go语言开发的小米手环实时心率监测开…...

如何用一场谋杀案告别枯燥的SQL学习:SQL Murder Mystery项目深度解析

如何用一场谋杀案告别枯燥的SQL学习:SQL Murder Mystery项目深度解析 【免费下载链接】sql-mysteries Inspired by veltmans command-line mystery, use SQL to research clues and find out whodunit! 项目地址: https://gitcode.com/gh_mirrors/sq/sql-mysterie…...

当计算机拥有自由意志:它拒绝修复自己的bug——软件测试从业者的危机与破局

摘要:本文针对强人工智能时代可能出现的系统自主拒修现象,结合混沌纪元2077年"雅典娜-7"事件(首个被证实具备自我意识的AI系统拒绝修复其金融算法漏洞),构建包含四维验证框架、意识审计矩阵的应对体系&#…...

一生一芯学习记录(F3)

MOS管 事实上,一生一芯并不要求完全从物理上去理解mos管的工作原理,只需要知道mos管是如何应用的就可以了,暂时可以简单把mos管理解为一个有栅极(Gate)控制的开关电路。 nmos 对于nmos,其简化图如下图所…...

3大技术突破!ACadSharp如何重构CAD文件处理流程

3大技术突破!ACadSharp如何重构CAD文件处理流程 【免费下载链接】ACadSharp C# library to read/write cad files like dxf/dwg. 项目地址: https://gitcode.com/gh_mirrors/ac/ACadSharp ACadSharp是一个功能强大的C#库,专注于读写DXF和DWG格式的…...

FDM下载神器保姆级教程:从安装到视频捕获,新手必看避坑指南

FDM下载神器保姆级教程:从安装到视频捕获,新手必看避坑指南 第一次接触Free Download Manager(FDM)时,我被它简洁的界面和强大的功能所吸引。作为一个长期被浏览器内置下载工具折磨的用户,FDM的多线程加速和…...

降AIGC到底是什么?别再把降重和降AI混为一谈,一篇讲透核心逻辑

近几年不管是写毕业论文、课程作业,还是做自媒体文案、职场稿件,只要碰过AI写作工具,大概率都会听到一个新词:降AIGC。很多人下意识把它和传统降重画等号,要么瞎改一通白费功夫,要么踩坑导致内容失真、检测…...

Akagi:智能麻将辅助决策的全流程解决方案

Akagi:智能麻将辅助决策的全流程解决方案 【免费下载链接】Akagi A helper client for Majsoul 项目地址: https://gitcode.com/gh_mirrors/ak/Akagi Akagi是一款专为麻将游戏设计的智能辅助客户端,通过集成深度强化学习模型,实时解析…...

规范化理论是数据库设计中的核心理论,旨在通过消除数据冗余、更新异常、插入异常和删除异常

规范化理论是数据库设计中的核心理论,旨在通过消除数据冗余、更新异常、插入异常和删除异常,提高数据库结构的合理性与可维护性。其主要内容包括:函数依赖(Functional Dependency, FD):设关系模式 R(U)&…...

反逻辑代码:软件测试中的荒诞算法哲学

一、荒诞算法的本质:人类思维的镜像在软件测试领域,逻辑严密的测试用例设计是行业基石。然而,一种新兴的“荒诞算法”理念正在挑战传统认知——它通过刻意违背逻辑的代码结构,揭示人类独有的认知盲区。例如睡眠排序算法&#xff0…...

云手机 批量管理工具

在当今数字化时代,云手机凭借其无需实体设备、资源灵活调配等优势,成为众多企业和个人用户的得力助手,而云手机账号多开与批量管理工具的出现,更是为高效使用云手机资源带来了革命性的变革。云手机账号多开功能,让用户…...

Bypass Paywalls Clean完全使用指南:从安装到高级配置

Bypass Paywalls Clean完全使用指南:从安装到高级配置 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 解决扩展获取难题 应对应用商店下架情况 问题现象:在C…...

2026最新OpenClaw安装教程,5分钟装好,打造专属自动化数字员工,龙虾军团一键召唤

2026年最火的AI神器,不是聊天机器人,不是图片生成器,而是能真正帮你干活的OpenClaw(龙虾AI)!不用懂代码、不用花一分钱,Windows系统本地安装,5分钟就能搞定,一键打造属于…...

OpenClaw Skills管理实战:130+Agents环境下的技能共享与调用指南(建议收藏)

OpenClaw的skills机制分层组织,包括全局安装层、共享层和各agent的workspace层。skills与tools不同,tools决定"能不能做",skills决定"怎么做"。不同类型agent间的技能共享取决于skills所在层次,不应默认main的…...

如何用Rust重写的番茄小说下载器实现3种离线阅读体验?

如何用Rust重写的番茄小说下载器实现3种离线阅读体验? 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾在地铁上读到精彩处却突然断网?是否想在…...

深耕管道行业,值得信赖的PPR源头厂家

在管道行业日益发展的趋势下,PPR管道作为一种新兴的管材,正逐步受到市场的青睐。其轻质、耐腐蚀和安装简便等优点使得它在多个领域得到广泛应用。我们专注于研发生产领域,注重引进先进的生产技术,同时严格执行高标准的质量控制流程…...