高端响应式模板免费下载

响应式网页设计、开放源代码、永久使用、不限域名、不限使用次数

什么是响应式网页设计?

2024年优质软件开发的优服务(合集3篇)

优质软件开发的优服务 第1篇

在这个部分我们介绍一下开源成分(即 Open-Source Components [10])治理。前面讲到的缺陷分析领域,更多是针对程序员自己开发出来的代码来分析,看里面是否有各种类型的问题。而开源成分更主要是围绕程序员在开发的过程中,可能大量复用的外部第三方的开源成分。

现代软件开发中开源成分的使用比例与日俱增,业界关注度也越来越高。那么,结合了开源成分的代码应该如何进行质量的保障?其实这也是需要通过一系列的智能化开发服务,或者软件分析服务来做到的。

那么,在开源成分治理领域,相关的云服务厂商正在做哪些实践呢?

Microsoft Azure - Github Dependabot

我们还是先来看一下微软的 Azure。微软在 Github 上通过 Dependabot [11] 服务,针对代码仓里用到的三方库成分进行扫描。具体来讲,Dependabot 会先扫描出来代码仓里具体依赖了哪些三方库的成分,然后针对 Top 级的或者一些已知的漏洞列表,进行漏洞的关联和预警。

​在这个过程中,结合漏洞扫描的数据,Dependabot 还可以推荐一些漏洞修复建议,引导程序员更快地去修复掉带有漏洞的库。

阿里云 - CodeUp

阿里云的 CodeUp 也在做类似的事情。

当前 CodeUp 主要是针对系统层面的中间件级别做成分分析,比如服务器层面的基础设施是否存在安全隐患,还没有在代码层面上展开工作。如果某一个特定中间件的某个特定版本存在漏洞,CodeUp 会及时给出预警。这也是阿里云整个基础设施里比较关键的一部分功能,能够为客户的 server 层面、虚拟机层面的安全能力进行保驾护航。

Web 扫描器

仅支持检测在云安全中心防护范围内(即已安装云安全中心 Agent)可以访问公网的服务器,支持阿里云和非阿里云的服务器。

Web 扫描器

服务器组成成分分析

支持检测云安全中心防护范围内的阿里云和非阿里云服务器;防护范围非常有限,能力处于初级阶段。

服务器组成成分分析

腾讯云 - WePack 制品扫描

腾讯云 WePack [12] 提供了制品扫描的能力,扫描的对象更多是针对编译后的编译包。

WePack 制品仓库目前支持的制品类型

WePack 通过对解压缩后的二进制组件进行审视和定位,找出每个组件到底是来自于哪个开源社区的开源项目。在定位出来之后,WePack 会对组件进行漏洞关联,并针对高危的和一些中危的漏洞进行提示,帮助程序员更快地发现组件里的漏洞信息,并及时修复。

制品扫描支持制品类型,以 Maven 为例

小结

软件中开源成分与日俱增(开源成分比例 70%+,WhiteSource 20 年报告 [13]),开源成分管理成本日益严峻,亟需工具支撑

Gartner 2020 报告 [14] 预计到 24 年,50% 的软件客户都需要软件提供商提供软件 BOM 清单。SCA 能力将会越来越普遍的得以应用,成为刚性服务

主流云服务厂商,目前大部分已涉足该领域,但目前提供的技术还处于早期阶段,待进一步完善增强,进一步确认了该研究方向的投资价值和必要性

Github 提供了库升级助手、阿里云提供了漏洞预警服务等,进一步确认了该项目关键技术路径(基于开源社区数据进行库升级替换模式挖掘、库移植场景代码自动化适配等)的合理性

那在完成了相关技术的梳理之后,我们来看一下华为云正在做哪些技术实践。

优质软件开发的优服务 第2篇

接下来,围绕开源治理方面。我简单介绍一下我们做了哪些探索。

我们当前重点投入的是 三方库相关的问题诊断和修复,即因三方库存在的漏洞,或其他方面的问题,导致项目中不能继续使用的情况下,我们该如何快速地进行升级或替换。

移动应用智能移植(from GMS to HMS)

背景挑战

我们先看一个初步的尝试。

