Questions tagged «tdd»

TDD代表测试驱动开发或测试驱动设计。这是在编写代码以使其满足要求之前编写单元测试的实践,即所谓的“红绿色重构周期”。

6
无需单元测试即可敏捷
如果您正在使用的代码库的单元测试覆盖率为0%,那么谈论“敏捷开发”或声称您正在应用“敏捷方法论”是否有意义?(而且,作为一个团队,您对此没有做任何事情)。 明确一点:对我来说,这没有任何意义。根据我的个人经验,我发现单元测试是使您真正“敏捷”(即响应更改,改进设计,共享知识等)的唯一工具,而TDD是使您达到目标的唯一实践。 。 也许还有其他方法,但是我仍然看不到它们如何工作。



5
我想开始使用TDD。对初学者有什么提示吗?[关闭]
我从未在任何项目中使用过自动测试机制,但我感觉自己很想念。我想提高自己,所以我必须开始解决一些我一直这样忽略的问题,并尝试使用Git而不是坚持使用SVN。 学习TDD的好方法是什么?我可能会使用Eclipse在Java中进行编程。我听说过JUnit,但是我不知道还有什么我应该考虑的。

6
您花费多少时间进行单元测试?
在我曾经工作过的一家公司中,高管们坚持认为单元测试的代码覆盖率必须达到99%或更高。这导致编写的测试多于代码。从字面上看,我们花了3天时间为一个类编写测试,该测试花了一天的时间才能实现。 结果,我学到了很多有关TDD,测试工具,实践等方面的知识。 在我后来工作的公司中,单元测试是个未知数。这是以前有人听说过的东西。我努力地向他们介绍了单元测试的概念,但是没有效果。 现在,作为一名个体经营者,我想知道- 真正需要花多少时间进行单元测试?主要是iPhone / Android开发人员,测试中应覆盖哪些部分代码?

6
TDD和版本控制
我目前正在学习TDD,并试图在我的个人项目中将其付诸实践。在许多这些项目中,我还广泛使用了版本控制。我对这两个工具在典型工作流程中的相互作用感兴趣,尤其是在使提交保持较小的原则上。以下是一些示例: 我开始一个新项目,并编写一个简单的测试以创建一个尚不存在的类。即使测试甚至无法编译,我也应该在编写类之前提交测试吗?还是应该在提交之前编译测试所需的最少代码量? 我找到一个错误并编写测试以重新创建它。我应该提交失败的测试还是实施错误修复然后提交? 这是两个立即想到的例子。随时在您的答案中提供其他示例。 编辑: 我在两个示例中都假设,在编写测试之后,我将立即编写代码以使测试通过。可能还会出现另一种情况:我在使用TDD的项目上工作了几个小时而没有提交。当我最终提交内容时,我想将我的工作分解成小块。(即使您只想在单个文件中提交某些更改,Git也会使此操作相对容易。) 这意味着,我的问题是一样关于为什么承诺,因为它是何时提交。

11
自动化测试:解释其业务价值
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 要开始我不认为这是一个重复的其他问题上的单元测试。我正在寻求帮助的是将其价值表达给程序员,分析师,经理和测试人员团队。通过自动化测试,我认为不需要区分单元测试(例如JUnit),BDD(例如JBehave,Fitness)和UI(Selenium,W​​atir),因为我认为它们都提供相似的价值(但您可以随意写一个不同意的答案:)) 以下是我已确定的列表,正在寻找有助于扩展或完善的答案: 节省时间/成本:编写自动化测试比编写测试案例要花费更多时间。但是,考虑到测试要运行多次,执行自动化测试的边际工作(即成本/时间)要少几个数量级。自动化测试运行便宜,这有助于随着时间的推移更改系统。 文档:没有比测试更真实的方法知道系统如何工作了。其他任何文档通常在撰写时就已过时,但是测试(至少是通过的测试)揭示了事情的实际运行方式。最终用户和API文档均是如此。 代码质量:测试写作迫使您: 考虑客户,因为测试是客户 打破使代码可测试的依赖关系,这通常意味着弄清楚如何使代码不需要其他大型系统可用

3
在单元测试中挣扎于循环依赖
我正在尝试通过使用TDD开发类似于Bit Vector的简单方法来练习TDD。我碰巧正在使用Swift,但这是一个与语言无关的问题。 My BitVector是一个struct存储单个的UInt64,并在其上方提供一个API,可让您将其视为集合。细节无关紧要,但是很简单。高57位是存储位,低6位是“计数”位,它告诉您实际上有多少个存储位存储一个包含的值。 到目前为止,我有一些非常简单的功能: 构造空位向量的初始化程序 count类型的属性Int isEmpty类型的属性Bool 等于运算符(==)。注意:这是类似于Object.equals()Java 的值相等运算符,而不是像==Java中的引用相等运算符。 我遇到了一堆周期性依赖关系: 测试我的初始化程序的单元测试需要验证新构造的BitVector。它可以通过以下三种方式之一进行操作: 校验 bv.count == 0 校验 bv.isEmpty == true 检查一下 bv == knownEmptyBitVector 方法1依赖count,方法2依赖isEmpty(它本身依赖count,因此没有用处),方法3依赖==。无论如何,我不能孤立地测试初始化​​程序。 测试是否count需要对某些东西进行操作,这不可避免地会测试我的初始值设定项 实施isEmpty依赖count 执行==依赖count。 我能够通过引入一个私有API来部分解决此问题,该API BitVector从现有的位模式(作为UInt64)构造一个。这使我可以在不测试任何其他初始化程序的情况下初始化值,以便可以向上“引导”。 为了使我的单元测试真正成为单元测试,我发现自己做了很多黑客操作,这使我的产品和测试代码大大复杂化。 您如何解决这些问题?

