您可以对遗留代码库做哪些对提高质量影响最大的事情?

2024-02-13

当您在遗留代码库中工作时,随着时间的推移,什么会对提高代码库的质量产生最大的影响?

  • 删除未使用的代码
  • 删除重复的代码
  • 添加单元测试以提高覆盖率较低的测试覆盖率
  • 跨文件创建一致的格式
  • 更新第三方软件
  • 减少静态分析工具(即 Findbugs)生成的警告

该代码库是由许多具有不同专业水平的开发人员多年来编写的,其中许多领域未经测试,有些领域在没有花费大量时间编写测试的情况下无法测试。


  • 阅读迈克尔·费瑟的书“有效地使用旧代码” https://rads.stackoverflow.com/amzn/click/com/0131177052

这是一本很好的书。

如果您不喜欢这个答案,那么我能给的最好建议是:

  • 首先,停止编写新的遗留代码[1]

[1]:遗留代码 = 没有单元测试的代码,因此是未知的

在没有适当的自动化测试套件的情况下更改遗留代码是危险且不负责任的。如果没有良好的单元测试覆盖率,您不可能知道这些更改会产生什么影响。 Feathers 建议采用“束缚”方法,在该方法中,您可以隔离需要更改的代码区域,编写一些基本测试来验证基本假设,在单元测试的支持下进行小的更改,然后从那里开始工作。

注意:我并不是说您需要停止所有事情并花费数周时间为所有事情编写测试。恰恰相反,只需围绕您需要测试的区域进行测试并从那里进行解决即可。

