Система Orphus

Типичные ошибки проектирования

Автор: Эрик Аллен
Издательство: Питер, 2003
224 страницы

Материал предоставил: Николай Гребенщиков
Найти в магазинах

Аннотация

Содержание
Комментарии

Аннотация

В области разработки безопасного и надежного программного обеспечения в последнее время наблюдается новый всплеск активности. Чтобы гарантировать создание устойчивой, безопасной системы, избежать ошибок проектирования, необходимо предпринимать определенные превентивные меры. Эта книга посвящена приемам и методам эффективной диагностики программного обеспечения. В ней приводится ряд типовых ошибок - повторяющихся соотношений между сообщением об ошибке и вызвавшем его дефекте программы. Книга будет интересна всем, кто знаком с программированием на языке Java и хотел бы научиться находить и исправлять ошибки в программах.

Содержание

Об авторе
О техническом рецензенте
Благодарности
Предисловие
Кому адресована эта книга
Структура книги
Веб-ресурсы
От издательства
Глава 1 Гибкие методы в хаотическом окружении
Тенденции в разработке, реализации и поддержке программного обеспечения
Увеличение спроса на надежные безопасные системы.
Осознание ограничений традиционных методов разработки программного обеспечения
Доступность открытых программных проектов
Спрос на языки программирования с платформо-независимой семантикой
Обучение в быстро меняющемся мире
Анатомия паттернов ошибок: зачем это нужно
Что мы узнали
Глава 2 Ошибки, спецификации и реализации
Что такое программная ошибка?
Спецификация как монолитный трактат
C++
Python
ML
Pascal
Преимущества спецификации
Реализация - это не спецификация
Построение экономичной спецификации спомощью "историй"
Тесты для устранения ошибок в спецификации
Блочные тесты не всемогущи
Что мы узнали
Глава 3 Процессы отладки и разработки
Отладка как научный эксперимент
Программное обеспечение специфицируется, собирается и выпускается пошагово
Структура программы поддерживается максимально простой
Программирование осуществляется парами
Пользователь на месте всегда доступен
Исходный текст программы принадлежит всем разработчикам
Наличие тестов для "всего, что может сломаться"
Включайте отладочные тесты в наборы блочных тестов
Будущее: тест-ориентированные языки
Что мы узнали
Глава 4 Процессы отладки и тестирования
Тестируемость программы
Храните программу в модели, а не в представлении
Используйте статический контроль типов для обнаружения ошибок
Используйте медиаторы для инкапсуляции функциональности в линиях разломов
Пишите методы с небольшими сигнатурами и аргументами по умолчанию
Используйте методы доступа, неменяющиесостоянияпамяти
Специфицируйте внепрограммные компоненты при помощи интерфейсов
Сначала пишите тесты
Интерфейс GlobalModel
Что мы узнали
Глава 5 Научный метод отладки
Программное обеспечение как бессмертная машина
Паттерны ошибок позволяют ускорить диагностику
Что мы узнали
Глава 6 О паттернах ошибок
Почему важно знание паттернов?
Почему именно эти паттерны ошибок?
Как организованы паттерны
Краткий справочник по отладке программ
Глава 7 Фальшивая черепица
Об этой разновидности ошибки
Симптомы
Причина, лечение и профилактика
Командный паттерн
Другие препятствия для вычленения кода
Родовые типы
Аспект-ориентированное программирование
Что мы узнали
Глава 8 Везде нулевые указатели!
Они неинформативны
Они неуловимы
Глава 9 Болтающийся компонент
Композитный и одноэлементный паттерны проектирования
Об этом паттерне ошибки
Симптомы
Причина
Лечение и профилактика
Что мы узнали
Глава 10 Нулевой флаг
Об этом паттерне ошибки
Симптомы
Причина
Лечение и профилактика
Устойчивость против недостатка диагностических фактов
Лучшее место для обработки исключений
А как насчет старых программ?
Что мы узнали
Глава 11 Двойной спуск
Об этом паттерне ошибки
Симптомы
Причина
Лечение и профилактика
Что мы узнали
Глава 12 Лживое представление
Об этом паттерне ошибки
Симптомы
Причина
Лечение и профилактика
Автоматизируйте физическую манипуляцию графическим интерфейсом пользователя
Избегайте этих методов
Лгут не только графические интерфейсы пользователя!
Что мы узнали
Глава 13 Вредительские данные
Об этой разновидности ошибок
Симптомы
Синтаксическая причина
Семантическая причина
Лечение и профилактика
Что мы узнали
Глава 14 Сломанный диспач
Об этой разновидности ошибок
Симптомы
Причина
Лечение и профилактика
Что мы узнали
Глава 15 Тип-самозванец
Об этой разновидности ошибок
Симптомы
Причина
Лечение и профилактика
Гибридные реализации
Что мы узнали
Глава 16 Расщепленный чистильщик
Об этой разновидности ошибок
Симптомы
Причина
Лечение и профилактика
Что мы узнали
Глава 17 Фиктивная реализация
Об этой разновидности ошибок
Симптомы
Причина
Обнаружение фиктивной реализации
Лечение и профилактика
Объединение исправлений
Что мы узнали
Глава 18 Осиротелый поток
Об этой разновидности ошибок
Симптомы
Причина
Лечение и профилактика
Осиротелые потоки играфические интерфейсы пользователя
Блочные тесты и многопоточность
Что мы узнали
Глава 19 Недостаточная инициализация
Об этой разновидности ошибок
Симптомы и причина
Лечение и профилактика
Лучше исправьте саму ошибку
Что мы узнали
Глава 20 Ошибки, связанные с зависимостью от платформы
О зависимости от платформы
Ошибки, зависимые от производителя
Ошибки, зависимые от версии
Ошибки, зависимые от операционной системы
Что мы узнали
Глава 21 Диагностический контрольный перечень
Общие понятия
Контрольный перечень разновидностей ошибок
Глава 22 Паттерны проектирования для отладки
Максимизация использования статического контроля
Когда только возможно, используйте для полей ключевое слово final
Используйте для методов ключевое слово final в тех случаях, когда они не должны переопределяться
Включайте классы для значений по умолчанию
Используйте контролируемые исключения, чтобы гарантировать, что все клиенты обрабатывают исключительные ситуации
Определяйте новые типы исключений, чтобы точнее обрабатывать исключительные ситуации
Разбивайте классы, экземпляры которых принимают одно из нескольких фиксированных состояний, на различные субклассы в иерархии Composite195
Минимизируйте количество операторов преобразования типов и проверки instanceof
Используйте одноэлементный паттерн проектирования для минимизации использования операторов instanceof
Минимизация количества ошибок в программе
Вычленяйте общие фрагменты программы
По мере возможности создавайте чистофункциональные методы
Сигнализируйте об ошибке сразу, кактолькоонаобнаружится
Обнаруживайте ошибки как можно раньше
Помещайте в программу формальные утверждения
Тестируйте программу как можно ближе к состоянию, в котором ее будет применять пользователь
Не последнее слово
Глава 23 Ссылки
Веб-сайты
Книги
Приложение
Конструктор списков анализатора строк

