Томаш Лелек , Джон Скит - Software: Ошибки и компромиссы при разработке ПО
Название: | Software: Ошибки и компромиссы при разработке ПО | |
Автор: | Томаш Лелек , Джон Скит | |
Жанр: | Отладка, тестирование и оптимизация ПО | |
Изадано в серии: | Библиотека программиста | |
Издательство: | Питер | |
Год издания: | 2023 | |
ISBN: | 978-5-4461-2320-9 | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Software: Ошибки и компромиссы при разработке ПО"
Создание программных продуктов всегда связано с компромиссами. В попытках сбалансировать скорость, безопасность, затраты, время доставки, функции и многие другие факторы можно обнаружить, что вполне разумное дизайнерское решение на практике оказывается сомнительным. Советы экспертов и яркие примеры, представленные в этой книге, научат вас делать правильный выбор в дизайне и проектировании приложений.
Мы будем рассматривать реальные сценарии, в которых были приняты неверные решения, а затем искать пути, позволяющие исправить подобную ситуацию. Томаш Лелек и Джон Скит делятся опытом, накопленным за десятки лет разработки ПО, в том числе рассказывают о собственных весьма поучительных ошибках. Вы по достоинству оцените конкретные советы и практические методы, а также неустаревающие паттерны, которые изменят ваш подход к проектированию.
16+
Читаем онлайн "Software: Ошибки и компромиссы при разработке ПО". [Страница - 3]
- 1
- 2
- 3
- 4
- 5
- . . .
- последняя (119) »
3.3.1. Закрытие ресурсов при возникновении ошибки . . . . . . . . . . 87
3.3.2. Антипаттерн использования исключений .
для управления программной логикой . . . . . . . . . . . . . . . . . . . . 89
3.4. Исключения из сторонних библиотек . . . . . . . . . . . . . . . . . . . . 90
3.5. Исключения в многопоточных средах . . . . . . . . . . . . . . . . . . . . 93
3.5.1. Исключения в асинхронной программной .
логике с API обещаний . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.6. Функциональный подход к обработке ошибок с Try . . . . . . . . . . . 99
3.6.1. Использование Try в рабочем коде . . . . . . . . . . . . . . . . . 103
3.6.2. Объединение Try с кодом, выдающим исключение . . . . . . . 105
3.7. Сравнение производительности кода обработки исключений . . . . 106
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Глава 4. Баланс между гибкостью и сложностью . . . . . . . . . . . . . . . . . 112
4.1. Мощный, но не расширяемый API . . . . . . . . . . . . . . . . . . . . . 113
4.1.1. Проектирование нового компонента . . . . . . . . . . . . . . . . 113
4.1.2. Начиная с простого . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
4.2. Возможность предоставления собственной библиотеки метрик . . . 118
4.3. Обеспечение расширяемости API с использованием .
перехватчиков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.3.1. Защита от непредвиденного использования .
API перехватчиков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
4.3.2. Влияние API перехватчиков на производительность . . . . . . 125
4.4. Обеспечение расширяемости API за счет использования
прослушивателей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.4.1. Прослушиватели и перехватчики . . . . . . . . . . . . . . . . . . 130
4.4.2. Неизменяемость архитектуры . . . . . . . . . . . . . . . . . . . . 131
12 Оглавление
4.5. Анализ гибкости API и затраты на обслуживание . . . . . . . . . . . . 133
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Глава 5. Преждевременная оптимизация и оптимизация .
критического пути: решения, влияющие на производительность кода . . . . 137
5.1. Когда преждевременная оптимизация — зло . . . . . . . . . . . . . . . 138
5.1.1. Создание конвейера обработки учетных записей . . . . . . . . 139
5.1.2. Оптимизация обработки на основании ложных .
утверждений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
5.1.3. Оценка оптимизации производительности . . . . . . . . . . . . 141
5.2. Критические пути в коде . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
5.2.1. Принцип Парето в контексте программных систем . . . . . . . 146
5.2.2. Настройка количества параллельных пользователей .
(потоков) для заданного уровня SLA . . . . . . . . . . . . . . . . . . . . 147
5.3. Словарный сервис с потенциальным критическим путем . . . . . . . 148
5.3.1. Получение «слова дня» . . . . . . . . . . . . . . . . . . . . . . . . . 149
5.3.2. Проверка существования слова . . . . . . . . . . . . . . . . . . . . 151
5.3.3. Предоставление доступа к WordsService .
с использованием сервиса HTTP . . . . . . . . . . . . . . . . . . . . . . 151
5.4. Обнаружение критического пути в коде . . . . . . . . . . . . . . . . . . 153
5.4.1. Применение Gatling для создания тестов .
производительности API . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
5.4.2. Измерение хронометража кодовых путей .
с использованием MetricRegistry . . . . . . . . . . . . . . . . . . . . . . 157
5.5. Повышение производительности критического пути . . . . . . . . . . 159
5.5.1. Создание микротеста JMH для существующего решения . . . 160
5.5.2. Оптимизация проверки с использованием кэширования . . . 161
5.5.3. Увеличение количества входящих слов в тестах
производительности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Глава 6. Простота и затраты на обслуживание API . . . . . . . . . . . . . . . 170
6.1. Базовая библиотека, используемая другими инструментами . . . . . 171
6.1.1. Создание клиента облачного сервиса . . . . . . . . . . . . . . . . 172
6.1.2. Стратегии аутентификации . . . . . . . . . . . . . . . . . . . . . . 173
Оглавление 13
6.1.3. Понимание механизма конфигурации . . . . . . . . . . . . . . . 175
6.2. Прямое предоставление настроек зависимой библиотеки . . . . . . . 179
6.2.1. Конфигурация пакетного инструмента . . . . . . . . . . . . . . . 181
6.3. Абстрагирование настроек зависимой библиотеки . . . . . . . . . . . 183
6.3.1. Конфигурация стримингового сервиса . . . . . . . . . . . . . . . --">
- 1
- 2
- 3
- 4
- 5
- . . .
- последняя (119) »
Другие книги из серии «Библиотека программиста»:
Владстон Феррейра Фило - Теоретический минимум по Computer Science Жанр: Другие языки и системы программирования Год издания: 2018 Серия: Библиотека программиста |
Михал Яворски, Тарек Зиаде - Python. Лучшие практики и инструменты Жанр: Python Год издания: 2021 Серия: Библиотека программиста |
Владстон Феррейра Фило, Пиктет Мото - Теоретический минимум по Computer Science Жанр: Околокомпьютерная литература Год издания: 2022 Серия: Библиотека программиста |
Грант Бейлевельд, Джон Крон, Аглаэ Бассенс - Глубокое обучение в картинках. Визуальный гид по искусственному интеллекту Жанр: Искусственный интеллект Год издания: 2020 Серия: Библиотека программиста |