我在一个团队中,我试图说服我的队友采用 TDD(正如我在以前的团队中看到的那样,并且设置相似)。另外,我个人的看法是,至少在开始时,如果同时完成 TDD 和结对编程,它确实很有帮助。这样,两个没有经验的(在 TDD 中)开发人员可以互相帮助,讨论编写什么样的测试并取得良好的进展。
另一方面,我的经理认为,如果我们同时在团队中引入两种新的开发实践,很有可能两者都会失败。所以,他想保守一点,介绍任何一个。
我如何说服他这两者是互补的而不是正交的。还是我错了?
我在一个团队中,我试图说服我的队友采用 TDD(正如我在以前的团队中看到的那样,并且设置相似)。另外,我个人的看法是,至少在开始时,如果同时完成 TDD 和结对编程,它确实很有帮助。这样,两个没有经验的(在 TDD 中)开发人员可以互相帮助,讨论编写什么样的测试并取得良好的进展。
另一方面,我的经理认为,如果我们同时在团队中引入两种新的开发实践,很有可能两者都会失败。所以,他想保守一点,介绍任何一个。
我如何说服他这两者是互补的而不是正交的。还是我错了?
我不确定让更多不知道他们在 TDD 中做什么的人会有所帮助。它会很快降临到你们俩用谷歌搜索这个主题,或者你们俩都在争论 TDD 到底是什么/不是什么。
我认为你最好让团队中的某个人成为给定技术的传播者(有人去阅读 TDD,有人去阅读结对编程),然后让这些人推广和试用这些东西。是的,两者可以同时发生,但它们不必在整个项目团队中使用。您可以让您的团队中的一小部分人进行结对编程,然后报告他们的经验。
结对编程在学习新实践时非常有效,尤其是 TDD
因此,您可以通过妥协来兼顾两者。以敏捷的方式逐步执行此操作。首先进行结对编程。这是两者中较容易的。结对编程之后的所有实践都将变得更容易学习,并且将更快地被团队采用,并且具有更高的一致性。结对编程是第一个(如果不是第一个)应该采用的工程实践之一。确保它有效地完成。下面是如何进行结对编程的描述。
结对编程是开发团队在开发软件时可以使用的最有效的实践之一。配对发生在两个开发人员使用单个计算机和键盘积极开发故事卡的情况下。管理人员担心使用配对编程会使他们的编程成本翻倍。乍一看,他们为什么会认为——毕竟——要求两个开发人员一起完成同一个任务,这是可以理解的。然而,在实践中,使用这种开发技术的敏捷团队发现初始开发成本的小幅增加(根据犹他大学的一项研究显示为 15%)被缺陷的减少、更短且更便宜的测试所抵消。周期并减少对生产支持的需求。
虽然让程序员结伴工作可以提高生产力似乎有悖常理,但这种技术确实有效的原因有很多(想想那句老话,“两个脑袋总比一个脑袋好。”)原因如下:
一旦团队对配对感到满意,然后再进行 TDD。说明如下:
测试驱动开发 (TDD) 是一种软件开发工程实践,由短时间的开发组成,首先编写涵盖所需改进或新功能的新测试用例,然后实现通过测试所需的生产代码,最后软件被重构以适应变化。在实际开发之前测试的可用性确保了任何更改后的快速反馈。从业者强调测试驱动开发是一种设计软件的方法,而不仅仅是一种测试方法。测试驱动开发是一种强大的实践,是减少生命周期后期发现的缺陷的主要贡献者。强烈鼓励新团队与经验丰富的 TDD 从业者配对或以其他方式接受 TDD 指导。e
测试驱动开发要求在代码本身的每个方面之前编写一个自动化的单元测试,定义代码的需求。这些测试包含真或假的断言。随着代码的发展和重构,运行测试可以快速确认正确的行为。基于 xUnit 概念的测试框架提供了一种用于创建和运行自动化测试用例集的机制。测试驱动开发周期:以下序列基于示例测试驱动开发一书,许多人认为这本书是现代形式的概念的规范源文本。
重复
从另一个新测试开始,然后重复循环以推进功能。步骤的大小可以像开发人员喜欢的那样小,或者如果她/他感觉更自信,可以变大。如果为满足测试而编写的代码不能很快完成,那么步长可能太大了,也许应该使用较小的可测试步长。使用外部库时,重要的是不要进行小到仅仅有效地测试库本身的增量,除非有理由相信该库有错误或功能不够完整,无法满足所有需求正在编写的主程序。
开发风格 使用测试驱动开发有很多方面,例如“保持简单,愚蠢”(KISS)和“你不需要它”(YAGNI)的原则。通过只专注于编写通过测试所需的代码,设计可以比其他方法通常实现的更清晰、更清晰。测试驱动开发要求程序员首先使测试用例失败。这个想法是为了确保测试真正有效并且可以捕获错误。一旦显示,正常循环将开始。这被创造了“测试驱动的开发口头禅”,称为红色/绿色/重构,其中红色表示失败,绿色表示通过。测试驱动开发不断重复添加失败的测试用例、通过测试用例和重构的步骤。
建议他们阅读这些关于 TDD 的书籍:
Michael Feather 有效地使用遗留代码
Kent Beck 的经典测试驱动开发 - 示例
Gerard Meszaros 的 xUnit 测试模式 -
在 Microsoft .NET 中重构测试代码测试驱动开发
或结对编程的这些网站:
你是绝对正确的,结对编程在学习新东西时会有很大帮助。我同意你的观点,你应该努力做到这两点。
或许向你的经理展示它的最佳方式不是建议你要求同时介绍这两个新事物。相反,建议您觉得开始实施 TDD 最有效的方法是,在完成工作的同时,只让两个开发人员作为“TDD 调查小组”,让他们一起工作以设置适当的工具,学习技术,测试它们,并弄清楚你需要做什么才能在你的环境中应用它们。一旦你完成了这项工作,并让两个人有一点经验,然后让他们分开,每个人与另一个开发人员坐下来几天,让另一个开发人员快速掌握新技术。重复直到所有开发人员都学会了 TDD。
你没有说服力。告诉他你认为两者协同工作的原因,也许提供一些证实这一点的数据,然后让他决定。如果你需要让所有人相信这是一个好主意,我敢打赌没有人会接受它。自然反对。
就我个人而言,我发现结对编程最适合一个有经验的人和一个没有经验的人。
即,我的目标是在程序员的技能/经验上有所不同,而不是试图匹配熟练的技能。
更有经验的人从解释中得到更多,并被迫构建思想,而没有经验的人有机会反弹想法并获得“最佳实践”。
至于TDD,我是个大粉丝。exp 再次帮助没有经验的人,因为它有助于真正带出测试的重点。即您不想绝对测试所有内容......它增加了焦点。我经常发现人们在编写测试时没有关注他们想要达到的目标。
单元测试是必不可少的 imo ... 毕竟,有些员工不会在 2 年内出现。如果没有任何东西可以验证它的功能,你怎么能改变现有的代码呢?
好吧,取决于经理,您可以指出 XP 文献中的一些论点,即这些实践是相互依赖的。例如,如果您没有可靠的单元测试,请不要无情地重构。
我建议您逐步进行,因为配对只是为了解决 TDD,就像针对新难题的任何协作努力一样,而不是“所有产品开发都将成对完成”。
虽然一种做法不需要另一种做法,但有一种“偷偷摸摸”的方式一次介绍两者。
从使用可用的 xUnit 框架之一实现 TDD 的目标开始。找一个兼容的同事,询问他们是否愿意每天花一个小时和你一起工作。“肖恩,我正在尝试这个新工具,你能帮我确保我做得对吗?” 效果很好。
和肖恩待了几天后,再和苏珊一起重复……
无论如何都要这样做。如果经理发现您结对,请说出“代码审查”这个神奇的词
假设:显然,这对结对者应该有足够的纪律/专注,并在会议结束时产生工作代码
Write some tests that bring attention to existing bugs in the code base - then show them to your boss, I think he might suddenly agree TDD is a good idea!