Хороший пример сложного кода с использованием TDD [закрыто]

37

Что может быть хорошим примером использования TDD в крупных, реальных, сложных проектах? Все примеры, которые я видел до сих пор, являются игрушечными проектами для книги или газеты ...

Можете ли вы назвать проект с открытым исходным кодом, который интенсивно использует TDD? Желательно на C ++, но я могу читать Java и C # или другие подобные языки.

Ксавье Ноде
источник
трудно ответить на ваш вопрос. Есть много проектов, которые используют автоматизированные тесты, но трудно сказать, насколько они следуют философии TDD, потому что они, вероятно, не продвигают ее. Кроме того, c ++, c # и java имеют свои корни в графических приложениях, которые сложно протестировать. обычно вы найдете больше тестов в рамках или библиотеках.
iMacUwhAK
Одна из причин, по которой я очень заинтересован в поиске хорошего ответа, заключается в том, что я сейчас работаю над настольным приложением с движком C ++ и графическим интерфейсом Java ...
Ксавье Нодет,

Ответы:

19
  • JUnit был разработан на 100% тест-драйв. Фактически, он был разработан на 100% на основе тестов в JUnit , что, как сказал Кент Бек пару раз, было поистине сногсшибательным упражнением.
  • Я считаю, что файловая система Sun ZFS была разработана на основе тестирования.
  • Переводчик ikj для Ioke языка программирования (JVM), то IKC интерпретатор языка Ioke программирования (CLI), весь сердечник Ioke и стандартной библиотеки, а на самом деле сам язык был разработан 100% тест-приводом (фактически поведение приводом ).
Йорг Миттаг
источник
DUnit - тестовый фреймворк для Delphi, поставляется с полным набором тестов для самого DUnit. И я согласен с Кентом, это немного сходит с ума. ;-)
Ник Ходжес
14

SQLite. Весь их код очень и очень сильно протестирован :

Начиная с версии 3.7.14, библиотека SQLite состоит из приблизительно 81,3 KSLOC кода C. (KSLOC означает тысячи «исходных строк кода» или, другими словами, строк кода, исключая пустые строки и комментарии.) Для сравнения, у проекта в 1124 раза больше тестового кода и тестовых сценариев - 91421,1 KSLOC.

liori
источник
1
вау, у них много тестов: |
Лука Маттеис
8
Тщательное тестирование не обязательно означает, что оно было разработано в тестовом режиме (TDD). Это было? (Я не читал всю эту страницу, но я не видел ни «TDD», ни «ведомых» при поиске внутри страницы, поэтому я не знаю ответа на этот вопрос.)
lindes
1
@lindes: кажется, что они не следуют строго TDD, но, например, для каждого сообщения об ошибке они сначала делают тест. Также они запускают тесты для каждого коммита. Так что хотя бы частично это TDD.
Лиори
9

Насколько я помню, FitNesse написан с использованием TDD, и основным вкладчиком в проект является дядя Боб Мартин, так что, вероятно, это действительно чистый код

CaffGeek
источник
Я только взглянул на него, и это действительно чистый код.
Роберт Харви
3

По результатам моих обсуждений с P & P Team в Microsoft, Enterprise Library была написана с TDD.

Вальтер
источник
Я снял Enterprise Library 5.0 и посмотрел исходный код. Он имеет обширную коллекцию тестов, но в тестовом проекте много тестовых приспособлений, обработчиков вызовов и других сложных объектов; это выглядит почти как приложение само по себе. Хотя я восхищаюсь работой, я не вижу, как она вписывается в мировоззрение TDD о красно-зеленом рефакторе.
Роберт Харви
@ Роберт - я могу сказать тебе только то, что мне сказали ... Они использовали TDD при написании.
Уолтер
6
@ Роберт - Для тестового набора нет ничего необычного, чтобы взять собственную жизнь. DRY относится как к вашей заявке, так и к тестам. В TDD вы выполняете только 1 из 4 вещей: написание тестов, написание кода, рефакторинг тестов, рефакторинг кода. Если вы делаете все эти вещи в схеме красно-зеленого-рефакторинга, то вы делаете TDD.
Джефф Кнехт
1
@Jeff: Спасибо за разъяснение этого. Я думаю, что есть некоторые различия между тем, как объясняется TDD (в редукционистских, механистических терминах), и тем, как он фактически используется в реальных сценариях.
Роберт Харви
3

Я не могу назвать ни одного проекта с открытым исходным кодом, который использовал TDD, но я могу сказать вам, что я работал над реальными проектами, где использовался TDD ... и был спасателем!

Стивен А. Лоу
источник
1
Вы - или другие - поделились этим опытом? Звучит как хорошая военная история.
я немного написал в Твиттере об этом и использовал анекдоты для иллюстрации пунктов в других постах. Достаточно сказать, что дизайн первого теста и автоматизированные тестовые наборы делают мою жизнь намного проще, я бы не стал возвращаться и заниматься разработкой другим способом. Пример: небольшая ошибка в одном тестовом случае, которую ручное тестирование не обнаружило бы (поскольку тестеры вручную не проверяют целостность базы данных после каждой операции); В этот день много раз проводил тестовый набор, чтобы выяснить это, что эквивалентно сэкономленному более 40 часам ручного тестирования. недавно сделал более 1000 изменений кода и провел тесты, пока я спал. TDD качается.
Стивен А. Лоу
Я верю тебе. Мне просто нравится слышать истории. Вы можете найти QuickCheck интересным - en.wikipedia.org/wiki/QuickCheck - я видел презентацию, в которой были обнаружены многопоточные ошибки в 15-летнем производственном коде.
«потому что ручные тестеры не проверяют целостность базы данных после каждой операции» - ограничения и хорошо спроектированная схема БД бесполезны и избавили бы вас от необходимости тратить день на тестирование, поскольку вы сразу увидели бы ошибку ,
gbjbaanb
@gbjbaanb: в этом случае «проверка» была гораздо более сложной, чем простая целостность схемы, поэтому для нее существует автоматизированный тест
Стивен А. Лоу,
0

Мой первый проект, полностью выполненный в TDD, был проектом с открытым исходным кодом в 2002 году. Вы все еще можете найти его здесь:

http://sourceforge.net/projects/camelos/

Сейчас на работе я работаю в основном в TDD, но не все в нашей команде работают, это нормально, если в конце дня написали тесты.

Мы также написали полное приложение gwt-gae, используя TDD для основной части. http://netnumero.appengine.com/company/mycompany

Я не могу выпустить этот код, но я работаю над полным примером проекта, выполненного в TDD для GWT, который использует TDD также в пользовательском интерфейсе.

Как только я закончу (рождественские каникулы), я выложу это здесь https://github.com/ubertob/gwt-tdd-example

Uberto
источник