7
TDD /测试过多的开销/维护负担?
因此,您已经多次从不真正了解测试价值的人那里听到过。刚开始时,我是敏捷和测试的追随者... 我最近在讨论有关在产品重写上执行TDD的问题,其中当前团队不进行任何级别的单元测试,并且可能从未听说过依赖注入技术或测试模式/设计等(我们什至不会继续清理代码)。 现在,我对产品的重写负全部责任,并被告知,以TDD的方式进行尝试,只会使它成为维护的噩梦,并且对于团队维护来说是不可能的。此外,由于它是一个前端应用程序(不是基于Web的),因此添加测试是没有意义的,因为业务驱动力发生了变化(通过更改当然意味着有所改进),这些测试将过时,其他开发人员将来的项目将无法维护它们,并且将成为它们修复等方面的负担。 我可以理解,在目前没有任何测试经验的团队中,TDD听起来并不好,但是在这种情况下,我的观点是我可以向周围的人教我的实践,但更进一步,我知道TDD会让您变得更好软件。即使我要使用TDD来生产软件,并抛弃所有测试以将其交给维护团队,与从一开始就完全不使用TDD相比,这肯定是更好的方法吗? 我被提到在一个从未听说过的团队的大多数项目中执行TDD时被击落。“接口”的想法和外观奇特的DI构造函数使他们望而却步。 在尝试出售TDD的简短对话中,有人可以帮助我吗?在屈服于公司/团队之前,我通常会有一个简短的辩论窗口。
24 testing  agile  tdd  bdd 

4
每个单元测试是否应该能够独立于其他测试运行?
假设您有针对类的两种方法的测试。第一种方法从另一层收集数据,并将其放入独立于运行时的某种存储中(例如SQL表),因此,此测试处理的所有数据都被硬编码到测试中。第二种方法负责从第一种方法保留的位置获取数据并以某种方式进行转换(计算,将某些零件移动到其他位置等)。 现在,第二种方法可以像第一种方法那样对输入进行硬编码,或者可以假设这两个测试将按顺序运行,并且可以从第一个测试中断的位置开始,获取第一个测试真正存储的数据。 如果您选择了第二个选项,那么您确实会很好地认为这两种方法可以很好地协同工作,但是,如果第一个测试失败了,则所有测试都将失败,从而失去了帮助更快地隔离错误的测试优势。 如果选择第一种方法,则每种方法都将被隔离和独立测试,但是您永远不会真正知道它们是否可以真正正常地协同工作。 这里哪个更好?是否存在某种替代方法,例如对每个隔离的方法都使用硬编码进行一次测试,然后将两个方法合而为一的更大的测试?

6
一旦整个团队都习惯了,TDD的真正开销是多少?
TDD可节省多少时间并计算成本。 我认为在项目生命周期中成本和报酬变化的百分比是多少。 我以为初始阶段的成本更高,但回报却很少。进一步(在重构期间),您将从测试中受益。 我听说您有30-50%的时间在编写单元测试。但是,这并未考虑编写这些测试所节省的时间。 大家对此有何经验? 韦斯 编辑节省了多少时间以及时间成本?在错误修复和重构中?
24 productivity  tdd 

6
在TDD中,我必须首先编写“测试”还是“接口”?
我正在使用c#学习TDD,据我所知测试应该驱动开发,即在编写最基本的代码以通过测试之后再进行重构,然后首先编写一个失败的测试。 但是也有人说“ 程序到接口,而不是实现 ”,因此请首先编写一个接口。这是我开始困惑的地方,如果我先写接口,那将违反两件事 为接口编写的代码不受test的驱动。 这显然不是最低要求,我可以用一个简单的类编写它。 我也应该从编写接口测试开始吗?没有任何实现,我要测试什么? 如果这个问题听起来很傻,对此我感到非常困惑。可能是我从字面上讲。
23 c#  unit-testing  tdd 

5
端到端测试与单元测试之间,应该将测试解耦吗?
在我们公司,我们通常会确保为我们的网站/ Web应用程序编写一个端到端测试。这意味着我们访问一个URL,填写一个表单,将该表单提交到另一个URL并检查页面结果。我们这样做是为了测试表单验证,测试HTML模板是否具有正确的上下文变量等。 我们还使用它间接测试基础逻辑。 一位同事告诉我,这样做的原因是,只要端到端测试通过,我们就可以随时淘汰和更改基础实现。 我想知道这种解耦是否有意义,或者这仅仅是避免编写针对较小代码单元的测试的方法?


16
测试驱动开发是谁?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在过去的4.5年中,我一直在企业领域中工作,并且注意到,一般而言,企业对于测试优先的开发风格不是一个有利的环境。项目通常是固定成本,固定时间表和瀑布式的。任何单元测试(如果有的话)通常都在QA阶段开发后由另一个团队完成。 在为企业工作之前,我曾为许多中小型公司提供咨询服务,但没有一家公司愿意为测试优先的开发项目付费。他们通常希望开发立即开始,或者经过短暂的设计工作:即,类似于敏捷的东西,尽管有些客户希望将所有东西都映射为类似于瀑布的东西。 在哪种类型的商店,公司和客户中,测试驱动的开发最有效?哪些类型的项目倾向于有利于TDD?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.