❔ Возникли трудности?
И это здорово! Если их преодолевать правильно, то из этого можно извлечь большую образовательную пользу для себя. Периодическое возникновение вопросов, недопонимания пройденного материала - нормальная и неотъемлимая часть обучения. А мы здесь чтобы помочь вам пройти этот путь.
- Если вопрос разбирался на лекции, стоит сперва пересмотреть соответствующие части теоретических материалов.
- Если вопрос не решился, стоит попробовать загуглить проблему, этот навык вам пригодится в работе.
- Если вопрос не решился, можно задать его в общем чате, мы обязательно поможем с пониманием трудных для вас мест.
- Прежде чем задать вопрос по условию задачи, перечитайте его ещё раз и убедитесь, что в тексте условия нет прямого ответа на этот вопрос; умение работать с текстом - важный навык работы с информацией.
- Если ответа на свой вопрос в тексте условия вы не увидели, задайте его в общем чате, мы раскроем детали условия подробнее.
Если ваша проблема это ошибка компиляции (подчёркивает красным, не даёт запустить программу), сборки проекта, CI и прочие подобные ошибки, то:
- Найдите и прочитайте текст ошибки, который вам подсвечивает идея (или логи); "подчёркивает красным" - это не описание ошибки.
- Попробуйте понять текст ошибки, при необходимости воспользуйтесь переводчиком. Не страшно, если вы переведёте неточно, тут главное сам процесс - со временем и с нашей помощью вы будете это делать лучше и лучше, но пропуская эти попытки вы не сможете научиться этого делать.
- Если не получилось понять ошибку по её тексту, попробуйте её загуглить и изучить подобную ошибку у других людей. Попробуйте примерить решения их проблем на свой код. Соотнесите найденные описания ошибки с пройденной теорией.
- Если в итоге ваше затруднение сохраняется, напишите в общий чат, обязательно указав:
- Название задачи и ссылку на условие
- Ссылку на вашу работу
- Текст и скриншот (не фотография) ошибки
- Ваши мысли и описание попыток её решить
Если ваша проблема это ошибка исполнения (программа умирает уже после запуска) или она отрабатывает неправильно (из-за чего ваши тесты не проходят), то:
- Воспользуйтесь отладчиком для пошагового анализа работы вашей программы. Так вы либо убедитесь в неправильности придуманного вами алгоритма или найдёте конкретное место, где ожидаемое поведение программы разошлось с фактическим.
- Если проблему найти не получилось, напишите в общий чат, обязательно указав:
- Название задачи и ссылку на условие
- Ссылку на вашу работу
- Конкретное и подробное описание проблемы или затруднения при решении задачи ("Помогите что не так" - это не описание)
- Подробное описание вашего анализа программы с помощью отладчика вместе со скринами
- Ваши мысли и описание попыток её решить
💪 Выполнены все требования задачи
Убедитесь, что все требования задания выполнены. Для этого перед отправкой внимательно пройдитесь по всему тексту условия и соотнесите сказанное в нём с вашим решением. Навык самопроверки работы перед ревью очень пригодится вам как при обучении, так и на работе.
📏 Отформатирован код
Кроме правил, нарушение которых приводит к ошибкам компиляции, есть ещё и правила форматирования кода, соблюдение которых обязательно при напиании программ.
С большинством проблем может справиться автоформатирование в идее. Для этого выберите 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>
Обратите внимание что у артефакта нет -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>
Без этого плагина тесты могут мавеном не запускаться, хоть в идее через кнопки они и будут проходить. Чтобы лишний раз убедиться, что всё работает, нажмите 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 🆕
После связывания локального репозитория с удалённым и первого пуша в заготовки проекта, время настроить 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
<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%-покрытие, то алгоритм следующий:
- Смотрите на тестируемый код, вникаете в логику его работы.
- Генерите jacoco-отчёт.
- Смотрите какая строчка остаётся непокрытой.
- Осознаёте, в каком случае она будет выполняться, а в каком нет (т.е. для какой ситуации эта непокрытая строчка или ветка вообще существует).
- Добавляете случай в котором она выполняется в тесты.
📁 Правильно настроен проект и репозиторий 🆕
Репозиторий должен быть папкой вашего idea-проекта. Обратите внимание, что репозиторием не должна быть папка в которой лежит папка проекта, он сам должен быть папкой проекта. В нём должны быть соответствующие файлы и папки - src
и др.
Не забудьте создать .gitignore-файл в корне проекта и добавить туда в игнорирование автогенерируемую папку out
и папку настроек идеи .idea
.