﻿# AWS анонсировали сервис для автоматизированного анализа кода

Недавно компания Amazon объявила о запуске нового сервиса, основанного на машинном обучении, который предназначен для проведения автоматизированного обзора кода с целью улучшения его производительности\.

![0693_AmazonCodeGuru_ru/image1.png](https://import.viva64.com/docx/blog/0693_AmazonCodeGuru_ru/image1.png)

В [анонсе](https://aws.amazon.com/about-aws/whats-new/2019/12/aws-announces-amazon-codeguru-for-automated-code-reviews-and-application-performance-recommendations/) Amazon говорится, что новый сервис [Amazon CodeGuru](https://aws.amazon.com/codeguru/) основан на машинном обучении и предназначен для проведения автоматизированного обзора кода с целью улучшения его производительности\. Сервис поможет "находить и исправлять такие проблемы с кодом, как утечки ресурсов, потенциальные условия конкуренции и параллельные циклы процессора"\. Amazon CodeGuru предлагает два основных инструмента: Reviewer и Profiler\.

С помощью Reviewer проводится анализа строк кода, отправленных в систему контроля версий \(GitHub или AWS CodeCommit\) в рамках некоторого pull request'а с оплатой за строку\. В результате инструмент находит проблемы в коде и рекомендует способы их устранения\.

Profiler предназначен для динамического анализа работы приложения, включая мониторинг загрузки процессора, использование памяти и т\.п\. Далее используется агрегирование трассировок стека для привязки информации о потребляемых ресурсах к коду вашего приложения\.

Для меня, как разработчика статического анализатора, более интересен первый инструмент – Reviewer\. Также я не смог пройти мимо этой новости, потому что в начале года писал статью о проверке одного из проектов Amazon на ошибки "[Ищем ошибки в исходном коде Amazon Web Services SDK для \.NET](https://pvs-studio.ru/ru/blog/posts/csharp/0605/)"\. Код проекта довольно качественный\. Тем не менее, там встречались такие ошибки:

[V3008](https://pvs-studio.ru/ru/docs/warnings/v3008/) \[CWE\-563\] The 'this\.linker\.s3\.region' variable is assigned values twice successively\. Perhaps this is a mistake\. Check lines: 116, 114\. AWSSDK\.DynamoDBv2\.Net45 S3Link\.cs 116

```cpp
public string Region 
{ 
  get 
  {
    ....
  } 
  set 
  {
    if (String.IsNullOrEmpty(value))
    {
      this.linker.s3.region = "us-east-1";
    }
    this.linker.s3.region = value; 
  } 
}
```

В теле блока _if_ пропущен оператор _return_\. В результате переменная _this\.linker\.s3\.region_ будет всегда иметь значение _value_, включая пустую строку и _null_\. 

Было бы любопытно попробовать поискать эту и подобные ошибки при помощи Amazon Reviewer в их же проекте\. К сожалению, на данный момент в Amazon CodeGuru доступна проверка только кода на языке Java\. Но обещают поддержку "большего количества языков в ближайшее время"\. 

Также интересны принципы работы анализатора Reviewer\. Как реализован поиск заявленных проблем по небольшой части кода, насколько достоверны результаты? 

Я продолжу изучать особенности Amazon CodeGuru\. Сервис однозначно интересный, тем более, предлагается бесплатный пробный период на 90 дней\.