gifts2017

Протоколирование сложных алгоритмов для пользователя

Опубликовал Осипов Сергей (fixin) в раздел Программирование - Практика программирования

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

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

Поэтому пользователи звонят программисту, он берет в руки отладчик, и начинает разбираться.

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

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

Когда я работал с ЗУП, то видел там замечательный механизм - выполнить расчет по сотруднику с комментарием. В комментарии выдавались подробности расчета. Но, видимо, 1с не хотело напрягать пользователей, и комментарии были очень поверхностными, иногда все-таки приходилось брать отладчик или смотреть промежуточные отчеты для того, чтобы понять, почему считает так или иначе.

Еще один пример - права доступа. Порой очень сложно понять, почему та или иная кнопка не доступна. Однако, если есть протокол назначения прав доступа (например, нажали кнопочку и выдался протокол, где расписано, как сработало назначение прав на этот документ), то все упрощается.

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

Чтобы протоколирование не влияло на производительность, нужно включать его только тогда, когда требуется анализ, ну примерно как это сделано в 1С:ЗУП, где можно рассчитать зарплату по сотруднику без комментария или с комментарием. Однако на практике удобнее включать комментирование по выделенным строкам. Т.е. выделилил строки, нажали кнопку обработки - с комментарием или без. Потом можно смотреть протоколы.

Такой протокол в программировании называется трассировка. И он очень полезен. Я предлагал 1С в ЗУП внедрить протоколирование начислений налогов и прочих участков, которые для пользователей пока выглядят как черные ящики, но пока что не был услышан.

Пару рекомендаций:

·        В протоколе указывайте, что именно протоколируется - документ или номер строки.

·        Можно использовать не только окно сообщений, но и табличные документы

·        Ошибки отделяйте от информационных сообщений, выделяя их жирным или красным цветом

·        Протокол неплохо сохранять в отдельном поле документа, но не как текст, а как список важных тегов, т.е. что именно происходило с данной строкой.

Ну, и напоследок, приведу пример протокола.

Я конвертирую одни счета в другие. В документе в строке содержится исходный счет дебета и кредита и аналитика.

Протокол сообщает о том, какие счета получены в результате и какие правила конвертации применены.

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

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

 

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

Тоже очень удобный метод. Рекомендую.

Пример протокола на картинке к статье.

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Борис Моренко (BorisMor) 28.03.12 20:46
2. Осипов Сергей (fixin) 28.03.12 21:09
(1) а смысл? Описывается подход. Сообщить("Переменная Х=" +Х+ " на шаге " + i ) не является проблемой. Трассировка. Только данных для пользователей.
Или накапливать данные в таблицах, а потом их выводить, если стоит галочка вывода этих таблиц.
3. Fomix (fomix) 29.03.12 10:35
(1) BorisMor, Рассмешил... Смотри типовые конфы! Например, Комплексная вер.7.7, там есть вывод комментариев
4. Игорь Дайнеко (Dnki) 30.03.12 18:42
А не надо смеяться! Несмотря на банальность предложения, не видел, что бы этот прием программисты применяли, кроме меня разумеется :).
Вот действительно вопрос: как реализовали в программе, в диалоге? Некрасивость в том, что не хочется перегружать текст вещами вроде:
Если ВключенаТрассровка Тогда
Сообщить();

Я для краткости завел одну процедуру Трассировка("Что вывести"). Ее втыкаю где надо. А процедура проверяет включен ли флаг вывода. Разумеется использовать не для критичных по скорости циклов.
5. Dimon (klel) 02.04.12 21:41
Интересная вещь стоит призадуматься
6. Андрей (AnKonAlm) 03.04.12 10:20
Я тоже использую протоколирование. НО - при обработке больших объемов информации, лучше сообщать пользователю только глючную информацию. Ибо, если сообщать всё, то тяжело искать нужное.
7. Осипов Сергей (fixin) 03.04.12 10:40
(6) не надо этих народных песен. Выгружайте все в таблицу.
Если надо, пользователь скопирует в эксель и там проанализирует с помощью автофильтрами...
8. INSh Шамриков (INSh) 03.04.12 11:28
Пробовал использовать подобный подход, но по-факту - ошибки (глюки) вылезают в самых непредсказуемых (а потому, непротоколируемых) местах и все-равно приходится лезть в код или отладчик и смотреть там... :-)
Зато, при нормальной работе модулей, генерится море бесполезной (никем неиспользуемой) информации :-)
Однако, согласен с тем, что в некоторых случаях протоколирование очень полезная вещь. Автору - "+"
9. Осипов Сергей (fixin) 03.04.12 11:55
(8) у меня есть расчет премий продавцам. При этом генерируются таблицы значений. Если поставить галочку "Показывать отладочную инфу", эти таблицы значений тупо выводятся в MXL. Далее их можно смотреть.
Помимо этого, если щелнуть на товаре в отчете, продавец получает опять эти же ТЗ, но отфильтрованные по товару.
То бишь ему становится понятно, откуда берутся цифры и проверять легко.
О чем идея? О том, что нужно иметь возможность восстановить любой сделанный расчет
10. Ильшат (shatt) 05.04.12 03:16
Тоже так стараюсь делать
(4) идея хороша!
а в типовых конфах еще есть Процедура СообщитьИнформациюПользователю(СтрокаСообщенияПользователю)
и СообщитьОбОшибке(ТекстСообщения, Отказ = Ложь, Заголовок = "", Статус = Неопределено)
в общем модуле ОбщегоНазначения
11. Осипов Сергей (fixin) 05.04.12 08:17
(10) иногда надо использовать два режима - отладки и расчета. Т.е. если неясно, откуда расчет берет цифры, запускаешь его в режиме отладки и он или выводит комментарии или в конце выводит таблицу с детализацией расчета.
12. Александр (alexmobile) 30.10.12 09:08
Безусловно полезная вешь. Но как ее реализовать?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа