生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

实施 TDD 时的常见问题

  • 2008-03-12
  • 本文字数:1394 字

    阅读完需:约 5 分钟

如果你刚接触 TDD 不久,可能一些常见的问题正在困扰着你:

  • 我该容忍多大限度的预先设计?
  • 在写测试的时候,可能必须构建出接口和一些类来让代码编译通过——这一步该跨多大?

Chad Meyers 写下了一些他在开始接触 TDD 实践时碰到的疑惑和问题,它们应该都是比较常见的: > 1. 我该容忍多大限度的预先设计?你怎么知道应该何时停止(也就是说,“当人们开始讨论算法,就是该测试的时机了”)?

  1. 对于象“我心里清楚我们需要这个”这类东西——我们该如何处理(例如,在控制台 main() 方法中加上一个 try/catch{Console.WriteLine(ex);}?)
  2. 编写测试时,为了让代码编译通过,你不得不写下一两个接口,一个实体类,在类中还有一些 NotImplementedExceptions 等等。这一步该走多远?
  3. 如果在测试一个用户故事期间,你发现先前的预先设计有问题,你是会马上停下来跟你的搭档讨论,做该做的事,然后继续;还是折返回去,在当前的故事中采用完整的测试优先模式?
  4. 在处理一个新的用户故事时,你发现针对前一个故事所编写的测试已经不再体现需求。你是否会立刻重构那个测试,还是把它标记为“忽略”,等你完成当前的故事再回过头去处理那个被忽略的测试?还是有其它做法?
  5. 如果新的用户故事要求对某个已有的测试做出轻微调整,你是会调整它,还是会写一个新测试,把旧的扔掉(也就是,“不许更改现有的测试代码!”,或者“只有出现小的编译问题时才准动它,否则就别碰!”)?
  6. 如果你构建了模型并且通过了测试,但是你发现这个设计很幼稚,而且即将要做的用户故事肯定会对其进行重大修改,并生成一个新的完全不同的模型。你是应该退 一步,考虑进行大型重构吗?还是应该继续修修补补,调整现有的模型,尽管这个模型最终会被目前看来显然超出该用户故事范围的工作所改进?

Derick Bailey分享了他对 Chad 这些问题的看法。他很谨慎的说,这些都是基于他自己的亲身体会,所以你的实践经验可能会跟他的不同。下面是他的回答:

  1. 知道自己应该构建什么就行。
    这个问题实际上应该根据你的实际项目来回答。我最近做了一个企业集成项目,里面用到了我们的核心维护系统,然后添加了一些离线操作功能。在这个项目中,我 没有做太多的预先设计。我知道系统需要能够在离线模式下操作,我还知道即使是没人登录计算机或者运行这个软件时,它也需要能够执行一些操作,我知道它需要 跟主维护系统进行双向通信,用来执行与维护相关的的一定数量的任务。我从一些设想 / 预先设计开始动手——构建了一个 Windows Service 来运行核心进程,构建了一个客户端 - 服务器架构来托管 UI,在一个消息系统上为通信提供支持。除了这些算是预先设计以外,在构建软件的过程 中都是其他各项任务的功能需求来驱动项目设计的进展。
    最近,我与一个为实验室开发某系统的团队一起工作时,有了截然相反的体验。我们有源于客户的需求,客户所要求的流程,以及对客户手中数据进行转换的需要; 我们需要一个大规模的预先设计,用以判断我们的解决方案可以满足数据转换和功能需求。系统的核心设计是预先完成的,但是具体实现还是在开发过程中慢慢成 型。

如果你还是 TDD 新手,这些问题可能会听起来很熟悉。这些问题的最佳答案应该到先行者那里去寻找,他们可能存在于某个本地用户社区,或者众多在线的开发者邮件列表中的一个。换个角度来说,如果你已经有了充分的 TDD 经验,请与大家分享一下你对这些问题的答复。

查看英文原文: Common Questions when Adopting TDD

2008-03-12 01:171143
用户头像

发布了 197 篇内容, 共 52.4 次阅读, 收获喜欢 20 次。

关注

评论

发布
暂无评论
发现更多内容

华为云亮相KubeCon EU 2024,以持续开源创新开启智能时代

华为云开发者联盟

开源 开发 华为云 华为云开发者联盟

深入解析以太坊Dencun升级:提升网络性能与安全的关键举措

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

那位拿了多个Offer的大佬分享了最新Go面经

王中阳Go

Go 后端 Go 面试题 面经 后端 大厂

Web3 游戏周报(3.17-3.23)

Footprint Analytics

Web3 游戏

C#调用C++ (使用C++/CLI)

EquatorCoco

c++ C# 开发语言

网心科技入选2023中国ToB行业影响力价值榜

网心科技

低代码与供应链行业的融合:开启数字化新时代

EquatorCoco

软件开发 低代码 供应链 项目开发

SpringBoot如何优雅的进行参数校验

不在线第一只蜗牛

Java 后端 springboot

u-blox 面向多个大众应用市场推出最新 Wi-Fi 6 模块NORA-W4

科技之家

不给灰暗留下死角:华为应用市场的安全之光

脑极体

应用

宁德时代与特斯拉合作;钟睒睒连续四次中国首富丨 RTE 开发者日报 Vol.171

声网

什么是正向代理和反向代理?

EquatorCoco

反向代理 正向代理

Databend 开源周报第 137 期

Databend

从数据存储的演迁,看芯赛云分布式存储应用

科技热闻

Solana链狙击机器人:交易者的新宠

开发丨飞机丨 @aivenli

2024南京国际智能机器人展览会

AIOTE智博会

机器人展 智能机器人展

深入探讨iOS开发:从创建第一个iOS程序到纯代码实现全面解析

雪奈椰子

青亦学爬虫:根据淘宝天猫商品链接封装淘宝天猫商品详情数据接口

tbapi

淘宝API接口 淘宝商品详情接口 天猫商品详情接口 淘宝数据爬虫 天猫数据爬虫

iOS开发优势解析,费用探究以及软件开发详解

拓展AI边界:去中心化人工智能的应用场景和主要项目盘点

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

商城小程序项目实现监控的可观测性最佳实践

观测云

小程序

软件测试学习笔记丨Allure2 失败重试功能应用场景

测试人

软件测试

利用Python和数据获取技术实现智能旅游情报系统

阿Q说代码

Python 后端 数据获取

智达方通全面预算管理系统,为企业带来更可靠的交付

智达方通

全面预算管理 全面预算管理系统

一文熟悉PolarDB-PG 分区表核心特性

阿里云数据库开源

数据库 阿里云 polarDB PolarDB-PG

体育赛事直播源码的价值和意义?不同应用场景获利方法

软件开发-梦幻运营部

从静态到动态化,Python数据可视化中的Matplotlib和Seaborn

快乐非自愿限量之名

Python 数据可视化 信息可视化

Netflix微服务经验教训

俞凡

微服务 最佳实践 netflix 大厂实践

什么样的商品管理系统可以驱动品牌增长?

第七在线

容器镜像加速指南:探索 Kubernetes 缓存最佳实践

不在线第一只蜗牛

Kubernetes 容器化 集群

深圳站回顾|隐语最新功能、隐私计算硬核技术、数据要素实践干货全记录(附演讲视频)

隐语SecretFlow

实施TDD时的常见问题_研发效能_Amr Elssamadisy_InfoQ精选文章