【问题标题】:Benefits of using UML models in software maintenance?在软件维护中使用 UML 模型的好处?
【发布时间】:2014-05-24 02:21:33
【问题描述】:

在软件维护中使用 UML 模型的主要好处是什么?我只看到少数几篇关于 UML 模型在软件维护中的成本和收益的论文。

【问题讨论】:

  • 具有挑战性的问题,虽然可能不是主题 (stackoverflow.com/help/on-topic) 并且没有研究表明。您至少可以在您的问题中添加指向“少数论文”的链接吗?

标签: uml


【解决方案1】:

UML 在与软件相关的活动中总是有用的,但您必须知道自己在做什么而不是使用它,因为“我的老板说 UML 很酷!”。

UML 的好处取决于许多因素。在某些情况下,它可能更有益。我试着提到其中的一些。

可能更有益:

  • 更大更复杂的是你的主题,你可以期待更多的好处。特别是当它们是不同方面之间的关系时
  • 如果此软件维护意味着一些额外的开发/扩展,则使用 UML 来澄清它可能非常有用。您可以展示现有系统及其扩展方式。您当然可以随时显示 nre reqs。
  • 如果您的系统已经在 UML 中建模,您可以使用它来定位问题并计划进一步的改进
  • 如果建模者和模型阅读者都了解 OO 并且在 UML 方面有一些经验,那么他们几乎总能从中受益。
  • 如果您想进一步生成一些代码
  • 如果您需要支持一个没有文档的系统,首先记录它可能会很有用(使用逆向工程来导入代码并在 UML 中组织它)
  • 如果您打算在很多人的情况下长期维护此系统

也许不是那么有益:

  • 如果维护不涉及密集的扩展/编程
  • 如果维护的主题太小 - 使用自然语言甚至口语会更有效
  • 如果建模的人或以后使用图表的人不熟悉 OO 和 UML。如果它们都不是,忘记使用 UML 并开始学习吧:)
  • 如果您已经有其他类型的文档

【讨论】:

    【解决方案2】:

    想象一下:

    简介

    您是一名程序员,负责维护大型遗留代码库(数千个文件,该死的许多代码行,由几个已经离开的不同人在过去几年中编写,编码约定和类库已经改变在最初的开发过程中多次)

    没有人喜欢这种工作,它很无聊而且重复,所以人们试图尽快离开,用一些炒作很酷的语言做一些新鲜而闪亮的开发。您是“初级维护者”,您的大多数同事也是如此,因此您没有向导可以询问并快速获得对新手问题的正确答案。

    代码被构造成许多不同的文件,许多不同的类(例如,在 Java 中,要读取 20 个类的代码,您必须打开 20 个不同的文件。在 C 中,为了读取代码,您总是必须在以下位置读取 2 个文件同时*.h和*.c等)

    现在您必须解决一些问题。您可以在测试实验室中重现它,因此您可以选择一个调试器并开始寻找问题,控制和数据流在哪里以及隐藏的故障在哪里(可能是某些断言将失败,或者您可能会发现一些东西'哦,你的鹰眼真是个愚蠢的虫子)。

    噩梦

    没有断言失败并且您没有发现任何内容,因为它是 C++ 代码,并且在 C++ 中说“你好”需要大约 10 个密码学句子,其中“你好”就在中间。大多数代码不是用你知道的语言编写的,而是用你从未听说过的宏语言和对你从未听说过的类的方法的调用。

    此外,您发现有多个代码流(线程)同时运行,并且您尝试跟踪的数据包被编组并排队等待另一个线程处理,并且调试器在等待锁处停止。

    您正在尝试使用调试器描绘正在发生的事情,耐心地进入未知领域并记下不同单词的含义。

    经过几天的调试,扯你的头发,诅咒你面前的所有开发人员,认真考虑辞掉这份工作

    缓解

    你会找到一些文档。有人用人类文字写的,专为人类阅读而设计,解释基本概念,提供代码中位置的链接和其他解释文档,甚至在文档中还有一些图片。

    然后您查看图片(UML 图或其他一些 UML 之前的图),现在您可以看到数据流向何处,您已经遇到的一些类应该做什么以及您在哪里应该看看。

    您发现 UML 图为您节省了许多死神经元,但也为您节省了无数小时的代码阅读时间。无需阅读和理解数千行代码,您只需阅读数百行说明文档或仅阅读几张说明图片即可。

    结论

    在新的“我明白”知识的支持下,您在几个关键位置放置断点,检查变量值,您发现在这个位置 X 不应该是 1。因为文档说......而且您已经知道什么是X 变量的依赖关系。因此,您放置了几个其他条件断点,最终您在逻辑中发现了一个错误,因为现在代码流经了一些无法预见的条件组合。

    因此,您在一行代码中更改了几个字母,错误已修复,您应得的薪水。维护工作不再是一场噩梦(尽管您仍在考虑辞职),UML 图片提供了帮助。

    所以你画了一些更多的 UML 风格的图表来解释各种相互依赖关系(你已经学会了艰难的方法),首先使用纸和铅笔作为小文档,总比没有文档好http://agilemodeling.com/essays/documentLate.htm


    我知道结论部分是科幻小说。因为没有维护者会真正开始为一个系统创建缺失的文档,该系统将在几年内被更新和更闪亮的系统取代。 (s)他只会auto-create some UML diagrams by reverse engineering the code,用完就扔掉,尽快辞职

    但是您了解在软件维护中使用 UML 模型在成本方面的好处吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多