Welcome to MSDN Blogs Sign in | Join | Help

Гайдар Магдануров

Платформа и инструменты разработки, новости компании Microsoft и мысли об ИТ
Время разбрасывать баги и время собирать баги

Старый, пропахший давно забытыми багами чужой код. Кажется, что вот эти несколько классов покрылись плесенью, а эти алгоритмы от старости перестали корректно выполняться. И вот вам, одев самые толстые перчатки и болотные сапоги, нужно погрузиться в этот код, чтобы придавить парочку поднадоевших жучков.  Риск велик, вам одному и без страховки придется погрузиться в эту дурно пахнущую пучину и возможно, вам не удастся выбраться оттуда никогда…

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

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

Сегодня мне довелось всласть покопаться в старом коде, работающей в боевом режиме уже почти шесть лет, и поэтому я решил поделиться моей практикой исправления багов.

Прежде всего, нужно решить насколько этот проект критичен, будет ли он в дальнейшем поддерживаться или отомрет – это необходимо для психологического настроя. Зная, что проект важен, а исправление старого и такого родного пользователям бага не прихоть начальника, вам будет гораздо приятнее идти по описанной ниже дорожке.

  1. Перед тем как приступать к исправлению бага, создайте базовый unit-тест, который позволит удостовериться в качестве выполненного исправления. Очень важно учесть все сценарии использования кода, в который будут внесены изменения. Да, это больно, я согласен, но это нужно сделать, чтобы потом не было больнее. Представьте себе, что вы сейчас ставите пломбу, чтобы потом не вырывать весь зуб целиком.
  2. После того как баг будет исправлен, а тесты будут успешно выполняться, не спешите закрыть проект и уходить пить пиво, порой пиво может подождать – дайте ему получше охладиться в холодильнике. Посмотрите на причину возникновения бага и поищите аналогичные фрагменты кода, где может встретиться подобный баг. Сейчас, пока в вашей голове свеж опыт исправления одного бага, самое время справиться с аналогичными. Не забывая о лечении зубов написании unit-тестов.
  3. По ходу исправления бага и его аналогов, подумайте, а не таиться ли за только что исправленным багом еще один, а то и целый выводок. Вполне возможно, что этот баг маскировал другие – неплохой момент, чтобы проверить точки входа и выхода и поискать возможные баги, скрытые только что исправленным.
  4. Ну и наконец, нужно сделать вывод о том, что стало причиной появления этого бага, как не допустить таких в собственном коде и, главное, пометить себе, что такое встречается в жизни.

К чему такие сложности, скажете вы, и окажетесь правы в большинстве случаев. Действительно, порой трата времени на столь тщательное исправление багов оказывается экономически неэффективной, однако, взгляните на эту проблему с другой стороны:

  • недобитый баг восстанет и плюнет в вас ядом в самый неподходящий момент, когда на носу сдача нового функционала заказчику, новый проект, переезд и пополнение семейства?
  • приобретенный в процессе исправления багов опыт окажется очень полезен в дальнейшей работе
  • навыки чтения чужого кода очень полезны разработчику, учитывая, что редко когда есть возможность переписывать все заново

В следующий раз, исправляя баг, позвольте ему вас чему-нибудь научить. А потом перепродайте это знание кому-нибудь подороже.

Успехов в кодинге!

Гайдар

Twitter

Интересный пост Хансельмана про Twitter: Twitter: Let the Information Wash Over You

Кстати, я http://twitter.com/gaidar – follow me :)

OBA Sample Application Kit for SAP and Siebel

Комплект материалов по интеграции Office и SharePoint с бизнес-системами SAP и Siebel. Этот комплект может спасти много времени и помочь тем, у кого есть задачи по предоставлению пользователям информации из SAP и Siebel в удобном формате (не говоря уже о дополнительном функционале непосредственно из интерфейса Office).

Качать здесь: http://code.msdn.microsoft.com/sapsiebel/Release/ProjectReleases.aspx?ReleaseId=2754

Бесплатные главы из книг по Windows 7 для разработчиков

Доступны предварительные версии глав из книг Windows 7 Inside Out, Windows 7 Resource Kit, Windows 7 Step by Step и Windows 7 for Developers на аглийском языке.

Качать здесь: http://www.microsoft.com/learning/en/us/offers/windows-7-chapters-thankyou.aspx

Веб-трансляция “Интеграция SQL Server Reporting Services и SharePoint Technologies”

Время: 17 июня 11:00 — 12:00

В ходе этой веб-трансляции вы узнаете об основных возможностях интеграции порталов на базе SharePoint Technologies и отчетов SQL Server Reporting Services: основные сценарии использования, какие преимущества получают разработчики и конечные пользователи, основные варианты развертывания, конфигурирование серверов, вопросы безопасности и многое другое.

Докладчик: Андрей Мирский (Microsoft Consulting Services)

Регистрация

Переводы блогов Скотта Гатри, Эрика Липперта и Реймонда Чена

Хочу поделиться с вами радостной новостью – запущены переводные блоги известнейших блоггеров Microsoft. Переводы осуществляются силами MVP.

Сейчас переведены последние посты и блоги будут постоянно актуализироваться. Огромное спасибо за перевод уважаемым экспертам!

podcast9

Коллеги Диденко и Черномордиков записали со мной подкаст http://channel9.msdn.com/posts/mikcher/Podcast-9-009/

