我开始阅读The Pragmatic Programmer,我很享受并学习堆积形式,但我很难理解示踪剂子弹和原型之间的区别.跟踪子弹是否具有应用程序的所有视图但尚未添加整个功能?
谢谢
我觉得对一个有三年之久的问题(以及在不同的堆栈交换中可能会更好的问题)的回答有点愚蠢,但我认为在描述跟踪子弹和原型之间的区别时仍有提高清晰度的空间.
首先,它们是不同的东西,具有不同的目的.但他们也有相似之处.我将描述它们的相似之处,以突出它们之间的差异.
这很大程度上是我对概念的看法,所以请批判性地阅读.
跟踪子弹和原型都用于在新的事业上取得进展.你正在创造新事物; 一个令人兴奋但复杂的过程 未知数是未知的.功能没有明确定义.您不确定需要哪些组件,或者必须如何构建代码.示踪剂子弹和原型类似,因为它们都用于这种情况.另一个相似之处是他们都专注于快速,有效的结果.
这两种方法在两个方面有所不同:它们试图探索哪些未知数,以及哪些原则指导它们.
原型探索实现细节.你会使用SQL或NoSQL后端吗?快速模拟他们两个进行比较.你甚至可以每天向主服务器提供10,000个whoozits吗?掀起一个小脚本并试一试.
Tracer子弹探索解决方案的可行性.一旦了解了实现细节,就选择一个自包含的组件,并给它一个旋转.构建项目管理应用程序?单挑一件,就像待办事项列表一样,然后拍摄.
在产品开发中,您希望尽可能快地进行迭代,因此您应该快速开始拍摄,看看是否有任何东西."追踪子弹"是股东的反馈!
指导原型的主要原则是"完成".它很快,很脏,它产生一个结果(通常是信息)并被扔掉.不要添加任何妨碍的方法:获取信息并离开.
指导示踪子弹的主要原则是完整性和简单性.简单的原因很简单:您希望快速查看结果.完整性稍微复杂一些.这是对现实的承认:一旦你有一个"有效"的产品,你必须立即把你的努力放在其他地方.如果产品是伪劣的,或缺乏文件,或走捷径,你将长期与这些缺陷生活在一起.第一次就做对了!
您可能会注意到,完整的跟踪子弹的概念与其他实用程序员的"没有破碎的Windows"的想法之间存在很多协同作用.
原型和示踪子弹都提供了指导新事业发展的信息.两者都强调重点是快速获得结果.原型允许您探索实现的未知数,而跟踪子弹允许您探索可行性的未知数.在任何正常项目中,您可能会随着进度在两种方法之间来回切换.请记住它们的优点,并适当使用它们!
跟踪子弹的方法是立即开始工作.他们在书中指出:
Tracer代码不是一次性的:你写它是为了保持.它包含任何生产代码所具有的所有错误检查.它根本没有完全发挥作用.
如果一个原型可能会丢失,那么我不会读到他们在这篇特别论文中提倡的内容.
我的本质似乎是,如果系统中有一些困难的部分试图表明它可以完成,那么在你花费大量时间支持一个永远不会发送的解决方案之前.
我们将从最简单的开始:原型:原型本质上是一种测试你的用户故事可以做什么和不能做什么的界限的方法.从本质上讲,它只是一个虚拟应用程序,它的唯一用途是测试解决方案是否可能用于给定问题.例如,如果您想查看服务器是否一次可以处理超过1,000个请求,您可以编写原型.因此,您编写的脚本会向您的服务器发送1,000次请求.功能并不重要,它确保任务成为可能,并且您已明确知道如何执行该任务.
Tracer项目符号:Tracer项目符号用于"Skeleton Applications",它只是不包含太多(如果有的话)功能的应用程序的外壳,但是要遍历程序的生命周期.即连接到客户端,连接到数据库,查询数据库(但您并不真正关心数据).框架应用程序基本上是您的应用程序的框架.开发框架应用程序后,使用跟踪器项目符号来标识应用程序的核心组件.对我而言,这仅仅是关注您想要实现的功能.作为一个很好的实践,实际上我作为软件工程师的工作,我认为跟踪子弹更多地基于您的单元测试(您应该为您设计的任何应用程序进行测试).如果您准确定义捕获给定用户故事的所有功能的单元测试,那么它可以作为一个非常重要的跟踪子弹,原因有两个:1)当您开始修改代码的骨架时,如果您有准确的单元测试集当你回去修改代码(这是你的跟踪器子弹的真正用途)时,你知道你没有破坏任何当前的功能或任何其他功能已经完成了给定用户故事的每个功能已创建(因为如果您以某种方式破坏了代码,测试将会中断).2)如果你正在建立一个新的功能,就像在使用的枪的跟踪器比喻 1)当您开始修改代码的骨架时,如果您为给定用户故事的每个功能设置了准确的单元测试,那么当您返回修改代码时(这是您的跟踪器子弹的真正用途) ,比你知道你没有破坏任何当前的功能或已经创建的任何其他功能(因为如果你以某种方式破坏你的代码,你的测试将会中断).2)如果你正在建立一个新的功能,就像在使用的枪的跟踪器比喻 1)当您开始修改代码的骨架时,如果您为给定用户故事的每个功能设置了准确的单元测试,那么当您返回修改代码时(这是您的跟踪器子弹的真正用途) ,比你知道你没有破坏任何当前的功能或已经创建的任何其他功能(因为如果你以某种方式破坏你的代码,你的测试将会中断).2)如果你正在建立一个新的功能,就像在使用的枪的跟踪器比喻 打破任何当前功能或已创建的任何其他功能(因为如果您以某种方式破坏了代码,测试将会中断).2)如果你正在建立一个新的功能,就像在使用的枪的跟踪器比喻 打破任何当前功能或已创建的任何其他功能(因为如果您以某种方式破坏了代码,测试将会中断).2)如果你正在建立一个新的功能,就像在使用的枪的跟踪器比喻在本文中,您的测试用例将告诉您"跟踪子弹"对于给定函数的准确程度.因此,如果您希望某些功能执行特定操作并且您已经在单元测试中很好地建模,那么如果您的代码没有提供所需的结果,您可以轻松返回并修改代码以获得更准确的输出.因此,基本上跟踪子弹(封装在您的测试用例中)将告诉您实际上您的软件解决方案的准确性.
因此,总之,Prototypes用于测试解决方案是否可行,Tracer Bullets用于测试您当前解决方案对您想要创建的理想解决方案的准确程度.
有关单元测试的更多信息,我建议您研究测试驱动开发(TDD).
我希望所有这一切都有意义并且有所帮助.如果您有任何疑问,请告诉我!玩笑