Получите историю изменений файлов из TFS, чтобы реализовать собственное поведение исключений

Я пытаюсь каким-то образом выяснить, кого «винить», когда в нашем приложении (на работе) возникает исключение. Конечно, это может быть из-за меня, но я могу принять это :). Но для этого мне нужна история файла в TFS, чтобы я мог проверить, кто последним внес изменения в строку исключения. Конечно, не всегда в строке исключения было вставлено ошибочное изменение, поэтому мне, вероятно, также потребуется проверить любые изменения в том же файле и, наконец, любые проверки, сделанные совсем недавно. Я не уверен, как я это сделаю, но я хотел бы сначала узнать у сообщества, есть ли какие-либо уже существующие решения для этого? У меня пока нет опыта работы с TFS API, поэтому я не могу сказать, что возможно, а что нет. Думаю, я бы интегрировал это в наше приложение в обработчик необработанных исключений. Когда некоторые кандидаты исключения найдены, мне нужно сообщить им по электронной почте. В процессе было бы неплохо записывать, сколько раз какое-либо исключение вызывалось каким-либо пользователем в нашей интрасети, кто, когда, как и т. д. Это могло бы сэкономить нам много времени (и денег).


person Andreas Zita    schedule 30.06.2011    source источник


Ответы (2)


Мне нравится дух! API TFS очень мощный, и вы можете перейти на любой уровень глубины для получения интересующей вас информации.

  • Вы можете создать приложение, давайте назовем ваше приложение приложением TFS API, проверьте, как вы можете программно подключиться к TFS http://geekswithblogs.net/TarunArora/archive/2011/06/18/tfs-2010-sdk-connecting-to-tfs-2010-programmaticallyndashpart-1.aspx.

  • API TFS позволяет запрашивать у TFS все изменения (наборы изменений), внесенные в файл. Итак, допустим, ClassAbc.cs вызывает исключение, если у вас есть шина событий, которая вызывает это исключение для вашего приложения TFS API, вы можете использовать метод в методе versionControlService GetChangeset, чтобы получить все наборы изменений, выполненные в этом файле. Узнайте, как это сделать, здесь http://geekswithblogs.net/TarunArora/archive/2011/06/26/tfs-2010-sdk-smart-merge-programmatically-create-your-own-merge.aspx.

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

    public static void GetMergeDetailsForChangeSet()
    {
        var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("Enter the url of team project"));
        var versionControl = tfs.GetService<VersionControlServer>();
    
    
        var a = versionControl.GetChangeset(12322);
    
        VersionSpec changeSpec = new ChangesetVersionSpec(a.Changes[0].Item.ChangesetId);
    
        var abc = a.Changes[0].Item.VersionControlServer.QueryMergesWithDetails(
            null,
            null,
            0,
            a.Changes[0].Item.ServerItem,
            changeSpec,
            a.Changes[0].Item.DeletionId,
            changeSpec,
            changeSpec,
            RecursionType.Full);
    
    }
    
  • Теперь, когда у вас есть фактический код, вы можете запустить набор StyleCop http://www.codeproject.com/KB/cs/StyleCop.aspx в отношении этого блока кода и при обнаружении возможных исключений или общие результаты анализа кода могут быть записаны в базу данных и отправлены пользователю по электронной почте.

Звучит интересно. Но, в качестве альтернативы, вы можете использовать функцию Annote в TFS, чтобы увидеть ряд изменений, внесенных разработчиком в файл, и связать анализ кода с вашим определением сборки CI, а также получать постоянную обратную связь об изменениях кода, внесенных разработчиками в вашей команде.

person Tarun Arora    schedule 30.06.2011

Это действительно имеет смысл? Подумайте, в скольких сценариях исключение вызвано изменением в момент его создания. Обычно причина исключения находится где-то наверху или даже не в стеке вызовов во время броска. Не стоит тратить время на то, что не поможет вам в 99% случаев.

person Florian Greinacher    schedule 30.06.2011
comment
Я бы не сказал, что обычно, но я согласен, что трудно точно определить фактическое изменение, вызвавшее исключение. Если бы я хотя бы мог сопоставить недавние изменения со стеком вызовов, я думаю, я мог бы найти, вероятно, около 70% в зависимости от структуры приложения. Я имею в виду, что если изменение не соответствует стеку вызовов, то это, очевидно, только побочный эффект какого-то другого изменения, и тогда гораздо сложнее найти причину, может быть, невозможно. В любом случае, с большой компанией и множеством исключений, которые не очень быстро доходят до вызывающего разработчика, много времени тратится впустую... - person Andreas Zita; 30.06.2011