由于一些市场因素,华为终端需要打造 HMS(即 Huawei Mobile Service)生态。在这个过程中,存在一个问题,即海外市场的应用大部分都是基于 GMS(即 Google Mobile Service) 开发的,那么现有的应用如何才能够快速迁移到 HMS?我们不能够要求程序员重新写一套应用,所以我们希望给开发者提供一个比较快捷高效的工具,帮助他们将基于 GMS 的应用快速迁移到 HMS 生态。

问题分析与解决

针对这个问题场景,我们与华为内部多个部门,联合打造了一个移动应用智能移植应用。该应用的主要架构如下图所示,假设我们存在一个待转换的 GMS 应用,第一步需要在应用内部识别出它调了哪些 GMS 接口,然后在 GMS SDK 层面将调用的接口自动对应到 HMS SDK 上,并自动化地将 HMS SDK 上相应的 API 适配到应用的接口调用处,从而完成整个的转换。

完成结果

该应用作为 HMS Toolkit 里的核心能力之一,已在 2020 年正式发布,帮助我们更快地构建 HMS 生态。欢迎大家到下面的地址了解并试用:

全面开放 51 项服务 885 个 API

不可信三方库的智能移植

GMS 到 HMS 只是一个库的移植,我们可以将上一个工作的移植能力泛化到开源三方库的治理上,提供有风险的三方库自动化修复能力,这就是我们当前正在做的一个工作。

我们收集了大量开源项目代码仓的数据,基于这些代码仓的原始数据构建开源项目知识图谱,例如某个项目发布了哪些版本,哪个版本对应的是哪个 commit,每个 commit 发布 API 有哪些,这个项目中使用了哪些三方库等。当所有代码仓的关联关系构建起来后,我们就可以在上面做很多数据挖掘的工作。比如,我们可以针对业界主流库的一些低版本或有漏洞的版本做挖掘,看看社区是如何修复的漏洞,或者用到了哪些库来替换这些有风险的库。

核心技术点 1:开源库替换模式挖掘技术

这就是我们在做的第一个工作,即找出库之间的替换模式,从而为后续风险三方库的替换及修复带来一些洞察。

Approach

我们的大概思路如下图示。针对每个开源项目的历史做挖掘过滤,计算出每一个项目的三方库演进历史(即项目的依赖变更序列)。得到变更序列之后,引入序列模式挖掘算法。在这个过程中,我们会结合一定的指标对结果进行过滤,包括热门库识别、时间修正等,从而保证模式的准确率。

开源库替换模式挖掘技术

目前我们已经挖掘到 1400 多个有效的替代模式,这个工作在 2020 年中国软件大会上获得了三等奖。

Implementation

我们在 SANER 2021 上发表了 “A Multi-Metric Ranking Approach for Library Migration Recommendations”,在前面工作思路的基础上,引入了更多的指标来做数据过滤。下图是这个工作的实现:

A Multi-Metric Ranking Approach for Library Migration Recommendations [18]

开源世界里的数据非常大,如何进行有效过滤,发掘出真正有价值的数据,这其实是一个非常有挑战的事情。我们在过滤环节进行了深入的探索,引入了很多指标来帮助过滤,这些指标汇总为一个洞察库。基于洞察库,我们孵化了一个网站:

下图是洞察库当前的进展。大家可以看到,这个洞察库一直在持续地演进和增强,网站页面会实时显示由 experts 确认后的 Migration 建议。用户可以在这个网站查询到,一些已知的风险三方库,业内大部分人迁移到了哪个三方库上。我们通过数据挖掘的方式提供给大家一些建议,从而提高开发者修复风险三方库的效率。

核心技术点 2:库替换场景 API 适配模式挖掘技术

有了替换模式其实还不够,当你把一个库 A 替换到库 B 之后,问题来了,这个两个库之间的 API 可能是不兼容的,这种情况下我们应该怎么办?我们基于前面的挖掘工作进行了进一步的探索,即库替换场景下的 API 适配模式挖掘。

这个工作也需要基于历史数据来挖掘,即当这个库发生变化和迁移时,我们尽可能地将上层代码的变更记录提炼出来,通过形式化方法的技术,去 specify API 的适配模式,我们会对这样的模式进行挖掘,并把它以图的结构记录到系统里。下图是一个简单示例,大家可以去阅读我们和俄罗斯团队联合发表在 ISSRE 2021 的最新论文 [19] 了解更复杂的实现细节。

