【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

送你一个编程教练可好?你应当了解的 Amazon CodeGuru

  • 2020-02-27
  • 本文字数:3484 字

    阅读完需:约 11 分钟

送你一个编程教练可好?你应当了解的 Amazon CodeGuru

前言

去年 12 月初,我在拉斯维加斯参加了一年一度的 AWS re:Invent 大会。会议上最激动人心的时刻当属主题演讲中发布的各具特色的新服务。这一届大会新服务的发布数量超过了 70 个。但是当我问到一个国内去参会的朋友对哪一个新服务最感兴趣的时候,他给我的答案却是:“除了 Amazon CodeGuru, 其它都记不得了。” 虽不能完全苟同,但我也觉得 CodeGuru 确实是最特别的一个。


究竟这个 CodeGuru 是什么?

作为一个 Java 程序员,我们难免会经常遇到这样的一些错误信息“Unclosed String Literal”,”Illegal Start of an Expression”, ”Incompatible Types“,“Cannot Return a Value From Method Whose Result Type Is Void”以及“Non-Static Variable … Cannot Be Referenced From a Static Context”等等。也许我们已经习惯了依赖 IntelliJ IDEA 、Eclipse 或者 NetBeans 来帮助我们完成代码在语法层面的检查。尽管 Java 作为一个强类型语言,静态分析的工具已经非常成熟,但是对于关键业务应用,或者复杂的代码还是需要人工介入以进行代码审核。但即使是资深的 Java 程序员受限于经验和能力的不足,也很难通过静态的方法将潜藏于代码中的问题逐一识别出来。随着敏捷开发思想的普及,以及微服务架构的成熟,代码中的缺陷带来的挑战引出了一个新的需求 – 能否有一款更智能、脱离静态语法分析的局限来实现高质量应用的代码分析工具?


这就需要引出今天的主角 Amazon CodeGuru。这里提到的 CodeGuru 是 AWS 的一款新服务,与 Windows 开发人员熟悉的 codeguru.com 完全不是一回事,切莫混淆。关于 CodeGuru 服务,借用官方文档的描述就是 –

col 1

__“ Amazon CodeGuru 是一种机器学习服务,可自动执行代码审查,并提供应用程序性能建议。它可以帮助您找到影响应用程序性能的最昂贵的代码行,并全天候帮助您排查问题,然后为您提供修复或改进代码的具体建议。”


可以说,这款服务是基于 Amazon 数十年软件开发的知识和经验积累而成的、利用现代机器学习的技术,用于自动代码审查和应用程序性能分析的工具。CodeGuru 的机器学习模型来源于 Amazon 自有的代码库进行训练所得。这些代码库包括大约数十万个 Amazon 内部的项目,以及 GitHub 上的 1 万多个开源项目。数万名 Amazon 开发人员凭借数十年的代码审查和应用程序分析经验为 CodeGuru 的训练提供了最有益的帮助。这个工具因其托管于 AWS 云计算之上,会随者越来越多的用户在生产环境中的使用反馈而不断的搜索优化、不断的发展。从功能上来看,它会自动检查代码以查找通常难以发现的缺陷,并提供了可行的建议来解决已发现的问题 ,并帮助在运行的应用程序中找到最有希望的优化方法。与人工的代码审核比较起来,CodeGuru 像不像一位任劳任怨的全时工作的老师傅!

col 1

“It’s like having a dedicated engineer on call 24/7”

Amazon CodeGuru 服务中有两个重要的组件,第一个组件是静态代码分析器,叫做 Amazon CodeGuru Reviewer;第二个组件是 Amazon CodeGuru Profiler,用于探查在 EC2、ECS、EKS 以及 Fargate 上运行的由 Java 开发的应用程序。

Amazon CodeGuru Review

CodeGuru 的功能之一是代码审核。 在这个环节中,它能够标记出来源代码中的严重的缺陷和可靠性的问题。 不同于以往的针对程序的质量分析工具,CodeGuru 的能力建立在机器学习之上。例如,CodeGuru Reviewer 使用规则挖掘和监督机器学习模型(结合使用逻辑回归和神经网络)进行训练。在训练期间,为了检测与最佳实践的偏差,它会挖掘 Amazon 代码库中包含 AWS API 调用的拉取请求。它会查看代码更改并针对文档数据进行交叉引用,同时也会并行挖掘文档数据。这将创建新的最佳实践模型,当 Reviewer 审查代码以提供建议时就将使使用这些模型。而针对于另外一个组件 CodeGuru Profiler,则是由 Amazon 性能优化工程师进行训练,用于分析 Amazon 内部使用的数万项服务。CodeGuru 的使用者可以决定是否接受 CodeGuru 提供的每项建议,使用者提供的反馈越多,它给出的建议就越好。这就是 CodeGuru 神奇能力的秘密!