Уважаемые читатели, а не хотели бы вы послушать технические подкасты на темы технологий для веб-разработки? Как смотрите, если они будут в один голос (если вдруг собеседников не найду)?

jQuery Web Controls

jQuery Web Contorls для ASP.NET  - проект с открытым исходным кодом. Задача проекта – упрощение разработки веб-страниц с использованием эффектов, предоставляемых библиотекой jQuery.

Страница проекта: http://www.dotnetage.com/

Качать исходный код на CodePlex: http://dj.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27347#ReleaseFiles

Решение проблемы с SQL Server Compact на x64-битных системах

В последнее время часто встречалась проблема с развертыванием приложений, использующих SQL Server Compact на серверах  под управлением 64-битных ОС. Проблема и решение описаны в блоге Эрика.

Креатив IE8

Конкурс дополнений к IE8 родил у разработчиков сайта www.remix.ru следующий креатив:

567x97-(msdn-bonus)

Согласитесь, забавно :)

Как объяснить кто такие MVP на одной картинке за 5 секунд?
Поскольку за последнюю неделю меня уже три раза спросили про слайд про MVP, то я решил его в блог поместить и на него ссылаться при случае. К слову сказать, сделан он был в 3 утра несколько месяцев назад для Юли Беляниной, которой нужно было рассказать об MVP на внутреннем мероприятии в московском офисе Microsoft. Видимо, что я, как некогда носивший статус MVP, хорошо понимаю программу, раз слайд стал таким популярным :)

MVP

Тренинг по ASP.NET для начинающих разработчиков

На сайте конференции ReMIX можно посмотреть видеозапись тренинга по ASP.NET. Тренинг рассчитан на разработчиков, не имеющих опыта использования ASP.NET. В качестве языка программирования используется C#. Для изучения тренинга желательно знать основы HTML/JavaScript, иметь базовые представления о веб-приложениях и иметь опыт написания программ на C-подобных языках.

http://remix.ru/Tutorials/Tutorial/AspNet

Уменьшение размера log файла в SQL Server 2008

Некоторые базы с которыми я работаю имеют очень интересную жизненную историю и тяжелое детство в связи с чем можно наблюдать такую картинку, что размер mdf файла, чуть больше 500 Мб, а вот log файл сильно за 4 Гб. Поскольку таких баз у меня много, а места на диске, увы, уже мало.

Для SQL Server до 2008 версии я пользовался следующей процедурой:

USE ИмяБазы
BACKUP LOG ИмяБазы WITH TRUNCATE_ONLY
DBCC SHRINKFILE( ИмяФайлаЛогаЖелаемыйРазмер )

С SQL Server 2008 этот метод не работает, поэтому следует использоват другую процедуру:

USE ИмяБазы
ALTER DATABASE ИмяБазы SET RECOVERY SIMPLE
DBCC SHRINKFILE (ИмяФайлаЛога, ЖелаемыйРазмер);
ALTER DATABASE ИмяБазы SET RECOVERY FULL

Думаю теперь, что делать с освободившимися несколькими десятками Гб :)

Код a = a, b = b – думаете не имеет смысла? ;)

Вот только что натолкнулся на такой код, который на первый взгляд (лишь на первый и только при беглом просмотре) вызывает удивление:

Batch b = new Batch {start = start, end = end};

А на самом-то деле все корректно, потому как выше определены:

private struct Batch
{
    public int start;
    public int end;
}

int start;
int end;

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

Анонсирована следующая версия “Windows в облаке” - Windows codename Mytistchy

Windows Mytistchi Пока весь мир с нетерпением ждет выхода следующей версии Windows – Windows 7, в недрах корпорации решили порадовать разработчиков веб-приложений и с удвоенными силами бросились на развитие платформы Windows Azure.

Благодаря небольшой утечке информации известно, что следующая версия “Windows в облаке” носит кодовое имя Mytistchy, согласуясь с новой традицией использовать названия городов в качестве кодовых имен. Значит ли это, что стоит ожидать новый дата-центр в подмосковном городе Мытищи - пока сказать сложно, пожалуй, что это название носит более символический характер, поскольку из Редмонда до города Мытищи примерно столько же, как и до облаков. Но кто знает, почему было выбрано именно это название.

Из ожидаемых новинок:

  • неограниченные ресурсы хранилища - вероятно, что скорость строительства дата-центров предполагается выше, чем скорость загрузки данных на сервера
  • близкая к бесконечной скорость передачи данных - благодаря новым оптическим волокнам с нано-частицами, позволяющими организовать пространственно-временные туннели для фотонов и таким образом мгновенно пробрасывать информацию на любые расстояния с постоянной очень высокой скоростью
  • высокая доступность серверов - за счет наличия автономных источников питания в виде индивидуальных атомных реакторов для каждого дата-центра
  • достойная защита данных – все дата-центры охраняются армией человекоподобных роботов, уничтожающих все живое в радиусе сотни километров
  • новая модель разработки программного обеспечения – секретная разработка, все еще находящаяся в тайне – пока лишь известно, что на смену классическим языкам программирования придут полностью визуальные образы, считываемые из подсознания разработчиков
  • и многое другое…

Самое удивительное заключается в том, что пока об этой утечке информации не успели написать средства массовой информации и разработчики пребывают в полном неведении относительно ожидающего их счастья. Однако, есть подозрения, что о новой платформе можно будет узнать на конференции ReMIX.

More Posts Next page »
Page view tracker