Приемы написания ПО, устойчивого к ошибкам Ольга Шаронова.

Презентация:



Advertisements
Похожие презентации
Государственное образовательное учреждение среднего профессионального образования. «Прокопьевский политехнический техникум» Причины сбоев и технология.
Advertisements

Практическое программирование на Java к.ф.-м.н. Козлов Дмитрий Дмитриевич Кафедра АСВК, Лаборатория Вычислительных комплексов.
Защищенность и отказоустойчивость ОС Повторение модуля, основные понятия и вопросы для повторения.
8.4. Функциональные требования к IT-продукту. Требования, приведенные в "Федеральных критериях", определяют состав и функциональные возможности ТСВ. Требования,
Применение иерархического метода для построения защищенной операционной системы. Выполнила Шилова О. И-411.
Лекция 3. Исключения и прерывания в встроенных системах.
Лекция 1. Этапы разработки программы.. Человек вводит в компьютер исходные данные (например, с клавиатуры).
Защита данных в базах данных: обеспечение целостности и безопасности данных "Стыдно не уметь защищать себя рукою, но ещё более стыдно не уметь защищать.
Прерывания Определение прерывания Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств.
BACK-IN-TIME Debugger (отладчик с возможностью обратного выполнения программ) Введение. Как известно, значительная часть усилий по разработке программного.
При работе с компьютером порой возникают проблемы, которые могут затормозить процесс производства. Машина начинает перегружаться, выдавать непонятные.
Калугин Александр, PhD, PMP Mercury Development Project Director.
Создание резервной копии в системе Экспресс. Система «Экспресс» включает в себя большое количество файлов - базы данных, библиотеки форм, реестры и т.д.
Проблемы обеспечения безопасности приложений Тема 20.
Лекция 4. Режимы работы микропроцессора. Взаимодействие микропроцессора с остальными устройствами Взаимодействие МП с остальными устройствами МПС происходит.
ВирусыВирусы. Компьютерные вирусы это программы, которые мешают нормальной работе компьютера, перезаписывают, повреждают или удаляют данные.
Операционные системы Подготовила Подготовила студентка студентка 1 курса группы Э курса группы Э-108 Шпудейко Кристина Шпудейко Кристина.
Жизнь полна сюрпризов. Хорошие сюрпризы– на пользу вашей организации. Плохие сюрпризы– вредят вашей организации. Управление рисками использует ваши ресурсы.
EXtreme Programming XP Тема 4. XP Тест – это процедура, которая позволяет либо подтвердить, либо опровергнуть работоспособность кода. Тесты должны быть.
Лекция 2. ИСТОЧНИКИ ОШИБОК В ПРОГРАММНЫХ СРЕДСТВАХ.
Транксрипт:

Приемы написания ПО, устойчивого к ошибкам Ольга Шаронова

О чем мы будем говорить Что такое отказ системы, чем опасны отказы Почему не бывает безотказно работающих систем? Что такое отказоустойчивость и отказобезопасность? Как разрабатывают отказоустойчивое и отказобезопасное ПО? – Микроприемы: на уровне исходного кода – Макроприемы: дизайн системы

Что такое «хорошо», и что такое «плохо» Система работает так, как надо: – Предоставляет требуемые сервисы с требуемым качеством Отказ системы: – Система «упала», недоступна и/или работает некорректно, утеряны данные или нарушена их целостность

Как происходит отказ системы сбой ошибка отказ вселенная системапользователь Что-то пошло не так отказ устройств или внешних сервисов, непредусмотренные условия эксплуатации, злонамеренные действия внутренняя ошибка (баг) Состояние системы отклонилось от нормального непредвиденный сбой повлиял на систему Пострадало качество работы системы система «упала» система недоступна и/или работает некорректно, утеряны данные или нарушена их целостность

Чем опасны отказы

Non-critical: Довольне пользователи Non-critical: Довольне пользователи Business-critical: успех и благополучие Mission-critical: существование и работоспособность Отказы: критичность систем Life-critical: здоровье и жизнь Чем критичнее система, тем дороже пользователям обходится её отказ Производителям ПО даже отказы некритических систем могут стоить дорого.

Отказ ПО: масштабы последствий Airline – 4 июня 1996 г. Ракета-носитель, запущенная ESA, взорвалась на 37- ой секунде полета. – Ущерб: $7 млрд - разработка; $500 миллионов – ракета и груз. – Причина: необработанное исключение arithmetic overflow при приведении 64-bit fp к 16-bit signed int Therac-25 – год 6 человек, проходивших лучевую терапию, получили передозировку (в десятки раз) – Ущерб: как минимум 2 смерти непосредственно от передозировки, в остальных случаях – увечие и последующая смерть. – Причина: race condition при синхронизиции задачи, контролирующей оборудование, и задачи, обрабатывающей команды оператора