吉米·博加德和雷·休斯顿针对与此非常相似的主题做了一个有趣的屏幕拍摄:http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/05/06/pablotv-elimination-static-dependency-screencast.aspx http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/05/06/pablotv-eliminating-static-dependencies-screencast.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您可以对遗留代码库做哪些对提高质量影响最大的事情? 的相关文章

  • 您重构代码的方式和频率如何?

    我的问题模糊地涉及this one https stackoverflow com questions 140677 how often should you refactor 但是 它不涉及技术或实践 我在读务实的程序员并且它强烈提倡尽可
  • WebStorm 将重构范围限制为仅当前文件

    编辑 这是我创建的问题的链接 https youtrack jetbrains com issue WEB 21956 https youtrack jetbrains com issue WEB 21956 是否可以将 WebStorm
  • 通过轻量级迁移更改核心数据实体名称?

    有没有办法在 iOS 上使用 自动轻量级迁移 的同时更改核心数据实体名称的名称 在目标模型中 将重命名标识符设置为源模型中实体的名称 在 Xcode 3 中 重命名标识符位于详细信息窗格的用户信息窗格中 版本哈希修饰符下方 在 Xcode
  • 清理遗留代码“header spaghetti”

    任何清理 标题意大利面 的推荐做法 这会导致极其严重的后果 编译时间慢 Linux Unix GCC 中是否有相当于 pragma Once 的东西 发现与此相关的冲突消息 Thanks 假设您熟悉 包含防护 ifdef 在标头开头 加快构
  • PHP 中的死代码检测 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 这个 Sql 语句可以重构为不使用 RANK/PARTITION 吗?

    我有以下 sql 语句 它运行得很好 我希望看到如何重构它 这样它就不需要使用 RANK PARTITION 如果可能的话 SELECT LogEntryId FileId CreatedOn EventTypeId FROM SELECT
  • 当我尝试在 Xcode 中重构时,出现一条警告,要求将文件添加到此工作区中目标的构建阶段

    当我尝试通过重命名来重构代码时 我经常看到此消息 h is not part of the build phase of any targets in this workspace and so can t be refactored Ad
  • 如何找到原名称已知的重命名文件的新路径?

    考虑以下用例 我正在本地分支上工作 同时在主分支上完成了重构 现在 一些文件 类 已被重命名和 或移动到新位置 合并时 由于缺少类 我收到很多很多导入错误 A B C D E master F G H I J topic In A有我用过的
  • 如果只使用一次本地函数,那么使用它们还有什么意义吗?

    想象一下我有这样的代码 public void Foo Do bar work Do baz work Do foobar work 我意识到我可以 而且应该因为它做了不止一件事 将其重构为 public void Foo bar baz
  • 您可以对遗留代码库做哪些对提高质量影响最大的事情?

    当您在遗留代码库中工作时 随着时间的推移 什么会对提高代码库的质量产生最大的影响 删除未使用的代码 删除重复的代码 添加单元测试以提高覆盖率较低的测试覆盖率 跨文件创建一致的格式 更新第三方软件 减少静态分析工具 即 Findbugs 生成
  • 从 Spring 控制器中删除重复项

    我一直在寻找一种方法来减少 Spring MVC 控制器中因细微差异而重复的代码量 但到目前为止搜索 SO 问题只产生了一些问题 没有任何令人满意的答案 我想要删除的重复示例是这样的 其中用户创建页面和角色创建页面有相似之处 Request
  • 在 Smalltalk 中重构 if 链而不发生类爆炸

    由于 Smalltalk 不鼓励使用 caseOf 那么有哪些替代方案可以实现以下情况而不导致类爆炸 self condition1 ifTrue self actionForCondition1 ifFalse self conditio
  • 如何从我的代码中删除重复项

    我有两个类似的方法 其中一个打印一些东西 其中一个保存一些东西 正如你所看到的 有很多重复的代码 我应该如何重构它并删除这种重复 public static void printSomething List
  • NetBeans 重构类:java.lang.NoClassDefFoundError

    我刚刚在使用 NetBeans 时遇到了一个错误 我想发布我的发现 可能这是旧新闻 也许这会让一些人免去调试我刚刚遇到的类似问题的麻烦 我不认为我在这里滥用任何东西 堆栈溢出的 SEO 非常好 我在 NetBeans JavaFX 项目 中
  • 关于使用遗留代码的建议

    我需要一些关于如何使用遗留代码的建议 不久前 我接到的任务是向报告应用程序添加一些报告 2005 年用 Struts 1 编写的 没什么大不了的 但是代码相当混乱 没有使用Action形式 基本上代码就是一个巨大的action 里面有很多i
  • 一次对多个属性使用“转换为自动属性”

    我发现自己经常使用 Resharper 的 转换为自动属性 重构来删除 C 3 0 之前的样板代码 有什么方法可以将其应用到单个类中的所有属性立刻 ReSharper 可以做到这一点 Options gt Code Cleanup gt U
  • 如何处理第三方库代码中的 exit() 调用?

    我正在开发一个 C 应用程序 该应用程序使用另一个团队用 C 编写的库 图书馆的作者喜欢打电话exit 当发生错误时 立即结束程序 而不调用 C 应用程序中堆栈上对象的析构函数 应用程序设置了一些系统资源 这些资源在进程结束后不会自动被操作
  • 编写自定义重构脚本的最佳 Java 库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 WinForms 中保留对控件的全局引用以访问 GUI 线程

    这个问题有一点历史 请耐心听我说 In this https stackoverflow com questions 192980 boiler plate code replacement is there anything bad ab
  • 是否应该使用 SDK 2.1 重建旧版 Android 应用程序?

    我有一个 Android 应用程序 它使用众所周知的遗留应用程序的策略 http developer android com intl fr guide practices screens support html strategies 它

