Приклади реальних програм програм, написаних TDD та хорошим тестовим покриттям? [зачинено]


17

Чи існують програми з відкритим кодом, розроблені з використанням тестово керованих розробок, які служать моделями того, як слід добре працювати тестування?

Я вважаю за краще бачити приклади в C # і .NET. (Зауважте, що я згадав додатки, а не лише бібліотеки.)

Я програміст середнього рівня, який дуже хоче вірити і практикувати TDD. Додаток, над яким я працюю в своїй щоденній роботі, є досить складним - близько 1 мільйона рядків коду - і я хотів би запровадити більше тестування одиниць. У нас є кілька тестових одиниць, але мої зусилля в TDD і робота над кодом, який вже перевіряється, не радує.

В моєму визнаному обмеженому досвіді TDD, схоже, заохочує велику складність у назві роз'єднання. Біти програми, які важко перевірити - і які випадково мають тенденцію до критичного значення, - висуваються на периферію, у сферу інтеграційних тестів, про які можуть або ніколи не писати. (Я маю на увазі звичайних підозрюваних тут, доступу до файлової системи, зволоження об’єктів із бази даних, асинхронних веб-дзвінків тощо)

Код, який тестується, як правило, передбачає велику співпрацю між об'єктами, а може бути, і просту логіку потоку, що все відбувається в пам'яті і яку, можливо, можна записати більш простим, зрозумілим способом, якщо все не повинно було бути повністю роз'єднаним. для тестування.

Я розумію методики знущання над залежностями та подібні, але, на моєму досвіді, велике використання глузування призводить до дуже крихких тестів. Якщо мій перший інстинкт, побачивши купу тестів, що червоніє, - це "Чудово, зараз я маю виправити всі макети", то мої тести стали швидше тягненням, а не мережею безпеки.

Я намагаюся подолати цей ментальний бар'єр, і як частина цього, я читаю книгу Майкла Пір'я, « Ефективно працюючи зі спадщиною кодексу» . Сподіваюся, мені покажуть дещо того, чого мені не вистачає.

Я також хотів би вивчити кілька нетривіальних програм .NET з хорошим покриттям коду, можливо, систему управління вмістом або додаток CRUD. Рамка тестування FitNesse, про яку говорить дядько Боб, - це те, що я, мабуть, дивлюся, але було б непогано побачити щось написане мовою, якою я найбільше знайомий.

Будь-які пропозиції або слова мудрості будуть вдячні.



2
Не зовсім ... Мені цікаво бачити приклади реальних програм. Прийнята відповідь на цій посаді рекомендує тестувати рамки. Раніше я бачив кілька прикладів рамок і бібліотек, але це не стосується мого питання.
Джош граф

@JoshEarl - Я згоден .. Я не думаю, що моя відповідь нижче була б відносно до іншої публікації
hanzolo

Відповіді:


14

Я не знаю, чи використовувався TDD, але зоряним прикладом тестування є sqlite, який має чудовий 100% охоплення гілки та має в 1000 разів більше тестового коду та сценаріїв, ніж код продукту.


4
це звучить як надзвичайна витрата зусиль, якщо їх співвідношення коду до тестового коду таке високе
Рятхал

6
@Ryathal: вартість відмови диктує зусилля тестування, а не довжину тестованого коду. Враховуючи достатньо широке використання в достатньо критичних для місії підходах, тестування, можливо, було варте того. Я не дуже впевнений, якщо SQLite не переборщив.
титон

3
sqlite, безумовно, критично важливий для багатьох людей. Ви можете бути здивовані тим, як часто він використовується (наприклад, OSX, iOS, Android OS). І ви повинні усвідомити, багато цих рядків тестового коду та даних були, ймовірно, машинними. У промисловій базі даних про міцність є безліч кращих справ.
Брайан Оуклі

10
SQLite - це найпоширеніша база даних SQL на планеті, її база встановлення на порядок більше, ніж MySQL, PostgreSQL, SQL Server, Oracle, DB2 разом . Це, мабуть, один із найпоширеніших фрагментів програмного забезпечення періоду. Якби в SQLite була помилка, кожен смартфон на планеті припинив би роботу. Я думаю, що це виправдовує трохи параної.
Йорг W Міттаг

@ JörgWMittag Нічого цього не знав про SQLite. Забавно. Спасибі. Але в 1000 разів більше тестового коду. Це неймовірно.
мійський гризун

4

Проект «Орчард» може бути саме тим, що ви шукаєте. Додаток .NET / MVC / TDD досить складний, але не дуже поганий, і він демонструє деякі добрі практики та зразки.

http://orchard.codeplex.com/wikipage?title=solution

і я здогадуюсь оновлене посилання:

http://docs.orchardproject.net/


Це виглядає багатообіцяюче - не можу дочекатися копання. :)
Josh Earl

0

Дуже багато сторонніх бібліотек з відкритим кодом є TDDed. Hibernating Бібліотеки Rhinos, такі як RhinoMocks і NHibernate, розробники розробляються TDD, використовуючи XUnit як блок тестування одиниць.

Тепер, за допомогою OSS, ви зазвичай не можете гарантувати, що ВСЕ у продукті було TDDed. У спільноти можуть бути стандарти, включаючи цю практику, і вони можуть навіть використовувати бот для складання, який виконує показники покриття коду, але TDD - це менталітет, який повинен купувати розробник, і широка громадськість може взяти на себе зобов’язання відкрити- джерела VCS-магістралей, як-от на GitHub, будь-хто може здійснити будь-які зміни з будь-якою кількістю тестового покриття (або якщо потрібно покриття, тести могли бути написані після факту, що є порушенням духу TDD, але насправді цього немає хороший спосіб зловити це на комісіях).

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