代码膨胀会破坏开发操作吗,它将如何影响编译时间?

在这里插入图片描述
Incredibuild 正潜心研究公司以及客户的未来发展趋势。

过去的一年举步维艰,但聪明的企业总是能够抓住机遇,将大部分业务自动化,保持敏捷度和竞争力,最佳的案例就是游戏工作室。这一年来,用户对新游戏或新版本的期待达到前所未有的高度,希望发布速度越快越好。事实证明,他们没有辜负这个期待。

比如 Milestone 在新冠肺炎封锁期间发布 MotoGP ™ 20。

在 2021 年的时候,我无意中看到这篇文章使用了 Sourcegraph 和 Dimensional Research 的报告。报告显示 33% 的开发人员(在 500 多名受调查者中)比 2010 年多管理了 100 倍的代码;18% 的开发人员管理的代码比 2010 年增加了 500 倍!

在这里插入图片描述
图片来源: Sourcegraph

这意味着每年要多出 2 到 15 倍的代码行。

诚然,这并不意味着我们写出来的代码比十年前多出 100 倍。但改变已然发生,比如大规模的开源应用、各种各样的设备、环境等等。

在这里插入图片描述
图片来源: Sourcegraph

但对我来说,这是一个改变游戏规则的时刻,任何软件开发领域的人在为未来做准备时都需要考虑这一点。

代码膨胀的趋势愈发急剧。如果这种趋势是合理的,两年内将翻一倍甚至两倍,这也将给资源和基础架构带来负担。

软件开发第一定律

研究人员 Gerard J. Holzmann 在谈到这种代码膨胀趋势时,说道:“不论是否有合理的需求,软件会随着时间的推移而增长,我们可以称之为软件开发的第一定律。”既然 Holzmann 把这种代码膨胀的趋势称为软件开发的第一定律,也说明了这一趋势的重要性。Holzmann 深入探索了这个理论,为了证明这种不合理的代码膨胀,他研究了 Unix® 和基于 Unix 的系统中称为 true 的命令。随着时间的推移,这个命令从 0 增长到 22896,这也证明了他的观点。此外,也说明了即便是最琐碎的代码也会膨胀。试想,当涉及到复杂产品时,情况将多让人悲观。

影响迭代频率

那些不愿意使用最新技术,对代码膨胀一无所知的公司,将被埋没在混乱之中,永无出头之日。想象一下,系统变成了无难以维护的遗留系统,太多的东西无法处理。更可怕的是,还有错综复杂的依赖关系!当涉及到膨胀的代码或遗留系统时,依赖关系最让人头疼。根据这份报告,57% 的被调查者指出有过因依赖关系理解缺失导致代码破坏的经历。

在这种情况下,快速编译攸关生死,从长远来看,我推测会有更多的硬件帮助解决编译时间的问题。所有这些膨胀的代码行都必须设法进行编译,并且加速高频地进行。另外,速度是关键,十多年前就已如此;本报告中的绝大多数受访者(92%)表示,在过去十年中,加速发布代码的压力有所增加。因此,不仅仅是代码膨胀导致了加速编译需求的提升,高速的迭代周期和发布速度更是对编译速度提出了更高的要求。

在这里插入图片描述
图片来源: Sourcegraph

决定产品质量

更多的代码意味着更大的测试覆盖范围,包括单元、API、集成、功能测试、安全漏洞检查、代码质量分析或中间的操作等等。

当涉及到自动化测试覆盖率时,当今大多数软件公司都深陷“技术债务状态”。在全自动化 CI/CD 发展势不可挡的情况下,如果想要保持频繁和高质量的发布,广泛的测试覆盖必不可少。

在这个代码膨胀的时代,有几种方法可以支持持续集成,并处理技术债务的问题。我现在正在研究的一个非常有趣的途径是测试生成器。了解到 Diffblue 开发的一个新的人工智能工具,可以自动编写 Java 的单元测试(他们还提供了这个产品的免费社区版,是用 IntelliJ 创建的)。

