实施多阶段流程时的TDD策略?

时间:2016-03-04 20:11:08

标签: tdd

目前,我正在开发一段代码,首先从一组文档中收集句子,然后对这些代码进行标记,然后使用结果分析令牌序列的重复频率,包括大小写/大写case / leading cap / other),然后打印出结果。

现在我想在打印出结果之前再引入两个阶段:
1.首先,删除"停用词" (即,频率永远不会引起兴趣的单词或短序列,例如英语,"","","其中"等等) - 这些停用词/"停止序列"从数据库表中取出
2.其次,打开一个对话框,使用户能够识别新的停用词序列,然后删除所涉及的令牌序列,并将有问题的序列添加到数据库表中。

问题是,这是一个多阶段的过程,我只是想知道TDD专家在这样的情况下遇到了什么:我是否为每个阶段创建了一种新的测试方法......?问题在于每个阶段都需要使用"实时内存数据"从前一阶段开始:另一种可能性是以某种方式序列化这些数据,然后在测试下一阶段时对其进行反序列化...但是这将涉及应用程序代码执行仅对测试代码有益的事情,即它会是为了测试代码的好处而调整应用代码("扭曲"?),原则上这似乎是错误的......

此外,如果有人能指出我的书籍或网站的方向,这有助于像我这样的TDD新手进入下一个级别"我将非常感激。

对于那个标记为“最喜欢的人”的人:我现在已经掌握了一本名为“#34;成长的面向对象软件,以测试为导向”的书,这是经过深思熟虑,似乎适合想要从初学者到中级的人。第一印象很好。

专家对本书的任何看法当然也欢迎......

1 个答案:

答案 0 :(得分:1)

从表面上看,你似乎在建造一条管道。据我所知,您目前正在一个类中实现所有这些,它存储正在处理的数据并实现执行处理的方法。您可以采取的一种方法是将问题分解为更小的块。您没有一个类,而是为管道的每个阶段创建了一个类,而另一个用于编排流程的类负责以正确的顺序将阶段插入到一起。

因此,通过扫描您所描述的内容,您似乎拥有以下处理器:

  • DocumentReader(从某处读取文档到内存文档中)
  • SentenceExtractor(文件/文件清单,句子清单)
  • 1个或更多SentenceAnalysers(句子,统计出来),您可能希望根据分析类型及其复杂程度将其分解。
  • StopWordExtractor(StopWordProvider和句子,句子)

还需要其他支持类,以支持将新的停用词写入数据库,并取决于stopwordprovider的实现方式,并在用户选择新的时保持同步。

基本上,我所说的是你似乎在一个地方做得太多了。如果你真的非常高兴你所描述的代码只是一个单元,那么你在一个地方测试它是没有错的,但是你的输入将是是你的起始文件/句子,你的输出将是过程的结束。如果您真的同意我的意见,那么流程中涉及的几个不同的组件可能会独立发生变化,那么我建议将流程分解为更小的类,并测试那些按预期执行的输入/输出集合...