Хороший приклад складного коду з використанням TDD [закрито]


37

Що може бути хорошим прикладом використання TDD у великих, реальних, складних проектах? Усі приклади, які я бачив до цього часу, - це іграшкові проекти з метою книги чи паперу ...

Чи можете ви назвати проект з відкритим кодом, який широко використовує TDD? Переважно на C ++, але я можу читати Java та C # або інші подібні мови.


важко відповісти на ваше запитання. Є багато проектів, які використовують автоматизовані тести, але важко сказати, наскільки вони слідують філософії TDD, оскільки вони, ймовірно, не просувають її. також c ++, c # і java kinda мають своє коріння в додатках gui, які важко перевірити. зазвичай ви знайдете більше тестів у рамках чи бібліотеках.
iMacUwhAK

Частина причини, чому я дуже зацікавлений у пошуку хорошої відповіді, полягає в тому, що я зараз працюю над настільним додатком із двигуном C ++ та графічним інтерфейсом Java ...
Xavier Nodet

Відповіді:


19
  • JUnit був розроблений на 100% з тест-рухом. Насправді, він був розроблений на 100% тестовому керуванні в JUnit , що, як сказав Кент Бек пару разів, було справді розумовою вправою.
  • Я вважаю , що файлова система ZFS від Sun була розроблена на основі тесту.
  • Перекладач ikj для Ioke мови програмування (JVM), то IKC інтерпретатор мови Ioke програмування (CLI), весь сердечник Ioke і стандартної бібліотеки, а насправді сама мова був розроблений 100% тест-приводом ( на насправді поведінку керованої ).

DUnit - тестова основа для Delphi, поставляється з повним набором тестів для самого DUnit. І я згоден з Кентом, це трохи згинається розум. ;-)
Нік Ходжес

14

SQLite. Весь їх код дуже і дуже перевірений :

Станом на версію 3.7.14, бібліотека SQLite складається приблизно з 81,3 KSLOC коду С. (KSLOC означає тисячі "вихідних рядків коду" або, іншими словами, рядки коду, виключаючи порожні рядки та коментарі.) Для порівняння, проект має в 1124 рази більше тестового коду та тестових сценаріїв - 91421,1 KSLOC.


1
ух, у них багато тестів: |
Лука Маттейс

8
Сильно випробуваний не обов'язково означає, що він був розроблений тестово (TDD). Це було? (Я не читав цілу сторінку, але не бачив ні "TDD", ні "загнаний" у пошукових запитах, тому не знаю відповіді на це.)
lindes

1
@lindes: вони, здається, не дотримуються строго TDD, але, наприклад, для кожного звіту про помилку спочатку роблять тест. Крім того, вони проводять тести на кожну комісію. Тож принаймні частково це TDD.
liori

9

Якщо я пам'ятаю, FitNesse написаний на TDD, а головним учасником проекту є дядько Боб Мартін, тож, мабуть, це дійсно чистий код


Я тільки глянув на нього, і це дійсно чистий код.
Роберт Харві

3

З моїх обговорень з командою P&P в Microsoft, Enterprise Library була написана з TDD.


Я знищив Enterprise Library 5.0 і подивився вихідний код. У нього є велика колекція тестів, але в тестовому проекті є багато тестового обладнання, обробника викликів та інших складних об'єктів; це здається майже як програма сама по собі. Хоча я захоплююся роботою, я не бачу, як він вписується у світогляд TDD на червоно-зелений рефактор.
Роберт Харві

@Robert - Я можу сказати вам лише те, що вони мені сказали ... Вони використовували TDD, коли писали це.
Вальтер

6
@Robert - Тестовий набір не є незвичним для власного життя. 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.