【发布时间】:2014-05-24 02:21:33
【问题描述】:
在软件维护中使用 UML 模型的主要好处是什么?我只看到少数几篇关于 UML 模型在软件维护中的成本和收益的论文。
【问题讨论】:
-
具有挑战性的问题,虽然可能不是主题 (stackoverflow.com/help/on-topic) 并且没有研究表明。您至少可以在您的问题中添加指向“少数论文”的链接吗?
标签: uml
在软件维护中使用 UML 模型的主要好处是什么?我只看到少数几篇关于 UML 模型在软件维护中的成本和收益的论文。
【问题讨论】:
标签: uml
UML 在与软件相关的活动中总是有用的,但您必须知道自己在做什么而不是使用它,因为“我的老板说 UML 很酷!”。
UML 的好处取决于许多因素。在某些情况下,它可能更有益。我试着提到其中的一些。
可能更有益:
也许不是那么有益:
【讨论】:
想象一下:
您是一名程序员,负责维护大型遗留代码库(数千个文件,该死的许多代码行,由几个已经离开的不同人在过去几年中编写,编码约定和类库已经改变在最初的开发过程中多次)
没有人喜欢这种工作,它很无聊而且重复,所以人们试图尽快离开,用一些炒作很酷的语言做一些新鲜而闪亮的开发。您是“初级维护者”,您的大多数同事也是如此,因此您没有向导可以询问并快速获得对新手问题的正确答案。
代码被构造成许多不同的文件,许多不同的类(例如,在 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 模型在成本方面的好处吗?
【讨论】: