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


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1927, книга: Локотство (СИ)
автор: Владимир Михайлович Белобородов

"Локотство (СИ)" Владимира Белобородова - это интригующая книга в жанре фэнтези, которая погружает читателей в параллельный мир, где реальная история переплетается с элементами магии и мифологии. История вращается вокруг молодого русского солдата, который попадает в мистическую деревню Локотство. Там он обнаруживает сообщество людей, обладающих сверхъестественными способностями. Эти люди, известные как "локотки", являются потомками древних славянских богов и хранителями...

СЛУЧАЙНАЯ КНИГА

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

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

Жанр:

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

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

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

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

Питер

Год издания:

ISBN:

978-5-4461-2320-9

Отзывы:

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

Рейтинг:

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

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

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

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

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

16+

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

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

9.3. Тестируемость

307

важных сценариев использования кэша — вытеснение старых элементов. Оно
может основываться как на размере кэша, так и на продолжительности пребывания элемента в кэше, а также на совокупности этих условий. При оценке новой
библиотеки стоит протестировать ожидаемое поведение, чтобы проверить свои
предположения относительно него.
Начнем эксперимент с построения простого кэша, который получает ключ
и преобразует его к верхнему регистру. В реальных системах используется более
сложное поведение загрузчика кэша, но для наших целей достаточно тривиального примера, представленного ниже.
Мы хотим проверить поведение библиотеки на основании наших предположений. В следующем листинге строится новый кэш со сроком жизни после записи, равным DEFAULT_EVICTION_TIME. CacheLoader получает значение для ключа,
предоставленного пользователем.
Листинг 9.14. Исходный вариант использования кэша
public class CacheComponent {
public static final Duration DEFAULT_EVICTION_TIME = Duration.ofSeconds(5);
public final LoadingCache cache;
public CacheComponent() {
cache =
CacheBuilder.newBuilder()
.expireAfterWrite(DEFAULT_EVICTION_TIME)
.recordStats()
.build(
new CacheLoader() {
@Override
public String load(@Nullable String key) throws Exception {
return key.toUpperCase();
}
});
}
public String get(String key) throws ExecutionException {
return cache.get(key);
}
}

Логика выглядит прямолинейно, но все равно следует проверить предположения относительно ее поведения. Код библиотеки написан не нами, поэтому он
может преподнести сюрпризы.
Требуется протестировать стратегию вытеснения используемого кэша. Для этого
нужно смоделировать задержку между вставкой элемента кэша и проверкой
процесса вытеснения. Поэтому мы должны ожидать столько, сколько идет вытеснение. В нашем сценарии использования это 5 секунд. В реальных системах

308

Глава 9. Сторонние библиотеки: используемые библиотеки становятся кодом

оно может длиться намного дольше (часы и даже дни). В следующем листинге
показан исходный, наивный подход к тестированию, требующий использования
Thread.sleep() c ожиданием DEFAULT_EVICTION_TIME.
Листинг 9.15. Тестирование без внедрения
// Дано
CacheComponent cacheComponent = new CacheComponent();
// Если
String value = cacheComponent.get("key");
// То
assertThat(value).isEqualTo("KEY");
// Если
Thread.sleep(CacheComponent.DEFAULT_EVICTION_TIME.toMillis());
// То
assertThat(cacheComponent.get("key")).isEqualTo("KEY");
assertThat(cacheComponent.cache.stats().evictionCount()).isEqualTo(1);

Обратите внимание: вытеснение производится при операции загрузки
(­get-методе). Чтобы инициировать его, необходимо вызвать метод доступа. Это
один из неожиданных аспектов, который не соотносится с предположениями
относительно библиотеки. Без качественного модульного теста это поведение,
скорее всего, обнаружить не удастся. Как уже говорилось, если время вытеснения
компонента слишком велико, тестирование компонента кэширования может
стать неприемлемым. Нужно обдумать исходный код сторонней библиотеки
(и возможно, просмотреть его), чтобы найти компонент, влияющий на поведение тестирования.
После беглого анализа выясняется, что LoadingCache при выполнении операции
чтения использует объект Ticker для определения того, должно ли значение
быть вытеснено. Доказательства приводятся в следующем листинге.
Листинг 9.16. Анализ тестируемости библиотеки кэширования
V get(K key, int hash, CacheLoader --">

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


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

Книги схожие с «Software: Ошибки и компромиссы при разработке ПО» по жанру, серии, автору или названию:

Другие книги из серии «Библиотека программиста»:

XSLT. Стивен Холзнер
- XSLT

Жанр: Программирование: прочее

Год издания: 2002

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

Управление проектами с нуля. Грег Хорин
- Управление проектами с нуля

Жанр: Управление, подбор персонала

Год издания: 2022

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

Python. Чистый код для продолжающих. Эл Свейгарт
- Python. Чистый код для продолжающих

Жанр: Python

Год издания: 2022

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