Современная программная инженерия. ПО в эпоху эджайла и непрерывного развертывания

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Дэвид Фарли, легендарный разработчик и создатель continuous delivery, рассказывает о фундаментальных принципах разработки современного ПО. Пора познакомиться с наиболее эффективными и грамотными методами управления рабочими процессами, которые позволят повысить качество ваших приложений, вашей жизни и жизни ваших коллег. Ключевые концепции, лежащие в основе эффективной разработки ПО, — это непрерывное обучение и управление сложностью. Дэвид Фарли анализирует их и формулирует принципы, следование которым приведет к улучшению дизайна ПО и качества кода, а также методы и подходы, доказавшие свою эффективность и приводящие к успеху. Речь идет не об абстракциях, вы освоите реальные приемы, которыми пользуются опытные разработчики ПО. Эти техники эмпирические и итеративные, они основаны на обратной связи и сосредоточены на выполнении кода, то есть соответствуют всем требованиям современной разработки.

Author(s): Дэвид Фарли
Series: Для профессионалов
Publisher: Питер
Year: 2023

Language: Russian
Pages: 288
City: СПб.

Оглавление
О книге
Вступительное слово
Введение
Определение программной инженерии
Структура книги
Благодарности
Об авторе
От издательства
I Что такое программная инженерия
Глава 1. Введение
Инженерия — практическое применение теоретической науки
Что такое программная инженерия?
Переосмысление понятия программной инженерии
Как добиться успеха
Зарождение программной инженерии
Меняя парадигму
Итоги
Глава 2. Что такое инженерия?
Производство не наша проблема
Инженерия проектная, а не производственная
Рабочее определение инженерии
Инженерия — это не код
Почему инженерия важна?
Ограничения ремесленного производства
Точность и масштабируемость
Управление сложностью
Повторяемость и точность измерений
Инженерия, креативность и ремесло
Почему то, чем мы занимаемся, — это не программная инженерия
Компромиссы
Иллюзия прогресса
От ремесла к инженерному делу
Ремесла недостаточно
Пришло ли время мыслить иначе?
Итоги
Глава 3. Основы инженерного подхода
Разработка — это индустрия изменений?
Важность измерений
Использование метрик стабильности и пропускной способности
Основы программной инженерии
Экспертное познание
Экспертное управление сложностью
Итоги
II Оптимизация для обучения
Глава 4. Итеративный подход
Практические преимущества итеративного подхода
Итерация как стратегия защитного проектирования
Сила планирования
Практическая ценность итеративного подхода
Итоги
Глава 5. Обратная связь
Практический пример важности обратной связи
Обратная связь в кодировании
Обратная связь в интеграции
Обратная связь в дизайне
Обратная связь в архитектуре
Быстрая обратная связь предпочтительнее
Обратная связь в дизайне продукта
Обратная связь в организации и культуре
Итоги
Глава 6. Инкрементализм
Важность модульности
Инкрементализм в организации
Инструменты инкрементализма
Ограничение влияния изменений
Инкрементальный дизайн
Итоги
Глава 7. Эмпиризм
Основано на реальности
Отделяйте эмпиризм от эксперимента
«Я знаю ошибку!»
Избегайте самообмана
Изобретайте реальность, соответствующую аргументам
Опирайтесь на реальность
Итоги
Глава 8. Быть экспериментатором
Что значит быть экспериментатором?
Обратная связь
Гипотеза
Измерения
Управление переменными
Автоматизированное тестирование как эксперимент
Помещая результаты тестирования в контекст
Объем эксперимента
Итоги
III Оптимизация для управления сложностью
Глава 9. Модульность
Признаки модульности
Недооценка важности хорошего дизайна
Важность тестируемости
Тестируемость повышает модульность
Службы и модульность
Развертываемость и модульность
Модульность в разных масштабах
Модульность в системах, создаваемых человеком
Итоги
Глава 10. Связность
Модульность и связность: основы дизайна
Базовое снижение связности
Контекст имеет значение
Высокопроизводительное программное обеспечение
Отсылка к связанности
Обеспечение высокой связности с помощью TDD
Как добиться связности
Цена плохой связности
Связность в человеческих системах
Итоги
Глава 11. Разделение ответственности
Внедрение зависимости
Разделение необходимой и случайной сложности
Важность DDD
Тестируемость
Порты и адаптеры
Когда использовать порты и адаптеры
Что такое API?
Использование TDD для разделения ответственности
Итоги
Глава 12. Сокрытие информации и абстракция
Абстракция или сокрытие информации
Почему образуются большие комки грязи?
Организационные и культурные проблемы
Технические вопросы и вопросы проектирования
Страх чрезмерного усложнения
Повышение абстракции с помощью тестирования
Сила абстракции
Дырявые абстракции
Выбор подходящих абстракций
Абстракции из предметной области
Абстрактная случайная сложность
Изолируйте код от сторонних систем
Всегда скрывайте информацию, если это возможно
Итоги
Глава 13. Управление связанностью
Стоимость связанности
Масштабирование
Микросервисы
Снижение связанности может означать больше кода
Слабая связанность — не единственная важная деталь
Выбор в пользу слабой связанности
В чем отличие от разделения ответственности?
DRY — это слишком просто
Асинхронность как инструмент слабой связанности
Проектирование слабой связанности
Слабая связанность в организациях
Итоги
IV Инструменты программной инженерии
Глава 14. Инструменты инженерной дисциплины
Что такое программная разработка
Тестируемость как инструмент
Точки измерения
Сложности с обеспечением тестируемости
Как улучшить тестируемость
Развертываемость
Скорость
Управление переменными
Непрерывная доставка
Общие инструменты для поддержки разработки
Итоги
Глава 15. Современный инженер-разработчик
Инженерия как человеко-ориентированный процесс
Организации — лидеры в цифровой сфере
Результаты и механизмы
Устойчивость и широкая применимость
Основы инженерной дисциплины
Итоги