追踪子弹与原型

时间:2010-10-28 21:31:36

标签: prototype

我开始阅读The Pragmatic Programmer,我很享受并学习堆积形式,但我很难理解示踪子弹和原型之间的区别。跟踪子弹是否具有应用程序的所有视图但尚未添加整个功能?

由于

5 个答案:

答案 0 :(得分:20)

我对一个三年前的问题(以及在不同的堆栈交换中可能更好的问题)的回答略显愚蠢,但我认为在描述跟踪子弹和原型之间的差异时仍有提高清晰度的空间。

首先,它们是不同的东西,具有不同的目的。但他们也有相似之处。我将描述它们的相似之处,以突出它们之间的差异。

这很大程度上是我对概念的看法,所以请批判性地阅读。

它们是如何相似的

跟踪子弹和原型都用于在新事业上取得进展。你正在创造新事物;一个令人兴奋但复杂的过程未知数是未知的。功能没有明确定义。您不确定需要哪些组件,或者必须如何构建代码。 Tracer项目符号和原型类似,因为在这种情况下它们都是使用。另一个相似之处是他们都专注于快速,有效的结果。

它们如何不同

这两种方法在两个方面有所不同:它们试图探索的未知数,以及指导它们的原则。

差异一:他们探索的是什么

原型探索实施细节。你会使用SQL或NoSQL后端吗?快速模拟他们两个进行比较。你甚至可以每天向主服务器提供10,000个whoozits吗?掀起一个小剧本并试一试。

Tracer子弹探索解决方案的可行性。一旦知道实现细节,选择一个自包含的组件,并给它一个旋转。构建项目管理应用程序?单挑一件,就像待办事项列表一样,然后拍摄。

在产品开发中,您希望尽可能快地进行迭代,因此您应该快速开始拍摄,看看是否有任何东西。 “追踪子弹”是股东的反馈!

差异二:原则

指导原型的主要原则是“完成”。它很快,很脏,它产生一个结果(通常是信息)并被扔掉。不要添加任何妨碍的信息:获取信息并离开。

指导示踪子弹的主要原则是完整性和简单性。简单的原因很简单:您希望快速查看结果。完整性稍微复杂一些。这是对现实的承认:一旦你有一个“有效”的产品,你必须立即把你的努力放在其他地方。如果产品是伪劣的,或缺乏文件,或走捷径,你将长期与这些缺陷生活在一起。第一次就做对了!

你可能会注意到,完整的跟踪子弹的概念与另一个实用程序员的“没有破碎的Windows”的想法之间存在很多协同作用。

优势

原型和示踪子弹都提供了指导新事业发展的信息。两者都强调焦点以快速获得结果。原型允许您探索实现的未知数,而跟踪子弹允许您探索可行性的未知数。在任何正常项目中,随着您的进步,您可能会在两种方法之间来回切换。请记住它们有什么用处,并适当地使用它们!

答案 1 :(得分:11)

跟踪子弹的方法是立即开始工作。在书中他们说:

  

示踪剂代码不是一次性的:你写它是为了保持。它包含任何生产代码所具有的所有错误检查。它根本没有完全发挥作用。

如果原型可能会丢失,那么我不会读到他们在这篇特别论文中提倡的内容。

我的本​​质似乎是,如果系统中有一些困难的部分试图证明它可以完成,那么在花费大量时间支持一个永远不会发送的解决方案之前。

答案 2 :(得分:5)

我们将从最简单的开始: 原型:原型本质上是一种测试用户故事可以做什么和不做什么的界限的方法。从本质上讲,它只是一个虚拟应用程序,它的唯一用途是测试解决方案是否可以解决给定问题。例如,如果您想查看服务器是否一次可以处理超过1,000个请求,您可以编写原型。因此,您编写的脚本会向您的服务器发送1,000次请求。功能并不重要,它确保任务成为可能,并且您已清楚了解如何执行该任务。

Tracer项目符号:Tracer项目符号用于“Skeleton Applications”,它只是不包含太多(如果有的话)功能的应用程序的shell,而是遍历程序的生命周期。即连接到客户端,连接到数据库,查询数据库(但您并不真正关心数据)。框架应用程序基本上是您的应用程序的框架。 开发框架应用程序后,使用跟踪器项目符号来标识应用程序的核心组件。对我而言,这仅仅是关注您想要实现的功能。作为一个很好的实践,实际上我作为软件工程师的工作,我认为跟踪子弹更多地基于您的单元测试(您应该为您设计的任何应用程序进行测试)。如果您准确定义捕获给定用户故事的所有功能的单元测试,那么作为非常重要的跟踪子弹有两个原因: 1)当您开始修改代码的骨架时,如果您为给定用户故事的每个功能设置了准确的单元测试,那么当您返回修改代码时(这是您的跟踪器子弹的真正用途) ,比你知道你没有破坏任何当前的功能或已经创建的任何其他功能(因为如果你以某种方式破坏你的代码,你的测试将会中断)。 2)如果你正在构建一个新函数,就像this article中使用的枪的跟踪器比喻一样,你的测试用例将告诉你你的“跟踪子弹”对于给定函数的准确程度。因此,如果您希望某些功能执行特定操作并且您已在单元测试中很好地建模,如果您的代码没有提供所需的结果,您可以轻松返回并修改代码以获得更准确的输出。因此,基本上跟踪子弹(封装在您的测试用例中)将告诉您实际上您的软件解决方案的准确性。

因此,总之,Prototypes用于测试解决方案是否可行,Tracer Bullets用于测试您当前解决方案对您想要创建的理想解决方案的准确程度。

有关单元测试的更多信息,我建议您查看Test Driven Development (TDD)

我希望所有这一切都有意义并且有所帮助。如果您有任何疑问,请告诉我! 约什

答案 3 :(得分:4)

this。我认为可以公平地说,示踪剂子弹只是一个帮助解释原型价值的隐喻。我认为没有区别。

答案 4 :(得分:1)

跟踪器是关于构建一个端到端的,最小的,价值最低但实际的用例实现,用于快速反馈循环,即你是否正在构建正确的东西(击中目标)和根据反馈,您可以调整目标并发射新的示踪剂子弹。

原型不一定是端到端的,它们主要用作学习工具,专注于你不确定的领域,并且在实现所有支持逻辑之前想要探索,这些可以用来做评估新的事情。库,建立一个快速的UI /线框,评估如果你注入100万条记录等查询将如何执行等等。因为它们不是设计为完全功能,端到端,并且大多数是被黑客攻击,只是为了获得快速答案,所以你不能轻易将它们投入生产。