Диагностирование наследия.NET

Предположите прием в приложение.NET прежней версии. записанный в C#

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

Я только смотрю на "КАКОЙ" часть диагноза, но также и в "КАК". Для, например, Это действительно необходимо оценить быстрое/оптимальное время отклика приложения...., но является там путем к установить/измерить его техническим диагнозом кодовой базы вместо того, чтобы просто получить обратную связь пользовательского опыта?

alt text
(источник: gmu.edu)

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

15
задан Glorfindel 23 July 2019 в 21:08
поделиться

5 ответов

1. Восприятие пользователей

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

Я бы хотел задать такие вопросы, как:

  • Работает ли он плавно?
  • Легко ли им пользоваться?
  • Когда вы его используете, чувствуете ли вы уверенно , что это Делаете то, что ожидаете?
  • Это BMW, Civic или Pinto?

Ответы будут субъективными. Это нормально. На данный момент мы просто ищем общие тенденции. Если подавляющее количество пользователей говорит, что он постоянно дает сбой или что они боятся выполнять базовые задачи, то у вас проблемы.

Если приложение порождает суеверие , и вы слышите такие вещи, как «кажется, что в четверг утром оно не работает» или «Я не знаю, что делает эта кнопка, но она не работает, если я щелкни сначала ", беги в холмы.

2.Документация

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

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

Разработчики в конечном итоге делают (неверные) предположения из-за отсутствия надлежащей документации. Я разговаривал с несколькими людьми в отрасли, которые думают, что это необязательно, но каждая система, которую я когда-либо видел или над которой работал, с небольшой документацией или без нее, в конечном итоге изобиловала ошибками и недостатками дизайна.

3. Тесты

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

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

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

4. Статический анализ

Некоторые из вас, вероятно, сразу же подумали «FxCop». Еще нет. Первое, что я сделаю, это выделю NDepend .

Просто беглый взгляд на дерево зависимостей приложения даст вам огромный объем информации о том, насколько хорошо разработано приложение. Большинство худших антипаттернов дизайна - Big Ball of Mud , Circular Dependencies , Spaghetti Code , God Objects - будут видно почти сразу с высоты птичьего полета зависимостей.

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

После я убедился, что общий дизайн / архитектура не является полным мусором, затем я бы посмотрел на FxCop . Я не воспринимаю его вывод как евангелие, но меня особенно интересуют Предупреждения о проектировании и Предупреждения об использовании (предупреждения безопасности также являются красным флажком, но очень редко).

5.Анализ времени выполнения

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

  • Сначала записать все -случайные исключения при нормальном запуске. Это поможет измерить надежность приложения, чтобы увидеть, не проглатывается ли слишком много исключений или используются ли исключения для управления потоком. Если вы видите много экземпляров верхнего уровня Exception или SystemException производных, будьте осторожны.

  • Запустите его через профилировщик, например EQATEC . Это должно помочь вам довольно легко определить любые серьезные проблемы с производительностью. Если приложение использует серверную часть SQL, используйте инструмент профилирования SQL для отслеживания запросов. (На самом деле есть отдельные шаги для проверки работоспособности базы данных, что является важной частью тестирования приложения, основанного на ней, но я не хочу уходить слишком далеко от темы).

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

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


И это все, о чем я могу сейчас думать. Я обновлю, если еще что-нибудь придет в голову.

21
ответ дан 1 December 2019 в 03:14
поделиться

Это не советы по кодированию или профилированию, а общий способ оценки работоспособности программы на любом языке. В порядке важности

  1. Доволен ли он конечным пользователем?
  2. Он стабилен?
  3. Он надежен?
  4. Это быстро?
  5. Стабильно ли объем памяти в течение длительного времени и что я ожидали бы?

Если ответ на все 5 из этих вопросов утвердительный, значит, у вас работоспособное приложение. Я бы сказал, что 1-3 действительно самые важные. Он может быть некрасивым внутри и, возможно, уродливым, но он здоров, если он соответствует этим спецификациям и должен навсегда оставаться в устаревшем режиме (т.е. небольшие исправления)

1
ответ дан 1 December 2019 в 03:14
поделиться

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

Еще одна приятная вещь - запускать стандартные задачи через ANTs Profiler из RedGate или dotTrace из Jetbrains. Он расскажет вам, на что нужно время и сколько раз он запускался, что означает, что вы можете увидеть, где можно оптимизировать / кэшировать.

Если вы используете NHibernate, тогда NHProf отлично (или я думаю, что Айенде теперь выпустила UberProf , который охватывает больше стратегий доступа к БД). Это предупредит вас о любых глупостях. Доступ к БД продолжается. Если это не удается, просто используя профилировщик SQL Server , вы можете снова и снова запрашивать одни и те же данные, но для фильтрации мусора потребуется больше усилий. Если вы в конечном итоге используете это, вы можете сохранить его в таблице БД, которую затем можете запросить более интеллектуальным способом.

Если вам нужна надежность, неплохо было бы использовать стратегию ведения журнала - перехватывать все исключения и регистрировать их. Это достаточно просто настроить с помощью log4net . Также записывайте, если вы попали в определенные моменты, к которым у вас есть немного подозрения. Затем запустите его на сервер (я использую kiwi syslog server , который легко настроить и достаточно мощный), который может записывать данные в БД, и вы можете выполнять анализ результатов. Я бы порекомендовал не использовать приложение ADO.NET для log4net, поскольку оно не является асинхронным и поэтому замедлит работу вашего приложения.

Наконец, в зависимости от того, что это за приложение, если вы действительно хотите потратить некоторое время на проверку его работоспособности, вы можете использовать WaTIN или эквивалент Winforms для тестирования внешнего интерфейса. .Это может быть даже длительный тест, отслеживающий использование памяти / процессора приложением во время его использования. Если вас это не беспокоит, то анализатор производительности Windows позволит вам изучить различные аспекты приложения во время его использования. Всегда полезно, но вам нужно действительно копаться, чтобы получить полезные показатели.

Надеюсь, это поможет.

1
ответ дан 1 December 2019 в 03:14
поделиться

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

  1. Добавление глобальной обработки исключений с ведением журнала, а также поиск любой обработки исключений, которая может «проглатывать» исключения, скрывая проблемы с вашим приложением (я думаю, что есть также счетчик производительности Windows, который покажет количество исключений в секунду, которые генерируются вашим приложением). Это может помочь выявить любые потенциальные проблемы согласованности данных в вашем приложении.
  2. Добавьте мониторинг производительности и ведение журнала к любым зависимостям сохраняемости данных и / или внешних сетевых служб, которые может использовать приложение, например, к регистрации запросов к базе данных или вызовов веб-служб, выполнение которых занимает больше X времени.
0
ответ дан 1 December 2019 в 03:14
поделиться

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

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

0
ответ дан 1 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: