McCabe 度量法,也被称为循环复杂度(Cyclomatic Complexity),是由 Thomas J. McCabe, Sr. 在 1976 年提出的一种软件程序复杂度的量度方法。循环复杂度是一种量化代码复杂度的方式,主要用于衡量一个程序单元(如函数、方法、模块等)的复杂度。它通过测量程序中线性独立路径的数量来实现,这个数量由程序的控制流图中的边、节点和连通分量决定。
腾讯安全科恩实验室《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》论文入选人工智能领域顶级学术会议AAAI-20。研究核心是利用AI算法解决大规模二进制程序函数相似性分析的问题,本文将深入对该论文进行解读,点击链接获取完整论文。
活动图可以看成是面向对象版的流程图,它是一种行为型模型图,主要用于表达系统某个功能的流程。活动图的作用是描述一系列具体动态过程的执行逻辑,展现活动和活动之间的转移的控制流,并且它采用了一种着重逻辑过程的方式来叙述。
McCabe方法是计算软件复杂度的一种方式,主要通过计算程序的控制流图(Control Flow Graph, CFG)中的环路数量来衡量代码的复杂度。其核心指标是环形复杂度(Cyclomatic Complexity),用于评估一个程序的复杂度及其可测试性和可维护性。具体计算公式如下:
根据程序流程图,完成: (1) 画出相应的程序控制流图; (2) 给出控制流图的邻接矩阵; (3) 计算 McCabe 环形复杂度; (4) 找出程序的一个独立路径集合。
概述 基路径测试(Basis Path Testing)是一种白盒测试技术,旨在确保代码的每条独立路径都被执行至少一次。这种方法基于控制流图(CFG),通过分析图中的独立路径来设计测试用例。
C2编译器即Op to Compiler,又叫Server Compiler,它的定位与C1相反:C1面向客户端程序,需要快速响应用户请求;C2面向长期运行的服务端程序,它允许在编译上花更多时间,以此换取程序峰值执行性能。本章将详细讨论大名鼎鼎的C2编译器(后面简称C2)。
上一篇文章我们已经讲述了JIT编译器的基本原理,今天我们看一下HotSpot虚拟机中具体的编译器。
对简单的程序流程而言,确定程序的路径有多少条可通过:语句覆盖(覆盖率100%);分支(判定)覆盖(覆盖率85%);条件覆盖;分支-条件覆盖;条件组合覆盖;路径覆盖(覆盖率80%)来确定,这也是白盒测试的主要技术。
基本块是连续三地址状态的最大序列,其中控制流只能在块的第一个语句中输入,并在最后一个语句中停留,而不会停止或分支。
读论文有一种原则是:本领域最经典的论文,近5年最热的论文,近1年最新的论文。按照这个原则,本文主要介绍一篇Tensorflow 经典论文 Implementation of Control Flow in TensorFlow。
UML:Unified Modeling Language,即统一建模语言,简单地说就是一种有特殊用处的语言。本文是我初步学习UML的学习笔记,对于我们菜鸟码农来说,让我们做设计的可能性不大,但至少能看懂是必要的。
for (i=1; i < array_size; i++) { index = numbers[i]; j = i; while ((j > 0) && (numbers[j-1] > index)) { numbers[j] = numbers[j-1]; j = j - 1; } numbers[j] = index; } }
事件流除了用文本形式来表示外,还经常用活动图来表示。为什么有了文本形式以后还要开发这种框图形式呢?这是因为利用文本形式虽然很有用,但是如果事件流逻辑复杂,则文本形式比较难阅读和理解,利用框图将比文本形式来得更加有效。
正如之前看到的,C1的HIR是一个基于静态单赋值的图IR,由基本块构成控制流图,由静态单赋值指令构成基本块,如图8-1所示。
11月19日,在软件绿色联盟开发者大会开源与跨平台开发分论坛上,史宁宁发表了主题为《拥抱方舟开源编译器:Maple IR 分析及 Toy Runtime 介绍》的演讲,基于方舟编译器已经开源的代码和文档,对方舟编译器的IR的设计以及具体实现做介绍和分析,并将其设计与LLVM、Open64做简要的横向对比。同时,对基于方舟编译器IR的Phase体系做分析,展示其针对IR的转换和优化。除此以外,还对Toy runtime的基本情况进行介绍。本文内容主要有五个部分:
它是度量测试完整性的一个工具,通常可以分为逻辑覆盖和功能覆盖。覆盖率 =(被执行到的项数/总项数)* 100%
圈复杂度(Cyclomatic complexity,简写CC)也称为条件复杂度,是一种代码复杂度的衡量标准。由托马斯·J·麦凯布(Thomas J. McCabe, Sr.)于1976年提出,用来表示程序的复杂度,其符号为VG或是M。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和 维护。程序的可能错误和高的圈复杂度有着很大关系。
在软件开发中,代码的复杂性是一个重要的考量因素。圈复杂度是一种用于衡量代码复杂性的指标,它可以帮助开发者评估代码的可读性、可维护性和可测试性。本文将详细介绍圈复杂度的概念,并提供几种降低圈复杂度的方法。同时,我们还将探讨如何在前端开发中使用ESLint和VS Code工具来设置和检测圈复杂度。
因为工作需要用到oozie,但是网上的资料越看越迷茫,经过很大的努力,终于折腾清楚了,这里,做一个总结,帮助后来者更好地进行入门,当然,粗鄙之言,难免疏漏,欢迎交流指正。
flowdroid是一款对Android app进行风险分析的应用,下面深入其源码对其工作的流程进行相关的探究。 1、准备 a)下载相关源码(包括soot、heros、jasmin、soot-info
java作为解释型的语言,其高度抽象的特性意味其很容易被反编译,容易被反编译,自然有防止反编译措施存在。今天就拜读了一篇相关的文章,受益匪浅,知彼知己嘛!!
Java 作为解释型的语言,其高度抽象的特性意味其很容易被反编译,容易被反编译,自然有防止反编译措施存在。今天就拜读了一篇相关的文章,受益匪浅,知彼知己嘛!!之所以会对 Java 的反编译感兴趣,那是因为自己在学习的过程中,常常需要借鉴一下别人的成果(你懂的...)。或许反编译别人的代码不怎么道德,这个嘛......废话不多说,正文如下:
Oozie英文翻译为:驯象人。一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop MapReduce、Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。主要用于定时调度任务,多任务可以按照执行的逻辑顺序调度。
java作为解释型的语言,其高度抽象的特性意味其很容易被反编译,容易被反编译,自然有防止反编译措施存在。今天就拜读了一篇相关的文章,受益匪浅,知彼知己嘛!!之所以会对java的反编译感兴趣,那是因为自己在学习的过程中,常常需要借鉴一下别人的成果(你懂的...)。或许反编译别人的代码不怎么道德,这个嘛......
圈复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度的一种措施。它根据程序从开始到结束的线性独立路径的数量计算得来的。
目前很多技术都被涉及了,也有很多的技术被挖掘出来,但是很多人对技术不是这么了解的,可能会吃亏,比如说目前挺火的黑客技术还有反编译技术都是属于很多了解却不是这么熟悉的技术,下面我根据自已的一些见解跟想了解技术或想认识一些新的知识介绍黑客与反编译的技术,以及他们的一些涉及领域。希望对大家的见知有所了解。 首先,由于java字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种常用的方法,用于保护java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自
活动图是UML中一种行为图,它展示了控制流和对象流,并且强调它们的顺序和条件控制流。 下面换种方法,通过引入uml官方例子同时介绍活动图里面元素。
一种新的图匹配网络,在几个图相关任务中均胜过精心设计的神经网络模型和基于标准GNN的图嵌入模型。
活动图(activity diagram)是阐明了业务用例实现的工作流程。业务工作流程说明了业务为向所服务的业务主角提供其所需要的价值而必须完成的工作,业务用例由一系列活动组成,他们共同为业务主角生成某些工件。工作流程通常包括一个基本的工作流程和一个或多个备选工作流程。工作流程的结构使用活动图来进行说明。
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
过去的几年里推动机器学习技术稳步发展的根本性改变之一是训练和优化机器学习模型的巨大计算力。许多技术都是很年前就已经提出,唯有近几年提升的计算力可以为现实世界的问题提供足够优质的解决方案。这些计算能力的很大一部分是通过 GPU 获取的,其针对向量的计算能力最初是为图形而设计的,但机器学习模型通常需要执行复杂的矩阵运算,因此 GPU 同样表现出了非常好的性能。
学习 UML 的目的是帮助我进行需求分析,CRUD 谁都会写,那是建立在数据库和业务需求都明确的基础之上的,所以这些基本功还是要掌握的。
TensorFlow是Google公司开源的分布式机器学习框架。它的前身是DistBelief,在Google大规模内部使用。TensorFlow最早由Google Brain研究组发起。
由于实时场景对可用性十分敏感,实时作业通常需要避免频繁重启,因此动态加载作业配置(变量)是实时计算里十分常见的需求,比如通常复杂事件处理 (CEP) 的规则或者在线机器学习的模型。尽管常见,实现起来却并没有那么简单,其中最难点在于如何确保节点状态在变更期间的一致性。目前来说一般有两种实现方式:
移动应用代码安全非常重要,代码逆向会导致代码逻辑被获取,进一步导致控制流被hook,安全防线被破,给APP安全带来巨大风险,因此开发者一般都会进行代码混淆保护。本文主要介绍了代码混淆的原理、方法、以及常见代码混淆的方式和工具。
DeepMind 和谷歌的这项新研究聚焦检索和匹配图结构对象这一极具挑战性的问题,做出了两个重要贡献。
循环复杂度(Cyclomaticcomplexity)也称为条件复杂度,是一种软件度量,是由老托马斯·J·麦凯布(英语:ThomasJ.McCabe,Sr.)在1976年提出,用来表示程式的复杂度,其符号为VG或是M。
最近一直在学习Android加固方面的知识,看了不少论文、技术博客以及一些github上的源代码,下面总结一下混淆方面的技术,也算是给想学习加固的同学做一些科普,在文中讲到的论文、资料以及源码,我都会给出相应的链接,供大家进一步去深入学习。后面我会弄成一个系列的文章,如有一些混淆技术没讲到,还希望大家指点,当做是交流学习。
打开CMD,运行javac HelloWorld.java,得到一个对应的class文件
设想一下,当你的系统引入了spark或者hadoop以后,基于Spark和Hadoop已经做了一些任务,比如一连串的Map Reduce任务,但是他们之间彼此右前后依赖的顺序,因此你必须要等一个任务执行成功后,再手动执行第二个任务。是不是很烦! 这个时候Oozie(驯象人,典故来自评论一楼)就派上用场了,它可以把多个任务组成一个工作流,自动完成任务的调用。 简介 Oozie是一个基于工作流引擎的服务器,可以在上面运行Hadoop的Map Reduce和Pig任务。它其实就是一个运行在Java Serv
基本块的定义:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句。
UML定义了5类,10种模型图: 1.用例图:从用户角度描述系统功能,并指各功能的操作者。 2.静态图:包括类图,包图,对象图。 类图:描述系统中类的静态结构 包图:是包和类组成的,表示包与包之间的关系,包图描述系统的分层结构 对象图:是类图的实例 3.行为图:描述系统动态模型和对象组成的交换关系。包括状态图和活动图 活动图:描述了业务实现用例的工作流程 状态图:是描述状态到状态控制流,常用于动态特性建模 4.交互图:描述对象之间的交互关系 顺序图:对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互 合作图:描述对象之间的协助关系 5.实现图: 配置图:定义系统中软硬件的物理体系结构
控制流完整性 (Control-Flow Integrity) 是一种针对控制流劫持攻击的防御方法。控制流的转移是以跳转指令为基础的,因此在这一节先介绍跳转指令的相关知识。
前置条件:版本有数据,关联源码可在代码视图有显示源码,并且在简易控制流程图的分支块有具体语句显示,有覆盖率数据,可在简易控制流程图显示当前覆盖到的块信息。
例题:void Sort ( int iRecordNum, int iType)
并行性是指计算机系统具有可以同时进行运算或操作的特性,在同一时间完成两种或两种以上工作。并行性等级可以分为作业级或程序级、任务级或程序级、指令之间级和指令内部级。
本文主要介绍vivo内部研发平台使用JaCoCo实现测试覆盖率的实践,包括JaCoCo原理介绍以及在实践过程中遇到的新增代码覆盖率统计问题和频繁发布导致覆盖率丢失问题的解决办法。
领取专属 10元无门槛券
手把手带您无忧上云