随机推荐

  • Composer 自动加载完整示例?

    我想把all https getcomposer org doc 04 schema md psr 0 the https stackoverflow com questions 15179025 unable to autoload cl
  • 暂停和恢复 AnimateWithDuration 动画 ios

    因此 我在 animateWithDuration 方法的帮助下完成了动画 但我需要在应用程序进入后台时停止动画 并在应用程序返回前台时恢复动画 有什么方法可以实现这一点 我的动画 标签在一定时间间隔后淡入淡出 void viewDidLo
  • Twitter API:如何仅搜索带有地理标记的推文

    我该如何使用Twitter Search API 或其他 获取具有以下内容的推文列表 geo param EDIT 举例来说 我不会通过 apple 标签获取地理标记推文列表 没有位置过滤器 全球范围内 看起来最新的 API 支持这一点 只
  • 如何强制输入只允许字母?

    此处使用 jQuery 但无法阻止在输入字段中输入数字 http codepen io leongaban pen owbjg http codepen io leongaban pen owbjg Input
  • Javascript 的正则表达式lookbehind 解决方法?

    我在正则表达式方面很糟糕 所以我会以尝试更好地描述我的问题的名义 以一种非常规的方式传达我的问题 var TheBadPattern d 2 d 2 d 2 d 3 var TheGoodPattern a zA Z0 9 r n n a
  • raise ValueError('Fileobj 必须实现 read')

    我正在获取文件大小并将其上传到 S3 def transfer file from ftp to s3 bucket name ftp file path s3 file path ftp username ftp password chu
  • AVAssetWriter 仅在 iOS 13 设备上有音频“爆裂声”

    我使用 AVCaptureSession 使用 AVAssetWriter 写入 mov 文件 同样的代码在 iOS 13 之前的设备上不会出现裂纹 在所有 iOS 13 设备上 无论 iPhone iPad 型号如何 都会出现爆裂声 我已
  • Eigen SparseMatrix 的零拷贝构造

    我有以下问题 我有一个Eigen SparseMatrix我需要通过网络发送 而我的网络库仅支持发送原始类型的数组 我可以通过执行类似的操作来检索指向 SparseMatrix 的支持数组的指针 这是支持对象的代码 https eigen
  • extjs 5:为组件的自定义属性进行数据绑定

    我有一个从文件字段扩展的组件 我向其中添加了一个自定义属性 serverPath 并且我还定义了 getter 和 setter 代码 Ext define MyApp ux Field File extend Ext form field
  • 是否可以使用 Node.js 创建桌面应用程序? [复制]

    这个问题在这里已经有答案了 我已经使用node js 创建了一个应用程序 我很想知道是否可以将客户端 js html css 和服务器端打包到一个独立的应用程序 不需要浏览器 中 https github com rogerwang nod
  • 如何使用 vc++ 找出当前线程的堆栈上剩余多少空间?

    我使用的是VC 2012 我希望能够知道当前线程中有多少堆栈内存可用 快速搜索指向使用 malloc h 和 stackavail 函数 但它在 Visual C 2012 中不存在 我如何以另一种方式实现这一点 有问题的例子是这样的 in
  • 在“in”子句的存储过程中使用MySQL用户定义变量

    当将逗号分隔的 id 字符串作为 varchar 发送到 MySQL 存储过程时 我无法使用该字符串作为 IN 子句的一部分来返回正确的结果 该字符串被截断为小数 并且仅使用第一个值 我以为我可以通过准备然后执行该语句来解决这个问题 但这仍
  • 如何(从命令行)自动安装适用于 C++、.NET、C# 等的 Visual Studio 构建工具构建环境

    注 我已经读过如何在不安装 IDE 的情况下在构建服务器上安装 VS2017 版本的 msbuild https stackoverflow com questions 42696948 how can i install the vs20
  • 未选中复选框时如何删除相邻单元格的数据?

    我想以此作为序言 因为我没有接受过这一专业领域的培训 因此我帮助设置了该表的初始代码 我设置了工作表 以便在 A 列和 C 列中添加复选框 并在 B 和 D 中添加时间戳 但我也希望这样 如果需要取消选中复选框 则数据将被删除 A B C
  • 如何从 Django 的会话中获取登录用户的 uid?

    我已经使用以下方法实现了注册 登录 身份验证系统这个 Django 指南 https docs djangoproject com en 1 3 topics auth 但是 我如何从我的视图访问用户的信息 以便将用户的信息发送到模板文件
  • 简单的客户端/服务器、TCP/IP 加密消息流、SSL

    编写一个小型 TCP IP 客户端服务器应用程序 基本上它会创建一个服务器 然后您可以创建几个不同的客户端并设置一些聊天会话 我想知道是否有任何方法可以使用标准 net 库合并某种形式的加密 m mainSocket new Socket
  • 从 HTTPS 页面到 HTTP URL 的 AJAX 请求

    我有一种情况 我需要从一个 HTTPS 页面到另一个不安全的页面 在不同的域上 执行 AJAX 请求 我们已经实施了 CORS 策略 并且在我们的网站上使用 HTTPS 之前它运行良好 有什么办法可以让这个工作吗 根据 W3 的说法 由于
  • 将文件和目录连同提交历史记录一起移动到子目录中

    如何将目录和文件以及提交历史记录移动到子目录 例如 源码目录结构 project x files sub dirs 目标目录结构 project x p q files sub dirs 要添加到布马古利斯 https stackoverf
  • .Net lib来控制远程GDB [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 您可以对遗留代码库做哪些对提高质量影响最大的事情?

    当您在遗留代码库中工作时 随着时间的推移 什么会对提高代码库的质量产生最大的影响 删除未使用的代码 删除重复的代码 添加单元测试以提高覆盖率较低的测试覆盖率 跨文件创建一致的格式 更新第三方软件 减少静态分析工具 即 Findbugs 生成