Старый, пропахший давно забытыми багами чужой код. Кажется, что вот эти несколько классов покрылись плесенью, а эти алгоритмы от старости перестали корректно выполняться. И вот вам, одев самые толстые перчатки и болотные сапоги, нужно погрузиться в этот код, чтобы придавить парочку поднадоевших жучков. Риск велик, вам одному и без страховки придется погрузиться в эту дурно пахнущую пучину и возможно, вам не удастся выбраться оттуда никогда…
Думаю, что я разбудил ваше воображение, поскольку уверен, что разбираясь в чужом коде, доставшемся на поддержку, вы чувствуете что-то похожее. Но так все же, как вы решаете эту нелегкую задачу?
Почему я спрашиваю, потому что все чаще и чаще встречаю ситуацию, когда для исправления бага быстро втыкается костыль, который работает только в тех ситуациях, которые часто встречаются и про этот костыль тут же забывают, не говоря уже о том, чтобы хорошо его задокументировать.
Сегодня мне довелось всласть покопаться в старом коде, работающей в боевом режиме уже почти шесть лет, и поэтому я решил поделиться моей практикой исправления багов.
Прежде всего, нужно решить насколько этот проект критичен, будет ли он в дальнейшем поддерживаться или отомрет – это необходимо для психологического настроя. Зная, что проект важен, а исправление старого и такого родного пользователям бага не прихоть начальника, вам будет гораздо приятнее идти по описанной ниже дорожке.
- Перед тем как приступать к исправлению бага, создайте базовый unit-тест, который позволит удостовериться в качестве выполненного исправления. Очень важно учесть все сценарии использования кода, в который будут внесены изменения. Да, это больно, я согласен, но это нужно сделать, чтобы потом не было больнее. Представьте себе, что вы сейчас ставите пломбу, чтобы потом не вырывать весь зуб целиком.
- После того как баг будет исправлен, а тесты будут успешно выполняться, не спешите закрыть проект и уходить пить пиво, порой пиво может подождать – дайте ему получше охладиться в холодильнике. Посмотрите на причину возникновения бага и поищите аналогичные фрагменты кода, где может встретиться подобный баг. Сейчас, пока в вашей голове свеж опыт исправления одного бага, самое время справиться с аналогичными. Не забывая о
лечении зубов написании unit-тестов. - По ходу исправления бага и его аналогов, подумайте, а не таиться ли за только что исправленным багом еще один, а то и целый выводок. Вполне возможно, что этот баг маскировал другие – неплохой момент, чтобы проверить точки входа и выхода и поискать возможные баги, скрытые только что исправленным.
- Ну и наконец, нужно сделать вывод о том, что стало причиной появления этого бага, как не допустить таких в собственном коде и, главное, пометить себе, что такое встречается в жизни.
К чему такие сложности, скажете вы, и окажетесь правы в большинстве случаев. Действительно, порой трата времени на столь тщательное исправление багов оказывается экономически неэффективной, однако, взгляните на эту проблему с другой стороны:
- недобитый баг восстанет и плюнет в вас ядом в самый неподходящий момент, когда на носу сдача нового функционала заказчику, новый проект, переезд и пополнение семейства?
- приобретенный в процессе исправления багов опыт окажется очень полезен в дальнейшей работе
- навыки чтения чужого кода очень полезны разработчику, учитывая, что редко когда есть возможность переписывать все заново
В следующий раз, исправляя баг, позвольте ему вас чему-нибудь научить. А потом перепродайте это знание кому-нибудь подороже.
Успехов в кодинге!
Гайдар
Интересный пост Хансельмана про Twitter: Twitter: Let the Information Wash Over You
Кстати, я http://twitter.com/gaidar – follow me :)
Комплект материалов по интеграции Office и SharePoint с бизнес-системами SAP и Siebel. Этот комплект может спасти много времени и помочь тем, у кого есть задачи по предоставлению пользователям информации из SAP и Siebel в удобном формате (не говоря уже о дополнительном функционале непосредственно из интерфейса Office).
Качать здесь: http://code.msdn.microsoft.com/sapsiebel/Release/ProjectReleases.aspx?ReleaseId=2754
Доступны предварительные версии глав из книг 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
Время: 17 июня 11:00 — 12:00
В ходе этой веб-трансляции вы узнаете об основных возможностях интеграции порталов на базе SharePoint Technologies и отчетов SQL Server Reporting Services: основные сценарии использования, какие преимущества получают разработчики и конечные пользователи, основные варианты развертывания, конфигурирование серверов, вопросы безопасности и многое другое.
Докладчик: Андрей Мирский (Microsoft Consulting Services)
Регистрация
Хочу поделиться с вами радостной новостью – запущены переводные блоги известнейших блоггеров Microsoft. Переводы осуществляются силами MVP.
Сейчас переведены последние посты и блоги будут постоянно актуализироваться. Огромное спасибо за перевод уважаемым экспертам!
Коллеги Диденко и Черномордиков записали со мной подкаст http://channel9.msdn.com/posts/mikcher/Podcast-9-009/
Уважаемые читатели, а не хотели бы вы послушать технические подкасты на темы технологий для веб-разработки? Как смотрите, если они будут в один голос (если вдруг собеседников не найду)?
jQuery Web Contorls для ASP.NET - проект с открытым исходным кодом. Задача проекта – упрощение разработки веб-страниц с использованием эффектов, предоставляемых библиотекой jQuery.
Страница проекта: http://www.dotnetage.com/
Качать исходный код на CodePlex: http://dj.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27347#ReleaseFiles
В последнее время часто встречалась проблема с развертыванием приложений, использующих SQL Server Compact на серверах под управлением 64-битных ОС. Проблема и решение описаны в блоге Эрика.
Конкурс дополнений к IE8 родил у разработчиков сайта www.remix.ru следующий креатив:
_thumb.jpg)
Согласитесь, забавно :)
Поскольку за последнюю неделю меня уже три раза спросили про слайд про MVP, то я решил его в блог поместить и на него ссылаться при случае. К слову сказать, сделан он был в 3 утра несколько месяцев назад для Юли Беляниной, которой нужно было рассказать об MVP на внутреннем мероприятии в московском офисе Microsoft. Видимо, что я, как некогда носивший статус MVP, хорошо понимаю программу, раз слайд стал таким популярным :)

