软件工程硕士论文栏目提供最新软件工程硕士论文格式、软件工程硕士硕士论文范文。详情咨询QQ:1847080343(论文辅导)

基于程序分析的Pull Request审阅顺序生成研究

日期:2021年04月02日 编辑:ad201107111759308692 作者:无忧论文网 点击次数:940
论文价格:150元/篇 论文编号:lw202103291203223348 论文字数:26566 所属栏目:软件工程硕士论文
论文地区:中国 论文语种:中文 论文用途:硕士毕业论文 Master Thesis

本文是一篇软件工程硕士论文,本文研究了一种基于程序分析的 PR 修改的功能划分和审核顺序生成技术,首先介绍了已有的 PR 评估的影响因素,理解 PR 开发模式以及处理开发人员在使用基于 PR 模式开发时所面临挑战的相关工作,并介绍了 PR 审核顺序生成所需要的 Git 代码仓库相关技术和工具以及静态程序分析技术。然后详细介绍了从远程代码仓库提取 PR 的过程,同时为了保证核心存储库的安全性,基于主分支新建临时分支预合并 PR 中的文件修改以获得供程序分析技术执行的待分析程序。


第一章 绪论


1.1研究背景及意义

在软件工程开发中,规模较大的项目往往需要在多人协作的情况下进行。在实际开发时,为了不影响用户的正常使用,通常会在已经发布程序的基础上修改或添加新的功能,版本控制系统帮助软件开发团队跨时间和地点协同工作,并能存档开发工作的完整历史记录,使开发人员更加便利地进行软件的迭代开发。目前主流的版本控制系统已由集中式版本控制转变为分布式版本控制,在分布式版本控制系统中,每个开发者可以在本地建立一个独立的代码仓库,各种版本管理的操作可以依靠版本控制系统在本地完成。其中 Git 是一个目前被广泛使用的分布式版本控制系统,并且依托于 Git 开发出了很多代码托管平台,如 GitHub、Gitlab和 Gitee 等[1-2]。通过这些代码托管平台,开发者可以在个人分支上进行独立开发,当完成开发任务之后,开发者通过建立合并请求申请将修改的代码合并到主分支上,在请求合并时审查人员会对提交的代码进行代码审查,确保代码的质量,如果审核人员审核通过合并请求,则个人的修改会被合并到项目的核心分支。

这种基于 Pull Request(PR)的开发模式[3]在现代协作编码平台上广受欢迎,例如GitHub[4-5]。它为开发者对项目作出代码贡献提供了便利,降低了独立开发者参与项目开发的门槛。在这个模式中,开发人员无需直接访问项目的中央储存库就能对项目作出贡献。他只需要从中央存储库建立独立的个人分支(即创建个人的克隆仓库)、在个人的克隆仓库进行更改(例如修复一个错误或添加一个全新的功能),并通过建立 PR 请求将更改提交到中央存储库。通常,PR 将通过持续集成服务进行测试,并在将最新代码合并到核心中央存储库之前,由开发团队的核心成员(或审阅者)进行代码审核[6]。

..................


1.2国内外研究现状

分布式软件开发的目标是允许开发人员在地理位置不同和时区分散的情况下处理同一软件产品[7]。通过引入在线协作工具,例如源代码版本控制系统,促进了分布式软件开发技术的广泛使用[8-9]。分布式软件开发方法的主要特点在于将请求的一组更改集成到项目代码库中的过程。随着协作工具的成熟并且为了适应不断变化的开发需求,这种将代码更改集成的过程已经经历了多个发展阶段。例如,Mockus 等人[10]分析了两个早期的 OSS 社区:Mozilla 和Apache,并确定了评估代码贡献的常见模式,即先提交然后审查的过程。作为替代方案,Apache社区还通过邮件列表修改提交来进行提交请求的审核。江等人[11]分析了 Linux 内核项目中的修改提交和接受情况,该项目使用的是基于 pull 的初步开发模型。

随着版本控制系统的成熟,分布式版本控制成为了目前主流的版本控制系统,基于 PR的开发模式已经被全世界的开发团队广泛使用。现有的和 PR 相关的研究工作主要有三个方面:理解基于 PR 的开发模式,影响 PR 评估的因素,以及处理开发人员在使用基于 PR 模式的开发时面临的挑战。在理解基于 PR 的开发模式方面,Gousios 等人[12]分析了拉取型开发模式的流行特点,研究了 PR 的生命周期和处理请求的时间,并探讨了哪些因素影响审阅者合并拉取请求,同时研究了合并请求被拒绝的原因,发现技术原因仅是其中的一小部分。而在他们接下来的工作中,Gousios 等人[13-14]进行了大规模的调查,以研究如何整合审核管理者(负责合并集成 PR的人)和贡献者(合并请求的提交者)在基于 PR 的开发模型中进行协作。他们首先强调了审核人员所面临的挑战,如在合并 PR 时保持项目质量使核心代码库不受到错误代码的污染和确定外部贡献者的优先次序,其次也表明了项目贡献者面临的挑战,如对项目的一些方面不够了解以及来自审核人员对提交的合并请求响应性差等情况。