Почему не бывает идеальных программных систем, работающих безотказно

Как разрабатываются программы СпецификацияСпецификацияДизайнДизайнРеализацияРеализацияТестированиеТестирование Эксплуатация и поддержка Что и как должна делать система? Какой должна быть система, чтобы все это уметь? Строим по проекту! Неучтенные требования и ситуации, ошибки архитекторов Забытые или неправильно понятые требования Система работает и выполняет свои функции Проверяем: Получилось ли у нас то, что было нужно? Некорректная реализация дизайна, необработанные ситуации, ошибки программистов (баги) Часть важных ситуаций не протес- тирована Система работает неправильно, возникают отказы..и как в них закрадываются ошибки

Как борются за качество систем СпецификацияСпецификацияДизайнДизайнРеализацияРеализацияТестированиеТестирование Эксплуатация и поддержка враг не пройдет! найти и обезвредить! Предотвращение ошибок: использование инструментов и методик, «мешающих» ошибаться, ревью дизайна, прототипирование Обнаружение и исправление ошибок: ревью кода, тестирование, отладка Процессы разработки ПО

В вашей программе есть баги. В любой. Разработка программы – это процесс. Его нельзя закончить – только прекратить (как ремонт квартиры) Быстро, качественно, дешево – выберите 2 параметра из 3х Высокая сложность систем => большой простор для ошибок Человеческий фактор There are two ways to write error-free programs; only the third one works. (с)Alan J. Perlis

Как уменьшить вероятность отказа системы?

Expect the unexpected! состояние системы ожидаемоенеожиданное «хорошее» норма экзотика (нам повезло) «плохое» приемлемо неуправляемая ситуация, катастрофа У системы есть возможность справиться с ситуацией: восстановиться или хотя бы минимизировать урон Значит, надо предвидеть плохие ситуации и переводить их в разряд ожидаемых Хотим минимизировать вероятность попадания сюда

Поведение «хорошей» системы в «плохой» ситуации Отказобезопасность в случае возниктовения ошибок - корректно завершить работу, предовратив или минимизировав урон (graceful shutdown) Отказоустойчивость частично или полностью восстановиться после возникновения ошибок и продолжить работу (graceful degradation) Робастность предсказуемое поведение практически в любой (хорошей или плохой) ситуации.

Отказоустойчивость и отказобезопасность сбой ошибка вселенная система пользователь Обработка ошибок норма корректное завершение, минимум потерь корректное завершение, минимум потерь о.устойчивость о.безопасность

Выбор стратегии определяется требованиями к системе и зависит от ситуации Non-critical: Довольне пользователи Non-critical: Довольне пользователи Business-critical: успех и благополучие Mission-critical: существование и работоспособность Life-critical: здоровье и жизнь ОТКАЗОУСТОЙЧИВОСТЬОТКАЗОБЕЗОПАСНОСТЬ Прекращение функционирования может привести к катастрофическим последствиям Восстановление после ошибки стоит не слишком дорого и радует пользователя Продолжение работы может привести к катастрофическим последствиям Все остальные случаи

Как достигаются отказоустойчивость и отказобезопасность систем

Свойства сбоев, ошибок и отказов

Ошибка и отказ могут проявиться не сразу вселенная системапользователь сбой ошибка отказ время Кто-то запортил данные в памяти приложения Используются неверные параметры вычислений Автопилот самолета выдал неверную команду Обращение к битым данным Накопилась ошибка вычислений

Несколько сбоев могут быть причиной одной ошибки, и несколько ошибок – причиной отказа Сломался первый диск RAID1 массива Невозможно прочитать файл конфигурации Система не стартует, или начинает делать непонятно что вселенная система пользователь Сломался второй диск RAID1 массива Конфигурация по умолчанию не задана Невозможно проинициализиро вать систему

Один сбой может быть причиной нескольких ошибок Сломался диск Невозможно прочитать файл паролей вселенная система Невозможно прочитать или сохранить данные пользователь Утрачено все, что нажито непосильным трудом Отказ в авторизации: невозможно войти в систему

Цепная реакция сбой перезагрузка Баг, приводящий к перезагрузке системы при получении сообщения «я ожил» перезагрузка сбой->ошибка->отказ->сбой->ошибка... коммутатор January 15, 1990 AT&T Network Outage 114 коммутаторов перезагружаются каждые 6 секунд, оставив человек без междугородной связи на 9 часов

