Вопрос

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

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

Я не просто смотрю на «какую» часть диагноза, но и на «Как». Например, действительно необходимо оценить быстрые / оптимальные времена отклика приложения. ... но есть ли способ установить / измерить его по технической диагностике кодовой базы вместо того, чтобы просто получать отзывы пользователей?

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

3. Тесты

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

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

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

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

Некоторые из вас, наверное, сразу подумали «Fxcop». Еще нет. Первое, что я бы сделал, это вырваться Ndepend..

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

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

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

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

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

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

  • Запустить его через профилировщик, такой как Eqatec.. Отказ Это должно помочь вам довольно легко определить любые серьезные проблемы с производительностью. Если приложение использует Back-End SQL, используйте инструмент Profific SQL для наблюдения за запросами. (Действительно, есть отдельные шаги для тестирования здоровья базы данных, которая является критической частью тестирования приложения, основанного на одном, но я не хочу становиться слишком безделью.

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

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


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

Другие советы

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

  1. Конечный пользователь доволен этим?
  2. Это стабильно?
  3. Это надежно?
  4. Это быстро?
  5. Является ли след памяти в течение длительных периодов и что я ожидал?

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

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

Еще одна хорошая вещь, которую нужно сделать, это запускать стандартные задачи через Муравьев профилирователь от Redgate или dottrace. от Jetbrains. Это скажет вам, что нужно время и сколько раз было запущено, то есть вы можете увидеть, где можно оптимизировать / кэшировать.

Если вы используете Nibernate, то NHPROF. отлично (или я думаю, что Ayende теперь выпустил UberProf. Что охватывает более стратегии доступа БД.) Это предупреждает вас о любом глупом доступе БД. Не удается просто использовать SQL Server Profiler Может показать, что вы снова запросили те же данные, но потребуются больше усилий, оттянувшись от мусора. Если вы закончите, используя это, вы можете сохранить его в таблицу БД, которую вы можете затем запрашивать более интеллектуальным образом.

Если вы ищете надежность, хорошая вещь для использования - это стратегия ведения журнала - поймай все исключения и введите их. Это достаточно легко, чтобы настроить log4net.. Отказ Также войдите в систему, если вы ударили определенные очки, о которых вы слегка подозрительно. Тогда имейте это работать на сервер (я использую Kiwi Syslog Server Что легко настроено и довольно мощное), которое может писать в БД, и вы можете запустить анализ результатов. Я бы порекомендовал против Ado.net Appender для Log4Net, так как он не Async, и поэтому замедлит ваше приложение вниз.

Наконец, в зависимости от того, что приложение, если вы действительно действительно увлекаетесь проведением некоторого времени на тестирование его здоровья, которое вы можете использовать Утомитель или Эквивалент WinForms Чтобы проверить передний конец. Это может даже быть длительным тестом, наблюдая за использованием памяти / процессора приложения, пока он используется. Если вы не беспокоятся, то Анализатор производительности Windows. позволит вам посмотреть на различные аспекты приложения, пока вы его используете. Всегда полезно, но вы должны действительно ткать, чтобы получить полезные метрики.

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

Первые два больших предмета, которые я бы выглядел, будет:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top