有没有证据表明存在连锁反应?

2023-10-18 13:30

本文主要是介绍有没有证据表明存在连锁反应?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

该博客一直在讨论涟漪效应管理 (或缺乏涟漪效应管理 )及其确定源代码结构的质量。 涟漪效应-在一处轻轻地打磨代码会产生摆动和裂缝,并在远处产生广泛的崩溃崩溃-于1974年定义,此后一直指导着结构上的辛劳。

但这真的存在吗?

或者更确切地说:存在连锁反应的证据在哪里? 您将如何收集此类证据?

假设您有100个玻璃弹珠:40个红色和60个蓝色。 不,不是蓝色:黄色。 您将它们扔在地板上,闭上眼睛,随机捡起一只。 您选择的大理石是红色的概率是多少?

如果回答“ 0.4”或“ 40%”,那就做得很好:您掌握了概率论。 更换大理石并重复实验10,000次:您会发现选择历史与初始比率非常接近:也许是4095红色到5905黄色。 喜欢大数定律。

暂时更改实验原因很简单:假设您现在拥有10,000个分散的大理石-4,000个红色,6,000个黄色-而不是选择一个大理石,而是随机选择200个大理石并将它们放在一个袋。 该样品中有多少比例是红色大理石?

是:大约40%。 这与执行200次单一选择的确没有什么不同:如果有40%的机会选择红色大理石,那么(几乎很少(尽管很少))您包中的大理石有40%将是红色的。

现在,考虑一种调用另一种方法的方法,即依赖于另一种方法。 让我们将不依赖于任何其他方法的所有方法称为“子方法”,并将不依赖于任何其他方法的所有方法称为“父方法”。 因此,在图1中,只有a()是子方法。

图。1
图1:main()和Wonder()是父方法,a()是子方法。

假设您有一个由10,000个方法组成的系统,其中40%是父方法,而60%是子方法。 随机选择200种方法。 您选择的父子方法的比例是多少?

是:大约40%的方法将是父方法。 这是与上面的大理石袋相同的实验。

到目前为止,总延误了,对吧?

但是,现在让我们检查一下随着时间的推移发行的一些实际Java软件系统,并在每个后续发行版中选择许多方法。 但是,我们不会随机选择。 相反,我们将选择在该版本中更新的那些方法。

程序员出于多种原因更新方法,但是很少有会议以“快速! 我们需要更新300个父方法-我们将选择哪些方法?” 因此,如果我们选择发行版的更新方法,那么选择本身当然不是随机的,因为程序员不会坐在他们的裤子里掷硬币来选择要更新的方法。 但是他们也没有明确选择是父母还是孩子,因此选择父母还是孩子应该是随机的,因为心理平衡的程序员不在乎。 如果一个版本包含40%的父方法和60%的子方法,那么我们应该期望看到这些比例大致反映在该版本中更新的方法集中:40%的更新方法应该是父方法,60%的更新方法应该是父方法应该是子方法。 大致。

但是,纹波效应预示了一些不同的结果。

涟漪效应涉及到相关性,即“……变化和错误可以沿着这些路径传播到系统其他部分的路径”。 由于从父母到孩子的直接依赖性是最强的依赖性,如果存在连锁反应,则涟漪效应预测,在一组更新方法中,对父母会有轻微的偏见:与子方法相比,将更新更多的父母。 这是因为虽然父方法和子方法都可以独立更新,但由于子方法的更新,父方法被更新的可能性要大得多(反之亦然)(因为父方法取决于子方法,反之亦然) 。

当然,如果在更新的版本中对父母没有偏见,那么我们甚至有证据表明实际上不存在连锁反应,并且可以将40年的软件结构装在黑色塑料袋中,放在河里。

图2显示了Apache Maven核心jar文件的21个连续发行版。 红线显示在任何给定发行版中,作为父方法的Maven方法的百分比,这也是该发行版的更新方法中被预测为父方法的百分比。 蓝线显示每个版本中实际上是父方法的更新方法的百分比。

如果存在波纹效应,则蓝线应高于红色。

