<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Гайдар Магдануров : Philosophy</title><link>http://blogs.msdn.com/gaidar/archive/tags/Philosophy/default.aspx</link><description>Tags: Philosophy</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Время разбрасывать баги и время собирать баги</title><link>http://blogs.msdn.com/gaidar/archive/2009/07/05/9818123.aspx</link><pubDate>Sun, 05 Jul 2009 22:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9818123</guid><dc:creator>gaidar</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/9818123.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=9818123</wfw:commentRss><description>&lt;P&gt;Старый, пропахший давно забытыми багами чужой код. Кажется, что вот эти несколько классов покрылись плесенью, а эти алгоритмы от старости перестали корректно выполняться. И вот вам, одев самые толстые перчатки и болотные сапоги, нужно погрузиться в этот код, чтобы придавить парочку поднадоевших жучков.&amp;nbsp; Риск велик, вам одному и без страховки придется погрузиться в эту дурно пахнущую пучину и возможно, вам не удастся выбраться оттуда никогда…&lt;/P&gt;
&lt;P&gt;Думаю, что я разбудил ваше воображение, поскольку уверен, что разбираясь в чужом коде, доставшемся на поддержку, вы чувствуете что-то похожее. Но так все же, как вы решаете эту нелегкую задачу?&lt;/P&gt;
&lt;P&gt;Почему я спрашиваю, потому что все чаще и чаще встречаю ситуацию, когда для исправления бага быстро втыкается костыль, который работает только в тех ситуациях, которые часто встречаются и про этот костыль тут же забывают, не говоря уже о том, чтобы хорошо его задокументировать.&lt;/P&gt;
&lt;P&gt;Сегодня мне довелось всласть покопаться в старом коде, работающей в боевом режиме уже почти шесть лет, и поэтому я решил поделиться моей практикой исправления багов.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Прежде всего, нужно решить насколько этот проект критичен, будет ли он в дальнейшем поддерживаться или отомрет – это необходимо для психологического настроя. Зная, что проект важен, а исправление старого и такого родного пользователям бага не прихоть начальника, вам будет гораздо приятнее идти по описанной ниже дорожке.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;OL&gt;
&lt;LI&gt;Перед тем как приступать к исправлению бага,&lt;STRONG&gt; создайте базовый unit-тест&lt;/STRONG&gt;, который позволит удостовериться в качестве выполненного исправления. Очень важно учесть все сценарии использования кода, в который будут внесены изменения. Да, это больно, я согласен, но это нужно сделать, чтобы потом не было больнее. Представьте себе, что вы сейчас ставите пломбу, чтобы потом не вырывать весь зуб целиком.&lt;/LI&gt;
&lt;LI&gt;После того как баг будет исправлен, а тесты будут успешно выполняться, не спешите закрыть проект и уходить пить пиво, порой пиво может подождать – дайте ему получше охладиться в холодильнике. Посмотрите на причину возникновения бага и поищите &lt;STRONG&gt;аналогичные фрагменты кода&lt;/STRONG&gt;, где может встретиться подобный баг. Сейчас, пока в вашей голове свеж опыт исправления одного бага, самое время справиться с аналогичными. Не забывая о &lt;STRIKE&gt;лечении зубов&lt;/STRIKE&gt; написании unit-тестов. &lt;/LI&gt;
&lt;LI&gt;По ходу исправления бага и его аналогов, подумайте, а не таится ли за только что исправленным багом еще один, а то и целый выводок. Вполне возможно, что этот баг маскировал другие – неплохой момент, чтобы проверить точки входа и выхода и &lt;STRONG&gt;поискать возможные баги, скрытые только что исправленным&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Ну и наконец, нужно сделать &lt;STRONG&gt;вывод&lt;/STRONG&gt; о том, что стало причиной появления этого бага, как не допустить таких в собственном коде и, главное, пометить себе, что такое встречается в жизни.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;К чему такие сложности, скажете вы, и окажетесь правы в большинстве случаев. Действительно, порой трата времени на столь тщательное исправление багов оказывается экономически неэффективной, однако, взгляните на эту проблему с другой стороны:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;недобитый баг восстанет и плюнет в вас ядом в самый неподходящий момент, когда на носу сдача нового функционала заказчику, новый проект, переезд и пополнение семейства?&lt;/LI&gt;
&lt;LI&gt;приобретенный в процессе исправления багов опыт окажется очень полезен в дальнейшей работе&lt;/LI&gt;
&lt;LI&gt;навыки чтения чужого кода очень полезны разработчику, учитывая, что редко когда есть возможность переписывать все заново&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;В следующий раз, исправляя баг, позвольте ему вас чему-нибудь научить. А потом перепродайте это знание кому-нибудь подороже.&lt;/P&gt;
&lt;P&gt;Успехов в кодинге!&lt;/P&gt;
&lt;P&gt;Гайдар&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9818123" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/Philosophy/default.aspx">Philosophy</category></item><item><title>Spb MobileShell 2- iPhone подвинься</title><link>http://blogs.msdn.com/gaidar/archive/2008/03/07/8097882.aspx</link><pubDate>Fri, 07 Mar 2008 16:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8097882</guid><dc:creator>gaidar</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/8097882.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=8097882</wfw:commentRss><description>&lt;P&gt;Истерия вокруг iPhone во многом была связана с уникальным интерфейсом, позволяющим легко управлять телефоном с помощью нескольких движений стилусом. Теперь похожие возможности есть у любого владельца телефона с Windows Mobile, &lt;A class="" href="http://spbsoftwarehouse.com/products/mobileshell/?en" mce_href="http://spbsoftwarehouse.com/products/mobileshell/?en"&gt;установившего себе Sbp MobileShell 2&lt;/A&gt;!&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://spbsoftwarehouse.com/products/mobileshell/screenshots/200.png" mce_src="http://spbsoftwarehouse.com/products/mobileshell/screenshots/200.png"&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8097882" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/Philosophy/default.aspx">Philosophy</category></item><item><title>Wi-Fi и Билайн – две вещи несовместные…</title><link>http://blogs.msdn.com/gaidar/archive/2007/07/09/wi-fi.aspx</link><pubDate>Mon, 09 Jul 2007 13:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3779106</guid><dc:creator>gaidar</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/3779106.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=3779106</wfw:commentRss><description>&lt;P&gt;Давно я что-то не писал в свой блог, пожалуй пора снова начать. Ну и конечно, чтобы веселее было, нужно кого-нибудь обругать хорошенько. Сейчас мне под горячую руку попался Билайн, его и поругаю &lt;SPAN style="FONT-FAMILY: Wingdings"&gt;J&lt;/SPAN&gt;. &lt;/P&gt;
&lt;P&gt;Нарисуем картинку. Сижу я в аэропорту Пулково и ожидаю, когда же объявят регистрацию на мой рейс, ну и, чтобы не терять зря время, решил поработать и отправить коллегам пару писем. Но каково же было мое удивление, после того как сайт Билайн, открывающийся при попытке открыть какой-нибудь URL в сети, с радостью приняв мою оплату и выдав мне логин и пароль, отказался пускать меня в Интеренет. На любой введенный адрес он отправлял меня на весьма информативную страничку, приведенную ниже: &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 571px; HEIGHT: 270px" height=394 src="http://blogs.gotdotnet.ru/personal/gaidar/content/binary/BeelineScrewedWfiFiUp.jpg" width=870 mce_src="http://blogs.gotdotnet.ru/personal/gaidar/content/binary/BeelineScrewedWfiFiUp.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Дабы уведомить уважаемых граждан из Билайн о таком вот нехорошем явлении, я написал им feedback через форму на сайте (19 уже поздно, чтобы звонить в поддержку, мы же знаем &lt;SPAN style="FONT-FAMILY: Wingdings"&gt;J&lt;/SPAN&gt;) и меня снова ждало удивление – форма отправки feedback ругалась на мое имя. Посмотрев на код странички я обнаружил, что все дело в том, что для проверки используется регулярное выражение, не принимающее пробелов (только буквы): &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var rex = new RegExp("^[а-я,a-z]{1,}$", "i");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!rex.test(cname.value))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert('Имя должно состоять только из букв и содержать более одного символа!');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;И эта история навела меня на мысль, почему в нашей стране, где просто огромнейшее количество ИТ специалистов и талантливых программистов, практически все публичные сервисы делают люди, «набранные по объявлению из ПТУ» ((с) коллега Крючков)? &lt;/P&gt;
&lt;P&gt;Обидно бывает, когда видишь exception'ы в банкоматах и автоматах для электронных платежей. Например, попробуйте в банкомате вашего банка «по ошибке» ввести первой цифрой ноль и, если банкомат это пропустит, попробуйте снять сумму денег вроде 0100 рублей, банкомат одного уважаемого банка до недавних пор такая операция вешала намертво с сообщением об ошибке, которое нельзя было никак отключить. &lt;/P&gt;
&lt;P&gt;Все это привело к мыслям на более глубокую тему – почему компании экономят на процессе разработки (отсутствии грамотного тестирования, плана внедрения и проверки, хорошей поддержке и грамотных программистах вообще). Наиболее вероятно, что до сих пор нет четкого понимания ценности инвестиций в ИТ, а у конечного пользователя уровень требований еще недостаточно высок. Если можно сделать что-то быстро и тяп ляп, то зачем платить больше и тратить время? Пользователь и так съест то, что дают. &lt;/P&gt;
&lt;P&gt;Аналогичная ситуация с технической поддержкой – например, найдя похожую ошибку на сайте Delta в субботу вечером, в воскресенье утром я получил ответ, а вечером в понедельник ошибка уже была устранена. В примере с тем же Билайном, я до сих пор даже и не знаю, был ли получен мой feedback. &lt;/P&gt;
&lt;P&gt;В связи с этим я призываю быть требовательнее, сообщать о проблемах разработчикам, а если они будут игнорировать наши требования, пользоваться услугами тех, кто на эти требования будет реагировать. Даешь качественный ИТ сервис в массы! &lt;SPAN style="FONT-FAMILY: Wingdings"&gt;J&lt;/SPAN&gt; &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3779106" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/Philosophy/default.aspx">Philosophy</category></item></channel></rss>