Форма обратной связи


Отлов ошибок в .Net приложениях

16.04.2010 17:19

В продолжении темы "Профессиональный подход к отлову ошибок" предлагаю вам небольшой класс на C#, который позволит вам организовать автоматическое уведомление о возникновении ошибок в приложении, написанном на платформе .Net. Ранее, похожий модуль был разработан для сайтов на PHP.

Вот пример использования этого класса:


 
 AppDomain.CurrentDomain.UnhandledException +=
     new UnhandledExceptionEventHandler(
         delegate(object sender, UnhandledExceptionEventArgs arg)
         {
             Exception exception = (Exception)arg.ExceptionObject;
 
             Context exctx = new Context();
             exctx.Server = "projectscloud.ru";
             exctx.Project = "<кодовое_название_проекта>";
             exctx.AuthKey = "<ключ>";
 
             Report exrpt = new Report();
             exrpt.Description = exception.Message;
 
             try
             {
                 exrpt.Submit(exctx);
             }
             catch (Exception)
             {
             }
         });
 

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

Этот механизм доступен не только для проектов на сервисе Облако проектов, но и для пользователей локальных установок системы управления проектами DEVPROM.

Подробнее, об использовании класса смотрите раздел: Автоматическая регистрация ошибок


Профессиональный подход к отлову ошибок

15.03.2010 13:25

Одним из основных правил разработки пользовательского сервиса, например, web-приложения, является обеспечение сокрытия всякого рода ошибок в работе сайта от посторонних глаз. Нет, не для того, чтобы не позориться :) а для того, чтобы не давать пищу для размышлений всяким злоумышленникам, которые захотят сломать ваш сайт. Конечно, это лишь дополнительная мера, но очень действенная, чтобы уменьшить риски, связанные с неопытностью разработчиков и объективным наличием ошибок в программном коде.

У данного подхода есть одна неприятная особенность: пользовательский интерфейс вашего сервиса часто является единственным источником информации об ошибках, который виден тестировщикам и разработчикам. Если вы уберете все сообщения об ошибках со страниц сайта, то просто не узнаете о них.

С данной проблемой можно бороться по-разному:

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

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

Все, что вам нужно сделать для автоматического получения сообщений об ошибках на сайте, разработанном на PHP:

  1. Создать проект на Облаке проектов.
  2. Загрузить скрипт PHPBugReporter.php, изменить параметры подключения к проекту.
  3. Подключить выполнение этого скрипта на всех страницах сайта путем обычного include(...)

Что важно, никаких дополнительных вызовов или изменений вашего кода не требуется. Этот скрипт умеет перехватывать как пользовательские ошибки, так и всякого рода "fatal error". Вы можете добавить дополнительную информацию о вашем приложении, контексте исполнения (например, имя текущего пользователя), чтобы проще было анализировать и воспроизводить ошибки.

В ближайших планах выложить подобные решения или расширения существующих обработчиков ошибок для известных языков и платформ (c++, c#, java).


PHP: автоматическое извещение об ошибках

12.03.2010 21:02

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

Необходимо включить этот модуль в исполняющийся скрипт и, предварительно, изменить в нем кодовое название проекта на нужное вам:


 
 $customerrorhandler->setProject( '<кодовое название проекта>' );
 

Также необходимо передать аутентификационный ключ, чтобы снизить угрозу автоматической генерации спама в ваш проект. Для получения ключа, необходимо перейти по ссылке: http://projectscloud.ru/feedback/<кодовое_название_проекта>/auth/key

Ключ доступен только авторизованным участникам проекта.


 
 $customerrorhandler->setAuth( '<ключ>' );
 


Новые возможности

10.03.2010 10:14

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

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

Добавлен новый параметр к настройкам формы обратной связи: authorEmail. Электронный адрес автора пожелания или вопроса. Если пользователь зарегистрирован на "Облаке проектов", то это поле заполняется автоматически, а если нет, то пользователю предлагается его заполнить. Если вы не хотите обременять пользователя публикацией электронного адреса, то можно заполнить это поле адресом одного из участников проекта. Тогда все внешние пожелания и вопросы будут отправляться от имени этого участника.


Автоматический репортинг ошибок

08.02.2010 13:46

Напомню, что проект "Форма обратной связи" предназначен в том числе и для того, чтобы пользователи ваших приложений и сайтов сообщали об ошибках в их работе. И здесь есть ряд проблем, которые мы пытаемся решить.

  • Как ни странно, но пользователи часто ленятся сообщать об ошибках разработчикам программ. Нужно сделать снимок экрана, скопировать логи, приатачить все это к письму, узнать адрес разработчиков и отправить письмо по нему. Не многовато ли действий?
  • Часто пользователи просто мирятся с появлением той или иной ошибки и просто не считают нужным сообщить о ней разработчикам, но вам этой крайне важно и вы хотите поскорее исправить все ошибки, чтобы ваш продукт был более качественным.
  • Разработка отдельного решения для автоматизации процедуры сообщения разработчикам об ошибках может занять много времени и будет достаточно трудоемкой.
  • Письма, которые присылают пользователи с сообщением об ошибках, часто не содержат нужной информации и вам приходится постоянно их переспрашивать, постоянно просматривать почту, дополнительно копировать информацию из почты в систему баг-трекинга.
  • Не желательно на сайте выводить всю отладочную информацию по возникшей ошибке в работе логики программы, или не работающем SQL-запросе, поскольку эта информация упрощает взлом вашего сайта. Ошибка должна дойти до вас, но пользователю ее показывать не обязательно, вы можете ограничиться лишь стандартной фразой типа: "Произошла ошибка, отчет о ней отправлен разработчикам."

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

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

В следующих постах мы покажем примеры использования этих компонентов.


Обсуждения