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>Самые простые и наименее эффективные тесты -<strong>модульные</strong>. Они проверяют работоспособность функций или других конкретных программных модулей. Такие тесты проще всего писать, но они не способны проверить, что модули работают вместе. За это уже отвечают<strong>интеграционные тесты</strong>. У программистов на такие тесты должно быть направлено основное внимание. Их все еще достаточно просто писать, особенно если экосистема проекта подготовлена к этому, и при этом они охватывают гораздо большую часть системы.</p>
9 </ul><p>Самые простые и наименее эффективные тесты -<strong>модульные</strong>. Они проверяют работоспособность функций или других конкретных программных модулей. Такие тесты проще всего писать, но они не способны проверить, что модули работают вместе. За это уже отвечают<strong>интеграционные тесты</strong>. У программистов на такие тесты должно быть направлено основное внимание. Их все еще достаточно просто писать, особенно если экосистема проекта подготовлена к этому, и при этом они охватывают гораздо большую часть системы.</p>
10 <p>Самые сложные и максимально эффективные - это<strong>системные тесты</strong>. В случае сайтов это тестирование через браузер. Эти тесты эмулируют поведение настоящего пользователя, ходят по сайту, кликают на ссылки, заполняют и отправляют формы. Сложность этих тестов в том, что им приходится опираться на верстку сайта, которая часто и непредсказуемо меняется. Кроме того, в браузере программа не может точно определить, когда закончилось одно действие и началось другое. Именно поэтому такие тесты часто ломаются, их сложно писать и поддерживать.</p>
10 <p>Самые сложные и максимально эффективные - это<strong>системные тесты</strong>. В случае сайтов это тестирование через браузер. Эти тесты эмулируют поведение настоящего пользователя, ходят по сайту, кликают на ссылки, заполняют и отправляют формы. Сложность этих тестов в том, что им приходится опираться на верстку сайта, которая часто и непредсказуемо меняется. Кроме того, в браузере программа не может точно определить, когда закончилось одно действие и началось другое. Именно поэтому такие тесты часто ломаются, их сложно писать и поддерживать.</p>
11 <p>Несмотря на различия, в основе всех автоматических тестов лежат одни и те же принципы и инструменты. Этот курс познакомит вас с общими принципами тестирования и шаг за шагом проведет через все задачи, возникающие во время тестирования. Основные темы этого курса:</p>
11 <p>Несмотря на различия, в основе всех автоматических тестов лежат одни и те же принципы и инструменты. Этот курс познакомит вас с общими принципами тестирования и шаг за шагом проведет через все задачи, возникающие во время тестирования. Основные темы этого курса:</p>
12 <ul><li>Утверждения (Asserts)</li>
12 <ul><li>Утверждения (Asserts)</li>
13 <li>Фреймворки для тестирования (PHPUnit)</li>
13 <li>Фреймворки для тестирования (PHPUnit)</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><h2>Как мы тестируем тесты в данном курсе</h2>
17 </ul><h2>Как мы тестируем тесты в данном курсе</h2>
18 <p>В упражнениях этого курса система проверяет работу тестов на разных реализациях тестируемой функции, включая правильную и ошибочные. Ваша задача - написать тесты, которые успешно проходят для корректной реализации и падают с ошибкой для некорректных.</p>
18 <p>В упражнениях этого курса система проверяет работу тестов на разных реализациях тестируемой функции, включая правильную и ошибочные. Ваша задача - написать тесты, которые успешно проходят для корректной реализации и падают с ошибкой для некорректных.</p>
19 <p>Алгоритм решения практик в этом курсе:</p>
19 <p>Алгоритм решения практик в этом курсе:</p>
20 <ol><li>Изучить задание, ожидаемую логику работы функции</li>
20 <ol><li>Изучить задание, ожидаемую логику работы функции</li>
21 <li>Определить, как протестировать предоставленные реализации</li>
21 <li>Определить, как протестировать предоставленные реализации</li>
22 <li>Дополнить тесты, чтобы они:<ul><li>обнаруживали ошибки, допущенные в неправильных реализациях</li>
22 <li>Дополнить тесты, чтобы они:<ul><li>обнаруживали ошибки, допущенные в неправильных реализациях</li>
23 <li>успешно проходили для корректной реализации</li>
23 <li>успешно проходили для корректной реализации</li>
24 </ul></li>
24 </ul></li>
25 </ol><p>Запущенные тесты сообщают о результате проверки:</p>
25 </ol><p>Запущенные тесты сообщают о результате проверки:</p>
26 <ul><li><p>Успешно:</p>
26 <ul><li><p>Успешно:</p>
27 <ul><li>"Expected tests to fail, received tests failed" - тесты обнаружили ошибку в некорректной реализации</li>
27 <ul><li>"Expected tests to fail, received tests failed" - тесты обнаружили ошибку в некорректной реализации</li>
28 <li>"Expected tests to pass, received tests passed" - тесты успешно прошли для корректной реализации</li>
28 <li>"Expected tests to pass, received tests passed" - тесты успешно прошли для корректной реализации</li>
29 </ul></li>
29 </ul></li>
30 <li><p>Ошибка:</p>
30 <li><p>Ошибка:</p>
31 <ul><li>"Expected tests to pass, but error occurred. See output above." - тесты "упали" на корректной реализации</li>
31 <ul><li>"Expected tests to pass, but error occurred. See output above." - тесты "упали" на корректной реализации</li>
32 <li>"Expected tests to fail, but they passed. See output above." - тесты прошли на ошибочной реализации</li>
32 <li>"Expected tests to fail, but they passed. See output above." - тесты прошли на ошибочной реализации</li>
33 </ul></li>
33 </ul></li>
34 </ul><p>Технически проверка упражнений в данном курсе реализована с помощью утилиты<em>Supressor</em>, которая запускает тесты с разными реализациями. Более детальную информацию о том, как мы тестируем тесты в данном курсе, вы можете почитать в<a>этой статье</a>.</p>
34 </ul><p>Технически проверка упражнений в данном курсе реализована с помощью утилиты<em>Supressor</em>, которая запускает тесты с разными реализациями. Более детальную информацию о том, как мы тестируем тесты в данном курсе, вы можете почитать в<a>этой статье</a>.</p>