Описание тега design-by-contract

Дизайн по контракту (DbC) или Программирование по контракту - это подход к разработке компьютерного программного обеспечения. Он предписывает разработчикам программного обеспечения определять формальные, точные и проверяемые спецификации интерфейса для компонентов программного обеспечения, которые расширяют обычное определение абстрактных типов данных с помощью предусловий, постусловий и инвариантов. Эти спецификации называются "контрактами" в соответствии с концептуальной метафорой условий и
1 ответ

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

Как вы убедитесь, что контракты, которые вы определили для ваших программных компонентов, использующих Design by Contract (DbC), в какой-то момент тестируются? Должен ли я написать модульные тесты для каждого контракта, который я определяю? Одно пре…
17 июл '14 в 11:45
3 ответа

Зачем использовать "assert" в проекте? (и зачем использовать его так много раз)

Я читал пример кода ListAdder, и сразу после переменной есть много утверждений, или они использовались почти в каждом методе, например: self.formatter = [[[NSNumberFormatter alloc] init] autorelease]; assert(self.formatter != nil); или же: - (UITabl…
06 окт '11 в 17:00
2 ответа

Yii: разработка по контракту с PHPUnit

Почему работает вызов PHPUnit в классе CTestCase: require_once('PHPUnit/Autoload.php'); .... PHPUnit_Framework_Assert::assertNotNull($object); Но если я называю это так же в файле каталога компонентов, он показывает мне: require_once(PHPUnit/Autoloa…
23 дек '13 в 17:09
1 ответ

Как использовать автономный писатель байт-кода с Cofoja?

Я пытаюсь сделать офлайн инструментарий моего кода с помощью Cofoja (контракты на Java). Кажется, я не могу получить контракты в скомпилированном файле класса с помощью автономного средства записи байт-кода (эта функция кратко упоминается в разделе …
30 сен '15 в 04:31
1 ответ

Утверждение, исключение, ошибка во время выполнения или неопределенное поведение?

Я работаю над библиотекой конечных автоматов с этими публичными методами: template <typename STATE_T> void add_state(); // allocate STATE_T on heap - STATE_T must derive from state template <typename FROM_STATE_T, typename TO_STATE_T> vo…
20 авг '13 в 18:39
1 ответ

Проверка аргументов F#

В F# есть несколько хороших функций проверки аргументов succint, которые можно использовать так: let foo (bar : string) : string = if bar = null then nullArg "bar" ... Я предпочитаю более предписывающее выражение, как, например, Кодекс контрактов: l…
2 ответа

Кодовые контракты в C# 4.0

Я сделал такой метод class PersonCollection { [Contracts.CanReturnNull] //dont know if something like this exists? IPerson GetPerson(Guid personId) { if (this.persons.Contains(personId)) return this.persons[personId]; else return null; } } Теперь вы…
08 июн '11 в 11:31
1 ответ

Какой наиболее широко используемый проект с открытым исходным кодом, который использует дизайн по контракту?

Мне любопытно, сколько дизайна по контракту используется на практике вне сообщества Eiffel. Существуют ли какие-либо активные проекты с открытым исходным кодом, которые используют дизайн по контракту? Или, чтобы превратить вопрос в один, у которого …
28 окт '09 в 02:31
2 ответа

Что вы думаете о библиотеке инструментов управляемого контракта

Недавно я видел это видео http://channel9.msdn.com/pdc2008/TL51/ о библиотеке управляемых инструментов Контракта, которая, безусловно, выглядит очень интересной. К сожалению, кажется, что они не включат это в сам язык, который был бы более элегантны…
26 янв '09 в 14:37
9 ответов

Обязательно ли проверять предварительные условия?

В эти дни я привык проверять каждое предварительное условие для каждой функции, так как у меня появилась привычка из курса программирования ОС в универе. С другой стороны, на курсе по разработке программного обеспечения нас учили, что общее предвари…
28 май '10 в 11:19
1 ответ

Убедитесь, что в памяти переменная не изменилась

Это продолжение моего предыдущего вопроса Я работаю над написанием некоторых ограничений для метода класса, используя PyContract (не PyContracts). В качестве постусловия я хотел бы убедиться, что адрес памяти некоторого объекта не изменился, т.е. id…
2 ответа

Можно ли считать это утверждение классовым инвариантом?

Это очень общая мысль, но давайте использовать C# в этом примере. При условии У меня одноразовый класс Foo реализует IDisposable, Foo имеет логический флаг disposed это ложно, пока Dispose называется, после чего это правда. Все публичные методы Foo …
1 ответ

Имеет ли смысл LSP для языка динамической типизации, такого как Ruby?

Рассмотрим классический пример на Java // Violation of Likov's Substitution Principle class Rectangle { protected int m_width; protected int m_height; public void setWidth(int width){ m_width = width; } public void setHeight(int height){ m_height = …
12 июн '13 в 23:33
4 ответа

Аргумент Исключения должны быть проверены модулем?

Я знаю, что этот вопрос очень похож на другие, которые были опубликованы ранее, но я хотел бы обсудить эту тему должным образом. Считаете ли вы, что "очевидное" исключение должно быть модульным тестированием? За очевидным исключением я имею в виду, …
23 авг '10 в 14:57
1 ответ

Frama-C/WP не может доказать цикл, инвариантный с \at

У меня проблемы с проверкой двух инвариантов цикла: loop invariant \forall integer i; 0 <= i < (\at(n, Pre) - n) ==> ((char*)m2)[i] == \at(((char*)m1)[i], Pre); loop invariant \forall integer i; 0 <= i < (\at(n, Pre) - n) ==> ((cha…
3 ответа

Проектирование по контракту в C для использования в автоматическом доказательстве теорем

Я работаю над парой проектов на C и хотел бы использовать автоматическое доказательство теорем для проверки кода. В идеале я просто хотел бы использовать ATP для проверки контрактов функций. Существуют ли какие-либо функции в C/gcc или внешнем прогр…
07 май '09 в 07:30
2 ответа

Контракты на код: почему некоторые инварианты не рассматриваются вне класса?

Рассмотрим этот неизменный тип: public class Settings { public string Path { get; private set; } [ContractInvariantMethod] private void ObjectInvariants() { Contract.Invariant(Path != null); } public Settings(string path) { Contract.Requires(path !=…
1 ответ

Использование аннотаций cofoja в IntelliJ

Я довольно новичок в IntelliJ. При попытке использовать аннотации кода cofoja я получаю следующие ошибки при сборке. Error:java: error in contract: package com.google.java.contract.core.agent does not exist Error:java: error in contract: package com…
05 июл '15 в 21:17
2 ответа

Инструмент / Техника для автоматического создания модульных испытаний на основе метода до / после условия

Интересно, есть ли какой-либо инструмент, который автоматически генерирует модульные тесты на основе предварительных и постусловий метода (и инварианта класса). Чтобы быть точным, предположим, что нам даны предварительные и постусловия (и, вероятно,…
2 ответа

Как может модульное тестирование "проверить контракт" на методе, который возвращает void?

Java 8 здесь, но это общий вопрос модульного тестирования, который (вероятно) не зависит от языка. Синтаксис написания теста JUnit прост, но решение о том, какие тесты писать и как тестировать основной / производственный код, является для меня самой…
31 мар '16 в 08:55