【问题标题】:What do you do with unused code in your legacy applications? [closed]您如何处理遗留应用程序中未使用的代码? [关闭]
【发布时间】:2011-03-08 02:39:34
【问题描述】:

在大型遗留应用程序中,业务规则的更改导致代码未使用是很常见的。删除是最好的方法吗?或者是否有任何标记未使用代码的标准?如果需要,SCM 确实有助于恢复旧代码。这也是特定于 .NET 代码库的。

【问题讨论】:

  • 而一旦代码被删除,有什么工具可以再次找到它?
  • 源代码控制 :)
  • 当我找到未使用的私有方法/类时,我会删除它们。如果代码已经“在野外”,我对公共方法/类会更加谨慎,即使它从未打算被外部代码使用。
  • 这引发了另一个问题:有哪些技术可以发现/检测未使用的代码?
  • 我将代码和/或变量标记为“可能会消失”,通常与版本号一起。最终它被清理干净并消失了。并为“源代码控制”+1。如果您的软件不受源代码控制,那么当您删除不应该删除的内容时,您会感到非常痛苦。

标签: c# .net asp.net javascript


【解决方案1】:

我将其注释掉,就像在上线之前注释掉我的 System.out.println 一样。

【讨论】:

    【解决方案2】:

    我相信在重构会议上已经回答了这个问题 - http://www.waterfall2006.com 在讨论“Rainy Day Module”时——你应该编写备用代码以防万一以后有人需要它......

    class SpareCode {
      private int spareInteger;
      private String luckyString;
      private bool youNeverKnow ;
    public void spareLogic() {
      spareInteger = 1;
      if ( youNeverKnow ) {
        spareInteger++;
      }
      System.out.println( luckyString);
    }
    

    【讨论】:

      【解决方案3】:

      绝对删除未使用的代码。以我的经验,遗留代码库的最大问题是理解代码发生了什么——更少的代码意味着更少的理解,让你的工作更容易。

      就像您说的,如果您使用源代码控制(您正在使用源代码控制,对吗?)并且除非您做一些有点奇怪的事情(例如动态编译代码或通过反射加载代码),您总是可以取回它,您如果您删除了错误的代码,您可能会很快发现,因为您的构建将失败。

      【讨论】:

        【解决方案4】:

        我删除了代码,但首先我要确保它以后不会造成任何麻烦。如果我以后需要它,我会从源代码管理中获取它,并使用一个不错的功能 - 代码比较,我可以看到发生了什么变化。我不会评论未使用的代码,因为如果其他开发人员正在查看代码,则很难理解为什么不使用它(特别是如果开发人员没有为此原因发表评论)。所以删除代码会保持简单明了。

        【讨论】:

          【解决方案5】:

          删除旧应用程序中未使用的代码。

          如果您有源代码控制,删除未使用的代码不会有任何损害,因为它的历史记录保存在您使用的任何版本控制软件中。 当下一个开发人员必须进入并进行更改时,干净的代码可以帮助他或她。旧代码只会在必须进行更改时混淆问题。

          【讨论】:

            【解决方案6】:

            就我个人而言,我删除了我不使用的代码并依靠源代码管理来跟踪它。不过我不使用 VSS,也不会。

            不过,这条规则有一个例外... t 重做我未完成的工作。

            【讨论】:

            • 你的意思是留在那里还是删除?
            • 好吧,如果他使用的是 VSS,那就是废话了。 VSS 可能会为他删除它。 ://
            【解决方案7】:

            我更喜欢删除它。源代码控制将保留那里的历史(以及谁删除了它)。我讨厌搜索代码并在注释掉的代码中看到结果 - 特别是当使用 /*...*/ 注释代码时,您在查找文件结果中看不到 \\,这至少让我有机会看到结果被注释掉了。

            【讨论】:

              【解决方案8】:

              我认为最好的方法是对您的项目进行版本控制,例如 SVN、CVS。然后删除未使用的代码。减少正在编译的源文件大小,避免乱用未使用的代码。

              【讨论】:

                【解决方案9】:

                从实用程序员一书中申请lesson 的好地方。

                备份然后删除所有未使用的代码。相信我,它将使开发人员免于未来的头痛。如果您犹豫认为您可能需要一些基于注释掉的代码的未来功能,那么尝试理解未使用的代码或逻辑甚至不值得痛苦。最好从干净的心态开始,而无需破译明显半生不熟、未经测试的代码。

                【讨论】:

                  【解决方案10】:

                  我通常将其标记为已过时:

                      /// <summary>
                      /// Purpose of this method
                      /// </summary>
                      /// <param name="args">Argument 1</param>
                      [Obsolete("This method is obsolete, use NewMethod instead")]
                      public void SampleMethod(string args)
                      {
                          //code
                      }
                  
                      /// <summary>
                      /// Purpose of this method
                      /// </summary>
                      /// <param name="args">Argument 1</param>
                      public void NewMethod(string args)
                      {
                          //code
                      }
                  

                  现在,每当使用标记为过时的方法时,编译器都会发出警告。

                  【讨论】:

                    【解决方案11】:

                    听取迈克尔·杰克逊的一些建议:

                    删除它...删除它...删除它...删除它...

                    没有人想被打败

                    展示你的战斗有多时髦和强大

                    谁对谁错并不重要

                    删除它...删除它...删除它...删除它...

                    【讨论】:

                      【解决方案12】:

                      如果某些不需要但将来可能需要的功能的代码分散在整个程序中怎么办?使用#ifdef 来控制此类代码(在一个文件中保存用于该目的的所有#define 标签的主列表)可以允许随意启用或禁用该功能;试图从版本控制系统中重新整合所有的小代码似乎更加困难。

                      【讨论】:

                      • 这就是使用源代码控制系统的意义所在。如果你以后需要它,只需拉出旧代码,复制出你需要的东西,然后放回去。
                      • 如果所有代码都在一个整洁的部分中,那当然是正确的。另一方面,如果重新启用某个功能需要在许多不同的地方抓取和重新插入代码,我认为使用#ifdef 会更好,只要代码保持在更改#ifdef 的状态会导致在实际工作的东西中。如果事情发生了变化,以至于#if'ed out 代码需要维护,那么它可能不值得保留。
                      • 在相关的说明中,您如何看待形成“家庭”的例程,其中一些但不是所有成员都实际使用(例如,从流中获取无符号字节,获取有符号字节,无符号字、签名词等)?即使应用程序不使用所有版本,假设所有版本都存在,编写其他代码似乎比处理大杂烩更容易可用和不可用的东西。请注意,我的嵌入式控制器编译器在其生成的代码中包含未使用的函数。
                      • 这样做不会导致以下问题: 1. 使代码非常难以遵循 2. 轻按开关时 QA 测试计划无效。我敢肯定,如果我在我从事过的任何项目中都这样做,我的指关节就会被包裹起来。
                      【解决方案13】:

                      标记未使用的遗留代码的最佳方法是将其删除。除了让团队中的新开发人员感到困惑之外,它没有任何作用。

                      在我以前的团队中,我们实际上把它变成了一场比赛,我们将其命名为 Grim Repear 比赛。谁能找到并删除代码库中最多的未使用/死代码。删除死代码获得负分,添加死代码获得正分。最低分获胜。

                      【讨论】:

                      • 如果他们删除了一些仍在维持生命的东西会怎样?你知道,那段代码只对地下室里抱怨订书机的人很重要吗?像 +2 一样吗?
                      • @Chris 取决于地下室里的人。如果是米尔顿,那是一个很大的惩罚。
                      • 删除代码并隐藏订书机让他忙碌。 +1 死神奖励。
                      【解决方案14】:
                      1. 将其标记为已过时。 http://msdn.microsoft.com/en-us/library/aa664623%28VS.71%29.aspx
                      2. 下一个循环,注释掉代码并做适当的注释。在代码块周围设置一个区域,以便它可以很好地折叠并且不会占用大量视觉空间。
                      3. 下一个循环,删除代码。

                      这样,如果您需要弃用分配给您但他们需要调用的某些代码,您就不会让您的队友大吃一惊。但允许您进行那些需要的更改!

                      【讨论】:

                      • +1 表示 .net 特定的过时部分
                      • +1 表示过时的标签。有时我希望我在 C# 中工作。 :-(
                      • 我会跳过第 1 步和第 2 步以及第 3 步的第一部分。
                      • +1 表示过时的东西!我在 Delphi 上,我们称过时的代码“已弃用”——所以它不仅仅是 c# / .net 的东西。我自己刚刚弃用了一些例程。
                      • Obsolete 属性有一个参数会阻止编译。所以,我建议第二个版本。
                      【解决方案15】:

                      如果我有不再使用的代码,我会在 Craigslist 上出售。

                      【讨论】:

                      • :)) 你卖掉代码后会删除吗? :))
                      【解决方案16】:

                      总是删除未使用的代码。这是源代码控制的好处之一。

                      【讨论】:

                        【解决方案17】:

                        我相信删除是保持代码整洁的好方法。

                        如果你不删除,例如:注释掉,或者创建过时的实体来存储它们,我已经看到了这样的混乱。

                        这就是为什么你有存储库、分支、标签等。

                        我觉得删除它更好。如果代码已经在存储库中。

                        【讨论】:

                          【解决方案18】:
                          1. 将旧项目签入源代码管理。
                          2. 删除未使用的代码。
                          3. 利润!!

                          【讨论】:

                          • 您忘记了第 3 步。1.) 将旧项目签入源代码管理。 2.) 删除未使用的代码。 3.) ... 4.) 利润!!
                          • @Caladain 我相信应该是 3.) ??? 4.) 利润!!
                          猜你喜欢
                          • 2011-08-02
                          • 1970-01-01
                          • 2012-01-26
                          • 1970-01-01
                          • 2011-01-23
                          • 1970-01-01
                          • 1970-01-01
                          • 2010-09-09
                          • 1970-01-01
                          相关资源
                          最近更新 更多