设计中型大型应用在做TDD时?

我非常了解单元测试,DI,嘲笑,以及所有的设计主要优点,尽可能接近全面的代码覆盖(单一责任主体,认为我将如何测试这个代码)等等。 ..)。

我最近的应用程序,我没有代码做真正的TDD。我在编码时保持单元测试,并在编写代码,重构等之后写了我的测试。我做了TDD,当它很容易做…但是我没有那么好的掌握我现在做的是这是第一个充分利用DI,嘲笑框架等的项目,第一个有完整代码覆盖率的项目,而且我从中学到了很多东西。我很痒得分配到我的下一个项目,所以我可以从头开始完成TDD的编码。

我知道这是一个广泛的问题,我已经通过示例和XP Unleashed命令了TDD,但我希望简要概述您如何设计/编写大型应用程序进行TDD。

你写整个应用程序,什么也没有使用stubded代码? (例如,写入所有功能签名,接口,结构,并写入整个应用程序,但不写任何实际的实现)?我可以把它描绘成中小型的工作,但是这在大型应用中甚至是可能的吗?

如果没有,您将如何编写您的系统中最高级别功能的第一单元测试?例如说 – 在Web服务中,您有一个名为DoSomethingComplicated(param1,…,param6)的函数暴露给了世界。显然,首先为AddNumbers()这样的简单函数编写测试是微不足道的 – 但是当函数位于调用堆栈的顶部,如这样?

你还在前台做设计吗?显然,你仍然想做“架构”设计 – 例如,一个流程图,显示了IE与IIS通信,通过WCF与Windows数据库进行交谈,这个服务与sql数据库进行交互,ERD显示了所有的sql表及其字段,等等…但是课堂设计怎么样?课程之间的相互作用等?您是否设计了这个前端,或者只是继续编写存根代码,重构互动,直到整个事情连接起来,看起来像它会工作?

任何建议非常感谢

我是否编写整个应用程序,什么也没有使用stubded代码

不,不是在轻微的意义上 – 这听起来像一个非常浪费的方法。我们必须始终牢记,做TDD的根本原因是快速反馈。一个自动化测试套件可以告诉我们,如果我们比手动测试能够快得多,那么它们就会快得多。如果我们一直等待接线,直到最后一刻,我们不会得到快速的反馈 – 虽然我们可能从我们的单元测试中得到快速的反馈,但我们不知道应用程序是否整体运行。单元测试只是验证应用程序需要执行的一种测试形式。

一个更好的方法是从最重要的功能开始,从那里开始,使用外部的方法。这通常意味着从一些UI开始。

我的方式是创建所需的UI。由于我们通常不能用TDD开发UI,所以我只需使用选择的技术创建视图。没有测试,但我将UI连接到一些API(最好使用声明式数据绑定),这是测试开始时。

在开始的时候,我会将我的viewmodels /演示模型和相应的控制器,可能是硬编码一些响应,看看UI的工作原理。一旦我有一些不会爆炸的东西,当你运行它,我检查代码(记住,许多小的增量签到)。

我随后垂直工作,沿着这个功能,并确保这个特定的UI可以一路走到数据源(或任何),忽略所有其他功能

功能完成后,我可以从下一个功能开始。我描述这个过程的方式是,我一次完成一个垂直切片来填写应用程序,直到所有功能完成。

以这种方式开始一个绿色的应用程序总是需要很长时间的一个功能,因为这是你必须连接所有东西,所以选择一些简单的东西(如应用程序的初始视图),以尽可能简单的东西。一旦第一个功能完成,下一个功能变得更容易,因为基础现在已经到位了。

我还在设计前台吗?

不多,不。在开始之前,我通常会考虑整体设计,当我在一个团队中工作时,在开始之前,我们将这个整体架构描绘在白板或幻灯片上。

这或多或少地受到限制

>层数(UI,演示逻辑,域模型,数据访问等)的数量名称
>使用的技术(WPF,ASP.NET MVC,sql Server,.NET 3.5或者什么)
>我们如何构建生产代码和测试代码,以及我们使用哪些测试技术
>代码质量要求(配对编程,静态代码分析,编码标准等)

当我们走的时候,我们就知道其余的,但是我们在白板上使用了许多特别的设计会话。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...