什么是XP背景下的隐喻?

时间:2008-10-17 09:38:15

标签: agile extreme-programming

'隐喻'似乎是XP(极限编程)中最不了解的规则之一,尽管它应该是(最重要的一个)。
当你得到它时,很难掌握并且被认为是“你头上的灯泡”。隐喻似乎是“编程是一种神秘艺术”的前沿......其他的相对容易理解。我读了很多书,然后是一些......但它仍然是模糊的。

  1. 那么如何确定正在开发的系统的隐喻?
  2. 我怎么知道它好一个?什么使一个好的比喻好?编辑澄清:一个坏的比喻可以弊大于利吗?
  3. 它启用了什么?
  4. 我如何善于比喻......还是比我现在更好?

6 个答案:

答案 0 :(得分:10)

当你的母亲询问你正在做什么并且你试图向她解释细节时,隐喻就是你开始使用的东西。你如何找到它是特定于项目的。使用您的常识或找到团队中善于以易于理解的方式向客户解释技术内容的人。

我认为XP的建议如下:

  • 尝试设计一个易于使用现实生活类比解释的系统。您的系统很复杂,尝试使用一种设计,其中子组件之间的关系和交互是清晰的,并且类似于具有常识的人已经看到的东西。
  • 在所有通信中使用类比:源代码,计划会议,与用户交谈,或上帝遗弃,编写文档。如果您发现您使用的概念不适合某些领域,请尝试找一个更好的比喻。

如果你在介绍一个比喻时遇到麻烦,那么问题可能就在其他地方。您可能拥有不适合XP的设计,或者您可能拥有公司文化,例如开发人员使用的语言与营销人员不同。您可以轻松使用这两个项目属性并使项目成功,但除非您在这些方面进行更改,否则将更难以接受XP。

答案 1 :(得分:5)

有一篇论文here。但这是一个很好的例子

The metaphor has two purposes. The first is the communication described above. A user
ought to have an easier time speaking and giving examples about a “chameleon” than
about a window that changes transparency. A second reason is that the metaphor is
supposed to contribute to the team’s development of a software architecture.

至于找到一个,理想情况下找一个项目的隐喻应该是非常容易的。我的意思是隐喻应该是一个微不足道的东西,任何人都可以理解,甚至是一个没有技术知识甚至没有任何关于你的系统的人(比如变色龙的例子)。

至于某些好处(直接从论文中解除)

- The metaphor has been helpful in figuring out the overall design of the program.
- The metaphor has helped the team find a common vocabulary.
- We often use the metaphor in conversations with each other.
- We often use the metaphor in conversations with our customer.
- The metaphor is useful in helping everyone reach agreement about our
requirements.

答案 2 :(得分:3)

极限编程中隐喻的想法是建立一个关于程序如何工作的共同愿景。在最好的情况下,隐喻是对程序如何运作的简单描述。

来自Agile Business Coach

  

隐喻是一种强有力的教学   工具。它们被大量使用   的领域。隐喻的目的是   建立一个理解的桥梁:   试图解释一个新想法的人或   概念试图找到共同点   他们之间的参考框架   和他们解释的那个人   想法。然后他们解释新的   使用共同框架的想法   参考

现在回答你的问题。

  

那么我该如何识别隐喻呢?   正在开发的系统?

一个好的比喻可以快速提供足够的信息,从而在高层次上理解系统的领域和功能。例如,我们可以说“这个程序的工作方式就像蜜蜂的蜂巢,外出花粉并将其带回蜂巢”作为基于代理的信息检索系统的描述。因此,您应该努力与现实世界的情况进行类比,因为它们更容易被更快地理解,并且每个人都可以在系统功能方面达到相同的步伐。

  

我怎么知道它的好?什么   一个好的比喻好吗?

我们的想法是使用一个通用的名称或类比系统,以确保每个人都了解系统的工作原理以及在哪里寻找您正在寻找的功能,或者找到合适的位置来放置您的功能'即将补充。隐喻越多越好,因为隐喻中的更多用户可以立即一瞥并理解系统。

  

它启用了什么?

它可以根据每个人都能更容易理解的常用术语,快速全局了解系统目的和功能。

  

我如何擅长隐喻   找到...或比我更好   目前?

通过实践和持续改进。确保向大量人员展示每次迭代,以评估隐喻的效率。在此过程中,您将学到很多东西并快速写出好的比喻。我认为这是一种生活活动,几乎是因为有更多生活经历的人可以提供更有意义的比喻,甚至没有意识到他们正在这样做。

请参阅此处以获取有关XP的详细文章,其中还包含metaphors

答案 3 :(得分:2)

好吧,我稍微研究了一天的问题,并提出了一个稍微好一些(比我发布问题的时候)采取隐喻。结果有点长..所以没有把它包括在这里并发布在我的博客上。 JFYI。

http://madcoderspeak.blogspot.com/2008/10/who-moved-my-metaphor.html

答案 4 :(得分:1)

几年前这里是a summary from an experience report we published at the Agile conference

The paper goes into a lot more detail,但总而言之,根据我们的经验,有5个关键特征可以形成一个好的比喻:

  1. 代表单一视图。
  2. 只处理一种类型的结构。
  3. 提供有关设计决策的明确指导。
  4. 关注系统属性。
  5. 借鉴共享经验。
  6. 推论:即使是一个好的比喻仍然需要解释。

    基本思想是,您想要讲述一个允许您捕捉“信息有效载荷”本质的故事。您可以更好地具体化,并且您的系统中将有多个隐喻。最重要的是,避免将比喻拉得太远。最终,它是一种通信和记忆机制,用于回忆在更深入的对话中决定和讨论的更详细的信息。

    一个坏的比喻会伤害吗?只有当你没有“信息有效载荷”来支持它时。一个比喻并不真正独立。因此,隐喻只会与随之而来的故事一样糟糕或有害。只要记住这一点,你应该没事。

答案 5 :(得分:0)

隐喻允许团队对项目有共同的理解。它是一个有用的工具,可以解决几乎任何团队由于不同背景/观点而导致的误解障碍。您不必使用它们,但它会有所帮助,尤其是当您在某个区域或某种类型的应用程序中工作时,您的开发人员之前没有经验。 对我而言,一个很好的例子就是着名的tree swings图片。开发商从未努力提供“轮胎摆动”,因为从未发现过适当的比喻。从这个意义上说,隐喻的概念有点类似于RUP中的Vision概念,但据我所知,它更侧重于开发的技术方面。

回答你的问题:

  1. 尝试找一些能够很好地描述系统的内容。如果我尝试这样做,我会尝试分别描述主要组件。
  2. 看看它是否坚持。如果每个人都立即明白你在说什么就行了。如果没有 - 尝试其他的东西。你必须在团队眼中看到一种“认可的火花”。
  3. 隐喻的使用允许每个人从相同的角度看待应用程序/应用程序架构。
  4. 这实际上取决于你的想法。隐喻是诗意和“软” - 你可能永远不会想要与他们相处好:)我建议阅读更多“小说”型书籍,因为它们可以帮助你的思想获取隐喻的更多信息
  5. 请记住 - 隐喻无法无限期地延伸。不要指望它们是理想的。