结果
图2:父更新占每个Maven版本中所有更新方法的百分比。

哇。

这不只是一点偏见。 父方法在Maven更新方法中所占的比例要比父母和子方法共享相同的更新概率时所期望的比例大得多。

但是,也许Maven有点奇怪? 我们需要检查完全独立的软件项目中成千上万种方法的修订,以得出任何结论。 幸运的是……

图3显示了FitNesse的 19个连续发行版本。

适应度结果
图3:每个FitNesse版本的父更新占所有更新方法的百分比。

图4显示了JUnit的 13个连续发行版。

联合结果
图4:父更新占每个JUnit版本中所有更新方法的百分比。

图5显示了Apache log4j核心jar文件的21个连续发行版。

log4j结果
图5:父更新占每个Log4J版本中所有更新方法的百分比。

图6显示了Apache Lucene核心jar文件的25个连续发行版。

lucene结果
图6:父更新占每个Lucene版本中所有更新方法的百分比。

图7显示了Spring核心jar文件的21个连续发行版。

Spring核心结果
图7:父更新占每个Spring版本中所有更新方法的百分比。

图8显示了Struts的 19个连续发行版。

结果
图8:父更新占每个Struts版本中所有更新方法的百分比。

摘要

没有人会严重怀疑是否存在涟漪效应,而所有这些事实的确是显而易见的。 此外,以上内容并不提供证据,而是相关性(而且,相关性还面临许多有效威胁)。 然而,作为所有语法软件结构化基础的基础,即使是未经改进的相关性有时也会使仅说“令人眼花obvious乱”的说法令人信服。

在先前的一篇试图显示比较依赖分布的结构效用的文章中,优秀的Paul Hanchett发表了有见地的评论,指出耦合(方法调用方法)“……” 可能在代码段之间引入不利的依赖。 您要避免的就是这种依赖性,而不是耦合。”

这篇文章试图找出仅依赖于一种方法与由于这种依赖而导致更新的可能性增加之间的相关性。 因此,除非保罗反对,否则我们将其命名为“汉切特相关性”。

版权所有(C)Edmund Kirwan 2008-2016。 版权所有。

翻译自: https://www.javacodegeeks.com/2016/05/evidence-ripple-effect.html

这篇关于有没有证据表明存在连锁反应?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/232868

相关文章

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

LeetCode题练习与总结:存在重复元素Ⅱ--219

一、题目描述 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [1,2,3,1], k = 3输出:true 示例 2: 输入:nums = [1,0,1,1], k

【MobaXterm 远程连接工具】Windows下有没有xshell的更好的替代品?

每次间隔一段时间,xshell 总是提醒需要更新,很烦,点更新又没有用。 xshell 官方下载地址: https://xshell.en.softonic.com/ 本文要隆重推出一款集万千于一身的全能型终端神器——MobaXterm!这款神器是我师傅介绍给我的,在我第一次使用它的时候,就深深爱上它了,真的是相见恨晚,从此一发不不可收拾,自己电脑,公司电脑全部都安上了这款神器。 先说说这款

用友UFIDA NC portal/pt/file/upload接口存在任意文件上传漏洞 附POC

@[toc] 用友UFIDA NC portal/pt/file/upload接口存在任意文件上传漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 用友UFIDA NC 简介 微信公众号搜索:南风漏洞复现文库 该文

mongodb document使用的数据结构中存在List结构导致查询速度异常缓慢

最近使用的mongodb 数据库,项目中查询某个列表异常缓慢,甚至造成cpu突然上升,后经过排查,发现  ,因为文档中存在List结构的数据,所以造成查询异常缓慢,以后使用mongodb数据库的项目,慎用list结构,一部小心就是一个大坑

java常用算法之返回目标数字在有序数组中的位置(假设有序数组中不存在重复数字)

/*** @Description 返回目标数字在有序数组中的位置(假设有序数组中不存在重复数字)* @param source* @param target* @return*/public static Integer numIndex(int[] source, int target) {int index = 0;if (source == null || source.length =

示波器测量晶振有没有起振

表笔打到10x 示波器打到10x 然后measure  频率即可得出