Как TDD соответствует Языкам Функционального программирования?

Как TDD соответствует Языкам Функционального программирования как F# и Erlang?

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

Эти два на самом деле имеют общие черты, или я просто сверхдумаю это немного?

6
задан leeand00 8 February 2010 в 16:39
поделиться

5 ответов

Проектирование программного обеспечения v методология разработки


Они ортогональны.

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

22
ответ дан 8 December 2019 в 02:21
поделиться

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

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

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

  • Наконец, есть несколько хороших автоматических инструментов для тестирования функциональных программ. Для F # у нас есть FsCheck (который основан на QuickCheck, известном из Haskell). Они извлекают выгоду из различных свойств функциональных программ.

Итак, они оба имеют разное предназначение и, по сути, разные вещи, но есть некоторые приятные отношения (например, чай и чайник :-), они совершенно разные вещи, но очень хорошо работают вместе!)

6
ответ дан 8 December 2019 в 02:21
поделиться

Я думаю, что TDD и функциональное программирование (FP) отличаются тем, что TDD - это методология, а FP - парадигма программирования.

Я бы сказал, что FP помогает в практике TDD, поскольку FP поощряет вас делать вещи детерминированными, когда это возможно. Детерминированные функции гораздо легче тестировать, чем недетерминированные.

9
ответ дан 8 December 2019 в 02:21
поделиться

Вы правы, когда пишете функциональную программу, вы можете использовать уравнение для получения определения функции. Однако такое рассуждение обычно не существует в какой-то овеществленной форме (например, в тестах), поэтому обычно не бывает, чтобы функция доказывалась как правильная способом, который можно проверить с помощью машины или человека. Конечно, можно использовать TDD с функциональными языками (например, используя любую .NET-совместимую библиотеку TDD с F #), чтобы убедиться, что функции были получены правильно, но есть также другие стратегии тестирования, которые могут быть более уникальными для функциональных языков, например, использование QuickCheck для рандомизированной проверки спецификаций.

2
ответ дан 8 December 2019 в 02:21
поделиться

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

0
ответ дан 8 December 2019 в 02:21
поделиться
Другие вопросы по тегам:

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