库替换场景 API 适配模式挖掘技术 [19]

Approach

下图是该工作的 approach overview。当有了变更动作后,我们会进行一系列的数据挖掘处理,包括数据的拆分、最小化、聚类、提纯等,最后得到模式集,保证最终结果的有效性。

Pattern Mining Scheme

Example

这是一个从 替换到 的具体示例。我们将这个示例中的代码变换进行一系列的处理与挖掘,得到右侧两个 change pattern。后续若有程序员遇到类似库替换的场景时,我们就可以通过应用 pattern 来自动地做代码适配。

大家可以看到,pattern 使用了不同的 node 来记录变更的动作,包括一些代码的增加 ActionInsertAfter 和删除 ActionDelete 都刻画在这个结构中。

Evaluation

我们在一些开源典型场景上做了实验,结果表示我们的方法能够挖掘出很多有效的 patterns,如下图左所示。我们将挖掘出的 patterns 还原到实例中,评估 patterns 的质量(主要是覆盖率),结果如下图右所示,我们的方法在很多场景下还是有价值的,在大部分场景下适配的准确率可以达到 70% 以上。

Implementation

我们已将上述工作集成到了 CodeCheck 中,近期有发布一个 CodeCheck IDEA 插件试用版(当前仅支持 maven 工程),欢迎大家试用体验:

下图是插件使用的一个示例。

​安装插件:打开 IDEA 插件市场离线安装界面,选中安装包单击。

优质软件开发的优服务 第3篇

最后介绍一下我们有关 代码提交智能分拆 的研究成果 SmartCommit [25],我们在最近的 FSE 2021 会议上进行了报告,并很荣幸地获得了最佳论文奖。

Motivation

现在企业内部就成提交代码的时候,程序员代码的提交往往没有有效管控工具,来判断他的提交是否满足高内聚低耦合的原则。

我们希望代码的每次提交都可以保持只做一件事情。比如,在这个提交内只做 formatting,或者只做某个 bug fix,或者只支持了某一个 new feature。

这是我们期望的:

高内聚提交 Cohesive commits

而实际上,我们针对公司内外很多项目做了大量的调研和分析,发现其实 commit 历史记录中会包含大量的所谓 组合式提交,即一个 commit 里包含了多个任务。根据统计数据来看,这种类别的提交记录占比 11%~40%(MSR13/15 for open-source communities,ICSE15 for companies),这会大大提高项目的维护成本。

这是我们不提倡的:

组合式提交 Composite commits

Approach

基于这个场景,我们希望能够针对用户提交的 commit 做智能的理解,判断它是否混杂了多个开发任务,基于代码分析的技术将 commit 拆分为多个原子型的 commit groups 或者 change groups。鼓励程序员能够单独的去提交每个 change group。(围绕这个工作我们还做了延展,比如程序员在提交的时候,commit message 该如何撰写,如何更规范地写 message,commit 应该归为 refractor/bug fix/new feature?)

SmartCommit 将代码分析的技术与图匹配的算法融合为一个图分拆算法,会给程序员提供拆分 commit 的建议,尽量保持每个 commit 满足高内聚低耦合原则。下图是实现思路。

Implementation

我们将这个系统实现为一个工具,通过图形化界面可以很清晰地给程序员提示,比如当前 commit 混杂了很多的开发任务,每一个任务是什么,每个任务对应的 change 是什么。程序员可以在这个工具上进行快速确认,若不认可工具的某些拆分,还可以手动整合一些 change group,调整完成后,工具还可以自动地将这些 change groups 提交。这样,一个 composite commit 会几乎自动地被拆分为多个满足高内聚原则的 cohesive commits。

Evaluation

我们采用了混合式方法进行实验评估:

Industrial Field Study 我们在华为内部的两个项目上做了近 9 个月的实验,邀请华为内部的程序员使用这个工具,同时监测程序员对工具结果的反馈,看他是否采纳了工具给出的建议,并依据建议作出修订。

​Controlled Open-Source Experiment 我们在开源项目上也做了一些实验。

​并通过三角分析 [26] 增加我们对实验结果的信心:

​准确率结果如下:

Controlled Open-Source Experiment

