Описание тега 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…
13 июл '14 в 17:29
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…
23 окт '12 в 07:16
2
ответа
Можно ли считать это утверждение классовым инвариантом?
Это очень общая мысль, но давайте использовать C# в этом примере. При условии У меня одноразовый класс Foo реализует IDisposable, Foo имеет логический флаг disposed это ложно, пока Dispose называется, после чего это правда. Все публичные методы Foo …
02 дек '11 в 00:15
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…
23 мар '13 в 19:10
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 !=…
29 июл '10 в 14:19
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
ответа
Инструмент / Техника для автоматического создания модульных испытаний на основе метода до / после условия
Интересно, есть ли какой-либо инструмент, который автоматически генерирует модульные тесты на основе предварительных и постусловий метода (и инварианта класса). Чтобы быть точным, предположим, что нам даны предварительные и постусловия (и, вероятно,…
03 фев '19 в 07:18
2
ответа
Как может модульное тестирование "проверить контракт" на методе, который возвращает void?
Java 8 здесь, но это общий вопрос модульного тестирования, который (вероятно) не зависит от языка. Синтаксис написания теста JUnit прост, но решение о том, какие тесты писать и как тестировать основной / производственный код, является для меня самой…
31 мар '16 в 08:55