用通义灵码如何快速合理解决遗留代码问题?
本文首先介绍了遗留代码的概念,并对遗留代码进行了分类。针对不同类型的遗留代码,提供了相应的处理策略。此外,本文重点介绍了通义灵码在维护遗留代码过程中能提供哪些支持。
什么是遗留代码
-
与过时技术相关的代码:
-
与不再受支持的操作系统或软件库相关的代码。
-
依赖于已淘汰的技术栈或编程语言的代码。
-
-
为兼容老旧功能而保留的代码:
-
在现代软件中为了兼容旧版本功能而保留的代码片段。
-
为了确保向后兼容性而不得不保留的代码。
-
-
缺乏文档和维护的代码:
-
没有良好文档支持的旧代码。
-
缺乏现代开发实践(如单元测试、代码审查等)的代码。
-
解决遗留代码的方法
解决遗留代码有以下三种常见的处理方法:
| 处理方式 | 利弊 |
| 推翻重来 | 成本高,系统正在运行,会带来代码风险。 |
| 进行重构 | |
| 补充单元测试 | 通过单元测试识别现有代码中的问题,为未来可能的代码变更提供质量保障。 |
根据上述描述,补充单元测试是一种有效解决遗留代码问题的方法。然而,这种方法仍然存在一些问题:
-
大量遗留代码缺少单元测试,并且由于代码间的复杂依赖关系,进行测试的成本非常高。
-
具体的衡量标准却不够清晰,无法定义好的单元测试。
-
哪些代码需要添加单元测试?
单元测试常见的误区
-
缺乏断言的假单元测试:开发者可能会采取仅调用函数而不进行断言的方式,以提高覆盖率指标,导致了许多无效的单元测试。
-
把单元测试当成白盒测试:一些观点将单元测试归类为白盒测试,但实际上应将其视为针对函数签名的黑盒测试。
-
依赖真实环境的单元测试:阻碍单元测试的主要因素包括惰性和依赖环境配置。若不使用Stub或Mock解除对外部环境(如网络IP、数据库)的依赖,单元测试将难以达到FIRST原则(快速、独立、可重复、自我验证、及时性)。
选择性的进行单元测试
单元测试除了带来收益外,本身也会产生一定的成本。如果从收益与成本的角度分析遗留代码,将有助于明确为遗留代码补充单元测试的策略,此策略被称为选择性单元测试。那么,如何界定成本与收益呢?
遗留代码单元测试的成本收益象限分类
针对遗留代码的单元测试,可以根据其成本和收益进行象限分类。根据下图,对分类标准和各象限进行详细说明:

分类标准
-
X轴(成本):代码依赖程度越高,测试成本越大。
-
Y轴(收益):代码复杂度越高,质量收益越大。
四个象限
| 代码分类 | 特性 | 描述 | 收益 | 成本 |
| 算法类代码(Algorithms Code) | 圈复杂度高,扇入大。 | 包含较多条件判断和循环语句,依赖其他代码少,但被大量代码依赖。 | 高 | 低 |
| 琐碎代码 (Trivial Code) | 圈复杂度小,扇入大。 | 通常是一些简单的方法,只有一两行代码。 | 低 | 低 |
| 协调类代码(Coordinators Code) | 圈复杂度小,扇出大。 | 处于调用关系的上层,通过调用其他代码来反映特定业务场景。 | 低 | 高 |
| 复杂代码(Overcomplicated Code) | 圈复杂度大,扇出大。 | 逻辑复杂,依赖多,函数冗长且参数繁多,是典型的代码异味。 | 高 | 高 |
圈复杂度与依赖的概念理解
-
圈复杂度(Cyclomatic Complexity):衡量代码中逻辑分支的数量。
-
扇入(Fan-In):直接调用该模块的上级模块的个数,扇入大表示模块的复用程度高。
-
扇出(Fan-out):一个模块直接调用的其他模块的数量,扇出大表示该模块依赖其他模块越多。
不同类型代码的处理策略
根据上述的分析,遗留代码的处理策略就变得十分明确:
-
算法类代码(Algorithms Code):生成单元测试。
-
协调类代码(Coordinators Code):进行接口测试。
-
复杂代码(Overcomplicated Code):寻找合适的机会进行重构。
-
琐碎代码(Trivial Code):不做处理。