结果表明,工具给出的建议可能不是完全正确的,往往需要程序员做一些微调。但工具可以给程序员提供一个比较好的起点,可以很快速的引导程序员做出更加规范的提交。

最后,围绕智能化的可信软件开发这个话题,谈一谈我们软件分析 Lab 当前的一些思考。

​其实在软件开发的很多环节里,都可以将程序分析这个技术嵌进去,比如:

编码环节 包括常见的注释生成,程序生成,代码搜索等,还有今天提到的 API 迁移、代码检查修复,开源成分治理等

单元测试 围绕这个方面,我们也有在做一些探索,希望可以自动化地生成一些单元测试用例,来提高研发效率

代码检视 通常与代码检查、代码修复结合在一起

代码合入 代码的智能合入与冲突消解、智能提交、智能同步、智能 cherry-pick

系统运维 智能补丁筛选等

其实在软件开发的整个生命周期里,程序分析技术都发挥了非常关键的作用,甚至已经在逐渐地扮演根技术的角色。十分开心能有这样一个技术沙龙,希望

我的报告就到这里,感谢大家。

[1]Amazon CodeGuru - 可自动执行的代码审查服务 - AWS 云服务

[4]Debug in Visual Studio with Azure Application Insights - Azure Monitor | Microsoft Docs

[6]PMD - An extensible cross-language static code analyzer.

[8]Xindong Zhang, Chenguang Zhu, Yi Li, Jianmei Guo, Lihua Liu, and HaoboGu. Precfix: Large-scale patch recommendation by mining defect-patch of the ACM/IEEE 42nd International Conference on SoftwareEngineering: Software Engineering in Practice, ICSE-SEIP’20, page 41–50,New York, NY, USA, 2020. Association for Computing Machinery.

[9]CODING - 一站式软件研发管理平台

[12]WePack | 独立部署的高效制品管理服务

[15]diKTat | Strict coding standard for Kotlin and a custom set of rules for detecting code smells, code style issues and bugs

[16]Diktat: Lightweight Static Analysis for Kotlin. Andrey Kuleshov (Huawei Technologies Co., Ltd), Petr Trifanov (Huawei Technologies Co., Ltd), Vladislav Frolov (Huawei Technologies Co., Ltd) and Guangtai Liang (Huawei Technologies Co., Ltd)

[17]A curated list of static analysis (SAST) tools for all programming languages, config files, build tools, and more.

[18]H. He, Y. Xu, Y. Ma, Y. Xu, G. Liang and M. Zhou, _A Multi-Metric Ranking Approach for Library Migration Recommendations,_ 2021 IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER), 2021, pp. 72-83, doi: .

[19]The 32nd International Symposium on Software Reliability Engineering (ISSRE 2021)

[20]Bo Shen, Wei Zhang, Haiyan Zhao, Guangtai Liang, Zhi Jin, and QianxiangWang. Intellimerge: A refactoring-aware software merging technique. Program. Lang., 3 (OOPSLA), October 2019.

[22]Guilherme Cavalcanti, Paulo Borba, and Paola Accioly. 2017. Evaluating and improving semistructured merge. Proceedings of the ACM on Programming Languages 1, OOPSLA (2017), 59.

[23]Fengmin Zhu and Fei He. 2018. Conflict resolution for structured merge via version space algebra. Proceedings of the ACM on Programming Languages 2, OOPSLA (2018), 166.

[24]Bo Shen, Wei Zhang, Haiyan Zhao, Guangtai Liang, Zhi Jin, and QianxiangWang. Intellimerge: A refactoring-aware software merging technique. Program. Lang., 3(OOPSLA), October 2019.

[25]Bo Shen, Wei Zhang, Christian Kastner, Haiyan Zhao, Zhao Wei, Guangtai Liang, and Zhi Jin. Smartcommit: A graph-based interactive assistant for activity-oriented commits. In Proceedings of the 29th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, ESEC/FSE 2021, page 379–390, New York, NY, USA, 2021. Association for Computing Machinery.

[26]Alison Twycross. 2004. Research design: qualitative, quantitative and mixed methods approachesResearch design: qualitative, quantitative and mixed methods approaches Creswell John W Sage 320 £29 0761924426 0761924426. Nurse Researcher 12, 1 (sep 2004), 82–83.

猜你喜欢