【发布时间】:2009-06-01 15:37:50
【问题描述】:
所以我做了一些单元测试,并且有编写测试的经验,但我还没有完全接受 TDD 作为一种设计工具。
我目前的项目是改造现有系统,该系统会生成序列号,作为公司组装过程的一部分。由于查看了现有系统,我对当前的流程和工作流程有所了解。我还列出了新要求以及它们将如何修改工作流程。
我觉得我已经准备好开始编写程序了,我决定强迫自己最终从头到尾做 TDD。
但现在我不知道从哪里开始。 (我也想知道我是否已经对用户的程序流程有所了解,从而欺骗了 TDD 流程。)
用户流程实际上是连续的,只是一系列步骤。例如,第一步是:
- 用户提交制造订单号并收到该订单物料清单的可序列化部件号列表
当用户选择其中一个零件号时开始下一步。
所以我想我可以将这第一步作为起点。我知道我想要一段代码,它接受制造订单号并返回零件号列表。
// This isn't what I'd want my code to end up looking like
// but it is the simplest statement of what I want
IList<string> partNumbers = GetPartNumbersForMfgOrder(string mfgOrder);
阅读 Kent Becks 的示例书,他谈到选择小型测试。这似乎是一个相当大的黑匣子。它需要一个制造订单存储库,我必须爬取产品结构树才能找到此制造订单的所有适用部件号,我什至根本没有在代码中定义我的域模型。
因此,一方面这似乎是一个糟糕的开始 - 一个非常通用的高级功能。另一方面,我觉得如果我从较低级别开始,我真的只是在猜测我可能需要什么,这似乎是反 TDD。
附带说明...这是您使用故事的方式吗?
作为汇编程序 我想获得制造订单上的零件编号列表 这样我就可以选择序列化哪一个了
说实话,汇编程序永远不会这么说。一个组装者想要的只是完成制造订单的操作:
作为汇编程序 我想用序列号标记零件 这样我就可以完成制造订单上的操作了
【问题讨论】: