运用通义灵码有效管理遗留代码:提升代码质量与可维护性

简介: 本文首先介绍了遗留代码的概念,并对遗留代码进行了分类。针对不同类型的遗留代码,提供了相应的处理策略。此外,本文重点介绍了通义灵码在维护遗留代码过程中能提供哪些支持。

作者:耘越

本文首先介绍了遗留代码的概念,并对遗留代码进行了分类。针对不同类型的遗留代码,提供了相应的处理策略。此外,本文重点介绍了通义灵码在维护遗留代码过程中能提供哪些支持。


什么是遗留代码


与过时技术相关的代码:

  • 与不再受支持的操作系统或软件库相关的代码。
  • 依赖于已淘汰的技术栈或编程语言的代码。

为兼容老旧功能而保留的代码:

  • 在现代软件中为了兼容旧版本功能而保留的代码片段。
  • 为了确保向后兼容性而不得不保留的代码。

缺乏文档和维护的代码:

  • 没有良好文档支持的旧代码。
  • 缺乏现代开发实践(如单元测试、代码审查等)的代码。


解决遗留代码的方法


解决遗留代码有以下三种常见的处理方法:


处理方式 利弊
推翻重来 成本高,系统正在运行,会带来代码风险。
进行重构
补充单元测试 通过单元测试识别现有代码中的问题,为未来可能的代码变更提供质量保障。


根据上述描述,补充单元测试是一种有效解决遗留代码问题的方法。然而,这种方法仍然存在一些问题:


  • 大量遗留代码缺少单元测试,并且由于代码间的复杂依赖关系,进行测试的成本非常高。
  • 具体的衡量标准却不够清晰,无法定义好的单元测试。
  • 哪些代码需要添加单元测试?


单元测试常见的误区


  • 缺乏断言的假单元测试:开发者可能会采取仅调用函数而不进行断言的方式,以提高覆盖率指标,导致了许多无效的单元测试。
  • 把单元测试当成白盒测试:一些观点将单元测试归类为白盒测试,但实际上应将其视为针对函数签名的黑盒测试。
  • 依赖真实环境的单元测试:阻碍单元测试的主要因素包括惰性和依赖环境配置。若不使用 Stub 或 Mock 解除对外部环境(如网络 IP、数据库)的依赖,单元测试将难以达到 FIRST 原则(快速、独立、可重复、自我验证、及时性)。


选择性的进行单元测试


单元测试除了带来收益外,本身也会产生一定的成本。如果从收益与成本的角度分析遗留代码,将有助于明确为遗留代码补充单元测试的策略,此策略被称为选择性单元测试。那么,如何界定成本与收益呢?


遗留代码单元测试的成本收益象限分类

针对遗留代码的单元测试,可以根据其成本和收益进行象限分类。根据下图,对分类标准和各象限进行详细说明:

image.png

分类标准

  • X 轴(成本):代码依赖程度越高,测试成本越大。
  • Y 轴(收益):代码复杂度越高,质量收益越大。

四个象限

代码分类 特性 描述 收益 成本
算法类代码(Algorithms Code) 圈复杂度高,扇入大。 包含较多条件判断和循环语句,依赖其他代码少,但被大量代码依赖。
琐碎代码(Trivial Code) 圈复杂度小,扇入大。 通常是一些简单的方法,只有一两行代码。
协调类代码(Coordinators Code) 圈复杂度小,扇出大。 处于调用关系的上层,通过调用其他代码来反映特定业务场景。
复杂代码(Overcomplicated Code) 圈复杂度大,扇出大。 逻辑复杂,依赖多,函数冗长且参数繁多,是典型的代码异味。

圈复杂度与依赖的概念理解

  • 圈复杂度(Cyclomatic Complexity):衡量代码中逻辑分支的数量。
  • 扇入(Fan-In):直接调用该模块的上级模块的个数,扇入大表示模块的复用程度高。
  • 扇出(Fan-out):一个模块直接调用的其他模块的数量,扇出大表示该模块依赖其他模块越多。


不同类型代码的处理策略

根据上述的分析,遗留代码的处理策略就变得十分明确:


  • 算法类代码(Algorithms Code):生成单元测试。
  • 协调类代码(Coordinators Code):进行接口测试。
  • 复杂代码(Overcomplicated Code):寻找合适的机会进行重构。
  • 琐碎代码(Trivial Code):不做处理。

image.png


使用通义灵码处理遗留代码

1. 了解项目工程

在维护一个工程的遗留代码,首先可通过 @workspace 功能了解整个工程的目的及其涉及的各个模块。

image.png

2. 对不同类型代码进行处理

1)针对算法类(Algorithms)代码生成单元测试

选中需要基于生产代码进行代码生成的部分。在生成时,请注意所需的框架及 Mock 等依赖信息,可以通过生成单元测试命令后追加相关信息进行补充。如 /generate unit testingCppUTest。

image.png

一般而言,基于现有代码生成的单元测试用例数量通常较为有限。如果对单元测试的测试场景及用例数量有具体要求,可以在新生成的单元测试文件中,通过测试函数的续写方式生成更多的单元测试。在续写过程中,通义灵码将尽可能遵循已有用例,以此作为上下文进行参考。


2)针对协调类代码(Coordinators)进行接口测试