Свойства сбоев, ошибок и отказов (итог) Разнообразие причин, часть из которых вне нашего контроля Могут проявляться не сразу Отношение «много ко многим» Цепные реакции

Что можно сделать при возникновении ошибки Обнаружить и диагностировать Изолировать – Не допустить распространения и «цепной реакции» Обработать – Восстановить работоспособность системы. – Либо: предпринять все возможное для обеспечения сохранности данных и рессурсов и завершить работу Проинформировать об ошибке

Микроуровень: исходный код

«Оборонительное» программирование Минимизация количества опасных предположений, которые делает код: – предположения, которые, оказавшись неверными, могут привести к неправильной работе программы Безопасные предположения: – Все даные важны, пока не доказано обратное – Все данные повреждены, пока не доказано обратное – Весь код содержить ошибки, пока не доказано обратное A good programmer is someone who always looks both ways before crossing a one-way street. (с)Doug Linder

Микроуровень: обнаружение и изоляция ошибок Защита от неправильного использования компоненты в вызывающем коде – Проверять корректность входных данных – Что будет, если вызывающая сторона проигнорирует наш сигнал об ошибке? Защита от ошибок в вызываемом коде – Не передавать непроверенные данные – Всегда проверять результат выполнения операции и корректность возвращаемых данных

Микроуровень: обработка ошибок Логирование Коррекция – Retry – Использование значений по умолчанию – Альтернативный путь алгоритма Безопасное завершение – Освобождаем все выделенные ресурсы, сообщаем о возникновении ошибки, передаем управление вызывающему коду

Макроуровень: дизайн системы

Подходы Обнаружить и диагностировать – Введение дополнительных компонентов: Контроль работоспособности: ping/echo, heartbeat Детекторы неисправностей (deadlocks, утечки памяти) Изолировать – fault containers Обработать – Стратегии: Roll-back: Возврат к предыдущему хорошему состоянию (ex. транзакции, чекпойнты, бэкапы данных) Roll-forward: Поиск ближайшего хорошего состояния и переход к нему (ех. журналирование, «сборщики мусора» для освобождения ресурсов) – Введение избыточности, чтобы система могла продолжать функционирование в случае отказа отдельных компонент

Использование избыточности для отказоустойчивости Redundancy: «запасная» компонента, идентичная работающей, на которую можно переключаются в случае отказа основной компоненты (failover) Replication: несколько идентичных компонент выполняют одну и ту же задачу параллельно, результат выбирается «голосованием» Diversity: несколько различных реализаций компоненты выполняют одну и ту же задачу параллельно, результат выбирается «голосованием»

Как в систему закладывается «отказокорректное» поведение СпецификацияСпецификацияДизайнДизайнРеализацияРеализацияТестированиеТестирование Эксплуатация и поддержка Сбор и анализ требований: какие функции системы критичны? Graceful degradation или shutdown? Определяем стратегии обработки ошибок, Используем паттерны проектирования, при необходимости вводим избыточность Defensive Programming: Пишем код, который корректно работает в любых ситуациях Defensive Programming: Пишем код, который корректно работает в любых ситуациях Механизмы обработки отказов в действии Fault injection: искуственное создание сбоев, чтобы тестировать код, обрабатывающий ошибки

Заключение Любая программная система содержит ошибки, потенциально ведущие к её отказу. Последствия отказов варьируются от неприятных до катастрофических. Expect unexpected: система должна быть готова к сбоям – Отказоустойчивость: минимизация вероятности отказов – Отказобезопасности: уменьшение последствий отказов Приемы для обеспечения «отказокорректного» поведения: – На микроуровне: «оборонительное» программирование – На уровне системы: введение дополнительных компонентов для диагностики и восстановления The most likely way for the world to be destroyed, most experts agree, is by accident. Thats where we come in; were computer professionals. We cause accidents. – Nathaniel Borenstein

Вопросы?

Спасибо!

Критичности отдельных функций системы Non-critical: Довольне пользователи Non-critical: Довольне пользователи Business-critical: успех и благополучие Mission-critical: существование и работоспособность Life-critical: здоровье и жизнь Информация о группе крови пациента сохранна и корректна Результаты новых анализов и обследований не «теряются» Сведения о пациентах доступнаы 90% времени Данные о средней температуре по больнице обновляются 2 раза в день Данные хранятся без потерь в течение 5 лет Система управления данными о пациентах в больнице