Насколько сформировавшийся платформа Microsoft Code Contracts?

Я смог достичь своей цели, вставив nodePath = item.previous_element.previous_element после строки 10. Мой результат был следующим:

def alarms(self,soup):
        alarms=soup.find_all('toOffnormal')
        #comments=soup.findAll(text=lambda text:isinstance(text, Comment))
        nodeStartList=[]
        for alarm in alarms:
            nodeStart=alarm.parent.parent.parent
            nodeStartList.append(nodeStart)
        dataList=[]
        for item in nodeStartList:
            nodeName=item['name']
            nodePath=item.previous_element.previous_element
            #for comment in comments:
                #x='/'+nodeName
                #if x in comment:
                    #nodePath = comment
            #if nodePath in comments:
                #comments.remove(nodePath)
            if item.find('timeDelay')!= None:
                timeDelay=item.find('timeDelay').get_text("|", strip=True)
            else:
                timeDelay='0'

            if item.find('eventEnable')!=None:
                toOffnormal=item.find('toOffnormal').get_text("| ", strip=True)
                toFault=item.find('toFault').get_text("| ", strip=True)
                toNormal=item.find('toNormal').get_text("| ", strip=True)
            else:
                toOffnormal='false'
                toFault='false'
                toNormal='false'

            alarmText=item.find('alarmText').get_text("| ", strip=True)


            if item.find('highLimit')!= None:
                highLimit=item.find('highLimit').get_text("| ", strip=True)
            else:
                highLimit='N/A'

            if item.find('lowLimit')!= None:
                lowLimit=item.find('lowLimit').get_text("| ", strip=True)
            else:
                lowLimit='N/A'

            if item.find('deadband'):
                deadband=item.find('deadband').get_text("| ", strip=True)
            else:
                deadband='N/A'

            if item.find('lowLimitEnabled'):
                lowLimitEnabled=item.find('lowLimitEnabled').get_text("| ", strip=True)
            else:
                lowLimitEnabled='false'

            if item.find('highLimitEnabled'):
                highLimitEnabled=item.find('highLimitEnabled').get_text("| ", strip=True)
            else:
                highLimitEnabled='false'

            itemList=[nodeName,nodePath,timeDelay,toOffnormal,toFault,toNormal,alarmText,highLimit,lowLimit,deadband,lowLimitEnabled,highLimitEnabled]
            dataList.append(itemList)

        self.df=pandas.DataFrame(dataList)
        self.df.columns=['pointName','pointPath','timeDelay','toOffnormal','toFault','toNormal','alarmText','highLimit','lowLimit','deadband','lowLimitEnabled','highLimitEnabled']
        return self.df
43
задан John Gietzen 27 January 2010 в 23:11
поделиться

4 ответа

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

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

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

Таким образом, мое чувство состоит в том, что на данный момент, потому что в 3,5 мы пытаемся основываться на платформе, которую верификатор не достаточно понимает, что это, вероятно, стоит ожидать 4,0.

9
ответ дан Greg Beech 26 November 2019 в 23:06
поделиться

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

  • Существование общественного форума. Вы собираетесь хотеть быть в состоянии обсудить неизбежные проблемы, с которыми Вы сталкиваетесь с другими разработчиками, и Вы хотите знать, что существует прилично сильная база разработчиков там для обсуждения решений с.
  • А успешный выпуск пилотного проекта. Обычно то, когда Microsoft Research выпускает что-то, что они думают, достаточно зрело, чтобы использоваться в коммерческом проекте, они будут работать с организацией, чтобы вести ее и затем выпустить тот открытый исходный код проекта к как подтверждение концепции и пробная версия огнем всех основных функций. Это вселило бы большую веру, что большинство общих сценариев контракта покрыто и работа.
  • [еще 118] подробная документация. Простой и простой, в какой-то момент Вы собираетесь хотеть сделать что-то с контрактами, что Вы не можете сделать еще использования Microsoft Code Contracts. Вы хотите быть в состоянии к быстро и ясно обосновать, что Ваш сценарий еще не поддерживается. текущая документация собирается сохранить Вас предполагающими и пробующими разными вещами, тем не менее, по-моему, которые закончатся в большое количество напрасно потраченного времени.
8
ответ дан JoshJordan 26 November 2019 в 23:06
поделиться

Он недостаточно зрелый.

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

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

Жаль, что Microsoft убила эту замечательную идею своей ценовой политикой. Я бы хотел, чтобы кодовые контракты стали мейнстримом, но этого не произойдет.

Эпическая неудача.

2
ответ дан 26 November 2019 в 23:06
поделиться

Последний зрелый ответ на это был в 2009 году, и .NET 4 отсутствует. Я полагаю, нам нужно обновление:

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

Я понимаю, что это что-то вроде обновления с «Безвредного» до «В основном безвредного».

Домашняя страница Code Contracts содержит ссылки на довольно подробную документацию в формате PDF. В документации приведены рекомендации по использованию в разделе 5. Подводя итог, вы можете выбрать, насколько смело вы относитесь к инструментам контрактов, которые переписывают ваш IL в ваших сборках Release.

Мы используем режим «не переписывать мой Release IL».

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

if(arg != null) { 
    throw new ArgumentNullException("arg"); 
}
// Blank line here insisted upon by StyleCop

становится:

Contract.Requires(arg != null);

Ваши функции короче. Ваши намерения яснее. И вам больше не нужно писать тест с именем ArgumentShouldNotBeNull только для достижения 100% покрытия.

Пока что я столкнулся с двумя проблемами:

  • У меня был модульный тест, который полагался на сбой контракта. Вы можете утверждать, что существование теста было ошибкой, но я хотел задокументировать этот конкретный запрет в форме теста. Тест не прошел на моем сервере сборки, потому что у меня не были установлены инструменты. Решение: установить инструменты.

  • Мы используем два инструмента, которые переписывают IL: Code Contracts и PostSharp . Они не очень хорошо ладили. Версия 2.0.8.1283 PostSharp устранила проблему. Я бы осторожно оценил, как любые два инструмента для перезаписи IL уживаются.

Пока преимущества перевешивают риски.

Устранение устаревших проблем, поднятых в других ответах:

  • Документация Code Contracts довольно обширна, хотя, к сожалению, в формате PDF.
  • Существует как минимум один форум по контрактам кода , организованный Microsoft.
  • Code Contracts Standard Edition предоставляется бесплатно при наличии лицензии VS2010.
  • .NET 4 отсутствует. Я столкнулся с контрактами Microsoft при реализации универсальных интерфейсов сбора.
32
ответ дан 26 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

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