TDD: начало

30 авг. 2010 г. | | |

Что такое 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»
Джошуа Кериевски. "Рефакторинг с использованием шаблонов"
М. Фаулер "Рефакторинг. Улучшение существующего кода."

SqlCE 3.5 to 4.0 Converter

26 авг. 2010 г. | | |

Недавно (в июле этого года) вышла новая версия 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

В чем измеряется качество кода?

20 авг. 2010 г. | | |

Подкасты для разработчика

17 авг. 2010 г. | | |

Подкасты - это отличный способ получения информации при минимальных затратах времени. Подкасты можно слушать по дороге на работу, в университет, во время утренней пробежки...
Какие подкасты будет интересно слушать разработчику? За всех на этот вопрос не отвечу, но расскажу, какие подкасты я слушаю с удовольствием.

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