一种基于Graph Kernel的API使用示例选择方法

VSole2022-05-17 17:51:01

开发人员在编写代码的过程中,通常会希望知道某个API的具体使用方法(也就是使用示例)。过去的研究主要是通过聚类和总结的方法从代码库中提取相关的代码片段来生成示例代码,也就是说:将源代码转换成方法调用序列或特征向量;这种方法只对源代码的部分进行建模,因此容易产生不准确的示例。

在这篇文章中,作者将源代码表示为对象使用图,使用graph kernel进行图嵌入以进行聚类,通过排名从每个集群中选择一个代码表图来输出代码示例。模型相关内容详见:https://guxd.github.io/codekernel/。

图1是CodeKernel模型的应用场景。离线处理阶段的目标是选择代码示例:收集每个API相关的代码片段,使用CodeKernel模型选择对应的API使用示例。在运行过程中,给定一个API请求,系统会给出与该API对应的代码示例。

Fig. 1 CodeKernel模型使用场景

图2是模型的Workflow。模型的输入是一系列来自开源项目和代码搜索结果的原始代码片段。原始代码片段首先会被转换成对象图(如图3所示);然后使用graph kernel将其嵌入到连续空间中,得到内积矩阵;在内积矩阵上使用聚类算法进行图聚类(使用谱聚类算法);最后基于排序的方法从每个集群中选择代码图,将其还原为代码示例。

Fig. 2 模型Workflow

本文中,使用GrouMiner[1]构建函数级对象图。对象图包含文本、序列、结构和数据依赖的信息,忽略了语法细节,能够较为完整地表示源代码,是局部上下文不敏感的。

Fig. 3 对象图示例

Fig. 4 CodeKernel伪代码

聚类后的结果通过两种排序度量指标进行排序。

  • Centrality:从集群中选择的图与集群中的其他图要有很高的相似性,也就是高代表性。

  • Specificity:具有高代表性的图可能倾向于更大的图,因为它们更可能与其他图相似。但是,较大的图往往有更多的特定元素(即,在集群中很少出现的边),这使得代码示例难以理解。Specificity指标的目的是为了惩罚有太多特定边的图。

最终,排序分数通过如下公式计算得出。

Fig. 5 CodeKernel模型产生的代码示例

参考文献

[1] Nguyen T T, Nguyen H A, Pham N H, et al. Graph-based mining of multiple object usage patterns[C]//Proceedings of the 7th joint meeting of the European Software Engineering Conference and the ACM SIGSOFT symposium on the Foundations of Software Engineering. 2009: 383-392.

api对象图
本作品采用《CC 协议》,转载必须注明作者和本文链接
开发人员在编写代码的过程中,通常会希望知道某个API的具体使用方法(也就是使用示例)。过去的研究主要是通过聚类和总结的方法从代码库中提取相关的代码片段来生成示例代码,也就是说:将源代码转换成方法调用序列或特征向量;这种方法只对源代码的部分进行建模,因此容易产生不准确的示例。
一、前言 这篇文章可能出现一些文截图颜色或者命令端口不一样的情况,原因是因为这篇文章是我重复尝试过好多次才写的,所以比如正常应该是访问6443,但是截图中是显示大端口比如60123这种,不影响阅读和文章逻辑,无需理会即可,另外k8s基础那一栏。。。本来想写一下k8s的鉴权,后来想了想,太长了,不便于我查笔记,还不如分开写,所以K8S基础那里属于凑数???写了懒得删(虽然是粘贴的:))
K8s提权之RBAC权限滥用
2022-06-20 15:04:59
在K8s中RBAC是常用的授权模式,如果在配置RBAC时分配了“过大”资源对象访问权限可导致权限滥用来提权,以至于攻击者扩大战果,渗透集群。 如下是一些RBAC相关的笔记。
浅谈云安全之K8S
2021-07-14 05:06:00
Kubernetes 是一个可移植的,可扩展的开源容器编排平台,用于管理容器化的工作负载和服务,方便了声明式配置和自动化。它拥有一个庞大且快速增长的生态系统。Kubernetes 的服务,支持和工具广泛可用。
作为一只网安新人小白,在RCE方向上的求知经高人指点落脚在了Struts2上。
01 Bucket 公开访问 腾讯云存储桶的访问权限默认为私有读写权限,且存储桶名称会带上一串时间戳:
看到国内外不少机构在总结:“2020年最好的持续测试工具”,比如: ...... 还有的机构或公司试图给出“什么是持续测试?”的定义,比如: ....... 这说明,随着敏捷开发和DevOps的推广,持续测试这个概念确实越来越火...
Win32k组件最初的设计和编写是完全建立的用户层上的,但是微软在 Windows NT 4.0 的改变中将 Win32k.sys 作为改变的一部分而引入,用以提升形绘制性能并减少 Windows 应用程序的内存需求。窗口管理器(User)和形设备接口(GDI)在极大程度上被移出客户端/服务端运行时子系统(CSRSS)并被落实在它自身的一个内核模块中。
如今Node.js凭借其跨平台、高性能的JavaScript执行环境,被广泛应用于服务器端和桌面程序(如Skype)的开发。在过去几年中,有报道称其他动态编程语言(例如 PHP 和 Ruby)在共享对象方面是不安全的。然而,这种安全风险在 JavaScript 和 Node.js 程序中并没有得到很好的研究和理解。
在对电子投票和纸质投票的安全性进行比较的讨论中,隐私的减少通常是反对远程互联网投票的一种说法。
VSole
网络安全专家