Что такое TDD?
Это способ управления страхом в процессе программирования.
Да, мне гораздо спокойней, когда работоспособность моего кода подтверждена и подтверждается постоянно тестами. В любой момент времени я могу запустить тесты и проверить, все ли работает. Особенно актуально это, когда изменения вносятся в код, написанный пару-тройку месяцев назад, а то и ранее. А если этот код еще и чужой, то шансы поломать что-то возрастают многократно. Имея хороший набор тестов можно безбоязненно и безболезненно вносить изменения в код. Говоря "хороший набор тестов" я намеренно не указываю число в процентах, потому что считаю test coverage весьма относительной метрикой. Стопроцентное покрытие - исключительно утопия. И та еще тема для холивара :) Тестов должно быть столько, сколько требуется для уверенности в вашем коде и спокойного сна, если представить, что каждый ваш проект - система обеспечения АЭС ;)
К чему стремится TDD?
К чистому коду, который работает.
Ключевое слово здесь - чистый. Код, который работает, может написать каждый. И зачастую такой код - выходец из семейства "говнокодовых". Думаю, такой код в начале тернистого пути совершенствования навыков программирования писали все. Но есть несколько вещей, которые заставляют двигаться от кода, который работает, в сторону "чистого кода, который работает" - начинаются сложности при поддержке кода, внесении изменений, расширении системы... признаки того, что все катится в сторону антипаттерна Big ball of mud :(
Каковы правила TDD?
Красный - зеленый - рефакторинг
Эти правила просты, как дважды два:
1) Красный - пишем тест. Не факт, что он заработает сразу (или даже скомпилируется). Напротив, это тревожный знак. Ведь тесты мы пишем всегда перед написанием кода. «Тест, написанный после кода, ничего не стоит и является только обузой.»
2) Зеленый - заставляем тест работать, создавая при этом минимум кода. О чистоте и порядке на этом этапе задумываться еще рано. Тест должен работать. И работать быстро. Вот что главное на данном этапе. Минимум усилий. Ничего лишнего. Тут мы создаем код, который работает.
3) Рефакторинг - наводим порядок. Убираем дублирование и остальные запашки. После каждого действия запускаем тесты, проверить, ничего ли не поломалось. Время создавать чистый код, который работает.
И кто это все придумал?
Тестирование имеет довольно длинную историю, уходя вглубь веков. Первые упоминания о тестировании можно найти в 1975 (в "Мифическом человеко-месяце" Брукса). А сама методология Test-Driven Development и ее основные принципы были сформулированы Кент Беком в книге "Extrime Programming Explained", увидевшей свет в 1999 году. С тех пор и понеслось :)
Что нужно, чтобы начать?
Нужно немного - желание, храбрость, терпение и фреймворк для тестирования под платформу, на которой вы программируете. Или можете сами его написать, как это делает Кент Бек. Заодно и попрактикуетесь:)
А еще?
А еще можно (нужно) искать тут:
Кент Бек. "Экстремальное программирование: разработка через тестирование"
Roy Osherove Understanding TDD (видео, en)
Джерард Мессарош «Шаблоны тестирования xUNIT»
Джошуа Кериевски. "Рефакторинг с использованием шаблонов"
М. Фаулер "Рефакторинг. Улучшение существующего кода."
TDD: начало
SqlCE 3.5 to 4.0 Converter
Недавно (в июле этого года) вышла новая версия MS Sql CE, в которой был изменен алгоритм шифрования (стал использоваться SHA-2). Это означает, что для работы sql ce 4 с бд, созданной сервером версии 3.5, ее нужно предварительно переконвертировать. Для это в API предусмотрен специальный метод, поэтому особого труда конвертирование не вызовет.
Давайте напишем конвертер для файлов баз данных в формате slq ce 3.5 в формат slq ce 4.0.
Писать будем на C# в TDD-стиле, использовать VS 2008, тестировать в xUnit (последнюю версию можно скачать с codeplex). Когда вы используете TDD, не нарушая основных принципов ( а их всего три - RGR (красный-зеленый-синий): пишем тест, пишем код, рефакторим) и порядка их следования, то получаете автоматически приятные бонусы в коде.
Warning! Этот пост нужно рассматривать как пример по разработке в стиле TDD для начинающих.
MS Sql CE 4 CTP1
В июле этого года вышел SQL Server CE 4 CTP1, что, конечно же, является хорошей новостью! Скачать sql ce 4 можно с сайта Microsoft, дистрибутив радует размером - всего 2.5 мб для х64 и 2.0 мб для х32.
Что же нового в четвертом компакте? Много было сделано для использования sql ce в ASP.NET приложениях - теперь компакт выдерживает нагрузку сайтов-стартеров с не большим количеством посещений. Внедрили поддержку SHA 2 - шифрования. Это означает, что для перехода с sql ce 3.5 на 4.0 база данных должна быть предварительно проапгрейдена предусмотренным в API методом SqlCeEngine.Upgrade(). Так же это означает, что slq ce 3.5 не может работать с файлами данных, созданными четвертым компактом.
Компакт теперь умеет беспроблемно работать с ADO.NET Entity Framework 4.0, что тоже радует :)
Важно отметить, что в четвертом компакте изменился Transact-SQL-синтаксис: добавлены ключевые слова OFFSET & FETCH:
SELECT * FROM Employees ORDER BY [Hire Date] OFFSET 10 ROWS;
SELECT * FROM Orders ORDER BY [Shipped Date] OFFSET 2 ROWS FETCH NEXT 1 ROW ONLY;
Так же изменился API:
System.Data.SqlServerCe.SqlCeConnection.GetSchema() - возвращает информацию о базе данных.
SqlCeConnection conn = new SqlCeConnection("DataSource=Northwind.sdf");
try
{
conn.Open();
DataTable dt = conn.GetSchema();
dt = conn.GetSchema("Tables");
dt = conn.GetSchema("Columns");
dt = conn.GetSchema("Indexes");
dt = conn.GetSchema("IndexColumns");
dt = conn.GetSchema("ForeignKeys");
}
catch (Exception e)
{
//Fail
}
System.Data.SqlServerCe.SqlCeConnectionStringBuilder - позволяет легко строит connection strings для компакта.
SqlCeConnectionStringBuilder builder = new SqlCeConnectionStringBuilder();
builder["Data Source"] = sqlCEdbPath;
builder["Mode"] = dbMode;
builder["Password"] = password;
Console.Write( builder.ConnectionString );
Более подробно об этих и других нововведениях можно почитать в блоге Rob Tiffany
А тут можно почитать о тулзе для конвертирования файлов sql ce 3.5 в slq ce 4.0
Подкасты для разработчика
Подкасты - это отличный способ получения информации при минимальных затратах времени. Подкасты можно слушать по дороге на работу, в университет, во время утренней пробежки...
Какие подкасты будет интересно слушать разработчику? За всех на этот вопрос не отвечу, но расскажу, какие подкасты я слушаю с удовольствием.
http://rpod.ru - кладезь подкастов. На любой вкус и цвет. Тут в следует выделить, во-первых, отличные подкасты Петербургской Группы Alt.Net http://spbaltnet.rpod.ru/ В каждом выпуске подкаста море полезной и интересной информации.
О подкасте:
Петербургская группа Alt.Net создана с целью проведения в Санкт-Петербурге семинаров и технических встреч, связанных с разработкой в среде .NET. Наша цель – помочь друг другу узнать больше о том, как работать в среде .Net, как эффективно использовать различные технологии, методологии и практики в нашей работе.
Дальше - Domain Driven Design Study Group. Тут можно послушать обсуждения книги Эрика Эванса "Domain-Driven Design: Tackling Complexity in the Heart of Software". Всем, кто хочет познакомиться с DDD, стоит обратить внимание на этот подкаст.
Следующий подкаст - Качественный код и методология Agile. Название подкаста говорит само за себя. Выпуски небольшие по длительности, один выпуск - одна конкретная тема.
The Art Of Programming - ориентирован на Java, Flash/Flex, но тоже интересно послушать.
Следующий кладезь подкастов для IT-шника http://www.dotnetrocks.com - The internet radio talk show for .Net developers. В студию приглашаются дотнет разработчики и рассматривается какая-то конкретная тема. Подкаст на английском языке.
http://www.hanselminutes.com - англоязычный еженедельный подкаст для ASP.NET или Windows разработчиков. В студию приглашаются известные разработчики и дают интервью. Например, интервью с Роем Ошро The Art of Unit Testing with Roy Osherove.
Elegant Code Cast и Software Engineering Radio - еще две англоязычные подкаст-ленты, которые я с удовольствием слушаю.
UPD: Spbaltnet переехали. Теперь их нужно искать на podfm.ru http://spbaltnet.podfm.ru
Ярлыки
Копирайты
Блог о жизни вне кода
Постоянные читатели
Популярно
-
Понравился анекдот о колбасе и яйцах :) Жена посылает мужа-программиста в магазин: - Дорогой, купи, пожалуйста, палку колбасы, и если б...
-
Продолжаю серию постов о своём первом андроид-приложении. Сегодня мысли о публикации приложения в разных маркетах.
-
Бета-версия одиннадцатой cтудии вызвала много охов и ахов. Чтобы там ни говорили, работать в ней приятно, хоть по началу немного необычно. ...
-
Jquery.Inputmask - крутой (да-да, именно) плагин, добавляющий гибкости в работу с обычным текстовым полем для ввода. Плагин является ус...
-
Перевод поста "Top 10 Things That Annoy Programmers" Кевина Панга. Оригинал тут
-
Разделяй и влавствуй - подход на все времена. Концепция модульного программирования не нова, и хорошо себя зарекомендовала. В мире разрабо...
-
Фридман А.Л. - Основы объектно-ориентированной разработки программных систем. ( скачать ) Книга написана как учебное пособие для студентов ...
-
Steve Freeman, Nat Pryce. Growing Object-Oriented Software, Guided by Tests ( скачать ) Test-Driven Development (TDD) is now an established...
-
Для некоторых методов класса Microsoft Code Analysis даёт такой совет: CA1822 : Microsoft.Performance : The 'this' parameter (or ...