写点什么

实施 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:171250
用户头像

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

关注

评论

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

拒绝花里胡哨,零基础也能把机器学习给你捣鼓明白

博文视点Broadview

Java之static关键字【实例变量与类变量、实例方法与类方法】

Fire_Shield

Java static 9月月更

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

华为云开发者联盟

Python 人工智能 企业号九月金秋榜

通用漏洞评分系统 (CVSS)系统入门指南

SEAL安全

漏洞修复 漏洞管理

GOPS现场 | 对话某科技公司DevOps工程师,从用户角度探讨DevOps工具链

龙智—DevSecOps解决方案

DevOps 运维 DevOps工具

漫谈 SAP 产品里页面上的 Checkbox 设计与实现

汪子熙

JavaScript 前端开发 web开发 SAP 9月月更

SAP 电商云 Spartacus UI 的 checkout 场景中的串行请求设计分析

汪子熙

angular 调试 电商 Spartacus 9月月更

手把手教大家在 Spring Boot 中处理 flowable 中的用户和组!

江南一点雨

springboot workflow flowable

“3” 生万物,勇敢前行

MIAOYUN

【数据结构】带头+双向+循环链表(增、删、查、改)的实现_【附源码、图片示例】_ [初阶篇_ 复习专用]

Dream-Y.ocean

c 双向循环链表 9月月更

海龟绘图简单科普

吉师职业混子

9月月更

一款开源的基于 Angular 的电商 Storefront 开发框架介绍

汪子熙

typescript 前端开发 angular 电商 9月月更

数据火器库八卦系列之瑞士军刀随APP携带的SQLite

sqlite 数据库 科技 玖章算术

龙智 | 电话更换通知

龙智—DevSecOps解决方案

GOPS现场 | 对话龙智大规模安全研发技术专家,分享静态代码、开源组件扫描干货

龙智—DevSecOps解决方案

开源组件 安全研发 静态代码

微服务低代码Serverless平台(星链)的应用实践

京东科技开发者

Serverless 微服务 云原生 低代码 VMS

OpenHarmony 3.2 Beta源码分析之MediaLibrary

OpenHarmony开发者

OpenHarmony

【C语言】动态内存管理 [进阶篇_ 复习专用]

Dream-Y.ocean

c c++ 9月月更

元宇宙会议来了,3DCAT助力2022长宁区科技创新主题论坛开展

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

【Vue3】穿梭框 -- 思路与实现分析

Sam9029

前端 Vue 3 9月月更

“企业级零代码黑客马拉松大赛”决赛名单公布

明道云

低代码 零代码 企业数字化转型 黑客马拉松

【数据结构】单链表(增、删、查、改)的实现 [初阶篇_ 复习专用]

Dream-Y.ocean

c 单向链表 9月月更

DCAT亮相WAIC 2022浦东分会场——元宇宙博览会暨数字光影大会

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

瑞云科技总经理邹琼出席2022世界人工智能大会投融资主题论坛

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

基于高效采样算法的时序图神经网络系统(二)

Baihai IDP

人工智能 神经网络 AI 图数据

分布式架构下如何选择最佳 Store?

KaiwuDB

数据库 分布式数据库 数据存储

【C语言】深度剖析文件操作 [进阶篇_ 复习专用]

Dream-Y.ocean

c 文件 9月月更

MobTech ShareSDK 后台配置说明

MobTech袤博科技

开发者 sdk 微信平台 SDK 教程

版本控制 | 如何有效管理SVN服务器上的多个储存库

龙智—DevSecOps解决方案

svn SVN储存库

【数据结构】顺序表(增、删、查、改)的实现 [初阶篇_ 复习专用]

Dream-Y.ocean

c 顺序表 9月月更

OSCAR开源产业大会|中国信通院可信开源评估最新结果正式发布

Ada@SegmentFault

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