亚马逊AWS官方博客

Amazon CodeGuru 新增功能 – Python 支持、安全检测器和内存分析

Amazon CodeGuru 是一款开发人员工具,可帮助您提高代码质量,它有两个主要组成部分:

  • CodeGuru Reviewer 使用程序分析和机器学习来检测代码中难以发现的潜在缺陷,并提供有关改进的建议。
  • CodeGuru Profiler 从实时应用程序中采集运行时性能数据,并提供可视化工具和建议来帮助您优化应用程序的性能。

今天,我很高兴地宣布推出三个新的功能:

  • 适用于 CodeGuru Reviewer 和 Profiler 的 Python 支持(预览版) – 您现在可以使用 CodeGuru 来改进以 Python 编写的应用程序。在本次发布之前,CodeGuru Reviewer 可以分析 Java 代码,CodeGuru Profiler 支持在 Java 虚拟机 (JVM) 上运行的应用程序。
  • 适用于 CodeGuru Reviewer 的安全检测器 – 我们推出适用于 CodeGuru Reviewer 的一组新检测器,可用于识别 Java 代码中的安全漏洞并检查是否遵循了安全最佳实践。
  • 适用于 CodeGuru Profiler 的内存分析 – 通过新的可视化工具来显示各个对象类型随着时间推移的内存保留情况,从而更轻松地找出内存泄漏并优化应用程序使用内存的方式。

下面让我们更详细地看看这些功能。

适用于 CodeGuru Reviewer 和 Profiler 的 Python 支持(预览版)
适用于 CodeGuru Reviewer 的 Python 支持现提供预览版,它可提供有关从多个类别改进应用程序的 Python 代码的建议,例如并发、数据结构和控制流、科学/数学运算、错误处理、标准库的使用,当然还有 AWS 最佳实践。

现在,您还可以使用 CodeGuru Profiler 从 Python 应用程序采集运行时性能数据,以及通过可视化工具来帮助确定代码在 CPU 上的运行情况以及消耗时间的位置。这让您能够检测应用程序中最为耗费资源的代码行。通过专注于这些部分的优化,可帮助您降低基础设施的成本并提高应用程序的性能。

下面我们使用一些 Python 代码来看 CodeGuru Reviewer 的实际运用。八年前我加入 AWS 时,我最早创建的项目包括一个连接到 Amazon Simple Storage Service (S3)用户空间内的文件系统 (FUSE) 接口,名称为 yas3fs(也是一种 S3 支持的文件系统)。此项目受到更流行的 s3fs-fuse 项目启发,但是重新编写了代码,以实施一种通过 Amazon Simple Notification Service (SNS) 通知(得益于许多贡献者的贡献,现在使用 S3 事件通知)来同步的分布式缓存。当然,这也为我更深入学习 Python 编程和 S3 提供了很好的理由。此项目是个人项目,当时是以开源的方式提供的。今天,如果您需要共享文件系统,可以使用 Amazon Elastic File System (EFS)

CodeGuru 控制台中,我关联了 yas3fs 存储库。您可以关联来自 GitHub 的存储库,包括 GitHub Enterprise Cloud 和 GitHub Enterprise Server、Bitbucket AWS CodeCommit

之后,我可以通过两种方式从 CodeGuru 获得代码审查:

  • 在我创建拉取请求时自动执行。如果您和团队使用代码库,这将是一个很好的方法。
  • 手动创建一个存储库分析,以获得有关一个分支中所有代码的代码审查。如果使用现有的代码库来学习使用 GodeGuru,此方法将非常有用。

由于我刚刚关联了整个存储库,所以我会进行完整的分析并写下要审查的分支名称(抱歉,我当时还在使用 master,现在我使用 main 来处理新项目)。

系统在几分钟后就完成了代码审查,共有 14 条建议。表现不错,当然肯定还有可以改进的地方。以下是我得到的一些建议。我当时使用的异常和全局变量太多了。

适用于 CodeGuru Reviewer 的安全检测器
新推出的适用于 CodeGuru Reviewer 的安全检测器使用自动推理来分析所有代码路径,发现 Java 代码中潜在的深层安全问题,对于采用多种方法和文件的代码以及可能涉及多个运算顺序的代码也同样支持。为了构建此检测器,我们借鉴了 Amazon 20 多年的经验和最佳实践。

此安全检测器还能识别 10 大开放式 Web 应用程序安全项目 (OWASP) 类别中的安全漏洞,例如弱哈希加密。

如果安全检测器发现问题,它会提供补救措施建议和相应的解释。这样,您可以更轻松地遵循 AWS API 的安全最佳实践,例如适用于 AWS Key Management Service (KMS)Amazon Elastic Compute Cloud (EC2) 的安全最佳实践,以及适用于常见 Java 加密技术和 TLS/SSL 库的安全最佳实践。

借助此安全检测器,安全工程师可以专注于架构和应用程序特定的安全最佳实践,同时代码审核员也可以将注意力集中在其他改进上。

适用于 CodeGuru Profiler 的内存分析
对于在 JVM 上运行的应用程序,CodeGuru Profiler 现在可以显示 堆摘要,它综合显示了一定时间范围内的内存保留情况,可以跟踪总体规模以及各个对象类型的对象数(例如 Stringintchar[] 和自定义类型)。这些指标将通过时间线图显示,从而让您能够轻松地发现各个对象类型的内存利用率趋势和峰值。

以下是此功能将具有极大帮助的几个场景:

内存泄露 – 如果一个或多个对象类型的内存利用率曲线不断增长,则可能表明存在泄漏(在此例中,我特意指应用程序不必要地保留了内存对象),并且可能会导致内存不足错误以及应用程序崩溃。

内存优化 – 与单纯基于 JVM 级别指标(如总体堆利用率)的传统内存利用率监控相比,按对象类型分析内存利用率更进一步。通过知道某个异常的高内存使用量与某个特定的对象类型有关,您可以重点分析和优化应用程序中负责分配和引用该类型的对象的部分。

例如,下图显示了一个 Java 应用程序在一段时期内使用内存的情况。除提供总可用容量和已使用空间指标外,我还可以看到某些特定的对象类型的内存使用情况,例如 byte[]java.lang.UUIDjava.util.LinkedHashMap 条目。这些对象类型保留的内存在随着时间推移持续增长,值得怀疑。我可能需要调查内存泄漏问题。

在下表中,我获得了一个更长的对象类型列表,这些类型的对象在堆上分配内存。我选中了前三个,因此上图中也显示了这三个对象类型。我可以在此处检查其他对象类型,然后选中这些对象类型以了解其随着时间推移的内存使用情况。似乎我已经选择的三个对象类型受内存泄漏影响的风险更大。

现已开放
这些新功能现已在所有提供 Amazon CodeGuru 的区域开放。有关更多信息,请参阅 AWS 区域服务表

Python 支持、安全检测器和内存分析功能的定价没有变化。您只需按实际使用量付费,无需预付费用或承诺。

了解更多有关 Amazon CodeGuru 的信息,并立即开始使用这些新功能来改进应用程序的代码质量。

Danilo