我想问这个问题,以了解实际上有多少公司在实践TDD。
在我从事专业编程的11年中,只有后两个组织才意识到TDD(这涉及了将近5年的时间,在此之前TDD并不像今天那样流行)。在深入探讨TDD的销售建议之前,我会尽力地回答您的问题:)
在我工作的最后一家公司(人文和科学收藏在线学术出版商)中,我们知道我们需要练习TDD,但我们从未真正做到这一点。在我们的辩护中,我们有25万个代码库,因此将测试添加到这种大小的不可测试代码库中是无法克服的(我现在感到内feel!)。即使是我们最好的人也会犯错。
甚至只做了少量TDD的人都知道,对未经测试的棕场代码进行艰苦的改造测试可能是多么痛苦……主要原因是隐式依赖(您无法拉动所有手段来断言代码的结果-您无法嘲笑)场景)和违反单一职责原则(测试复杂,人为设计,需要太多设置且难以理解)。
我们暂时将质量检查小组(从一个人,可能是两个人增加到六个人或更多)组成,以测试该平台,然后再发布任何版本。在时间和金钱上,这是非常昂贵的时间,某些版本需要三个月才能完成“测试”。即使那样,我们仍然知道我们遇到了问题,它们不是“阻碍”或“严重”问题,而不仅仅是“高优先级”问题。
如果您有多年的商业经验,您会感激每家公司都会执行关键任务,然后发明一个更高的优先级,也可能是更高的优先级-尤其是当上面的某个人在推动功能/错误修复时。我离题了...
我很高兴地报告,我正在我当前的公司(电信,Web和移动应用程序开发公司)内实践TDD,并与Jenkins CI一起提供其他静态分析报告(在断言测试套件通过之后,代码覆盖率是最有用的) 。我使用TDD的项目是支付系统和网格计算系统。
销售点...
证明对非技术团队成员进行自动化测试通常是艰巨的努力。编写测试确实会增加开发过程的工作量,但是...现在投资测试时间,以后可以节省维护工作。你真的只是在借时间。产品使用的时间越长,您可以节省的费用就越大-并且可以帮助您避免进行大量的重写。
首先进行测试意味着您首先要编码您的意图,然后确认您的代码满足该意图。这提供了焦点,并且提炼了您的代码,使其仅执行预期的操作,而不再执行任何操作(请勿膨胀)。它同时是一个可执行的规范和文档(如果您的测试写得很好,并且测试应该与您的系统代码一样可读/干净,甚至更多!)。
非程序员(通常)没有这种见识,因此TDD对他们而言没有太大的价值,并且被视为可以提前发布早期版本的捷径。
编程是我们的专长,在我看来,这是我们作为专业人员对像TDD这样的最佳实践提供建议的责任。不是由项目经理决定是否要减少开发时间,而是超出他们的管辖范围。以相同的方式,他们不会告诉您使用什么框架,缓存解决方案或搜索算法,也不会告诉您是否应该使用自动化测试。
在我看来,软件开发行业(总体上)目前处于崩溃状态,对您的软件进行测试不是正常的事实。
在其他行业中想象一下:医疗,航空,汽车,化妆品,毛绒玩具,酒精饮料等。我要求未婚妻列出一个行业,他们不测试产品,而她不能测试产品!
说没有测试是不公平的,因为它确实会发生……但是在没有自动化测试的公司中,这是非常手工/人工(读取笨拙且经常容易出错)的过程。
我要在您的问题中争论一点...
他们通常希望开发立即开始,或经过短暂的设计工作。更类似于敏捷。
“敏捷”并没有规定未经测试就可以继续进行,agilemanifesto.org上列出的第一位成员是XP和TDD的创建者Kent Beck!
如果您对TDD感兴趣,或者只是不读而又热衷于编程,我会极力推荐两本书。
通过测试引导不断发展的面向对象的软件
清洁代码-罗伯特·C·马丁(鲍勃叔叔)系列
这两本书互相称赞,并且将很多意义浓缩为几页。
感谢您提出这个问题:)