而随着人工智能工具定期自动生成数以万计的测试单元,测试膨胀也即将来临,测试量将达到现在的 100 多倍。

现有的工具无法处理代码膨胀(当然,除了我们)

报告指出,85% 的受访者同意“现有的工具并不是为大规模处理大型代码库而设计的。”这也是我为 Incredibuild 自豪的原因之一,即我们顺势而为,以领先的技术高效应对代码膨胀。Incredibuild 让代码构建速度大幅提升。在自动化测试覆盖率大幅增长的趋势下,Incredibuild 也能完美地满足客户需求,以最快的速度实现最好的产品。

可以适当做些代码清理

除了用正确的技术武装自己(这正是我们在这里的目的),从技术来说,最好检查一下可否删除过时的代码。诚然,这需要相当多的努力和毅力,且不是每个人都能做到。有些情况不适合代码清理,或者根本不值得这样做。但在合适的情况下,代码清理还是值得一试。我知道很多开发人员都避免更新代码,因为害怕破坏代码(正如报告所示)。这种想法是可以理解的,但代码膨胀更让人害怕。

准备好了吗

理解代码膨胀是一件很重要的事情。代码就在这里,不断增长,它可能会对开发周期、发布时间、迭代频率和产品质量产生严重的影响。因此,大家需要在基础设施、工具和流程上进行部署、投资,以解决代码膨胀的问题,做好充分准备。

点击了解 Incredibuild 加速 C/C++ 构建编译的解决方案,并获取试用 License!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/784934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

困难样本挖掘:Hard Sample Mining

Hard Sample Mining Hard Sample Mining,即困难样本挖掘,是目标检测中的一种常用方法。其主要思想是针对训练过程中损失较高的样本(即那些难以被正确分类的样本)进行挖掘,并将其补充到数据集中重新训练,以…

【React】vite + react 项目,配置项目路径别名 @

vite react 项目,配置项目路径别名 1 安装 types/node2 在 vite.config.ts 中添加配置:3 配置路径别名的提示 使用 vite 开发 react 项目时,可以通过一下步骤配置路径别名: 1 安装 types/node npm i -D types/node2 在 vite.con…

LeetCode-560. 和为 K 的子数组【数组 哈希表 前缀和】

LeetCode-560. 和为 K 的子数组【数组 哈希表 前缀和】 题目描述:解题思路一:一边算前缀和一边统计。这里用哈希表统计前缀和出现的次数,那么和为k的子数组的个数就是当前前缀和-k的个数,即preSums[presum - k]。画个图表述就是&a…

无尘布擦拭过程中的问题及其解决方案

无尘布,作为一种广泛应用于电子、半导体、生物医药等领域的清洁材料,其质量和使用方式直接关系到产品生产的洁净度和质量。然而,在无尘布的擦拭过程中,常常会遇到一些问题,如接触不当的溶剂、胶水选择不当、产品收缩以…

内存管理--柔性数组

本次讲的是,柔性数组,如果哪位小博客想要了解的更多,可以登录下面这个网站,了解详细内容 C语言结构体里的成员数组和指针 | 酷 壳 - CoolShellhttps://coolshell.cn/articles/11377.html 我们就听说过数组,听说过柔性数…

游戏本笔记本更换@添加内存条实操示例@DDR5内存条

文章目录 添加内存条的意义准备工具设备拔出电源适配器并关机👺样机 内存条上的金手指安装过程Notes 安装后开机初次开机速度屏幕显示分辨率和闪烁问题检查安装后的效果 添加内存条的意义 参考双通道内存DDR5多通道内存-CSDN博客 准备工具 准备一个质量差不多的螺…

向量点乘有哪些作用呢

如下: 1.找到两个向量之间的夹角(不用多说) 2.求一个向量投影在另一个向量的投影: 我们把图中b的在a上的投影向量称作b1吧,因为b1就在a上,所以只需要求出b1的大小,然后乘以a的单位向量,我们就得到向量b1了…

Altair® Embed® 嵌入式系统的可视化环境