对于使用 AWS API 的开发人员,它会检测与使用 AWS API 和开发工具包的最佳实践的偏差,标记可能导致出现生产问题的常见问题,例如检测分页缺失或批处理操作的错误处理。它会检测并发性问题(例如原子性违规和使用非线程安全的类),即使经验丰富的程序员也很难发现这些问题。它会检测资源何时未正确关闭,并因此而引发延迟问题和中断。它还会识别正确的输入验证,未经审查的输入可能会导致注入攻击或拒绝服务等问题。

col 1

例如并发问题 –


col 1

例如分页问题 –


col 1

例如敏感信息泄漏问题 –


注:Amazon CodeGuru Reviewer 目前支持 GitHub 和 AWS CodeCommit 存储库中存储的 Java 代码。

总结一下,CodeGuru Reviewer 解决的核心领域包括了以下几项:


  • AWS 最佳实践:正确的使用 AWS API

  • 并发:并发结构的正确实现

  • 资源泄漏:正确的资源处理方式

  • 敏感信息泄漏:泄漏个人身份信息、账户信息等

  • 通过数据挖掘发现缺陷代码:通常难以发现的缺陷


CodeGuru Reviewer 的实际工作流程是怎样的?使用的第一步就是登录 AWS CodeGuru Reviewer 的管理控制台,然后可以关联 GitHub 或 AWS CodeCommit 上的现有代码的存储库。完成一次性设置后,CodeGuru Reviewer 会开始启动对代码的分析,并直接在拉取请求或代码存储库中提供代码改进建议。下面这张图解释了这个过程。


col 1

“CodeGuru Reviewer 可帮助我们捕捉潜伏在关键代码段中为时已久的争用状况。人工审查人员可能会漏掉此问题,因为它不在我所更改的代码范围之内…有此服务把关真是太棒了,不仅可提高我们的代码质量,而且无需设置或中断。”

– 负责 AWS 生成器工具的高级软件开发工程师 Mike Thompson

Amazon CodeGuru Profiler

CodeGuru Profiler 关注于解决应用程序性能带来的挑战和问题。如果我们的应用程序性能不好,可能会对关键业务产生重大影响,例如,它可能使我们的交易失败,使得客户蒙受损失,并且让用户有了糟糕的体验。这还会导致系统架构的成本居高不下,并且可能会深刻影响到企业的发展。应用程序性能不佳的原因归起来,大多与分布式应用的复杂性有关。对于许多开发人员来说,这是个巨大的挑战,显然并非人人都是分布式应用的专家。


CodeGuru Profiler 可以帮助开发人员重新考虑性能优化的问题。过查找最昂贵的代码行,基于其自身的训练来查找性能优化的方法,并给出关于如何修复代码的建议。它是为生产系统而构建的,设计的目标之一就是不会影响当前应用的性能。它可以连续地运行在生产环境中,并连续地进行性能的分析。目前,它仅支持用 Java 编写的应用程序。它的应用环境应该是这个样子的 –


使用 CodeGuru Profiler

