может быть проверено на основе тестирования, формально проверена? Есть ли гарантия, что программа правильная и правильная работа? Существуют ли какие-либо формальные основы для выбора теста? есть ли какой-нибудь алгоритм, чтобы следовать ему?Могу ли я проверить разработку, основанную на тестах?
ответ
TDD не является серебряной пулей. Вам все равно придется писать код, и вы все равно можете ошибаться в своей логике и коде. Я вижу TDD как инструмент мышления, который помогает вам работать с проблемой очень систематически.
Вот некоторые статьи, которые могут помочь вам с точки зрения того, что алгоритм следовать:
Это хороший момент, что без формальной спецификации, что делает система, трудно написать набор тестов, которые, как известно, являются адекватными. Вот несколько статей, которые могут помочь, наряду с цитатами из своих тезисов:
http://www.pst.ifi.lmu.de/~baumeist/publications/baumeister04a.pdf
«Цель данной работы является показать, что это возможно, при соответствующей поддержке инструмента, сочетать формальные спецификации с помощью теста без потери гибкости разработки, основанной на тестах ».
http://wiki.overturetool.org/images/d/df/WS9Mochio.pdf
«Эта статья представляет использование VDM ++ формального языка спецификаций в качестве основы масштабируемого гибкого формального (SAF) метода разработки программного обеспечения, который является гибким методом для разработки критически важных или крупномасштабного программного обеспечения»
https://online.tugraz.at/tug_online/voe_main2.getVollText?pDocumentNr=275810&pCurrPk=67400
«В данной работе мы предлагаем сочетание нескольких методов в гибкий формальный процесс разработки: модель на основе тестирование, формальные модели, уточнение моделей, проверка моделей и разработке через тестирование.»
TDD - это эмпирический, основанный на примерах процесс, а не основанный на доказательствах подход. С точки зрения правильности, это стоит только столько, сколько позволяет практика практикующего. TDD дает указания относительно , как для программы, управляемой тестами, а не , что для программирования или тестирования - вы могли бы в значительной степени TDD достичь совершенства, которая ничего не делает или проходит бесшумные тесты.
Вы можете применять традиционные методы тестирования, такие как Equivalence Partitioning, для повышения полноты ваших тестов TDD. Анализ Code coverage также обеспечивает (неполное) представление о действительности ваших тестов.
Для получения более точного ориентированного подхода вы можете проверить Property-based Testing. Его можно атаковать с помощью TDD-мышления, хотя цикл TDD, безусловно, не будет казаться каноническим в таком контексте.
Может быть проверено управляемое развитие официально подтверждено?
Официальной проверки разработки, основанной на испытаниях, не существует, поскольку основная цель ее заключается не в том, чтобы производить испытания, а в том, чтобы обеспечить подход к проектированию и кодированию.
Есть ли в программе гарантия на совместимость с программой?
Я не думаю, что есть полная гарантия того, что программа правильная, независимо от того, какой подход мы принимаем.
Есть ли какие-либо формальные основания для выбора теста?
Способ, которым мы выбираем тесты в TDD, - это написать те, которые должны помочь нам в реализации следующей единицы кода, который мы собираемся написать.
Есть ли какой-нибудь алгоритм для его просмотра?
Это на самом деле очень простой (но трудно овладеть).
- Подумайте о следующем блоке кода, который должен быть записан.
- Напишите тест, который потерпит неудачу, так как отсутствует код реализации.
- Запишите код и подтвердите, что тест прошел успешно.
- Refactor
Test Driven развитие не о тестировании конкретно, а о вождении дизайна приложения с помощью тестов. Что касается тестов - они только подтверждают, что нет * известных * ошибок. Если вы хотите, чтобы ваши тесты соответствовали данной бизнес-логике - пишите тесты для тестов и тесты для тестов на тесты. – zerkms