对于协调类代码而言,单元测试并不是一种理想的解决方案,由于存在过多的依赖,测试成本显著提高。针对此类代码,应该采用接口测试或功能测试的方式进行覆盖,然而在编写自动化测试用例时,开发者常常会遇到相关问题。因此,可以通过通义灵码,快速掌握并理解测试框架。

image.png

针对用例的编写,可以选择相应的被测函数,并在问答区中直接提问:基于 Robot Framework 生成以下代码的测试用例。沿着这一思路,同样可以实现相应的 Keywords 等内容。


3)超复杂的代码(Overcomplicated Code)找机会进行重构

针对超复杂的代码,可以使用通义灵码的 /generate optimization 命令,以获得针对所选代码的优化建议。代码审查与优化将从语法问题、异常改进、代码整洁度、安全性及风险等多个维度给出相应的优化建议。

image.png

针对复杂遗留代码的优化,并不建议开发者们盲目进行全面的优化和重构。遗留代码的变更可能会带来巨大的风险。因此,开发者应根据具体情况,在合适的机会,遵守童子军法则,进行重构和优化。在这一过程中,通义灵码也将为您提供有力支持。

结语


以上便是在处理遗留代码时可参考的实践。处理遗留代码需要深入代码的复杂结构,细致地追踪每一个可能的分支节点。在这一过程中,除了识别并修复潜在的缺陷外,还必须在有限的时间内完成所有任务。为了避免这一局面的发生,最佳的策略是预防代码的腐化,善用工具,并在编写初期遵循良好的编程原则。


通义灵码一周年,福利大放送!


1)【一周年数据报】看年报,领机械键盘、手办、加薪水杯、T 恤等万份盲盒。


2)【有奖征文测评】机械键盘、华为智能手环等丰厚礼品等你来拿!


点击此处,看年报,开盲盒!

相关文章
|
16天前
|
人工智能 自然语言处理 程序员
用通义灵码@workspace和@terminal做项目代码熟悉和新需求实现的体验
来和大家分享一下,我用通义灵码@workspace和@terminal做项目代码熟悉和新需求实现的体验。
76 2
|
6天前
|
运维 自然语言处理 开发者
作为一名运维人员,使用通义灵码个人版处理日常工作中的代码相关任务,极大地提升了我的工作效率。以下是我使用通义灵码的具体实践场景、效果和心得,以及相应的截图。
作为一名运维人员,我使用通义灵码处理日常工作中的代码任务,效率提升了30%。通义灵码帮助我快速理解复杂代码、生成准确的代码注释,并能从自然语言生成代码示例,大幅减少了代码编写和理解的时间。
28 3
|
6天前
|
人工智能 IDE 测试技术
使用通义灵码提升Python开发效率:从熟悉代码到实现需求的全流程体验
作为一名Python开发者,我最近开始使用通义灵码作为开发辅助工具。它显著提高了我的工作效率,特别是在理解和修改复杂代码逻辑方面。通过AI编码助手,我能够在短时间内快速上手新项目,实现新需求,并进行代码优化,整体效率提升了60%以上。通义灵码不仅加快了代码生成速度,还增强了代码的健壮性和稳定性。
|
3月前
|
存储 Rust 安全
通义灵码代码搜索功能的前沿性研究论文被软件工程国际顶会 FSE 录用
阿里云通义灵码团队与重庆大学合作的研究论文被 FSE Industry 2024 (CCF A) 录用,该论文通过对阿里云开发的智能编码插件进行实证调查,主要探讨了在智能编码助手中的代码搜索问题,点击本文查看论文详解。
7283 12
|
4月前
|
人工智能 JavaScript Java
首批!通义灵码获信通院代码大模型评估最高评级
首批!通义灵码获信通院代码大模型评估最高评级
118 1
|
4月前
|
SQL 人工智能 自然语言处理
通义灵码代码大模型应用实践访谈
2024 年 6 月 26 日,中国信息通信研究院(以下简称“中国信通院”)在可信 AI·南京人工智能产业发展论坛正式发布了代码大模型评估结果。阿里云计算有限公司的通义灵码代码大模型顺利通过评估,获得目前最高等级 4+ 级。该等级代表阿里云通义灵码大模型在通用能力及专用场景能力绝大多部分达到优秀水平,同时具备较为成熟的管理机制。
|
5月前
|
人工智能 自然语言处理 算法
哈啰集团全面接入通义灵码,AI 生成代码占比 20%,研发提效 12%
官宣!哈啰集团全面接入阿里云通义灵码专属版
476 5
|
5月前
|
人工智能
通义灵码都能帮你写代码了~
行/函数级代码实时续写 注释生成代码 离线模型单行补全 跨文件感知能力 多结果推荐 企业代码库的生成增强
599 2
|
5月前
|
人工智能 JavaScript 测试技术
《AIGC+软件开发新范式》--10.阿里云参编业内首个代码大模型标准,通义灵码获 2023 AI4SE “银弹” 案例
在AI 热度持续上升的当下,阿里云推出AI智能编码助手—通义灵码。通义灵码是一款基于阿里云通义代码大模型打造的智能编码助手,基于海量优秀开源代数据集和编程教科书训练,为开发者带来高效、流畅的编码体验。
238 2