Библиотека knigago >> Компьютеры: Разработка ПО >> Отладка, тестирование и оптимизация ПО >> Software: Ошибки и компромиссы при разработке ПО

Томаш Лелек , Джон Скит - Software: Ошибки и компромиссы при разработке ПО

Software: Ошибки и компромиссы при разработке ПО
Книга - Software: Ошибки и компромиссы при разработке ПО.  Томаш Лелек , Джон Скит  - прочитать полностью в библиотеке КнигаГо
Название:
Software: Ошибки и компромиссы при разработке ПО
Томаш Лелек , Джон Скит

Жанр:

Отладка, тестирование и оптимизация ПО

Изадано в серии:

Библиотека программиста

Издательство:

Питер

Год издания:

ISBN:

978-5-4461-2320-9

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Software: Ошибки и компромиссы при разработке ПО"

Создание программных продуктов всегда связано с компромиссами. В попытках сбалансировать скорость, безопасность, затраты, время доставки, функции и многие другие факторы можно обнаружить, что вполне разумное дизайнерское решение на практике оказывается сомнительным. Советы экспертов и яркие примеры, представленные в этой книге, научат вас делать правильный выбор в дизайне и проектировании приложений.

Мы будем рассматривать реальные сценарии, в которых были приняты неверные решения, а затем искать пути, позволяющие исправить подобную ситуацию. Томаш Лелек и Джон Скит делятся опытом, накопленным за десятки лет разработки ПО, в том числе рассказывают о собственных весьма поучительных ошибках. Вы по достоинству оцените конкретные советы и практические методы, а также неустаревающие паттерны, которые изменят ваш подход к проектированию.

16+

Читаем онлайн "Software: Ошибки и компромиссы при разработке ПО". [Страница - 3]

. . . . . . . . . . . 85
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. Конфигурация стримингового сервиса . . . . . . . . . . . . . . . --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.