使用通义灵码处理遗留代码
1. 了解项目工程
在维护一个工程的遗留代码,首先可通过 @workspace 功能了解整个工程的目的及其涉及的各个模块。

2. 对不同类型代码进行处理
| 针对算法类(Algorithms)代码生成单元测试 | 针对协调类代码(Coordinators)进行接口测试 | 超复杂的代码(Overcomplicated Code)找机会进行重构 |
|
选中需要基于生产代码进行代码生成的部分。在生成时,请注意所需的框架及Mock等依赖信息,可以通过生成单元测试命令后追加相关信息进行补充。如 |
对于协调类代码而言,单元测试并不是一种理想的解决方案,由于存在过多的依赖,测试成本显著提高。针对此类代码,应该采用接口测试或功能测试的方式进行覆盖,然而在编写自动化测试用例时,开发者常常会遇到相关问题。因此,可以通过通义灵码,快速掌握并理解测试框架。 | 针对超复杂的代码,可以使用通义灵码的
|
一般而言,基于现有代码生成的单元测试用例数量通常较为有限。如果对单元测试的测试场景及用例数量有具体要求,可以在新生成的单元测试文件中,通过测试函数的续写方式生成更多的单元测试。在续写过程中,通义灵码将尽可能遵循已有用例,以此作为上下文进行参考。