Altair Embed 嵌入式系统的可视化环境 Altair Embed 是一款成熟的工具,可从框图模型自动生成代码并将其传输到通用控制器硬件来开发嵌入式系统。 基于系统关系图创建工作仿真后,用户即可对硬件控制器自动生成相关代码,并通过硬件在环 (HIL)…

【BlossomConfig】SpringCloud项目是如何对bootstrap配置文件进行加载的?

文章目录 bootstrap配置文件的读取 网关项目源码 RPC项目源码 配置中心项目源码 bootstrap配置文件的读取 我们首先来了解一下springboot是如何做配置管理的。 了解了springboot对配置文件的管理,我们就能知道为什么springcloud类型的项目要使用bootstrap配置文件了…

美国RAKsmart:裸机云站群服务器配置详解

裸机云,也称为物理云,是一种云服务模式,它为用户提供了接近物理机性能的云服务器。而站群服务器,则是为了支持多个网站或应用程序的运行而设计的服务器。美国RAKsmart作为一家知名的云服务提供商,其裸机云站群服务器配…

Proteus 12V to 5V buck电路仿真练习及遇到的一些问题汇总

基础电路仿真实验记录贴!!!如有写的不对的地方欢迎交流指正!!! 平台:PC win10 软件:Proteus8.10 仿真目标:buck降压电路(PWM控制输出电压) 写在…

八皇后问题解决过程字符串可视化

查找到问题,暂停600毫秒, 穷举本行,200毫秒 返回上一层之前,会弹出回滚上一层(4,X),并暂停600毫秒 成功返回时,会弹出上一层具体数据如(4,3&a…

Java | Leetcode Java题解之第3题无重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution {public int lengthOfLongestSubstring(String s) {// 哈希集合&#xff0c;记录每个字符是否出现过Set<Character> occ new HashSet<Character>();int n s.length();// 右指针&#xff0c;初始值为 -1&#…

分治——归并排序算法

例题一 解法&#xff08;归并排序&#xff09;&#xff1a; 算法思路&#xff1a; 归并排序的流程充分的体现了「分⽽治之」的思想&#xff0c;⼤体过程分为两步&#xff1a; ◦ 分&#xff1a;将数组⼀分为⼆为两部分&#xff0c;⼀直分解到数组的⻓度为 1 &#xff0c;使…

【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

【Web应用技术基础】CSS(6)——使用 HTML/CSS 实现 Educoder 顶部导航栏

第一题&#xff1a;使用flex布局实现Educoder顶部导航栏容器布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Educoder</title><script src"https://cdn.staticfile.org/jquery/1.1…

EDM营销文案的撰写技巧?如何提升转化率?

EDM营销文案与SEO策略如何结合&#xff1f;怎么写有效营销邮件&#xff1f; EDM仍然是一种高效且经济的推广手段。撰写优质的EDM营销文案&#xff0c;不仅可以提升品牌形象&#xff0c;还能有效促进销售转化。那么&#xff0c;如何撰写出引人入胜的EDM营销文案呢&#xff1f;A…

KNN算法 | K近邻:KD Tree、球树、KNN数据下采样策略

目录 一. KNN算法实现方式1. 蛮力实现(brute)2. KD树(kd_tree)3. 球树(ball_tree) 二. KD Tree算法1. 构建方式2. KD Tree 查找最近邻 三. 球树(Ball Tree)1. 构建方式 四. KNN评价1. 优点2. 缺点 五. 延申1. KNN数据下采样策略策略1策略2策略3策略4 Condensed Nearest Neighbo…

Leo赠书活动-23期 【Python数据分析】文末送书

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

大模型遇上心理健康咨询:MeChat、QiaoBan、SoulChat、MindChat四大心理健康领域微调模型总结

HealthX AI 2023-09-18 08:05 江苏 以下文章来源于老刘说NLP &#xff0c;作者刘焕勇 老刘说NLP. 老刘&#xff0c;NLP开源爱好者与践行者。主页&#xff1a;https://liuhuanyong.github.io。老刘说NLP&#xff0c;将定期发布语言资源、工程实践、技术总结等内容&#xff0c;…