要开始使用 CodeGuru Profiler,需创建一个性能分析组,并为这个组命名;记得更新 Profiler 代理使用的 IAM 角色;为 Java 应用程序设置依赖项。最后通过添加 AWS 提供的几行代码来启动应用程序中的 Profiler 代理 到应用程序当中(如果有兴趣尝试,这里是一个样例的链接:https://github.com/aws-samples/aws-codeguru-profiler-sample-application)。CodeGuru Profiler 还为应用程序提供了可视化的展现。必不可少的,CodeGuru Profiler 还针对常见的性能问题提供了自动建议。


col 1col 2

col 1

按照 CodeGuru Profiler 的建议删除这些克隆值之后,CPU 使用率大幅降低 – _同步队列降低了 40%,异步队列降低了 67%_。

– 负责 Amazon.com 目录管理服务的高级软件开发工程师 Rajesh Konatham

结语

Amazon CodeGuru 已经被数百名 Amazon 开发人员使用了很多年。它已经帮助 Amazon 改进了许多应用程序。在 2017 年 Prime Day 的活动中,使用了 Amazon CodeGuru 之后 系统 CPU 的利用率提高了 325%,而成本却降低了 39%。这可真是个了不起的成果啊!我非常期待去使用它。



作者介绍:费良宏,AWS Principal Developer Advocate。在过去的 20 多年一直从事软件架构、程序开发以及技术推广等领域的工作。他经常在各类技术会议上发表演讲进行分享,他还是多个技术社区的热心参与者。他擅长 Web 领域应用、移动应用以及机器学习等的开发,也从事过多个大型软件项目的设计、开发与项目管理。目前他专注与云计算以及互联网等技术领域,致力于帮助中国的 开发者构建基于云计算的新一代的互联网应用。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/how-about-sending-you-a-programming-coach-what-you-should-know-about-amazon-codeguru/


2020-02-27 16:59634

评论

发布
暂无评论
发现更多内容

自主可控,WorkPlus助力企业业务与生态的连接

WorkPlus

借助文心大模型4.0轻松搞定统计报表

阿Q说代码

文心大模型 文心4.0 统计报表

当1024程序员节遇上双十一 联想用专业品质PC产品向程序员致敬

科技之家

文心一言 VS 讯飞星火 VS chatgpt (120)-- 算法导论10.3 5题

福大大架构师每日一题

福大大架构师每日一题

业务出海、高效传输、动态加速,尽在云栖大会「CDN与边缘计算」专场

阿里云视频云

云计算 云栖大会 边缘云

Linux之用户管理

百度搜索:蓝易云

云计算 Linux 运维 云服务器 ECS

国产芯片破晓时,信创行业正扬帆

脑极体

芯片

Databend 开源周报第 116 期

Databend

数据下钻分析?图表链接一招搞定!

观测云

数据分析 图表链接

显卡又又又涨价了!那就用青椒云吧!

青椒云云电脑

青椒云

Linux的命令基本格式

智趣匠

今年双十一,00后在直播间当“捧哏”,月入8000

自象限

悦数图数据库 x 阿里云计算巢:打造云上超大规模图数据库

悦数图数据库

图数据库

APP采用原生开发还是混合开发,哪种方式好?

Speedoooo

小程序生态 混合开发 小程序技术 小程序容器技术 混合框架

不被大厂“卡脖子”,选择WorkPlus拥抱生态伙伴时代

WorkPlus

产品研发团队协作神器!10款提效工具大盘点!

彭宏豪95

产品经理 团队协作 开发工具 产品研发 在线白板

Kubuntu(Ubuntu) 22.04安装OBS Studio教程。

百度搜索:蓝易云

Linux 运维 OBS studio Kubuntu

【iOS逆向与安全】原生程序与WebView交互

小陈

逆向 iOS逆向 ios安全 逆向分析 逆向技术

河南工业大学人工智能与大数据学院学子在第三届“火焰杯”软件测试开发选拔赛中 取得佳绩

测试人

软件测试

用Python发一个优雅的朋友圈,1行代码搞定

程序员晚枫

Python 微信 图片 朋友圈

语雀故障与反思,随便再领半年会员!

王磊

鲨海狂潮,存力崛起

白洞计划

存储

2023平台工程崭露头角,AI 带来新机遇与挑战

SEAL安全

AI 平台工程 企业号10月PK榜

一个基于Vue3搭建的低代码数据可视化开发平台

互联网工科生

低代码 可视化 Vue3

五矿期货:悦数图数据库在金融期货行业的应用与实践探索

悦数图数据库

数据库 图数据库

可重入锁ReentrantLock在性能测试常见用法

FunTester

Redis ReHash原理

宁静知行者

redis Redis 核心技术与实战

英伟达4090显卡全面下架,有哪些替代方案?

青椒云云电脑

青椒云

HarmonyOS SDK,赋能开发者实现更具象、个性化开发诉求

HarmonyOS开发者

HarmonyOS

WorkPlus专注私有化部署,为企业安全打造超级沟通协作APP

WorkPlus

低代码平台:业务开发的银弹

树上有只程序猿

低代码 应用开发

送你一个编程教练可好?你应当了解的 Amazon CodeGuru_行业深度_AWS_InfoQ精选文章