结语
以上便是在处理遗留代码时可参考的实践。处理遗留代码需要深入代码的复杂结构,细致地追踪每一个可能的分支节点。在这一过程中,除了识别并修复潜在的缺陷外,还必须在有限的时间内完成所有任务。为了避免这一局面的发生,最佳的策略是预防代码的腐化,善用工具,并在编写初期遵循良好的编程原则。
相关文章:
用通义灵码如何快速合理解决遗留代码问题?
本文首先介绍了遗留代码的概念,并对遗留代码进行了分类。针对不同类型的遗留代码,提供了相应的处理策略。此外,本文重点介绍了通义灵码在维护遗留代码过程中能提供哪些支持。 什么是遗留代码 与过时技术相关的代码: 与不再受支持的…...
新书推荐——《Python贝叶斯深度学习》
在过去的十年中,机器学习领域取得了长足的进步,并因此激发了公众的想象力。但我们必须记住,尽管这些算法令人印象深刻,但它们并非完美无缺。本书旨在通过平实的语言介绍如何在深度学习中利用贝叶斯推理,帮助读者掌握开…...
数据结构-3.1.栈的基本概念
一.栈的定义: 栈和线性表的区别:栈只能在表尾一端进行插入或者删除的操作,而线性表可以在任意一个地方进行插入或者删除 二.有关栈的关键术语: 三.栈的基本操作: 1.回顾线性表的基本操作: 2.栈的基本操作&…...
关于 NLP 应用方向与深度训练的核心流程
文章目录 主流应用方向核心流程(5步)1.选定语言模型结构2.收集标注数据3.forward 正向传播4.backward 反向传播5.使用模型预测真实场景 主流应用方向 文本分类文本匹配序列标注生成式任务 核心流程(5步) 基本流程实现的先后顺序…...
linux如何启用ipv6随机地址
简介 在 IPv6 中,临时随机地址(Temporary IPv6 Address)是一种为了提高隐私和安全而设计的功能。通常,默认的 IPv6 地址是基于设备的 MAC 地址生成的,容易导致跟踪和识别设备。启用临时 IPv6 地址可以避免这个问题&am…...
探索 Android DataBinding:实现数据与视图的完美融合
在 Android 开发中,数据与视图的交互一直是一个关键的问题。为了更好地实现数据的展示和更新,Google 推出了 DataBinding 库,它为开发者提供了一种简洁、高效的方式来处理数据与视图之间的绑定关系,大大提高了开发效率和代码的可读…...
Java 编码系列:线程基础与最佳实践
引言 在多任务处理和并发编程中,线程是不可或缺的一部分。Java 提供了丰富的线程管理和并发控制机制,使得开发者可以轻松地实现多线程应用。本文将深入探讨 Java 线程的基础知识,包括 Thread 类、Runnable 接口、Callable 接口以及线程的生命…...
《深度学习》—— ResNet 残差神经网络
文章目录 一、什么是ResNet?二、残差结构(Residual Structure)三、Batch Normalization(BN----批归一化) 一、什么是ResNet? ResNet 网络是在 2015年 由微软实验室中的何凯明等几位大神提出,斩获…...
针对考研的C语言学习(定制化快速掌握重点3)
1.数组常见错误 数组传参实际传递的是数组的起始地址,若在函数中改变数组内容,数组本身也会发生变化 #include<stdio.h> void change_ch(char* str) {str[0] H; } int main() {char ch[] "hello";change_ch(ch);printf("%s\n&q…...
pikachu XXE(XML外部实体注入)通关
靶场:pikachu 环境: 系统:Windows10 服务器:PHPstudy2018 靶场:pikachu 关卡提示说:这是一个接收xml数据的api 常用的Payload 回显 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY …...
shell脚本定时任务通知到钉钉
shell脚本定时任务通知到钉钉 1、背景 前两天看了一下定时任务,垃圾清理、日志相关、系统巡检这些,有的服务器运行就有问题,或者不运行,正好最近在做运维标准重制运维手册,顺便把自动化这块优化一下,所…...
2.4K star的GOT-OCR2.0:端到端OCR 模型
GOT-OCR2.0是一款新一代的光学字符识别(OCR)技术,标志着人工智能在文本识别领域的重大进步。作为一款开源模型,GOT-OCR2.0不仅支持传统的文本和文档识别,还能够处理乐谱、图表以及复杂的数学公式,为用户提供…...
【JavaEE】——线程的安全问题和解决方式
阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 一:问题引入 二:问题深入 1:举例说明 2:图解双线程计算…...
初步认识了解分布式系统
背景认识:我们要学习redis,还是得了解一下什么是分布式。为什么呢?因为redis只有在分布式系统中才能发挥它最大的作用,也就是领域展开,所以接下来我们就简单过一下什么是分布式系统 一些术语认识: &#x…...
react 为什么不能学习 vue3 进行静态节点标记优化性能?
因为 React 使用的是 JSX,而 JSX 本质上就是 JS 语言,是具有非常高的动态的,而 Vue 使用的 template 则是给了足够的约束,比如说 Vue 的 template 里面使用了很多特定的标记来做不同的事情,比如说 v-if 就是进行变量判…...
Elasticsearch黑窗口启动乱码问题解决方案
问题描述 elasticsearch启动后有乱码现象 解决方案: 提示:这里填写该问题的具体解决方案: 到 \config 文件下找到 jvm.options 文件 打开后 在文件末尾空白处 添加 -Dfile.encodingGBK 保存后重启即可。...
Logtus IT员工参加国际技术大会
Logtus IT的员工参加了国际技术大会,该大会致力于在金砖国家框架内开发俄罗斯的技术。该活动包括一个展览,俄罗斯开发商展示了他们的信息技术、电子和电信成就。展示了面向国内和国际市场(包括政府机构)的解决方案、产品和平台。 …...
ant design vue组件中table组件设置分组头部和固定总结栏
问题:遇到了个需求,不仅要设置分组的头部,还要在顶部有个统计总和的栏。 分组表头的配置主要是这个,就是套娃原理,不需要展示数据的直接写个title就行,需要展示数据的字段才需要详细的配置属性。 const co…...
2024年信息安全企业CRM选型与应用研究报告
数字化的生活给人们带来便利的同时也带来一定的信息安全隐患,如网络侵权、泄露用户隐私、黑客攻击等。在互联网高度发展的今天,信息安全与我们每个人、每个组织甚至每个国家都息息相关。 信息安全行业蓬勃发展。根据智研咨询数据,2021年&…...
【后端开发】JavaEE初阶——计算机是如何工作的???
前言: 🌟🌟本期讲解计算机工作原理,希望能帮到屏幕前的你。 🌈上期博客在这里:【MySQL】MySQL中JDBC编程——MySQL驱动包安装——(超详解) 🌈感兴趣的小伙伴看一看小编主…...
GPT-4 API交互式实验场:开发者如何自建安全可控的Playground
1. 项目概述:一个面向开发者的GPT-4交互式实验场如果你是一名开发者,或者对大型语言模型(LLM)的应用开发感兴趣,那么你很可能已经不止一次地思考过:如何能更高效、更直观地测试GPT-4的API能力?如…...
ModbusTool:工业自动化通信调试的技术实现与实践指南
ModbusTool:工业自动化通信调试的技术实现与实践指南 【免费下载链接】ModbusTool A modbus master and slave test tool with import and export functionality, supports TCP, UDP and RTU. 项目地址: https://gitcode.com/gh_mirrors/mo/ModbusTool 在工业…...
【PCL中Ptr释放问题 aligned_free 的2种解决方法】
PCL中Ptr释放问题 aligned_free解决方法1解决方法2解决方法1 添加avx指令,参考这篇博客https://blog.csdn.net/qq_60609496/article/details/123900817 解决方法2 我按照方法1尝试添加了avx或者sse等,都不行,我是要做一个静态库的时候链接…...
【197期】视频一键转图文笔记
这期分享一个自己一直在用的视频转图文笔记工具,把视频文件和对应的字幕文件拖进去,一键就能生成详细的图文笔记。目前自媒体平台上的文章基本都靠这个流程来出,不用另外再写一遍,效率高了很多。使用方式很简单,把视频…...
交通一线运维优选:Smart-S3 多模光时域反射仪
铁路、高速公路现场运维常需轻便、快速、易用的光纤检测工具,Smart-S3 多模光时域反射仪以超轻机身和稳定性能,成为一线巡检与抢修的理想选择。Smart-S3 多模光时域反射仪是一款便携式光纤测试仪表,可精准测量光缆长度、损耗、故障点位置&…...
树莓派BlueZ源码编译安装与蓝牙协议栈深度配置指南
1. 项目概述与背景 如果你手头有一块树莓派,并且想用它来玩点物联网或者智能硬件项目,蓝牙功能几乎是绕不开的一环。无论是连接一个BLE温湿度传感器读取数据,还是控制一个蓝牙音箱,底层都需要一个稳定、功能完整的蓝牙协议栈来支…...
Untrunc代码架构深度剖析:理解C++实现的视频修复引擎
Untrunc代码架构深度剖析:理解C实现的视频修复引擎 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc Untrunc是一…...
从布列松决定性瞬间到AI生成:Midjourney黑白摄影风格构建方法论(附可复用的5层Prompt结构模板)
更多请点击: https://intelliparadigm.com 第一章:从布列松决定性瞬间到AI生成的范式迁移 亨利卡蒂埃-布列松提出的“决定性瞬间”强调在精确的时间、空间与形式三重统一中捕捉不可复制的真实。这一美学范式统治摄影近百年,其内核是人类对意…...
T2080工控主板开发实战:从核心特性到系统部署全解析
1. 项目概述:从一块“硬核”主板说起 最近在整理手头的嵌入式项目资料,翻出了一块来自东大金智科技的T2080工控主板。这块板子在我经手过的众多嵌入式平台里,算是相当有“分量”的一位——不是指物理重量,而是其内在的“硬核”实力…...
开源AI代码助手本地化部署:从Cursor10x看私有化编程助手实践
1. 项目概述:当AI代码助手遇上开源社区如果你是一名开发者,最近可能频繁听到一个词:Cursor。这款集成了强大AI能力的代码编辑器,正以惊人的速度改变着许多人的编程习惯。它不再仅仅是一个文本编辑器,更像是一个能理解你…...



