HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Код профессиональных разработчиков содержит меньше ошибок, чем код начинающих. Это происходит не потому, что они умнее, внимательнее к деталям или видят код насквозь. Настоящая причина кроется в том, что они пишут тесты.</p>
1 <p>Код профессиональных разработчиков содержит меньше ошибок, чем код начинающих. Это происходит не потому, что они умнее, внимательнее к деталям или видят код насквозь. Настоящая причина кроется в том, что они пишут тесты.</p>
2 <p>Автоматизированное тестирование - неотъемлемая часть процесса программирования в профессиональной среде. Тесты - единственный надёжный способ убедиться в работоспособности кода. Они не избавляют от багов, но позволяют держать их количество на приемлемом уровне. Тесты дают уверенность, что изменения в одной части системы не сломали другие части.</p>
2 <p>Автоматизированное тестирование - неотъемлемая часть процесса программирования в профессиональной среде. Тесты - единственный надёжный способ убедиться в работоспособности кода. Они не избавляют от багов, но позволяют держать их количество на приемлемом уровне. Тесты дают уверенность, что изменения в одной части системы не сломали другие части.</p>
3 <p>Однако, тесты нужны не только для проверки работоспособности кода. Существуют и другие виды автоматизированных тестов, например, тесты производительности или тесты на уязвимости.</p>
3 <p>Однако, тесты нужны не только для проверки работоспособности кода. Существуют и другие виды автоматизированных тестов, например, тесты производительности или тесты на уязвимости.</p>
4 <p>Среди разных видов автоматизированных тестов, программисты, в первую очередь, отвечают за функциональные тесты. Эти тесты проверяют, что код выполняет свою прямую задачу с точки зрения пользователей программы. Например, регистрация пользователя должна, как это ни странно, регистрировать пользователя. И тесты это подтверждают.</p>
4 <p>Среди разных видов автоматизированных тестов, программисты, в первую очередь, отвечают за функциональные тесты. Эти тесты проверяют, что код выполняет свою прямую задачу с точки зрения пользователей программы. Например, регистрация пользователя должна, как это ни странно, регистрировать пользователя. И тесты это подтверждают.</p>
5 <p>По степени изолированности тестируемых частей кода функциональные тесты принято делить на:</p>
5 <p>По степени изолированности тестируемых частей кода функциональные тесты принято делить на:</p>
6 <ul><li>Модульные</li>
6 <ul><li>Модульные</li>
7 <li>Интеграционные</li>
7 <li>Интеграционные</li>
8 <li>Системные</li>
8 <li>Системные</li>
9 </ul><p>Самые простые и наименее эффективные тесты - модульные. Они проверяют работоспособность конкретных программных модулей, например, функций. Такие тесты проще всего писать, но они не способны помочь проверить, что модули работают вместе. За это уже отвечают интеграционные тесты. У программистов на такие тесты должно быть направлено основное внимание. Их всё ещё достаточно просто писать (если экосистема проекта подготовлена к этому), и они охватывают гораздо большую часть системы.</p>
9 </ul><p>Самые простые и наименее эффективные тесты - модульные. Они проверяют работоспособность конкретных программных модулей, например, функций. Такие тесты проще всего писать, но они не способны помочь проверить, что модули работают вместе. За это уже отвечают интеграционные тесты. У программистов на такие тесты должно быть направлено основное внимание. Их всё ещё достаточно просто писать (если экосистема проекта подготовлена к этому), и они охватывают гораздо большую часть системы.</p>
10 <p>Наиболее сложные и максимально эффективные - системные тесты. Они представляют из себя полную имитацию работы всей системы целиком. Создаётся "робот", который будет взаимодействовать с системой словно конечный пользователь. Например, в случае сайтов - это тестирование через браузер. Эти тесты эмулируют поведение настоящего пользователя, ходят по сайту, кликают на ссылки, заполняют и отправляют формы. Сложность этих тестов в том, что им приходится опираться на вёрстку сайта, которая часто и непредсказуемо меняется. Кроме того, в браузере невозможно точно определить, когда закончилось одно действие и началось другое (с точки зрения программы). Именно поэтому такие тесты часто ломаются, их сложно писать и поддерживать.</p>
10 <p>Наиболее сложные и максимально эффективные - системные тесты. Они представляют из себя полную имитацию работы всей системы целиком. Создаётся "робот", который будет взаимодействовать с системой словно конечный пользователь. Например, в случае сайтов - это тестирование через браузер. Эти тесты эмулируют поведение настоящего пользователя, ходят по сайту, кликают на ссылки, заполняют и отправляют формы. Сложность этих тестов в том, что им приходится опираться на вёрстку сайта, которая часто и непредсказуемо меняется. Кроме того, в браузере невозможно точно определить, когда закончилось одно действие и началось другое (с точки зрения программы). Именно поэтому такие тесты часто ломаются, их сложно писать и поддерживать.</p>
11 <p>Несмотря на различия, в основе всех автоматических тестов лежат одни и те же принципы. Часто используются одни и те же инструменты. Этот курс знакомит с общими принципами тестирования и шаг за шагом проводит через все возникающие во время тестирования задачи. Основные темы этого курса:</p>
11 <p>Несмотря на различия, в основе всех автоматических тестов лежат одни и те же принципы. Часто используются одни и те же инструменты. Этот курс знакомит с общими принципами тестирования и шаг за шагом проводит через все возникающие во время тестирования задачи. Основные темы этого курса:</p>
12 <ul><li>Утверждения (Asserts)</li>
12 <ul><li>Утверждения (Asserts)</li>
13 <li>Фреймворки для тестирования (JUnit)</li>
13 <li>Фреймворки для тестирования (JUnit)</li>
14 <li>Модульное тестирование (Unit)</li>
14 <li>Модульное тестирование (Unit)</li>
15 <li>Покрытие кода тестами</li>
15 <li>Покрытие кода тестами</li>
16 <li>Разработка через тестирование (TDD)</li>
16 <li>Разработка через тестирование (TDD)</li>
17 </ul>
17 </ul>