Действительно разрабатывает работой по договору для Вас? [закрытый]

Я решил эту проблему, используя библиотеку joda-time , путем сопоставления на DataFrame и преобразования DateTime в строку:

import org.joda.time._
val time_col = sqlContext.sql("select ts from mr")
                         .map(line => new DateTime(line(0)).toString("yyyy-MM-dd"))

24
задан Daniel Daranas 22 June 2009 в 13:54
поделиться

10 ответов

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

// @returns null iff x = 0
public foo(int x) {
  ...
}

и превращает их в сгенерированные модульные тесты, как так:

public test_foo_returns_null_iff_x_equals_0() {
  assertNull foo(0);
}

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

14
ответ дан James A. Rosen 28 November 2019 в 23:57
поделиться

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

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

С контрактом, вина ясна.

вызывающая сторона удовлетворяла предварительные условия? Если не клиентская команда должна зафиксировать его.

, Учитывая допустимый запрос, получатель удовлетворял условия сообщения? Если не команда сервера должна зафиксировать это.

Сделал обе стороны, придерживаются контракта, но результат является неудовлетворительным? Контракт недостаточен, и проблема должна быть наращена.

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

8
ответ дан Ged Byrne 28 November 2019 в 23:57
поделиться

При изучении STL, повышения, MFC, ATL и многих проектов с открытым исходным кодом, Вы видите, что существует столько Операторов контроля, и это делает проект, идущий далее более безопасно.

Дизайн Контракта! Это действительно работает в реальном продукте.

3
ответ дан popopome 28 November 2019 в 23:57
поделиться

Фрэнк Крюгер пишет:

Гай: исключение Null Pointer автоматически генерируется для вас во время выполнения, нет смысла тестировать этот материал в прологе функции.

У меня есть два ответа на это:

  1. Нуль был только примером. Для квадрата (x) я бы хотел проверить, что квадратный корень результата (приблизительно) является значением параметра. Для сеттеров я бы хотел проверить, что значение действительно изменилось. Для атомарных операций я бы хотел проверить, все ли операции компонента выполнены успешно или все не выполнены (действительно один тест на успех и n тестов на сбой). Для фабричных методов в слабо типизированных языках я хочу проверить, что возвращается правильный тип объекта. У этого списка нет конца. По сути, все, что может быть протестировано в одной строке кода, является очень хорошим кандидатом на кодовый контракт в комментарии пролога.

  2. Я не согласен с тем, что вы не должны тестировать вещи, потому что они генерируют исключения во время выполнения. Во всяком случае, вы должны протестировать вещи, которые могут генерировать исключения во время выполнения. Мне нравятся исключения во время выполнения, потому что они заставляют систему быстро отказывать , что помогает при отладке. Но null в примере было значением результата для некоторого возможного ввода. Есть аргумент, чтобы никогда не возвращаться null, но если вы собираетесь, вы должны проверить это.

3
ответ дан Community 28 November 2019 в 23:57
поделиться

Абсолютно глупо не разработать согласно контракту при выполнении чего-либо в области SOA, и всегда полезно, если Вы работаете над каким-либо видом модульной работы, где биты & части могли бы быть выгружены позже, особенно если какие-либо черные boxen включены.

2
ответ дан Greg Hurlman 28 November 2019 в 23:57
поделиться

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

Для языков со слабым контролем типов или языков с динамическим контекстом (PHP, JavaScript), функциональные контракты также очень удобны.

Для всего остального, я отбросил бы его положение на бета-тестеров и модульные тесты.

Gaius: Исключение нулевого указателя брошено для Вас автоматически временем выполнения, нет никакого преимущества для тестирования того материала в прологе функции. Если бы Вы больше интересуетесь документацией, то я использовал бы аннотации, которые могут использоваться со статическими анализаторами и т.п. (чтобы удостовериться, что код не повреждает Ваши аннотации, например).

А более сильная система типов вместе с Дизайном Контракта, кажется, способ пойти. Смотрите на Spec# для примера:

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

1
ответ дан Community 28 November 2019 в 23:57
поделиться

Я считаю, что в языке программирования Go нет конструкций, которые делают возможным проектирование по контракту. паника / откладывание / восстановление не совсем то, что логика отсрочки и восстановления позволяет игнорировать панику, IOW игнорировать нарушенный контракт. По крайней мере, нужна какая-то форма неустранимой паники, которая действительно утверждается. Или, в лучшем случае, прямая языковая поддержка проектирования с помощью контрактных конструкций (до и после условий, реализации и инвариантов классов). Но, учитывая решительность языковых пуристов у руля корабля Го, я мало что из этого делаю.

Можно реализовать поведение, подобное утверждению, проверяя специальную ошибку утверждения в последней функции отсрочки в функции паники и вызывая runtime.Breakpoint () для сброса стека во время восстановления. Чтобы быть подобным утверждению, это поведение должно быть условным. Конечно, этот подход разваливается, когда новая функция отсрочки добавляется после той, которая выполняет assert. Что произойдет в большом проекте точно в неподходящее время, что приведет к пропущенным ошибкам.

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

1
ответ дан necode 28 November 2019 в 23:57
поделиться

Я на самом деле не использую Дизайн Контракта, ежедневно. Я делаю, однако знаю, что это было включено в язык D как часть языка.

0
ответ дан Brad Gilbert 28 November 2019 в 23:57
поделиться

Да, это так! На самом деле несколько лет назад я разработал небольшую структуру для проверки аргументов. Я делал проект SOA, в котором другая внутренняя система выполняла все виды валидации и проверки. Но чтобы увеличить время отклика (в тех случаях, когда ввод был неверным, и уменьшить загрузку этих внутренних систем), мы начали проверять входные параметры предоставляемых услуг. Не только для Not Null, но и для строковых шаблонов. Или значения из набора. А также случаи, когда параметры имели зависимости между ними.

Теперь я понимаю, что в то время мы реализовали небольшой дизайн в рамках контракта:)

Вот ссылка для тех, кто интересуется небольшой платформой Java Argument Validation . Который реализован как простое решение Java.

0
ответ дан Verhagen 28 November 2019 в 23:57
поделиться

Как модульное тестирование, так и дизайн по контракту являются ценными подходами к тестированию в моем опыте.

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

Глядя на презентации в InfoQ, кажется, что проектирование по контракту является ценным дополнением к традиционным модульным тестам на этапе интеграции компонентов. Например, можно сначала создать фиктивный интерфейс, а затем использовать компонент после или когда выпускается новая версия компонента.

Я не нашел набора инструментов, охватывающего все мои дизайнерские требования к тестированию по контракту на платформе .Net / Microsoft.

1
ответ дан 28 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

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