Комментарии

Николай Гребенщиков

После краткого ознакомления с данной книгой, сразу же бросается в глаза, что заглавия русскоязычного и английского вариантов ("Bug patterns in Java") значительно различаются. Не знаю, почему издатели пошли на такой шаг. Отчасти их можно понять. Определенная, конечно не решающая, часть книги все же затрагивает проблемы проектирования связанные с программированием на Java. Однако, большая часть книги все же сосредотачивается на концептуальных ошибках в применении объектно-ориентированного проектирования.

Эрик Ален не останавливается лишь на описании типичных ошибок и частных методах их решения. Он затрагивает в книге процесс создания программного обеспечения и отчетливо ставит акценты на важности процесса отладки и тестирования. В книге описывается как при помощи блочного (модульного) тестирования можно избежать большинства типичных ошибок. В своих выводах автор далеко не одинок. В недавнее время появилось целое течение методологий разработки программного обеспечения, называемое "Testing-driven" (процесс, управляемый тестированием). Во главу угла в таких методологиях разработки ставится процесс тестирования. Оно начинается сразу же с начала проекта и продолжается на всем его протяжении. Даже, большинство требований к разрабатываемой системе задается с помощью тестов для автоматического тестирования.

Вернемся все же к типичным ошибкам. Автор выделяет следующие причины для возникновения большинства ошибок:

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

В заключение, я хотел бы сказать, что книга безусловно полезная. Она изобилует примерами из жизни. Автор является участником команды разработчиков учебного программного комплекса DrJava.