Продолжительность
4 ч 10 мин 48 сек
Количество уроков
18 Видео
Дата добавления
14.03.2018
Дата обновления
14.03.2018
В этой серии мы поговорим о статистике по репозиториям Git, построим RSpec с нуля, будем делать быстрые тесты с и без рельсов (Rails), обсудим навигацию по файлам в Vim и разберем еще много интересного.
Обзор серии:
- 1. Статистика по репозиториям Git. Мы будем использовать оболочку и инструменты командной строки git, вычисляя статистику для каждой ревизии.
- 2. Как и зачем избегать нуля. Мы посмотрим на ноль со многих сторон. Почему в ваших программах появляются нули? Какие проблемы они могут вызвать, когда они выходят из-под контроля?
- 3. Строим RSpec с Нуля. RSpec заманил многих программистов в мир Ruby с его красивым синтаксисом. Для некоторых его работа остается загадкой. Давайте развеяем это. Мы построим базовый синтаксис RSpec с нуля, проверим его, используя Test :: Unit. Конечно, это сделано в Ruby. Основные знания Ruby определенно помогут.
- 4. Source Code History Integrity. История исходного кода - это хорошая тема. Должны ли мы когда-либо редактировать историю? Это безопасно? Мы посмотрим, что может измениться при редактировании истории и как избежать потенциальных проблем. Мы также кратко поговорим о сообществах Mercurial и Git.
- 5. Extracting Domain Objects. В современных веб-фреймворках легко наследовать модель и объекты контроллера, что может вас оставить потом с очень огромными обьектами. Чтобы этого избежать, вы можете извлекать мелкие кусочки в свои классы. У этого есть много преимуществ, таких как: намного более быстрое выполнение теста, концепции именования в системе, которые ранее были неявными, и добавление явных уровней абстракции. Мы рассмотрим пример из самого Destroy All Software, приложение Rails и потянем кусочек логики модели, встроенный в контроллер, в свой класс с изолированными тестами.
- 6. Conflicting Principles. Существует множество объектно-ориентированных принципов проектирования. Заманчиво рассматривать их как абсолютные правила, но нам также нужно понимать компромиссы между ними.
- 7. Growing a Test Suite. При создании системы легко добавлять тесты в свой пакет без учета взаимосвязи между ними. Создав свой тестовый пакет более преднамеренно, вы можете писать более четкие тесты, а также повышать проектное давление на вашу систему. Мы создадим небольшой фрагмент кода в обоих направлениях: сначала просто добавляя тесты, затем расширяя существующие тесты и думая о последствиях.
- 8. Processes and Jobs. Процессы и рабочие процессы, выполняемые в вашей оболочке, являются ядром рабочего процесса разработки Unix. В первой половине этого скринкаста мы рассмотрим механизмы управления работой оболочки, как работает GNU Screen и как я использую их вместе для моего рабочего процесса разработки. Затем мы рассмотрим расширенное использование управления процессами, которое позволяет использовать мощную композицию инструментов Unix.
- 9. Exceptions and Control Flow. Мантра «не используй исключения для контроля» часто повторяется, но ее реальные последствия, как правило, не такие серьезные. Используя пример, я покажу вам, что я думаю об этом, и почему я в порядке с использованием исключений в некоторых случаях.
- 10. Fast Tests With and Without Rails. Rails startup может запускать тесты и особенно делать TDD болезненным. Вы можете избежать этого для большинства тестов, переместив код в каталог lib и проверив его вне Rails. Мы рассмотрим производительность тестов с Rails и без них. Сценарий, упомянутый в конце этого скринкаста, доступен для скачивания.
- 11. Git Workflow. Многие люди спрашивали о моем рабочем процессе git, так что вот он.
- 12. Packaging in Ruby and Python. За последние несколько лет произошел взрыв в упаковочных инструментах. Создание и установка уже не являются жесткими: теперь мы управляем несколькими версиями во время выполнения, изолируем комплекты пакетов для разных приложений и задаем зависимости повторяемым образом. Этот скринкаст смотрит на ландшафты в Ruby и Python, сравнивая их решения с этими проблемами.
- 13. File Navigation in Vim. Возможности навигации в Vim слабые, поэтому настройка может значительно ускорить работу. Мы рассмотрим поиск и открытие файлов, включая Rails-специфические хаки, которые помогут вам избежать проблемы поиска одного файла среди многих с похожими именами. Затем мы рассмотрим настройки, которые я использую, чтобы обеспечить эффективное управление окнами с помощью рабочего процесса TDD.
- 14. Extracting Objects in Django. Это сиквел Extracting Domain Objects. Еще раз, мы рассмотрим логику каталога Destroy All Software, вытащив ее из Django View (эквивалентно контроллеру Rails) и переместив ее в свой собственный класс, соответствующий домену. Затем мы изолируем и упростим тесты как для представления, так и для нового класса Catalog. Наконец, мы будем использовать новые изолированные тесты, чтобы расширить поведение Каталога, не изменяя или не нарушая представление и его тесты.
- 15. Quick and Easy Perf Tests. В этом скринкасте мы рассмотрим простой метод для постоянного анализа производительности: запуск небольших тестов по всем элементам контроля версий. С помощью нескольких строк сценариев оболочки и RSpec мы сможем получить визуальное представление о производительности нашей системы с течением времени, что позволит нам уловить проблемы с производительностью до их производства. Скрипт run-command-on-git-revisions, используемый здесь, доступен в GitHub.
- 16. A Refactoring Story. Размышляя о скринкасте на этой неделе, мне удалось сделать довольно большой рефакторинг на одном из контроллеров Destroy All Software. Я перевел путаницу беспорядка, спасая более разумное действие, подталкивая валидацию и специальные случаи к классам более низкого уровня. Мы рассмотрим предыдущую картину, изменения, которые я сделал, а затем изображение после. Есть изменения имен, структурные изменения и некоторые важные поведения Rails, которые были немного удивительными. Это отход от обычного стиля Destroy All Software, поэтому, пожалуйста, сообщите нам, что вы думаете!
- 17. Wrapping Third Party APIs. Сторонние API могут быть источником плохого дизайна в ваших приложениях. Когда вы смешиваете логику своего приложения с вызовами в API, вы скрываете обе обязанности. В этом скринкасте мы рассмотрим класс, где я это сделал. Затем мы извлечем доступ API в оболочку, упростив исходный класс и добавив ясность как для производственного кода, так и для тестов.
- 18. Clarity via Isolated Tests. Несколько Destroy All Software screencasts коснулись изолированного тестирования, но никогда не обращались к нему напрямую. Тема этого скринкаста: почему мы заботимся о том, чтобы изолировать тестируемый класс от других классов? Мы рассмотрим фактический пример, на котором я столкнулся: я начал TDD класс, позволяя ему интегрироваться с некоторыми другими простыми классами. Поняв, что тест стал беспорядочным, я удалил его, переписал его изолированным способом, и он был гораздо читабельнее. Мы вернемся к этим шагам, чтобы увидеть разницу в изолированном тестировании.