Что такое юнит в дизайне

Прежде всего, я инженер-программист Eiffel, поэтому я могу поговорить с этим по опыту.

Посылка TDD vs DbC что такое юнит в дизайне неверна

Две технологии не расходятся друг с другом, но дополняют друг друга. Дополнение связано с размещением утверждений и целей.

Цель TDD имеет как компоненты, так и область. Основными компонентами TDD являются логические утверждения и функция объекта (например, метод). Шаги просты:

  • Создайте объект.
  • Выполните некоторый код в функции.
  • Сделать утверждения о состоянии данных об объекте.

Утверждения, которые терпят неудачу, не проходят тест. Передача всех утверждений является целью.

Подобно TDD, контракты по контракту имеют цель, объем и компоненты. В то время как TDD ограничивается единичным тестированием, контракты могут жить через весь SDLC (жизненный цикл разработки программного обеспечения)! В рамках TDD выполнение объектных методов (функций) будет выполнять контракты. В настройке автотеста Eiffel Studio (TDD) создается один объект, выполняется вызов (точно так же, как TDD на других языках), но здесь заканчивается то, что подобие заканчивается.

В Eiffel Studio с автотестированием и кодом Эйфеля с контрактами цель несколько меняется. Мы хотим проверить отношения между клиентом и поставщиком. Наш код TDD притворяется клиентом нашего метода Поставщика на его объекте. Мы создаем наши объекты и вызываем методы, основанные на этой цели, а не просто упрощенное тестирование TDD-ish. Поскольку вызовы наших методов (функций) имеют контракты, эти контракты будут выполняться как часть нашего TDD-кода в Auto-test. Поскольку это верно, утверждения контракта (тесты), которые мы размещаем в нашем коде, НЕ должны появляться в нашем тестовом коде TDD. Наша задача (как программиста) состоит в том, чтобы просто обеспечить: A) кодовые + контракты выполняются вдоль всех N-путей, а B) кодовые + контракты выполняются с использованием всех разумных типов данных и диапазонов.

Возможно, больше написано о взаимосвязи TDD-DbC, но я не буду хамским с вами по этому вопросу. Достаточно сказать, что TDD и DbC НЕ расходятся с другими - не длинным выстрелом!

Сила контрактов дизайне DbC, выше которой TDD может достигать

Теперь мы можем обратить внимание на силу контрактов Design-by-Contract, за пределами которых TDD может достичь!

Контракты живут в коде. Они не являются внешними, а внутренними. Самый мощный бит (за пределами их отношений между клиентом и поставщиком контракта) о контрактах заключается в том, что компилятор предназначен для того, чтобы узнать о них! Они НЕ являются дополнением к Эйфелю! Таким образом, они участвуют во всех аспектах наследования (как традиционная вертикаль - наследование, так и в латеральных или горизонтальных Generics). Более того, они достигают места, которое TDD не может достичь - внутри метода (функции).

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

Кроме того, TDD не может выполнять инварианты класса, но в малейшей степени. Я попытался изо всех сил получить мой код автотестирования (который на самом деле является только версией Eiffel Studios для прикладного TDD), чтобы сделать инвариантную мимику класса. Это невозможно. Чтобы понять, зачем вам нужно знать, как и как работают инварианты класса Эйфеля. Итак, на данный момент вам просто нужно либо поверить мне на слово (или нет), что TDD неспособен к этой задаче, что DbC обрабатывает так легко, хорошо и элегантно!

Досягаемость DbC не заканчивается вышеуказанными понятиями

Мы отметили выше, что TDD живет во время единичного теста. Контракты, поскольку они применяются в коде под наблюдением и контролем компилятора, применяются в любом месте, где код может быть выполнен:

  • Workbench: вы, как программист, используете код, чтобы увидеть его работу (например, до TDD-времени или в сочетании с TDD-временем).

  • Единичный тест: ваше непрерывное интеграционное тестирование, модульное тестирование, TDD и т.д.

  • Альфа-тест: ваши первые опытные пользователи будут путешествовать по контрактам, поскольку они запускают исполняемый файл

  • Бета-тест: более широкая аудитория пользователей также будет преодолевать контракты.

  • Производство: окончательный исполняемый файл (или производственная система) может иметь постоянное тестирование, применяемое через контракты (TDD не может).

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

И если этого недостаточно, контракты (по дизайну) могут делать то, что никогда не может сделать утверждение TDD: скажите, где в стеке вызовов и какие отношения клиент-поставщик нарушены, и почему (что также немедленно предлагает, как это исправить). Почему это так?

Утверждения TDD предназначены для того, чтобы рассказать вам о результатах выполнения кода (выполнения) после факта. Утверждение TDD может видеть только до текущего состояния рассматриваемого метода. Какие утверждения TDD не могут сделать из их положения снаружи базы кода, это сказать вам, какой именно вызов был неудачен и почему! Вы видите, что ваш первоначальный вызов TDD для некоторого метода вызовет этот метод. Много раз этот метод будет вызывать другой, а другой, а другой - иногда, когда стек вызовов взлетает вверх и вниз, а затем и yon, происходит поломка: что-то неправильно записывает данные, не записывает их вообще или записывает это когда это не должно быть.

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

Резюме

Пусть повторяется.

  • TDD не расходится с DbC.

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

  • Договор расширяется и раскрывает больше о вашем коде при его разрыве.

  • TDD - это одна из форм катализатора для контрактов, которые должны быть выполнены.

В конце дня: я хочу обоих! Прочитав все это (если вы выжили), я надеюсь, что вы тоже это сделаете.


Источник: http://qaru.site/questions/171920/why-is-design-by-contract-not-so-popular-compared-to-test-driven-development


Рекомендуем посмотреть ещё:


Закрыть ... [X]

Как организовать Unit тестирование - Тест-дизайн и ручное Модные жакеты весна-лето 2018 женские

Что такое юнит в дизайне Unit-testing - Почему дизайн по контракту не так популярен по
Что такое юнит в дизайне Ty - Дизайн має проходити через серце. Незалежно
Что такое юнит в дизайне Что значат для вас юнит-тесты? / Хабрахабр
Что такое юнит в дизайне 3ds Max 2016. Дизайн интерьеров и архитектуры
Что такое юнит в дизайне Юнит (игры) - это. Что такое Юнит (игры)?
Что такое юнит в дизайне Дизайн интерьеров в 3ds Max 2011
Что такое юнит в дизайне Au jour le jour: Стихи про моду и модниц Стильная женщина
Что такое юнит в дизайне Балки на потолке в интерьере - фото вариантов, дизайн потолочных
Вышивка в интерьере: создай домашний колорит! Дизайн комнаты 10 кв м для двоих детей Засушенный лотос, d 6-8см.: продажа, цена в Минске. сушеные цветы Коричневая ванная комната: сочетание цветов, плитка, подбор мебели Личный опыт: Жизнь в Швейцарии квартира, быт и условия жизни Мебельная фабрика "Декор -Мебель ЧТПУП Ивацевичи, Лесная ул Одежда наложенным платежом - LOOK BUY Появляется сыпь как укусы комаров - Вопрос дерматологу - 03

ШОКИРУЮЩИЕ НОВОСТИ