Skip to content

Latest commit

 

History

History
254 lines (199 loc) · 16.7 KB

_CHECKLIST.md

File metadata and controls

254 lines (199 loc) · 16.7 KB

Чеклист перед отправкой

❔ Возникли трудности?

И это здорово! Если их преодолевать правильно, то из этого можно извлечь большую образовательную пользу для себя. Периодическое возникновение вопросов, недопонимания пройденного материала - нормальная и неотъемлимая часть обучения. А мы здесь чтобы помочь вам пройти этот путь.

Если непонятна теория

  1. Если вопрос разбирался на лекции, стоит сперва пересмотреть соответствующие части теоретических материалов.
  2. Если вопрос не решился, стоит попробовать загуглить проблему, этот навык вам пригодится в работе.
  3. Если вопрос не решился, можно задать его в общем чате, мы обязательно поможем с пониманием трудных для вас мест.

Если непонятно условие

  1. Прежде чем задать вопрос по условию задачи, перечитайте его ещё раз и убедитесь, что в тексте условия нет прямого ответа на этот вопрос; умение работать с текстом - важный навык работы с информацией.
  2. Если ответа на свой вопрос в тексте условия вы не увидели, задайте его в общем чате, мы раскроем детали условия подробнее.

Если не получается задача

Если ваша проблема это ошибка компиляции (подчёркивает красным, не даёт запустить программу), сборки проекта, CI и прочие подобные ошибки, то:

  1. Найдите и прочитайте текст ошибки, который вам подсвечивает идея (или логи); "подчёркивает красным" - это не описание ошибки.
  2. Попробуйте понять текст ошибки, при необходимости воспользуйтесь переводчиком. Не страшно, если вы переведёте неточно, тут главное сам процесс - со временем и с нашей помощью вы будете это делать лучше и лучше, но пропуская эти попытки вы не сможете научиться этого делать.
  3. Если не получилось понять ошибку по её тексту, попробуйте её загуглить и изучить подобную ошибку у других людей. Попробуйте примерить решения их проблем на свой код. Соотнесите найденные описания ошибки с пройденной теорией.
  4. Если в итоге ваше затруднение сохраняется, напишите в общий чат, обязательно указав:
    1. Название задачи и ссылку на условие
    2. Ссылку на вашу работу
    3. Текст и скриншот (не фотография) ошибки
    4. Ваши мысли и описание попыток её решить

Если ваша проблема это ошибка исполнения (программа умирает уже после запуска) или она отрабатывает неправильно (из-за чего ваши тесты не проходят), то:

  1. Воспользуйтесь отладчиком для пошагового анализа работы вашей программы. Так вы либо убедитесь в неправильности придуманного вами алгоритма или найдёте конкретное место, где ожидаемое поведение программы разошлось с фактическим.
  2. Если проблему найти не получилось, напишите в общий чат, обязательно указав:
    1. Название задачи и ссылку на условие
    2. Ссылку на вашу работу
    3. Конкретное и подробное описание проблемы или затруднения при решении задачи ("Помогите что не так" - это не описание)
    4. Подробное описание вашего анализа программы с помощью отладчика вместе со скринами
    5. Ваши мысли и описание попыток её решить

💪 Выполнены все требования задачи

Убедитесь, что все требования задания выполнены. Для этого перед отправкой внимательно пройдитесь по всему тексту условия и соотнесите сказанное в нём с вашим решением. Навык самопроверки работы перед ревью очень пригодится вам как при обучении, так и на работе.


📏 Отформатирован код

Кроме правил, нарушение которых приводит к ошибкам компиляции, есть ещё и правила форматирования кода, соблюдение которых обязательно при напиании программ.

С большинством проблем может справиться автоформатирование в идее. Для этого выберите Code -> Reformat code в меню или используйте горячие сочетания клавиш (в меню будет показано актуальное сочетание для вашей операционной системы). Так, идея поправит неправильные отступы, пробелы и некоторые другие ошибки. Следите, чтобы у if-else, for, while всегда были {}.

Проблемы с именованием сущностей нужно решать самим. Так, все ячейки кроме final-констант и методы должны писаться с маленькой буквы камелкейсом с маленькой буквы, а классы и интерфейсы - камелкейсом с большой буквы.

Мы вам настоятельно советуем всегда держать код в отформатированном виде во время разработки, со временем глаз привыкнет и вы почувствуете насколько это облегчает поиск ошибок в коде и его анализ. В любом случае, перед отправкой кода на проверку его обязательно нужно отформатировать, иначе он может быть отправлен на доработку без более глубокой проверки на этой итерации.

