Подскажите, существуют ли какие-то общие стратегии обработки ошибок, применяемые при разработке крупных программных продуктов? Меня интересуют как методологические разработки данного вопроса, так и описание практического опыта. Скажем такие частные вопросы:
1. Использовать механизм исключений или анализ возвращаемого значения для обнаружения ошибок.
2. Централизованная обработка ошибок или обработка ошибок на месте. Под централизованной обработкой я имею в виду систему, где каждая операция проходит через некоторый, скажем, контроллер. Единственным назначением данного контроллера является анализ результата операции на предмет наличия ошибки (проверка возвращаемого значения, перехват исключения и т.п.) и публикация этого результата (лог, сообщение пользователю). Под децентрализованой системой я имею в виду систему, где ошибки обрабатываются и публикуются прямо на месте ее возникновения.
У каждого из этих вариантов мне видятся как свои достоинства так и свои недостатки. Полное отсутствие какой-либо систематизации также не рассматривается как большое преимущество. Хотелось бы выслушать ваши мнения по данному вопросу.
E>1. Использовать механизм исключений или анализ возвращаемого значения для обнаружения ошибок.
Механизм исключений.
E>2. Централизованная обработка ошибок или обработка ошибок на месте. Под централизованной обработкой я имею в виду систему, где каждая операция проходит через некоторый, скажем, контроллер. Единственным назначением данного контроллера является анализ результата операции на предмет наличия ошибки (проверка возвращаемого значения, перехват исключения и т.п.) и публикация этого результата (лог, сообщение пользователю). Под децентрализованой системой я имею в виду систему, где ошибки обрабатываются и публикуются прямо на месте ее возникновения.
Центральная — причем, она делается в первую очередь, на случай в том числе и непредвиденных ошибок).
Далее добавляются локальные обработчики для тех случаев, когда по месту мы можем точнее понять/устранить причину ошибки.
Здравствуйте, DarkGray, Вы писали:
DG>Центральная — причем, она делается в первую очередь, на случай в том числе и непредвиденных ошибок). DG>Далее добавляются локальные обработчики для тех случаев, когда по месту мы можем точнее понять/устранить причину ошибки.
Очень интересный вопрос — а нельзя ли привести несколько примеров ? Например для работы с GUI, клиент-сервера ну и т.п.
DG>>Центральная — причем, она делается в первую очередь, на случай в том числе и непредвиденных ошибок). DG>>Далее добавляются локальные обработчики для тех случаев, когда по месту мы можем точнее понять/устранить причину ошибки.
КВ>Очень интересный вопрос — а нельзя ли привести несколько примеров ? Например для работы с GUI, клиент-сервера ну и т.п.
Это центральная обработка.
Которая хорошо себя ведет даже для непредвиденных ошибок, например, программа была запущена с CD.
т.е. если пользователь "нажмет" команду "сохранить настройки", а диск защищен от записи, то пользователь получит корректное поведение: выведется сообщение об ошибке.
Здравствуйте, emag, Вы писали:
E>Привет.
E>Подскажите, существуют ли какие-то общие стратегии обработки ошибок, применяемые при разработке крупных программных продуктов? Меня интересуют как методологические разработки данного вопроса, так и описание практического опыта. Скажем такие частные вопросы:
E>1. Использовать механизм исключений или анализ возвращаемого значения для обнаружения ошибок.
E>2. Централизованная обработка ошибок или обработка ошибок на месте. Под централизованной обработкой я имею в виду систему, где каждая операция проходит через некоторый, скажем, контроллер. Единственным назначением данного контроллера является анализ результата операции на предмет наличия ошибки (проверка возвращаемого значения, перехват исключения и т.п.) и публикация этого результата (лог, сообщение пользователю). Под децентрализованой системой я имею в виду систему, где ошибки обрабатываются и публикуются прямо на месте ее возникновения.
E>У каждого из этих вариантов мне видятся как свои достоинства так и свои недостатки. Полное отсутствие какой-либо систематизации также не рассматривается как большое преимущество. Хотелось бы выслушать ваши мнения по данному вопросу.
Здравствуйте, emag, Вы писали:
E>Привет.
E>Подскажите, существуют ли какие-то общие стратегии обработки ошибок, применяемые при разработке крупных программных продуктов? Меня интересуют как методологические разработки данного вопроса, так и описание практического опыта. Скажем такие частные вопросы:
Полезный паттерн/стратегия генерации и обработки исключений приводиться в книге Крега Лармана "Применение UML и паттернов проектирвоания. Введени в OOD/A и UP".
Там есть примерно такие идеи:
— "Подсистеме не следует выкидывать исключение более низких уровней, дабы не раскрывать своего внутреннего устройства".
— Полезно соединять исключения в цепочки. Затем можно вывести сообщения о причинах ошибки от высокоуровневых — до низкоуровневых. Очень полезно.
— "Name the problem not the thrower" — касаемо именования класса исключений, давайте ему название проблемы, а не источника этой проблемы. Тогда обработка будет понятней и система гибкой, расшираемой.
Приводится в пример — уровневая архитектура, ошибки одного уровня обрабатываются непоследственным вышележащим уровнем и никогда не передаются дальше.
Здравствуйте, emag, Вы писали:
E>Привет.
E>Подскажите, существуют ли какие-то общие стратегии обработки ошибок, применяемые при разработке крупных программных продуктов? Меня интересуют как методологические разработки данного вопроса, так и описание практического опыта. Скажем такие частные вопросы:
E>1. Использовать механизм исключений или анализ возвращаемого значения для обнаружения ошибок.
E>2. Централизованная обработка ошибок или обработка ошибок на месте. Под централизованной обработкой я имею в виду систему, где каждая операция проходит через некоторый, скажем, контроллер. Единственным назначением данного контроллера является анализ результата операции на предмет наличия ошибки (проверка возвращаемого значения, перехват исключения и т.п.) и публикация этого результата (лог, сообщение пользователю). Под децентрализованой системой я имею в виду систему, где ошибки обрабатываются и публикуются прямо на месте ее возникновения.
E>У каждого из этих вариантов мне видятся как свои достоинства так и свои недостатки. Полное отсутствие какой-либо систематизации также не рассматривается как большое преимущество. Хотелось бы выслушать ваши мнения по данному вопросу.
Exception Management Architecture Guide
This document discusses design and implementation guidelines for exception management systems that use .NET technologies. It focuses on the process of handling exceptions within .NET applications in a highly maintainable and supportable manner.
Здравствуйте, DarkGray, Вы писали:
E>>1. Использовать механизм исключений или анализ возвращаемого значения для обнаружения ошибок.
DG>Механизм исключений.
E>>2. Централизованная обработка ошибок или обработка ошибок на месте. Под централизованной обработкой я имею в виду систему, где каждая операция проходит через некоторый, скажем, контроллер. Единственным назначением данного контроллера является анализ результата операции на предмет наличия ошибки (проверка возвращаемого значения, перехват исключения и т.п.) и публикация этого результата (лог, сообщение пользователю). Под децентрализованой системой я имею в виду систему, где ошибки обрабатываются и публикуются прямо на месте ее возникновения.
DG>Центральная — причем, она делается в первую очередь, на случай в том числе и непредвиденных ошибок). DG>Далее добавляются локальные обработчики для тех случаев, когда по месту мы можем точнее понять/устранить причину ошибки.
А вот на каком уровне делать эту "центральную" обработку?
Здравствуйте, Краснокутский Василий, Вы писали:
КВ>Здравствуйте, DarkGray, Вы писали:
DG>>Центральная — причем, она делается в первую очередь, на случай в том числе и непредвиденных ошибок). DG>>Далее добавляются локальные обработчики для тех случаев, когда по месту мы можем точнее понять/устранить причину ошибки.
КВ>Очень интересный вопрос — а нельзя ли привести несколько примеров ? Например для работы с GUI, клиент-сервера ну и т.п.
Вот код на C++, который используется в моем OLEDB-провайдере для InterBase для централизованной обработки всех ошибок.