На сайте конференции ReMIX можно посмотреть видеозапись тренинга по ASP.NET. Тренинг рассчитан на разработчиков, не имеющих опыта использования ASP.NET. В качестве языка программирования используется C#. Для изучения тренинга желательно знать основы HTML/JavaScript, иметь базовые представления о веб-приложениях и иметь опыт написания программ на C-подобных языках.
http://remix.ru/Tutorials/Tutorial/AspNet
Некоторые базы с которыми я работаю имеют очень интересную жизненную историю и тяжелое детство в связи с чем можно наблюдать такую картинку, что размер 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
Думаю теперь, что делать с освободившимися несколькими десятками Гб :)
Вот только что натолкнулся на такой код, который на первый взгляд (лишь на первый и только при беглом просмотре) вызывает удивление:
Batch b = new Batch {start = start, end = end};
А на самом-то деле все корректно, потому как выше определены:
private struct Batch
{
public int start;
public int end;
}
int start;
int end;
Корректно, но на мой взгляд лучше бы такого все равно не допускать и чисто в профилактических целях линейкой по рукам бить.
Пока весь мир с нетерпением ждет выхода следующей версии Windows – Windows 7, в недрах корпорации решили порадовать разработчиков веб-приложений и с удвоенными силами бросились на развитие платформы Windows Azure.
Благодаря небольшой утечке информации известно, что следующая версия “Windows в облаке” носит кодовое имя Mytistchy, согласуясь с новой традицией использовать названия городов в качестве кодовых имен. Значит ли это, что стоит ожидать новый дата-центр в подмосковном городе Мытищи - пока сказать сложно, пожалуй, что это название носит более символический характер, поскольку из Редмонда до города Мытищи примерно столько же, как и до облаков. Но кто знает, почему было выбрано именно это название.
Из ожидаемых новинок:
- неограниченные ресурсы хранилища - вероятно, что скорость строительства дата-центров предполагается выше, чем скорость загрузки данных на сервера
- близкая к бесконечной скорость передачи данных - благодаря новым оптическим волокнам с нано-частицами, позволяющими организовать пространственно-временные туннели для фотонов и таким образом мгновенно пробрасывать информацию на любые расстояния с постоянной очень высокой скоростью
- высокая доступность серверов - за счет наличия автономных источников питания в виде индивидуальных атомных реакторов для каждого дата-центра
- достойная защита данных – все дата-центры охраняются армией человекоподобных роботов, уничтожающих все живое в радиусе сотни километров
- новая модель разработки программного обеспечения – секретная разработка, все еще находящаяся в тайне – пока лишь известно, что на смену классическим языкам программирования придут полностью визуальные образы, считываемые из подсознания разработчиков
- и многое другое…
Самое удивительное заключается в том, что пока об этой утечке информации не успели написать средства массовой информации и разработчики пребывают в полном неведении относительно ожидающего их счастья. Однако, есть подозрения, что о новой платформе можно будет узнать на конференции ReMIX.