📦 Правильно настроен Maven-проект, тесты проходят

Репозиторий должен быть папкой вашего мавен-проекта. Обратите внимание, что репозиторием не должна быть папка в которой лежит папка мавен-проекта, он сам должен быть папкой проекта. В нём должны быть соответствующие файлы и папки - pom.xml, src и др.

Не забудьте создать .gitignore-файл в корне проекта и добавить туда в игнорирование автогенерируемую папку target.

Общая схема вашего pom.xml-файла:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>ru.netology</groupId>
  <artifactId>НАЗВАНИЕ-ВАШЕГО-ПРОЕКТА-БЕЗ-ПРОБЕЛОВ</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
      <maven.compiler.source>11</maven.compiler.source>
      <maven.compiler.target>11</maven.compiler.target>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>


  <dependencies>
      <dependency>
          ...
      </dependency>
      ...
  </dependencies>


  <build>
      <plugins>
          <plugin>
            ...
          </plugin>

          <plugin>
            ...
            <executions>
              <execution>
                ...
              </execution>
              ...
            </executions>
          </plugin>
          ...
      </plugins>
  </build>

</project>

JUnit

Обратите внимание что у артефакта нет -api на конце. Если у вас автоматически добавилась зависимость вида <artifactId>junit-jupiter-api</artifactId>, то лучше поменять артефакт на тот что ниже, иначе будут сюрпризы в работе.

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>

Surefire

Без этого плагина тесты могут мавеном не запускаться, хоть в идее через кнопки они и будут проходить. Чтобы лишний раз убедиться, что всё работает, нажмите Ctrl+Ctrl и затем mvn clean test.

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <failIfNoTests>true</failIfNoTests>
                </configuration>
            </plugin>

✔️ Настроен Maven CI с verify и JaCoCo 🆕

Maven CI

После связывания локального репозитория с удалённым и первого пуша в заготовки проекта, время настроить CI на основе Github Actions. Шаблон вашего maven.yml должен выглядеть вот так, убедитесь что всё совпадает с вашим шаблоном (например, что вы указали фазу verify, а не package):

name: Java CI with Maven

on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'adopt'
    - name: Build with Maven
      run: mvn -B -e verify

JaCoCo

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.5</version>
                ...

Инициализация:

                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>

В режиме генерации отчётов:

                    <execution>
                        <id>report</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>

В режиме проверки и обрушения сборки по уровню покрытия:

                    <execution>
                        <id>check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <rule>
                                    <limits>
                                        <limit>
                                            <counter>LINE</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>100%</minimum>
                                        </limit>
                                    </limits>
                                </rule>
                            </rules>
                        </configuration>
                    </execution>
💯 Код классов с логикой покрыт на 100% 🆕

Покрытие кода тестами - одна из автоматических метрик качества тестирования. Стоит помнить, что 100% покрытие не гарантирует, что вы сделали качественный тест-дизайн и хорошо протестировали код, но пробелы в покрытии кода могут сигнализировать о недостаточном тестировании. В этом задании мы требуем, чтобы вы покрыли все классы с логикой на 100%.

Обрушать сборку по покрытию при этом не нужно. Для того чтобы убедиться в 100% покрытии, сгенерируйте JaCoCo-отчёт через запуск mvn clean verify и откройте его в браузере; располагаться отчёт будет в папке target/site/jacoco/index.html.

Если вы видите в отчёте не 100%-покрытие, то алгоритм следующий:

  1. Смотрите на тестируемый код, вникаете в логику его работы.
  2. Генерите jacoco-отчёт.
  3. Смотрите какая строчка остаётся непокрытой.
  4. Осознаёте, в каком случае она будет выполняться, а в каком нет (т.е. для какой ситуации эта непокрытая строчка или ветка вообще существует).
  5. Добавляете случай в котором она выполняется в тесты.

📁 Правильно настроен проект и репозиторий 🆕

Репозиторий должен быть папкой вашего idea-проекта. Обратите внимание, что репозиторием не должна быть папка в которой лежит папка проекта, он сам должен быть папкой проекта. В нём должны быть соответствующие файлы и папки - src и др.

Не забудьте создать .gitignore-файл в корне проекта и добавить туда в игнорирование автогенерируемую папку out и папку настроек идеи .idea.