......................


第二章 相关背景知识介绍


2.1静态程序分析

程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过对程序代码进行扫描,验证代码是否满足规范性、安全性、可维护性等指标的一种代码分析技术[25]。常用的静态程序分析技术主要有控制流分析、数据流分析和抽象语法树分析等,本小节接下来会详细介绍本文中主要使用到的程序静态分析方面的相关技术。

2.1.1 数据流分析

数据流分析是常用的分析模式之一,可以从程序中收集语义信息,并通过不断地迭代使得语义信息集合达到稳定来确定变量的定义和使用的情况[26]。数据流分析不实际执行代码,而是由静态代码来推断程序动态执行时的相关信息,它能从代码中收集程序中的语义信息,并在编译时确定程序中变量的使用和定义。由于数据流分析能够由静态分析发现程序运行时的行为,所以被广泛用于解决编译优化、程序验证、测试、向量化等问题。

在数据流分析中,将程序点和与可能观测到的状态集合的抽象表示关联起来,这种抽象表示称为数据流值[27]。在所有的数据流分析应用中,我们都会把每个程序点和一个数据流值(data-flow value)关联起来。这个值是在该点可能观察到的所有程序状态的集合的一种抽象表示。例如对于语句 s,其前后的数据流值可以分别记为IN[s]和OUT[s]。语句潜在约束了该语句之前的程序节点状态以及语句之后程序节点状态的关系,即约束了IN[s]和OUT[s]之间的关系,整个程序由这些约束来限定,数据流分析的实质就是对一组约束进行求解。

图 2.1 数据流分析图

.........................


2.2代码仓库

Git 是目前世界上最先进的分布式版本控制系统[33]。其主要特点是每个开发者都拥有个人的本地仓库,同时个人的版本控制系统中包含该项目文件的历史提交及修改记录,存储项目的所有数据。每个相对独立的版本控制系统之间可以进行通信,在很大程度上解决了单一节点故障,离线提交等问题。Git 代码仓库是由 Git 工具生成的代码仓库。

2.2.1 基于 Pull Request 开发模式

代码评审(Code Review)是极限编程中用来保障代码质量的有效方式。而基于Pull Request(PR)的开发模式,在 GitHub 网站作为分布式代码协作的一种模式被成功运用之后,也很快成被很多开发团队广泛使用。在这种开发模式中,只有当请求合并的 PR 被项目审阅者通过时,代码才会被合并到项目的核心存储库。

图 2.6 Github 上基于 PR 进行开发示意图

........................


第三章 基于程序分析的审核顺序生成 ................ 18

3.1总体概................ 18

3.2获取待分析程序....................... 19

第四章 实验与结果分析...................... 29

4.1实验环境............................... 29

4.1.1 硬件环境 ............................... 29

4.1.2 开发环境 ......................... 29

第五章 总结与展望...................... 39

5.1总结.................... 39

5.2展望................................. 39


第四章 实验与结果分析


4.1实验环境

4.1.1 硬件环境

本实验的主机配置为:英特尔酷睿 [email protected] 双核处理器。安装操作系统为 64位的 win10 系统,运行内存 8G。使用阿里云服务器一台,主要用于存放数据库,数据库版本为 Mysql5.6,云服务器的操作系统为 Centos7.3 64 位,分配了 2G 内存和 1 核 CPU,当前使用带宽 1Mbps。

4.1.2 开发环境

本实验基本使用面向对象 Java 语言开发,使用的 Jdk 版本为 1.7,使用程序静态分析框架 Soot 进行数据流分析,以及基于 Soot 框架扩展的 flowdroid 来生成程序间流图。集成开发环境为 IntelliJ IDEA,在项目的管理方面,采用 Maven 工具来管理项目的依赖关系,并使用Mybatis 框架连接数据库。在实验过程中安装软件 Git 并配置其环境变量,使用开源工具 Jgit进行代码仓库相关操作。

.......................


第五章 总结与展望


5.1总结

本文研究了一种基于程序分析的 PR 修改的功能划分和审核顺序生成技术,首先介绍了已有的 PR 评估的影响因素,理解 PR 开发模式以及处理开发人员在使用基于 PR 模式开发时所面临挑战的相关工作,并介绍了 PR 审核顺序生成所需要的 Git 代码仓库相关技术和工具以及静态程序分析技术。然后详细介绍了从远程代码仓库提取 PR 的过程,同时为了保证核心存储库的安全性,基于主分支新建临时分支预合并 PR 中的文件修改以获得供程序分析技术执行的待分析程序。

接下来详细介绍了对 PR 中修改的文件生成审核顺序的方法,对于待分析程序,基于静态程序分析选择传递方式生成调用关