<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3261038697044244302</id><updated>2012-01-31T07:12:05.149+04:00</updated><category term='Elfreide Dusting'/><category term='статьи'/><category term='броузеры'/><category term='Microsoft'/><category term='литература'/><category term='ngrep'/><category term='Забавное'/><category term='perl'/><category term='БД'/><category term='полезные утилиты'/><category term='гаджеты'/><category term='непрерывная интеграция'/><category term='selenium'/><category term='безопасноть'/><category term='Oracle'/><category term='жизненный цикл ПО'/><category term='требования'/><category term='железо'/><category term='оффтоп'/><category term='TestLink'/><category term='git'/><category term='python'/><category term='покрытие кода'/><category term='ошибки'/><category term='кроссброузерность'/><category term='ротация'/><category term='технологии'/><category term='виртуализация'/><category term='безопасность'/><category term='gcov'/><category term='linux'/><category term='KDE'/><category term='обзор'/><category term='cvs'/><category term='lcov'/><category term='проектирование'/><category term='планирование'/><category term='тест-дизайн'/><category term='TSS'/><category term='команда'/><category term='софт для тестирования'/><category term='tips&apos;n tricks'/><category term='android'/><category term='контроль версий'/><category term='web-технологии'/><category term='автоматизация'/><category term='IE'/><category term='перочиный нож'/><category term='стандарты'/><category term='опрос'/><category term='mercurial'/><category term='программирование'/><category term='ipv6'/><category term='svn'/><title type='text'>Качество ПО</title><subtitle type='html'>Основано на реальных событиях...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-3315437617857564904</id><published>2012-01-31T07:12:00.000+04:00</published><updated>2012-01-31T07:12:05.156+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ошибки'/><title type='text'>"Фобосом" навеянное</title><content type='html'>&lt;a href="http://top.rbc.ru/society/31/01/2012/635492.shtml"&gt;ВЕРОЯТНАЯ ПРИЧИНА ПАДЕНИЯ&lt;/a&gt; аппарата "фобос-грунт" - ошибка в программировании. Версия с "происками Запада" , похоже, не состоятельна. &lt;br /&gt;Многие, вцепившись , в версию "ошибка разработчиков" уже начали костерить деградацию образования, пресловутое снижение качества знаний выпускников, тут же пробежались по ЕГЭ, отдавая дань моде.. Да, деградация.. Да, снижение... Да, ЕГЭ, будь он неладен... &lt;br /&gt;Но вот вспомнилась мне почему-то одна лекция по "Численным методам" в институте.. читал ее профессор Михайлов - человек с богатейшим опытом решения задач прикладной математики. Он поведал нам о подобном случае, который случился еще в СССР , когда был утерян очень дорогой спутник из-за ошибки программистов... Насколько я помню, тогда речь шла  всего лишь о проблеме округления и накопления погрешности. В общем, из-за ошибки в вычислениях спутник улетел совсем не туда, куда планировалось и миллионы народных рублей сейчас возможно еще летают где-то в солнечной системе ).. Тогда не было ЕГЭ, не было "деградации" и "снижения" - все было, судя по всему, наоборот, но подобные ошибки случались и времена, которыми принято гордиться...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-3315437617857564904?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/3315437617857564904/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2012/01/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3315437617857564904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3315437617857564904'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2012/01/blog-post.html' title='&quot;Фобосом&quot; навеянное'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-8331270928440245375</id><published>2012-01-04T18:27:00.001+04:00</published><updated>2012-01-04T19:33:22.926+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='кроссброузерность'/><category scheme='http://www.blogger.com/atom/ns#' term='стандарты'/><title type='text'>Internet Explorer на страже стандартов =)</title><content type='html'>Броузер Internet Explorer хорошо известен тем, что старается уж очень четко следовать стандартам, разработанным ответственными комитетами типа &lt;b&gt;W3C&lt;/b&gt;&lt;br /&gt;Там, где остальные броузеры закрывают глаза на некоторые опечатки, небольшие огрехи вебмастеров, IE каленым железом выжигает всякую "крамолу" )) Вот несколько граблей, на которые пришлось наступить в последнее время:&lt;br /&gt;&lt;b&gt;1. &amp;lt!DOCTYPE&lt;/b&gt;&lt;br /&gt;Сегодня довольно долго бился над выяснением того, почему на одном из сайтов "слетает" верстка в &lt;b&gt;IE&lt;/b&gt; , которая идеально выглядит в Chrome, Opera, Firefox.&lt;br /&gt;Перелопатил все стили, исправил пару незначительных кроссброузерных различий, но в целом IE продолжал показывать мне совсем не то ,что остальные броузеры.&lt;br /&gt;Причина оказалась банальна - в первой строке html-ответа не было директивы &lt;b&gt;&amp;lt!DOCTYPE ...&gt;&lt;/b&gt;, после его добавления в базовый html-шаблон все сразу стало выглядеть так, как требовалось (с небольшими допустимыми для IE отличиями типа отсутствия теней у некоторых элементов).&lt;br /&gt;Вот что пишет &lt;b&gt;w3c&lt;/b&gt; об этой преамбуле: &lt;a href="http://dev.w3.org/html5/spec/Overview.html#the-doctype"&gt;W3C-HTML5#DOCTYPE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. js-движок и синтаксис записи словарей в js&lt;/b&gt;&lt;br /&gt;Довольно много приходилось писать на perl и  в последнее время на python. При записи структур типа:&lt;br /&gt;&lt;pre&gt;my $dict = {&lt;br /&gt;      'key1': 1,&lt;br /&gt;      'key2': 2,&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;давно выработалась привычка всегда ставить запятую после очередной записи в хеше, даже если она последняя - это позволяет избегать синтаксических ошибок при возможном будущем добавлении новых записей в этот словарь. Эта привычка меня недавно подвела при написании js-кода, содержащего в большом количестве структуры, подобные описанной выше. &lt;br /&gt;Отладка кода проводилась в Chrome и Mozilla. Когда начал проверять работу в IE ошалел от кучи js-ошибок (при возникновении ошибок компилляции js - IE просто перестает рендерить страницу). Пришлось перелопатить все js исходники и повычищать последние запятые, которые оказались несоответствующими синтаксису описания словарей,  к которому я так привык.&lt;br /&gt;Теперь взял за правил ставить запятые ПЕРЕД элементами словаря ))&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. подчеркивания в именах хостов&lt;/b&gt; &lt;br /&gt;На эти грабли наступал уже давно и , может быть, даже описывал на страницах этого блога. Но недавно, когда коллега начал в ярости постукивать по клавиатуре, я поинтересовался в чем у него проблема , понял, что он наступил на то же самое (спросил бы раньше))))&lt;br /&gt;Пример: есть тестовый стенд одного веб-проекта. Тестируется в основном под Chrome, Mozilla. Начали проверять под IE. Полезли глюки в виде странной работы с куками. После ряда возгласов "мистика" стало ясным, что виноваты символы подчеркивания в имени тестового хоста, которые оказалиcь "не по стандарту". &lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. зацикливание при редиректе из-за некорректного http-euiv&lt;/b&gt;&lt;br /&gt;Вот такой вот код:&lt;br /&gt;&lt;pre&gt;&amp;ltmeta http-equiv="Refresh" content="1; /" /&amp;gt&lt;/pre&gt;отлично понимается Chrome и Firefox - в результате выполняется редирект на главную страницу сайта.&lt;br /&gt;В IE (например в 8.0) делается редирект на ту же самую страницу. В результате - ежесекундные бесконечные редиректы.&lt;br /&gt;Чтобы сделать понятным для всех броузеров ,опять же обратимся к стандарту &lt;a href="http://dev.w3.org/html5/spec/Overview.html#pragma-directives"&gt;W3C-HTML5#PRAGMAS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Это далеко не полный список того, чему IE предельно жестко учит)) Буду пополнять эту коллекцию&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-8331270928440245375?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/8331270928440245375/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2012/01/internet-explorer.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8331270928440245375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8331270928440245375'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2012/01/internet-explorer.html' title='Internet Explorer на страже стандартов =)'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-7806036220712420358</id><published>2011-12-23T17:05:00.001+04:00</published><updated>2011-12-23T17:06:50.604+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle: небольшая помощь для отладки и тестирования</title><content type='html'>Довольно часто приходится сталкиваться с тем , что логика приложения зависит от текущей даты на момент его использования/отладки/тестирования и, соответственно, с необходимостью протестировать работу приложения в нужный момент времени, до которого по календарю может быть еще очень много дней.&lt;br /&gt;&lt;br /&gt;То, насколько легко решить данную задачу , зависит от архитектуры конкретного приложения и среды его выполнения.&lt;br /&gt;&lt;br /&gt;Каждый ухищряется по-своему : самодельные заглушки, перевод системного времени и т.д. и т.п..&lt;br /&gt;&lt;br /&gt;На случай , если Ваше приложение работает с СУБД Oracle, то наверняка при этом использует функцию sysdate этой самой СУБД (если , конечно, вы не изобрели свой "велосипед"). &lt;br /&gt;sysdate возвращает текущее дату-время на сервере, где запущен данный инстанс Oracle.&lt;br /&gt;Создатели Oracle пошли на встречу разработчикам и тестировщикам , реализовав возможность активации режима, при котором sysdate будет возвращать фиксированную дату до тех пор, пока этот режим не будет деактивирован.&lt;br /&gt;&lt;br /&gt;Вот как заставить sysdate возвращать фиксированную дату:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;ALTER SYSTEM SET fixed_date = '2011-12-31 23:59:59';&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;А вот так все можно "вернуть  вернуть на место":&lt;br /&gt;&lt;pre&gt;&lt;code&gt;ALTER SYSTEM SET fixed_date=NONE&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;Плюсы:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. легко включается и отключается&lt;br /&gt;2. не влияет на системное время ОС&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Минусы:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Условный минус по сути вижу один - это особенность, на которую не все сразу обращают внимание:&lt;br /&gt;Данный трюк работает на уровне "системы" , а не "сессии" и меняет поведение sysdate для всего инстанса. Соответственно, необходимо не забывать "возвращать на место" и вообще отдавать себе в этом отчет, если это инстанс может одновременно использоваться несколькими пользователями.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-7806036220712420358?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/7806036220712420358/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/12/oracle.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7806036220712420358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7806036220712420358'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/12/oracle.html' title='Oracle: небольшая помощь для отладки и тестирования'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-8375560704189696430</id><published>2011-11-30T19:28:00.003+04:00</published><updated>2011-11-30T19:48:21.184+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><category scheme='http://www.blogger.com/atom/ns#' term='требования'/><title type='text'>Драйвер сидирома в интернете, драйвер модема на болванке (с)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-QZ1LVVlj_JE/TtZP84OZUHI/AAAAAAAAAFQ/PfQgqp3fmbY/s1600/deadlock.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="210" width="214" src="http://1.bp.blogspot.com/-QZ1LVVlj_JE/TtZP84OZUHI/AAAAAAAAAFQ/PfQgqp3fmbY/s320/deadlock.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Попалась на тестирование программка. Читаю , значит &lt;b&gt;требования&lt;/b&gt;. Абстрактно если, то озвучить их можно так: &lt;br /&gt;&lt;br /&gt;Требование 1: найти объект по номеру одного из его дочерних объектов и вернуть код ошибки 1, если дочерний объект с указанным номером не найден&lt;br /&gt;&lt;br /&gt;Требование 2: если у найденного объекта список дочерних объектов пуст, то вернуть код ошибки 2&lt;br /&gt;&lt;br /&gt;И ведь считается, что разработчик все закончил , система ДОЛЖНА &lt;b&gt;соответствовать требованиям&lt;/b&gt; и  остались "только баги" (вероятные) :)&lt;br /&gt;&lt;br /&gt;Вот такие вот "дедлоки" )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-8375560704189696430?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/8375560704189696430/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/11/blog-post_30.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8375560704189696430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8375560704189696430'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/11/blog-post_30.html' title='Драйвер сидирома в интернете, драйвер модема на болванке (с)'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-QZ1LVVlj_JE/TtZP84OZUHI/AAAAAAAAAFQ/PfQgqp3fmbY/s72-c/deadlock.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-8284772511774656492</id><published>2011-11-27T22:29:00.001+04:00</published><updated>2011-11-30T18:06:28.130+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Эти страшные системные ограничения )</title><content type='html'>Несколько месяцев назад натолкнулся на один очень странный баг в linux-приложении, которое активно использует unix-сокеты для общения своих дрочерних процессов. На одной из инсталляций приложение работало очень странно: запускалось , фурычило, но отказывалось останавливаться , а после принудительной остановки, отказывалось повторно запускаться. После продолжительных копаний со словами "мистика!" выяснилась причина была найдена - приложение было установлено по слишком длинному пути и unix-сокеты (читай файлы) создавались тут же (по их полному пути в системе ) . По их обрезанным именам стало ясно, что уперлись в какой-то системный лимит. Это было странно, потому что помилось, что полное имя файла может быть более 4кб. В данном случае уперлись в странную цифру 108 - не степень двойки, не круглая - вообще черт знает что. &lt;br /&gt;В общем, оказалось это длина буфера одного из поля структуры sockaddr_un, расширить которое нельзя. "Нельзя так нельзя" - подумали мы  и больше длинных путей ко временным файлам приложения не создавали и заказчикам деплоили с учетом этой "системой" проблемы. Думать о том, как бы это пофиксить времени тогда не было, раз был неплохой воркэраунд.&lt;br /&gt;Ну вот пару дней назад, когда описанная выше проблема почти стерлась из памяти опять на это напоролись на одной из автоматически создаваемых тестовых инсталляций. В этот раз матчасть перечитали повнимательнее и в код заглянули более въедливо ... в результате поняли , что никакого такого "системного" ограничения на самом деле нет (не считая 4кб на полный путь к файлу), ведь можно указывать относительное имя к файлу unix-сокета, вместо полного) Ну 108 байт на относительное имя хватит на китай.. &lt;br /&gt;Смотрели друг на друга с разработчиком и посмеялись сами над собой - "Эх, Семен семеныч!", как говорится))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-8284772511774656492?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/8284772511774656492/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/11/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8284772511774656492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8284772511774656492'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/11/blog-post.html' title='Эти страшные системные ограничения )'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-1531211188526726312</id><published>2011-10-15T17:27:00.000+04:00</published><updated>2011-10-15T17:27:31.289+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><category scheme='http://www.blogger.com/atom/ns#' term='безопасноть'/><category scheme='http://www.blogger.com/atom/ns#' term='ошибки'/><title type='text'>Забавный секурити баг на досуге</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Lo2DuSVH_EE/TpmJrfZFLgI/AAAAAAAAAEo/Pc11OijR2Xc/s1600/5172751.gif" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="189" width="250" src="http://2.bp.blogspot.com/-Lo2DuSVH_EE/TpmJrfZFLgI/AAAAAAAAAEo/Pc11OijR2Xc/s320/5172751.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Принимал я тут как-то на досуге участие в тестировании одного веб-проекта. &lt;br /&gt;Функциональное тестирование. Работа с системой требует авторизации, капчи на каждом шагу, сесии и все такое. &lt;br /&gt;В одном из сценариев пользователи аттачат файлы. По логике бизнес-процесса , скорее всего это будут в том числе и приватные документы. При аплоаде много чего проверяется, в том числе и допустимый размер аттача как на клиентской стороне , так и на сервере. &lt;br /&gt;В общем , " как учили ".  На залитый аттач пользователь потом может всегда найти ссылку для скачивания. Ссылка располагается в private-части. Вроде все вроде бы ок, если бы не тот факт, что в ссылке есть параметр file_id, который меня и заинтересовал. &lt;br /&gt;Путем перебора от 1 до "пока не надоест" мне удалось вытянуть все аттачи, которые были зарегистрированы в БД всеми пользователями этого проекта.. К счастью заказчика тестирования - пока еще тестовыми пользователями. полный приват, в общем :) О баге, конечно же доложено. &lt;br /&gt;Название проекта,  конечно же , не сообщаю :)&lt;br /&gt;&lt;br /&gt;"А король то голый.." (с) :)&lt;br /&gt;&lt;br /&gt;p.s. Надо будет антивирусом проверить все выкачанное, а то как бы на радостях самого себя не протроянить через какой-нибудь "документ"...:D &lt;br /&gt;Всем удачи и побольше любопытства - без него в нашем деле никуда )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-1531211188526726312?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/1531211188526726312/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/10/blog-post_15.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1531211188526726312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1531211188526726312'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/10/blog-post_15.html' title='Забавный секурити баг на досуге'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Lo2DuSVH_EE/TpmJrfZFLgI/AAAAAAAAAEo/Pc11OijR2Xc/s72-c/5172751.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-6064778579625274308</id><published>2011-10-05T13:40:00.000+04:00</published><updated>2011-10-05T13:40:28.136+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='тест-дизайн'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматизация'/><title type='text'>Автотесты: почему важно "не делать лишних движений"</title><content type='html'>Несколько слов о дизайне автоматических тестов. &lt;br /&gt;Точнее о вопросе избыточности проверок. Существует подход к разработке модульных (Unit) автоматических тестов, который можно описать так &lt;b&gt;"Проверяем одно условие за один тест" (Verify one condition per test&lt;/b&gt;). Применение такой стратегии дает множество плюсов: при провале тестов можно максимально быстро выявить узкое место, и, как следствие, максимально быстро устранить проблему. Пусть тестов станет больше, но плюсы, как правило перевешивают.&lt;br /&gt;При автоматизации более громоздких регрессионных функциональных тестов подобная стратегия также применима. Только в роли единицы проверки должны выступать уже не "условия" , а конкретный вариант поведения. При этом, все что лишнее, и не влияющее на данный конкретный вариант поведения должно быть безжалостно ампутировано. Лишними могут быть: некоторые инициализирующие параметры объектов, а также проверки , которые уже делались или будут делаться в тестах, специально для этого предназначенных. В общем, не надо делать лишних движений,  у которых нет конкретных целей.&lt;br /&gt;Вот пример из реальной практике, иллюстрирующий вышесказанное:&lt;br /&gt;&lt;br /&gt;1. есть автоматический функциональный тест, проверяющий некий вариант поведения системы&lt;br /&gt;2. в ходе его инициализации создается объект "клиент", у которого есть как обязательные так и необязательные параметры, причем данному тесту ни один из них не важен - важен факт наличия объекта "клиент" и все..&lt;br /&gt;3. тестировщик, который создавал тест, то ли копипастом, то ли для разнообразия решил заполнить поле email , причем указал там строку с емейлом "не по RFC" (на момент написания теста проверке необязательного email внимания не уделялось)&lt;br /&gt;4. тест долгое время работал, проверял нужные варианты, давал результат&lt;br /&gt;5. в какой-то момент проверке полей данного объекта уделили внимание, и ужесточили ее, создав соответствующие автотесты на эту новую "функциональность"&lt;br /&gt;6. старый же тест начал проваливаться, причем, не доходя до своей целевой проверки - проваливаться на этапе инициализации. Причина, думаю, ясна - строка "отбалды" в поле email.&lt;br /&gt;&lt;br /&gt;Тест пришлось править, тратить время. Пусть не много времени ушло данный конкретный тест, но в принципе - это лишняя трата времени, лишнее отвлечение внимания на провал теста. Причина - "лишние движения" и никому ненужная "кучерявость" теста. Всему свое место - фантазии и творчеству, в том числе :)&lt;br /&gt;&lt;br /&gt;Вывод: чуть больше осознанности может сэкономить чуть больше времени для чуть более полезных вещей :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-6064778579625274308?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/6064778579625274308/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/10/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6064778579625274308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6064778579625274308'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/10/blog-post.html' title='Автотесты: почему важно &quot;не делать лишних движений&quot;'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-324138879814328763</id><published>2011-10-05T02:10:00.006+04:00</published><updated>2011-10-05T19:52:43.971+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lcov'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматизация'/><category scheme='http://www.blogger.com/atom/ns#' term='gcov'/><category scheme='http://www.blogger.com/atom/ns#' term='покрытие кода'/><title type='text'>Анализ покрытия кода с помощью gcov+lcov</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-uTd0RdSL2fA/TowwfM2KTzI/AAAAAAAAAEY/Z1-fRZ3DuwI/s1600/lcov-result3.png" imageanchor="1" style="clear:right; float:none; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="189" width="380" src="http://1.bp.blogspot.com/-uTd0RdSL2fA/TowwfM2KTzI/AAAAAAAAAEY/Z1-fRZ3DuwI/s320/lcov-result3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KKxYqUyj1C0/Tox8-ZrBIII/AAAAAAAAAEg/s-nB7a-RlgM/s1600/lcov-result4.png" imageanchor="1" style="clear:right; float:none; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="166" width="320" src="http://1.bp.blogspot.com/-KKxYqUyj1C0/Tox8-ZrBIII/AAAAAAAAAEg/s-nB7a-RlgM/s320/lcov-result4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Сегодня наконец-то выделил время на то, чтобы наладить анализ покрытия кода. Пока только покрытие операторов и функций.&lt;br /&gt;Тестируемое приложение написано на Си, ОС linux. Компиллятор gcc. Приложение должно быть собрано с флагами компиллятора : -ftest-coverage -fprofile-arcs. &lt;br /&gt;Для анализа покрытия использовалась утилита &lt;b&gt;gcov&lt;/b&gt;, которая помогает провести анализ того, какие строчки кода и сколько раз  были задействованы в ходе выполнения приложения.&lt;br /&gt;В результате выполнения приложения генерируются специальные файлы для каждого файла исходников , в которых и содержится собранная информация о покрытии. Дальше с помощью утилиты &lt;b&gt;lcov&lt;/b&gt; полученные данные обрабатываются и генерируется , цветастый и веселый html-отчет . Я , как преимущественно визуалист, особенно был рад получившейся наглядности :) Даже в первом приближении мне стало понятно, что в плане автоматизации будут некоторые изменения :)&lt;br /&gt;Упомянутые утилиты бесплатны, присутствуют в репозиториях всех популярных дистрибутивов linux, а также могут быть скачаны с sourceforge, например.&lt;br /&gt;Итак, метод опробовал. Планирую проводить отдельный анализ покрытия для сеансов unit-тестирования и отдельно для сеансов автоматического регрессионного тестирования. &lt;br /&gt;В более отдаленной перспективе постараюсь также наладить анализ покрытия путей выполнения и условий, а также освоить &lt;b&gt;gcov&lt;/b&gt; в связке с gprof, для профилирования приложения.&lt;br /&gt;&lt;br /&gt;Тем, кто планирует внедрять подобные практики позволю сразу дать совет. Использование тех или иных инструментов для генерации статистики покрытия влияет на скорость работы приложения, поэтому для анализа покрытия необходимо запускать сеансы отдельные от сеансов регрессионного автоматического тестирования.&lt;br /&gt;p.s. &lt;br /&gt;&lt;br /&gt;лучше 1 раз увидеть, чем 100 раз предположить :)&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;UPD 05/10/2011&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;При анализе результатов ночного прогона обнаружил небольшой бонус - &lt;b&gt;gcov&lt;/b&gt; умеет и условия анализировать (см. пример на картинке вверху статьи ) . Приятная неожиданность :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-324138879814328763?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/324138879814328763/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/10/gcovlcov.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/324138879814328763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/324138879814328763'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/10/gcovlcov.html' title='Анализ покрытия кода с помощью gcov+lcov'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-uTd0RdSL2fA/TowwfM2KTzI/AAAAAAAAAEY/Z1-fRZ3DuwI/s72-c/lcov-result3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-1257025317340163451</id><published>2011-09-24T04:20:00.000+04:00</published><updated>2011-09-24T04:20:26.642+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='БД'/><category scheme='http://www.blogger.com/atom/ns#' term='проектирование'/><title type='text'>Стандарты именования объектов БД</title><content type='html'>Когда речь идет о написании кода, например на том или ином языке программирования , то в профессиональных командах разработчиков рано или поздно приходят к использованию единой нотации переменных , констант, классов , функций и так далее. Каждый разработчик понимает , для чего это нужно и следует принятым правилам и &lt;b&gt;соглашениям о кодировании&lt;/b&gt;, делая "хорошо" прежде всего самому себе.&lt;br /&gt;Но когда заходит речь о проектировании и создании схем БД, то зачастую необходимость применения унифицированных принципов именования не всеми осознается и тем более не всеми применяется. Хотя в этом направлении стандартизированность не менее важна и не менее нужна...Не знаю , как на этот вопрос смотрят разработчики, но попытаюсь изложить взгляд со стороны тестирования...&lt;br /&gt;&lt;br /&gt;По своему личному опыту могу точно утверждать, что единообразие наименований  &lt;b&gt;объектов в БД&lt;/b&gt; очень часто существенно экономит время . Преимущественно речь идет о времени на написание SQL-запросов особенно, когда приходится их писать сотнями в день и когда имеешь дело с большой разветвленной БД, где десятки а иногда и сотни таблиц. В этом случае все названия запомнить , конечно же , нереально, но если ты заранее знаешь , что имеешь дело со словарной таблицей и у нее обязательно есть &lt;i&gt;mnemonic &lt;/i&gt;,  и &lt;i&gt;description&lt;/i&gt;, то это существенно облегчает жизнь. Если же проектировщики и разработчики задумывали и создавали БД "кто в лес, кто по дрова", то ты заранее не знаешь, &lt;i&gt;description &lt;/i&gt;там или же &lt;i&gt;desc&lt;/i&gt;, а может &lt;i&gt;descr &lt;/i&gt;или вообще поле с опечаткой.. В итоге запрос с первого раза не пишется, надо смотреть описание таблицы - в общем, делать лишние движения. Они небольшие, но их много и вообще , как в песне поется, "не думай о секундах свысока"...&lt;br /&gt;С экономией времени на составлении запросов вроде бы все ясно, потому что явно. Есть и другие менее явные положительные эффекты от единой стратегии именования. &lt;br /&gt;Буквально на днях сталкивался с конкретной задачей автоматизации, которая решалась бы гораздо меньшими усилиями и существенно меньшим количеством строк кода, если бы не винегрет в названии одинаковых по смыслу полей в разных таблицах. То есть и в направлении автоматизации тестирования возможна экономия сил , нервов и средств при минимально едином подходе.&lt;br /&gt;Еще один положительный эффект - новички ( и разработчики , и тестировщики ) гораздо быстрее осваивают систему, если при ее проектировании и разработке применяются единые правила наименований объектов. Быстрее осваивают - читай, быстрее начинают приносить реальную пользу.&lt;br /&gt;&lt;br /&gt;В общем, везет тем , кто везет. А что делать если приходится работать с тем, что есть? Если , к примеру, схема БД росла и множилась годами, накопила кучу болячек, пережила не одну текучку кадров и к стандартизации нотации объектов в этой БД относились "с прохладцей"? Конечно же, не надо посыпать себе и тем более другим голову пеплом , не надо искать виноватых и жаловаться всем на всех.. Просто старайтесь конструктивно доводить до ответственных лиц необходимость &lt;b&gt;рефакторинга &lt;/b&gt;схемы БД , если такого осознания у них нет. Если же это осознание уже есть, то готовьте тесты , проверяющие, что в результате рефакторинга система дает конечному пользователю как минимум то же самое,  что и до него ))&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Полезная информация по теме:&lt;/b&gt;&lt;br /&gt;[1] Форумы на sql.ru - искать по "&lt;i&gt;правила именования объектов базы данных&lt;/i&gt;" - тут знающий народ, решающий реальные задачи. Много хороших и дельных советов и практик.&lt;br /&gt;[2] Хорошая книга как раз о рефакторинге уже существующей БД: &lt;i&gt;&lt;b&gt;Refactoring Databases: Evolutionary Database Design (Addison-Wesley Signature Series) &lt;br /&gt;Scott W. Ambler, Pramodkumar J. Sadalage&lt;/b&gt;&lt;/i&gt; &lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8PbRrG179QU/Tn0hdSU_yXI/AAAAAAAAAEQ/tsfnk2vxC5s/s1600/reafctor.jpg" imageanchor="1" style="clear:right; float:left; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="220" width="150" src="http://4.bp.blogspot.com/-8PbRrG179QU/Tn0hdSU_yXI/AAAAAAAAAEQ/tsfnk2vxC5s/s320/reafctor.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-1257025317340163451?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/1257025317340163451/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/09/blog-post_24.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1257025317340163451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1257025317340163451'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/09/blog-post_24.html' title='Стандарты именования объектов БД'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-8PbRrG179QU/Tn0hdSU_yXI/AAAAAAAAAEQ/tsfnk2vxC5s/s72-c/reafctor.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-8973587082590953050</id><published>2011-09-14T19:27:00.001+04:00</published><updated>2011-09-15T20:22:58.126+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='опрос'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='контроль версий'/><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Результаты опроса: "Какую систему контроля версий Вы используете"..</title><content type='html'>&lt;script type="text/javascript"&gt;          // Load the Visualization API and the piechart package.      google.load(&amp;#39;visualization&amp;#39;, &amp;#39;1.0&amp;#39;, {&amp;#39;packages&amp;#39;:[&amp;#39;corechart&amp;#39;]});            // Set a callback to run when the Google Visualization API is loaded.      google.setOnLoadCallback(drawChart);            // Callback that creates and populates a data table,       // instantiates the pie chart, passes in the data and      // draws it.      function drawChart() {      // Create the data table.      var data = new google.visualization.DataTable();      data.addColumn(&amp;#39;string&amp;#39;, &amp;#39;Topping&amp;#39;);      data.addColumn(&amp;#39;number&amp;#39;, &amp;#39;Slices&amp;#39;);      data.addRows([        [&amp;#39;CVS&amp;#39;, 3],        [&amp;#39;Subversion&amp;#39;, 1],        [&amp;#39;Mercurial&amp;#39;, 1],         [&amp;#39;Git&amp;#39;, 1],        [&amp;#39;Другую&amp;#39;, 2]        [&amp;#39;Никакую&amp;#39;, 2]      ]);      // Set chart options      var options = {&amp;#39;title&amp;#39;:&amp;#39;Какую систему контроля версий Вы используете?&amp;#39;,                     &amp;#39;width&amp;#39;:400,                     &amp;#39;height&amp;#39;:300};      // Instantiate and draw our chart, passing in some options.      var chart = new google.visualization.PieChart(document.getElementById(&amp;#39;chart_div&amp;#39;));      chart.draw(data, options);    }    &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Некоторое время назад добавил небольшой опрос с целью примерно понять, какова популярность той или иной системы контроля версий. &lt;br /&gt;Полученные на данный момент результаты не претендуют на стопроцентную репрезентативность - аудитория моего блога не столь обширна, как хотелось бы ) Да и в опросе пока поучаствовало не так много людей.. но тем не менее...&lt;br /&gt;&lt;br /&gt;&lt;!--ul&gt;&lt;br /&gt;&lt;li&gt;Subversion: 60%&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Git: 25%&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Mercurial: 17%&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Другую: 11%&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Никакую: 5%&lt;/li&gt;&lt;br /&gt;&lt;li&gt;CVS: 2%&lt;/li&gt;&lt;br /&gt;&lt;/ul--&gt;&lt;img src="http://chart.apis.google.com/chart?chf=bg,s,E8EEF7&amp;chxs=0,676767,9.5&amp;chxt=x&amp;chs=400x280&amp;cht=p&amp;chco=1954CC&amp;chds=0,125&amp;chd=t:60,25,17,11,5,2&amp;chdl=Subversion+60%25|Git+25%25|Mercurial+17%25|Other+11%25|Nothing+5%25|CVS+2%25&amp;chdlp=t&amp;chl=60%25|25%25|17%25|11%25|5%25|2%25&amp;chma=10,10,10,10|0,5&amp;chtt=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B+%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8F+%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9&amp;chts=676767,12.5" width="400" height="280" alt="Системы контроля версий" /&gt;&lt;br /&gt;Небольшие комментарии по результатам:&lt;br /&gt;Лидерство &lt;b&gt;Subversion&lt;/b&gt; предсказуемо. Как говорится - "сложилось исторически". Для меня наиболее интересен был "спор" &lt;b&gt;Git&lt;/b&gt; и &lt;b&gt;Mercurial&lt;/b&gt;. &lt;b&gt;Git&lt;/b&gt; действительно более раскручен (чего стоит только один github), хотя особых преимуществ в функциональном плане не дает. Остается интересным и открытым вопрос, что кроется за словом "Другая" - там точно есть &lt;b&gt;TFS&lt;/b&gt;, &lt;b&gt;bazaar&lt;/b&gt; и многие другие... Удивила &lt;b&gt;CVS&lt;/b&gt; - судя по всему , эта система скоро станет экзотикой - мир не стоит на месте...&lt;br /&gt;&lt;br /&gt;&lt;div id="chart_div"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-8973587082590953050?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/8973587082590953050/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/09/blog-post_14.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8973587082590953050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8973587082590953050'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/09/blog-post_14.html' title='Результаты опроса: &quot;Какую систему контроля версий Вы используете&quot;..'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total><georss:featurename>город Москва, Россия</georss:featurename><georss:point>55.755786 37.61763300000007</georss:point><georss:box>55.4907435 37.20096450000007 56.0208285 38.03430150000007</georss:box></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-7404437788346659189</id><published>2011-09-11T21:03:00.000+04:00</published><updated>2011-09-11T21:03:08.491+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='железо'/><category scheme='http://www.blogger.com/atom/ns#' term='оффтоп'/><title type='text'>Небольшой оффтоп: возвращаем в жизни роутер</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Несколько дней назад внезапно из строя вышел мой домашний WiFi-роутер Asus Wl=500G Premium. &amp;nbsp; Симптомы: невозможно достучаться даже по проводу ни по одному из протоколов, горят все лампочки, выключение , сброс настроек ни к чему не приводят. Обращение к знакомым обладателям подобных устройств и поисковой выдаче гугла выявило, что "слабым" местом этого девайса является его блок питания. Симптомы при выходе его из строя похожи. Вскрываю БП и действительно вижу слегка вздутый конденсатор. Радуюсь, что как правило в двух местах сразу такие вещи не ломаются и причина скорее всего в этом. У меня полетел конденсатор на 1200микрофарад, 10 вольтовый. В "Чипидип"е , что на Проспекте Мира куплена замена : радиальный , 1000 микрофарад (на 1200 найти не удалость), 10 вольтовый. Старый выпаян, новый впаян и, ура, в каждом уголке моей квартиры снова появился его величество Интернет =)&lt;br /&gt;&lt;br /&gt;Конечно же, можно было просто купить новый БП. Но как-то это не интересно, что ли.&lt;br /&gt;&lt;br /&gt;В общем, небольшой крюк в электронный магазин по дороге с работы домой , 20 минут на разбор корпуса БП (та еще нервотрепка) и 10 минут пайки неопытными в этом деле руками. В итоге все работает отлично.&lt;br /&gt;Надеюсь, кому-нибудь, приведенная информация будет полезна.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-7404437788346659189?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/7404437788346659189/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/09/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7404437788346659189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7404437788346659189'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/09/blog-post.html' title='Небольшой оффтоп: возвращаем в жизни роутер'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-7187087272817806077</id><published>2011-08-17T18:11:00.003+04:00</published><updated>2011-08-22T11:16:45.958+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='автоматизация'/><category scheme='http://www.blogger.com/atom/ns#' term='selenium'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Загрузка файлов клиентом и Selenium</title><content type='html'>В целях &lt;b&gt;автоматизации&lt;/b&gt; тестирования&amp;nbsp; некоторых сценариев точечно применяю &lt;b&gt;Selenium&lt;/b&gt;-тесты на &lt;b&gt;perl&lt;/b&gt;-е + &lt;b&gt;Selenium RC&lt;/b&gt;.&lt;br /&gt;До сих пор не приходилось сталкиваться с автоматизацией кейсов, связанных&amp;nbsp; с &lt;b&gt;аплоадом&lt;/b&gt; файлов. И вот такая необходимость возникла.&lt;br /&gt;Итак , запускаю &lt;b&gt;Firefox&lt;/b&gt; + &lt;b&gt;Selenium IDE&lt;/b&gt; , записываю действия по аплоаду и экспортирую в &lt;b&gt;perl&lt;/b&gt;-виде.&lt;br /&gt;Смотрю, какими же командами IDE мне сэмулировал нужную последовательность. Удивленно вижу, что для указания нужного файла используется всего навсего type с локатором файлового INPUT-поля и полным путем файла.&lt;br /&gt;Отсекаю лишнее ,добавляю нужное , встраиваю в perl-фреймворк и вижу , что тест не проходит.&lt;br /&gt;Копаю &lt;b&gt;perl&lt;/b&gt;-библиотеку для работы с &lt;b&gt;Selenium&lt;/b&gt; (WWW::Selenium) , радостно нахожу команду &lt;b&gt;attach_file&lt;/b&gt; , пытаюсь ее применить и не получаю результата.&lt;br /&gt;Гуглю, вижу всяческие рецепты,&amp;nbsp; как можно извратиться с помощью спец js-скриптов, дополнительных exe-утилит (для Windows).. Ни то ни то не подходит. Как раз в тот момент, когда хотелось "забить" на аплоад, в "буржнете" попался очень простой совет - принудительно установить фокус на поле с именем файла после его заполнения. НЕ веря в успех, попробовал и получилось...Работает (в *chrome - режиме) , аплоадит, тестируется =)&lt;br /&gt;&lt;br /&gt;p.s.&lt;br /&gt;По поводу Selenium 2.0 - слышал, что там проблема пользовательского &lt;b&gt;аплоада&lt;/b&gt; стоит гораздо менее остро. Лишний повод познакомится и попробовать.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;UPD 22/08/2011:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;Перечитал пост и понял, что из него до конца неясно, какая же последовательность команд решает проблему? Ответ: &lt;b&gt;focus + &amp;nbsp;type&lt;/b&gt; . attachfile можно вообще не использовать. По крайней мере, в моей ситуации со стандартными контролами пользы от этой команды &amp;nbsp;никакой.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-7187087272817806077?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/7187087272817806077/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/08/selenium.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7187087272817806077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7187087272817806077'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/08/selenium.html' title='Загрузка файлов клиентом и Selenium'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-8597573325895113781</id><published>2011-08-05T19:42:00.002+04:00</published><updated>2011-08-06T18:56:47.776+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><category scheme='http://www.blogger.com/atom/ns#' term='ошибки'/><title type='text'>Лень и кроссплатформенные баги</title><content type='html'>Лень далеко не всегда является двигателем прогресса. В тех случаях , когда надо снять с себя ручную рутину, автоматизируя часть задач - да, согласен - такая лень приводит к тому, что появляется больше свободного времени.. в том числе , чтобы порубиться в StarCraft :) Но когда лень заставляет тебя делать что-то спустя рукава , то это уже не прогресс , а сплошной источник проблем... В том числе и в ИТ, в том числе и в разработке-тестировании...&lt;br /&gt;&lt;br /&gt;Вот пример: Разработчику поступила задача слобать некий cgi-скрипт. Веб-продукт, частью которого будет этот cgi-скрипт , заявлен как работающий под любой *nix - системой: Linux, FreeBSD, Solaris ..etc&lt;br /&gt;По ходу дела девелопер сталкивается &amp;nbsp;с необходимостью работы с датами. В любом уважающем себя языке программирования, особенно в скриптовом, есть библиотеки для кроссплатформенной работы с датами. Но с ними надо разбираться, читать маны..разработчику ( кодящему , к примеру, в linux) неохота, ведь он знает быстрый способ - запустить из скрипта консольный date с нужными ему флагами и распарсить вывод этой команды. Сказано - сделано. date убран в обратные кавычки (если это, &amp;nbsp;к примеру perl), вывод распарсен, дата в нужном формате получена и в итоге скрипт написан и вроде как работает...У тестирования, к примеру, цейтнот и есть время на проверку в самой распространенной конфигурации, которой, к примеру является работа на &amp;nbsp;linux.... Или же тоже лень проверять во всех конфигурация... В общем , &amp;nbsp;протестировали в linux - все ок. Релиз. В итоге находится пользователь, который ставит продукт на Solaris и получает 500-тки. Ругается и топает ногами "За что я заплатил деньги".. При разборе полета выясняется , что у GNU-той команды date &amp;nbsp;в SunOs совсем другие параметры, из-за чего скрипт ленивого разработчика аварийно завершается.&lt;br /&gt;&lt;br /&gt;В общем лень лени рознь. Разработчикам советы давать не охота, а вот нам - тестировщикам , посоветовал бы не лениться ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-8597573325895113781?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/8597573325895113781/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/08/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8597573325895113781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8597573325895113781'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/08/blog-post.html' title='Лень и кроссплатформенные баги'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-6738949359202970793</id><published>2011-08-04T09:51:00.003+04:00</published><updated>2011-08-04T19:19:06.989+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips&apos;n tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='перочиный нож'/><title type='text'>Тестовый smtp-сервер в одну строчку</title><content type='html'>Недавно я делился &lt;a href="http://qaimprove.blogspot.com/2011/07/blog-post_27.html"&gt;советом &lt;/a&gt;о том, как быстро поднять тестовый http сервер в произвольной директории. Вот еще еще одна плюшка от &lt;b&gt;python&lt;/b&gt;-a, которая может сэкономить немало времени в определенных ситуациях..&lt;br /&gt;Например, вы разработчик и кодите нечто, что должно отправлять почтовые сообщения по &lt;b&gt;smtp&lt;/b&gt;. Или же вы тестировщик, который должен проверить отправку неким приложением письма.&lt;br /&gt;Вот практический совет, как поднять тестовый &lt;b&gt;smtp&lt;/b&gt;-сервер, который будет принимать сообщения по указанному порту и дампить их на stdout:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 11px; line-height: 20px;"&gt;&lt;b&gt;python &lt;/b&gt;-m smtpd -n -c DebuggingServer localhost:1025&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 11px; line-height: 20px;"&gt;UPD 04.08.2011:&lt;/span&gt;&lt;/code&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 11px; line-height: 20px;"&gt;Да, эта "штука" может быть полезна при создании комплексных автоматических тестов, например систем регистрации новых пользователей и тому подобных вещей. В настоящее время как раз проводим ручное тестирование нового функционала , связанного рассылками писем пользователям и, возможно, описанная выше "фича" окажется полезной.&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-6738949359202970793?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/6738949359202970793/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/08/smtp.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6738949359202970793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6738949359202970793'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/08/smtp.html' title='Тестовый smtp-сервер в одну строчку'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-3954596814409122654</id><published>2011-08-03T15:40:00.004+04:00</published><updated>2011-08-04T09:42:23.562+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ngrep'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='полезные утилиты'/><category scheme='http://www.blogger.com/atom/ns#' term='перочиный нож'/><title type='text'>grep по сетевым пакетам</title><content type='html'>Тем, кто знает , зачем может понадобиться сниффать сетевые пакеты, анализировать их содержимое хочу посоветовать GNU-утилиту &lt;b&gt;ngrep&lt;/b&gt;, которая позволяет с легкостью проводить в реальном (!) времени &lt;b&gt;grep&lt;/b&gt;&amp;nbsp;по содержимому сетевых пакетов.&lt;br /&gt;Утилита есть в репозиториях практически всех &lt;b&gt;linux&lt;/b&gt;-дистрибутивов.&lt;br /&gt;Подробно о ее возможностях можно узнать в ее man-е , а также на &lt;a href="http://sourceforge.net/projects/ngrep/"&gt;странице проекта.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Пример: "Поиск в HTTP-пакетах дефолтного интерфейса по строке 'login' "&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo &lt;b&gt;ngrep&lt;/b&gt; 'login' -W byline&amp;nbsp; port 80 &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Результат:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&amp;nbsp;T 10.33.4.105:46837 -&amp;gt; 10.33.4.106:80 [AP]&lt;br /&gt;GET /cgi-bin/clients/STUB?login=type%20login%20here&amp;amp;psw=ecaae631e3e96de095a45d015c3b4e99&amp;amp;phones=74953222233&amp;amp;mes=messagetext.&amp;amp;charset=utf-8 HTTP/1.1.&lt;br /&gt;TE: deflate,gzip;q=0.3.&lt;br /&gt;Connection: TE, close.&lt;br /&gt;Host: some.host.name.&lt;br /&gt;User-Agent: libwww-perl/5.837.&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;##&lt;br /&gt;T 10.33.4.106:80 -&amp;gt; 10.33.4.105:46837 [AP]&lt;br /&gt;HTTP/1.1 200 OK.&lt;br /&gt;Date: Wed, 03 Aug 2011 11:39:43 GMT.&lt;br /&gt;Server: Apache/2.2.3 (CentOS).&lt;br /&gt;Connection: close.&lt;br /&gt;Transfer-Encoding: chunked.&lt;br /&gt;Content-Type: text/html; charset=ISO-8859-1.&lt;br /&gt;.&lt;br /&gt;54.&lt;br /&gt;$VAR1 = 'login';&lt;br /&gt;$VAR2 = 'psw';&lt;br /&gt;$VAR3 = 'phones';&lt;br /&gt;$VAR4 = 'mes';&lt;br /&gt;$VAR5 = 'charset';&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-3954596814409122654?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/3954596814409122654/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/08/grep.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3954596814409122654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3954596814409122654'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/08/grep.html' title='grep по сетевым пакетам'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-8398678817276137758</id><published>2011-07-27T18:50:00.003+04:00</published><updated>2011-07-27T22:28:59.867+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KDE'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ошибки'/><title type='text'>KDE как образец организации обратной связи</title><content type='html'>Некоторое время пользуюсь дистрибутивом Debian Squeeze со штатной графической оболочкой KDE4. Хочу вкратце описать как устроен фидбек по багам в этом софте и поделиться своим восхищением =)&lt;br /&gt;На примере сбойнувшего приложения Blogilo. Это штатная для KDE утилита , позволяющая отправлять посты в блоги с декстопа. Сегодня я ей решил воспользоваться, ну и напоролся на аварийное завершение в одном из сценариев ее использования. &lt;br /&gt;Поначалу ругнулся, но когда увидел, как система отреагировала на сбой , то все заскриншотил, специально повторив crash приложения для этого =)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Итак, сразу после сбоя, я увидел довольно функциональное окно с возможностью зарепортить баг, посмотреть причину сбоя и т.д.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YcYRfbUFKv0/TjAhF36YpuI/AAAAAAAAADM/UV_6RW2MJzk/s1600/crash-report-assist-0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="191" src="http://2.bp.blogspot.com/-YcYRfbUFKv0/TjAhF36YpuI/AAAAAAAAADM/UV_6RW2MJzk/s320/crash-report-assist-0.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;Далее "окошко вежливости":&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5ig3pgpZoak/TjAiBa2ZjtI/AAAAAAAAADU/2LtbYsymtvg/s1600/crash-report-assist-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://1.bp.blogspot.com/-5ig3pgpZoak/TjAiBa2ZjtI/AAAAAAAAADU/2LtbYsymtvg/s320/crash-report-assist-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;В следующем окне визарда пользователь отвечает на пару вопросов - простых и ненавязчивых, но важных для дальнейшей работы по проблеме:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-c7FDP1-gJeg/TjAin8U8aKI/AAAAAAAAADc/eNPn5Ua5Gdw/s1600/crash-report-assist-2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-c7FDP1-gJeg/TjAin8U8aKI/AAAAAAAAADc/eNPn5Ua5Gdw/s320/crash-report-assist-2.png" width="249" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-c7FDP1-gJeg/TjAin8U8aKI/AAAAAAAAADc/eNPn5Ua5Gdw/s1600/crash-report-assist-2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;&lt;br /&gt;Потом окно со стектрейсом, который тут же можно сохранить в файл, скопировать в буфер обмена и т.д.:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-P9trJTsXv8U/TjAjDnRfD5I/AAAAAAAAADk/up3H56_3hC0/s1600/crash-report-assist-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-P9trJTsXv8U/TjAjDnRfD5I/AAAAAAAAADk/up3H56_3hC0/s320/crash-report-assist-3.png" width="249" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;&lt;br /&gt;Дальше я увидел окно  с полями ввода данных учетной записи в багтрекере KDE. Поначалу захотелось прекратить все это, не желая тратить времени, но все таки заставил себя и , надо сказать, регистрация оказалась очень неутомительной и шустрой - благо тут же под рукой ссылки на формы регистрации..&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center; width: 100%;"&gt;&lt;a href="http://4.bp.blogspot.com/-0ERaezKzMvM/TjAjn-zSePI/AAAAAAAAADs/SiZVjOdSh6M/s1600/crash-report-assist-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-0ERaezKzMvM/TjAjn-zSePI/AAAAAAAAADs/SiZVjOdSh6M/s320/crash-report-assist-4.png" width="249" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;Далее самое интересное..&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;На следующем шаге показывается список с ошибками, которые были зарегистированы ранее и могут быть дупликатными к текущей проблеме.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-g43cWk3L148/TjAnDhIIyJI/AAAAAAAAADw/XtFxiYF3L3k/s1600/crash-report-assist-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://2.bp.blogspot.com/-g43cWk3L148/TjAnDhIIyJI/AAAAAAAAADw/XtFxiYF3L3k/s320/crash-report-assist-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;По каждому багу можно посмотреть полную информацию , а при просмотре этих багов рядом отображаются данные текущей проблемы для сравнени:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-MmhfHm_hycs/TjAnIgz1BbI/AAAAAAAAAD0/p5aeYgBYM3Y/s1600/crash-report-assist-6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://1.bp.blogspot.com/-MmhfHm_hycs/TjAnIgz1BbI/AAAAAAAAAD0/p5aeYgBYM3Y/s320/crash-report-assist-6.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ну и напоследок перед непосредственной отправкой бага, прошедшего все вышеописанные стадии можно выбрать опцию для перезапуска сбойнувшего приложения:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8geMU3FVqnI/TjAnO3Jy-DI/AAAAAAAAAD4/deHUPZbG--E/s1600/crash-report-assist-7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://4.bp.blogspot.com/-8geMU3FVqnI/TjAnO3Jy-DI/AAAAAAAAAD4/deHUPZbG--E/s320/crash-report-assist-7.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;p.s. Приходилось сталкиваться с различным софтом, в котором делались аналогичные попытки получить качественные сигналы о возникающих проблемах , но пока KDE лично в моих придирчивых глазах не превзойден. Еще бы сбоев поменьше, вообще цены не было бы! )))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-8398678817276137758?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/8398678817276137758/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/07/kde.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8398678817276137758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8398678817276137758'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/07/kde.html' title='KDE как образец организации обратной связи'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-YcYRfbUFKv0/TjAhF36YpuI/AAAAAAAAADM/UV_6RW2MJzk/s72-c/crash-report-assist-0.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-8441754052098870272</id><published>2011-07-27T08:15:00.001+04:00</published><updated>2011-07-27T08:16:46.712+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips&apos;n tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='перочиный нож'/><title type='text'>До чего дошел прогресс (с)</title><content type='html'>Недавно открыл для себя очень полезную и простую фичу в &lt;b&gt;python&lt;/b&gt;-e.&lt;br /&gt;Буквально одной строчкой в консоли поднимается простенький веб-сервер:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;python -m http.server 8000 (для 3-x версий питона)&lt;br /&gt;&lt;br /&gt;python -m &lt;b&gt;SlimpleHTTPServer&lt;/b&gt; (для 2.X версий питона)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Если явно не указать порт, то будет висеть на 8000.&lt;br /&gt;&lt;br /&gt;В итоге при запросе http://&lt;ip машины или сетевое/доменное имя&gt;:8000/  видим листинг директории, в которой он был запущен.&lt;br /&gt;&lt;br /&gt;Как минимум умеет:&lt;br /&gt;1. отображать статические страницы, подхватывает index.html&lt;br /&gt;2. если нет индексной страницы, то показывает листинг текущей директории&lt;br /&gt;&lt;br /&gt;Именно второй пункт и оказался для меня полезным, в ситуациях , когда надо быстро забрать/отдать тот или иной файл с той или иной машины.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-8441754052098870272?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/8441754052098870272/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/07/blog-post_27.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8441754052098870272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8441754052098870272'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/07/blog-post_27.html' title='До чего дошел прогресс (с)'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-1389303370010116144</id><published>2011-07-21T00:46:00.002+04:00</published><updated>2011-07-21T18:08:58.399+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='софт для тестирования'/><category scheme='http://www.blogger.com/atom/ns#' term='обзор'/><category scheme='http://www.blogger.com/atom/ns#' term='перочиный нож'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Как быстро снять скриншот на гуглофоне</title><content type='html'>Недавно потребовалось оперативно снять &lt;b&gt;скриншот&lt;/b&gt; на &lt;b&gt;Android&lt;/b&gt;-смартфоне. Компьютера с SDK под рукой не было. Выручило приложение &lt;b&gt;ShootMe&lt;/b&gt;. Доступно  на маркете, бесплатно. &lt;br /&gt;Чтобы снять &lt;b&gt;скриншот &lt;/b&gt;надо запустить приложение и просто потрясти аппарат :)&lt;br /&gt;Снимки получаются хорошего качества, можно выбрать формат jpg или png (по-умолчанию): &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-3PxaAYpC2hE/Tic9dbLBcfI/AAAAAAAAADE/jeBIvoNRJtk/s1600/snap20110720_194246.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="192" src="http://4.bp.blogspot.com/-3PxaAYpC2hE/Tic9dbLBcfI/AAAAAAAAADE/jeBIvoNRJtk/s320/snap20110720_194246.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Работать с программой удобно, еще бы вот интегрировать с Evernote или почтовиком - цены бы не было.&lt;br /&gt;Также просто с помощью этой программы снимаются &lt;b&gt;скринкасты&lt;/b&gt;, для которых можно выбрать кодек и указать фреймрейт.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-1389303370010116144?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/1389303370010116144/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/07/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1389303370010116144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1389303370010116144'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/07/blog-post.html' title='Как быстро снять скриншот на гуглофоне'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-3PxaAYpC2hE/Tic9dbLBcfI/AAAAAAAAADE/jeBIvoNRJtk/s72-c/snap20110720_194246.png' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>город Москва, Россия</georss:featurename><georss:point>55.755786 37.61763300000007</georss:point><georss:box>55.4907435 37.20096450000007 56.0208285 38.03430150000007</georss:box></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-172141988031857753</id><published>2011-07-18T18:12:00.003+04:00</published><updated>2011-07-21T18:10:25.096+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><category scheme='http://www.blogger.com/atom/ns#' term='безопасность'/><title type='text'>Насколько может быть важен robots.txt</title><content type='html'>Сегодня позабавила &lt;b&gt;новость &lt;/b&gt;о том, что в поисковой выдаче &lt;b&gt;Яндекса &lt;/b&gt;и в его кеше появились смски, которые ничего не подозревающие пользователи одного из "большой тройки" отправляли с использованием веб-сервсиса отправки сообщений.&lt;br /&gt;&lt;br /&gt;К моменту написания этого поста выдача и кеш были почищены , хотя с утра еще по запросу : &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;http://yandex.ru/yandsearch?p=6&amp;text=url%3Awww.sendsms.megafon.ru*+|+url%3Asendsms.megafon.ru*&amp;fyandex=1&amp;lr=213&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;красовались сотни страниц выдачи с номерами телефонов и текстами сообщений - было забавно почитать некоторые)&lt;br /&gt;&lt;br /&gt;В общем, кто хотел, информацию слил на совершенно законных основаниях с совершенно открытого источника.&lt;br /&gt;&lt;br /&gt;А Вы пользовались этим сервисом этого оператора ? :)&lt;br /&gt;&lt;br /&gt;p.s. утечка произошла из-за особенностей сервиса и невнимательного отношения к настройке &lt;b&gt;robots.txt&lt;/b&gt; ,  а может  незнания того, что для "паука" все разрешено, что не запрещено :)&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;b&gt;UPD 21/07/2011:&lt;/b&gt;&lt;br /&gt;"Оказались в паблике" потому , что:&lt;br /&gt;1. либо не было файла &lt;b&gt;robots.txt&lt;/b&gt;&lt;br /&gt;2. либо в нем не было директив запрещающих индексацию "секретного" URL. Все что не запрещено явно - разрешено для индексации&lt;br /&gt;3. возможно для user-agent 'Yandex' правила и были, только &lt;b&gt;Яндекс&lt;/b&gt; , насколько я знаю при индексации иногда заходит на сайты с "левым" агентом. Делается это для борьбы с черными сеошниками (отдельная интересная , но объемная тема)&lt;br /&gt;&lt;br /&gt;Вопрос 2: как поисковик узнал о секретном урле со временными смсками?&lt;br /&gt;Тут все просто - для этого не обязательно наличие ссылки со страницы. Тут возможны по меньшей мере 2 варианта, откуда Яша узнал:&lt;br /&gt;&lt;br /&gt;1. Кто-то сообщил , используя Яндексовскую-же форму "Сообщить о новом сайте" , где можно указывать произвольный URL, который поисковик попытается обойти при следующем обходе.&lt;br /&gt;2. Поисковик "отреверсил" структуру ресурса. Это не очень сложная задача, а для &lt;b&gt;Яндекса &lt;/b&gt;тем более. &lt;br /&gt;&lt;br /&gt;Вот такие вот соображения. Все объяснимо, так что не стоит верить зомбоящику, который трубил о "хакерской атаке". Хакеры, если бы взломали, то дефейс был бы куда серьезнее и не ограничились бы "тысячами" смс-ок.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-172141988031857753?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/172141988031857753/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/07/robotstxt.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/172141988031857753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/172141988031857753'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/07/robotstxt.html' title='Насколько может быть важен robots.txt'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-6451770402510907284</id><published>2011-06-20T17:08:00.000+04:00</published><updated>2011-06-20T17:08:18.914+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='ошибки'/><title type='text'>Откуда не ждешь...</title><content type='html'>Вот сидишь, бывает, тестируешь что-то очень важное и срочное, ищешь ошибки, недочеты в том, что скоро будет продавать твоя фирма. А баги вылезают там, откуда ты этого совсем не ждешь -  в софте, который ты для этого используешь. Иногда даже в очень дорогом и "надежном" софте. Бывает, такие "сюрпризы" существенно осложняют жизнь и тормозят процесс... Например, сегодня требовалось организовать эскпорт данных для нагрузочного тестирования и одной СУБД Oracle в другую.&lt;br /&gt;Как любая уважающая себя СУБД Oracle предоставляет собственный инструмент для этого : пара утилит expdp, impdp. Сложность оказалась лишь в том, что запуск expdp приводит к безнадежному Segmentation Fault:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Program terminated with signal 11, Segmentation fault.&lt;br /&gt;#0  0x0000000000409b43 in udcTrace ()&lt;br /&gt;(gdb) bt&lt;br /&gt;#0  0x0000000000409b43 in udcTrace ()&lt;br /&gt;#1  0x0000000000413558 in udcScrubParam ()&lt;br /&gt;#2  0x0000000000407877 in udeProcessLMParam ()&lt;br /&gt;#3  0x0000000000403918 in __libc_csu_init ()&lt;br /&gt;#4  0x00007fff00009fc0 in ?? ()&lt;br /&gt;#5  0x0000000000000000 in ?? ()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;"Чесались руки" поковыряться в оракле, чтобы поискать workaround ,но врмеени в обрез - пришлось генерировать данные заново, вместо того, чтобы их более быстро и легко смигрировать.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-6451770402510907284?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/6451770402510907284/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/06/blog-post_20.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6451770402510907284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6451770402510907284'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/06/blog-post_20.html' title='Откуда не ждешь...'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-5799386966853195990</id><published>2011-06-01T21:49:00.002+04:00</published><updated>2011-06-01T21:50:39.596+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='статьи'/><category scheme='http://www.blogger.com/atom/ns#' term='технологии'/><category scheme='http://www.blogger.com/atom/ns#' term='ipv6'/><title type='text'>08.06.2011 - день тестирования ipv6</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.worldipv6day.org/files/header4.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="94" width="285" src="http://www.worldipv6day.org/files/header4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Более 30 лет назад основоположники Интернета изобрели 32-битную адресацию - всем нам привычный ipv4-адрес. С самого начала можно было предположить, что рано или поздно свободные адреса закончатся. Но до этого момента было очень-очень далеко. И вот он уже вот-вот настанет. Адреса будут исчерпаны уже в этом году. Чем это грозит нам, как простым пользователям Интернета? Да , собственно, ничем. Все существующие ресурсы будут продолжать резолвиться по их ipv4-адресам. &lt;br /&gt;А чем для нас , как тестировщиков, обернется переход на ipv6? Многим из нас предстоит приступить к тестированию поддержки ipv6 в ПО, потому что разработчики (и их менеджеры),  которые не подумали об этом ранее , уже начали шевелиться, готовиться. Особо попотеть придется разработчикам и тестировщикам системного по, биллинговых систем, а также различного рода сетевых приложений. В любом случае будет интересно. Это в общем.&lt;br /&gt;&lt;br /&gt;Так что же такого будет происходить 8-го июня? Ничего особенного. Просто те компании, которые заявили о своем участии в "дне тестирования ipv6" на 24 часа включат поддержку ipv6 на своих первичных ресурсах, а принимающие участие в эксперименте провайдеры (ISP) сделают соответствующие апгрейды софта на своем сетевом оборудовании. &lt;br /&gt;&lt;br /&gt;Посмотреть список компаний-участников можно &lt;a href="http://www.worldipv6day.org/participants/index.html"&gt;здесь&lt;/a&gt;. На этом же сайте можно заявить о своем желании поучаствовать, а также в целом ознакомиться с проблематикой.&lt;br /&gt;&lt;br /&gt;Ждем 8-го)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-5799386966853195990?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/5799386966853195990/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/06/08062011-ipv6.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5799386966853195990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5799386966853195990'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/06/08062011-ipv6.html' title='08.06.2011 - день тестирования ipv6'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-5567231181406448549</id><published>2011-06-01T00:40:00.000+04:00</published><updated>2011-06-01T00:40:18.757+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><title type='text'>Приятная неожиданность )</title><content type='html'>Все мы часто пользуемся личными кабинетами у своих интернет-провайдеров. &lt;br /&gt;У каких-то операторов они удобные, функциональные,  у каких-то не очень. Частой фичей этих самых кабинетов стала возможность подписки по SMS на различные типы событий. Например, о поступлении средств на счет или предупреждения о скорой блокировке аккаунта и т.д. и т.п. &lt;br /&gt;Мой провайдер по слухам когда-то предоставлял такую функцию, но для некоторых групп абонентов почему-то ее заблокировал. Сегодня я узнал, что я тоже в этой группе, не найдя возможности подписаться на SMS в своем личном кабинете.&lt;br /&gt;В общем, уж не знаю, что меня заставило открыть исходный код главной страницы личного кабинета, но факт в том, что в этом самом коде я заметил закомментированный пункт меню "Подписка на SMS оповещения". Я машинально скопировал я ссылочку из этого "заблокированного" пункта меню, вставил в адресную строку броузера и очень удивился , когда увидел соответствующую web-форму ) (очень надежный способ блокирования функционала  =) &lt;br /&gt;Ну и подписался, конечно. Еще более удивительным оказалось то,  что подписка реально заработала и услуга эта оказалась бесплатна. Ничего не остается теперь, как пользоваться втихоря )))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-5567231181406448549?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/5567231181406448549/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/06/blog-post.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5567231181406448549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5567231181406448549'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/06/blog-post.html' title='Приятная неожиданность )'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-5033517086548128163</id><published>2011-05-26T07:02:00.000+04:00</published><updated>2011-05-26T07:02:46.547+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>ICQ для Linux: сделано для галочки</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-OSTK1PM-4xk/Td3CiSGdvCI/AAAAAAAAAC0/uXj6cOUlO9k/s1600/icq.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="134" src="http://2.bp.blogspot.com/-OSTK1PM-4xk/Td3CiSGdvCI/AAAAAAAAAC0/uXj6cOUlO9k/s320/icq.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вчера на в "ленте" промелькнула новость о том, что Mail.Ru group презентовала линуксовую версию одиозного клиента ICQ. Сегодня с утра решил попробовать "это" в деле, заранее ожидая кучу подвохов..)&lt;br /&gt;Итак, захожу на офсайт ICQ, действительно нахожу в списке загрузок пунктик для linux-версии, открываю соответствующую страницу - ага , вот и кнопка "Скачать". Радостно ее жму.. ничего. Не работает закачка. Мозилловский броузер под Debian... Вот они, начались подвохи. Броузеров на свете много, решаю перебрать. Запускаю штатный KDE-шный Konqueror. Этот "гадкий утенок" благополучно качает мне на винт *.air - файл. &lt;br /&gt;AIR? Всего-то? Видимо, глупо было ждать полноценного портирования в виде QT-приложения. Теперяшние хозяева ICQ пошли по пути наименьшего сопротивления , сделав кросплатформенную air-версию (тогда непонятно, причем тут Linux? Ах да, маркетинговый ход =)&lt;br /&gt;Двигаемся дальше..&lt;br /&gt;Так как ранее запуском AIR-приложений под Linux  я никогда не занимался ни в исследовательских, ни в каких бы то ни было других целях, то пришлось поставить AIR-платформу от Adobe: &lt;code&gt;sudo aptitude install adobeair&lt;/code&gt; . &lt;br /&gt;В результате в директории /opt/Adobe\ AIR/Versions/1.0/ у меня завелся Adobe-овский инсталлер для air-приложений, которым и надо открывать *.air файлы. Название у инсталлера жутко неудобное 'Adobe AIR Application Installer' - делаем симлинк в /usr/bin: &lt;code&gt;cd /usr/bin; sudo ln -s '/opt/Adobe\ AIR/Versions/1.0/Adobe AIR Application Installer' aaai&lt;/code&gt;&lt;br /&gt;Далее вызываем aaai и открываем с его помощью скаченный асечный air-контейнер.&lt;br /&gt;Начинается установка, соглашаемся со всем, что нам предложат. &lt;br /&gt;Установка завершена. В трее висит знакомый до боле восьмилистник. Жмем...&lt;br /&gt;Увы - всего лишь пустое окошко без единого элемента управления... &lt;br /&gt;Как говорится , "не смешно". Такой UI -  слишком сурово даже для beta-версии...&lt;br /&gt;&lt;br /&gt;Разбраться в причинах такой "дружелюбности" интерфейса уже нет ни времени , ни желания =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-5033517086548128163?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/5033517086548128163/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/05/icq-linux.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5033517086548128163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5033517086548128163'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/05/icq-linux.html' title='ICQ для Linux: сделано для галочки'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-OSTK1PM-4xk/Td3CiSGdvCI/AAAAAAAAAC0/uXj6cOUlO9k/s72-c/icq.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-6674677163029550152</id><published>2011-05-16T20:22:00.000+04:00</published><updated>2011-05-16T20:22:31.542+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips&apos;n tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Производительность и особенности индексирования таблиц в СУБД</title><content type='html'>Недавно столкнулся с проблемой производительности приложения, работающего с СУБД Oracle.&lt;br /&gt;Есть таблица А, в ней есть строковый столбец B, для которого создан простой индекс. Есть несколько веб-форм, делающих различные запросы (в т.ч. и SELECT)  к этой таблице. &lt;br /&gt;Одна из этих форм, делающая простейший SELECT к указанной таблице, очень долго "откликается" на  даже на единичный запрос при больших объемах данных. При этом есть и другие формы, отображающие данные из этой таблицы в том или ином виде - с этими формами проблем нет. Сравниваем запросы. В проблемной форме к индексируемому полю в секции WHERE применяется функция  upper. Поле проиндексировано, но план выполнения показывает, что индекс не используется. Кто-то советует собрать статистику, кто-то советует прохинтовать запрос. А на самом деле, надо просто немножко углубиться в матчасть и понять, что при использовании функции результат становится непредсказуемым для оптимизатора, поэтому в данной ситуации необходимо либо отказаться от upper , либо создать дополнительный индекс по используемой функции.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-6674677163029550152?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/6674677163029550152/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/05/blog-post_16.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6674677163029550152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6674677163029550152'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/05/blog-post_16.html' title='Производительность и особенности индексирования таблиц в СУБД'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-530458087332082897</id><published>2011-05-08T20:40:00.004+04:00</published><updated>2011-05-08T20:46:18.154+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='статьи'/><title type='text'>Приносит ли тестирование деньги?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-EBfYFyH615Y/TcbIr3wM5xI/AAAAAAAAACA/3FHpAoKlTM8/s1600/1233036840_sumka.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="160" width="160" src="http://4.bp.blogspot.com/-EBfYFyH615Y/TcbIr3wM5xI/AAAAAAAAACA/3FHpAoKlTM8/s320/1233036840_sumka.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;"Приносит ли тестирование ПО деньги?".&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;Часто приходится сталкиваться с мнением о том, что тестирование не приносит денег. Само по себе. При этом утверждается, что "сами по себе" приносят прибыль маркетологи, пресейлы и прочие, которые уполномочены ставить штампики и подписи в разного рода хитрых бумажках. Иногда к этой касте "кормильцев" в последнюю очередь ("Ах да, и , конечно, программисты") приплюсовывают разработчиков. Эдакий компромисс. Что же тестирование? Ему, тестированию, многие некоторые менеджеры разных уровней и некоторые авторы различных книг о разработке ПО отводят второстепенную роль. Далее я попытаюсь описать свой взгляд на проблематику.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Умирающие стереотипы&lt;/b&gt;&lt;br /&gt;Долгое время тестирование программного обеспечения действительно имело второстепенную роль и зачастую этим видом деятельности  (отдельной и целенаправленной) многие производители софта пренебрегали. Рынок не диктовал таких жестких требований к качеству как сегодня, конкуренция среди производителей не была столь высока, клиенты не были столь придирчивы и требовательны. То есть, чисто экономически , многие вендоры осознанно не тратили деньги на тестирование, потому, что их софт и так "уходил как горячие пирожки". С развитием рынка ПО эта ситуация стала меняться. И на Западе давно уже стереотипам о второстепенности тестирования нет места, они отжили и умерли. Изменилось и отношение к тестировщику , как представителю отдельной профессии, носителю специфических навыков и менталитета. В нашей стране еще перемены дошли не до всех, но ситуация меняется - доказательством этому является бурный рост коммьюнити, спрос на соответствующие образовательные курсы, рост зарплат и т.д. и т.п.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. "Само по себе"&lt;/b&gt;&lt;br /&gt;Многие дискутирующие на тему о прибыльности тестирования (имеется ввиду прибыльность для производителя софта) чрезмерно увлекаются теоретической декомпозицией процесса разработки. Приходится слышать "безусловно , без тестирования - никуда, но оно само по себе напрямую денег в кассу не несет, потому бла бла бла бла...". Сразу хочется прервать и спросить: "А что значит "само по себе"?". Или приносит ли "само по себе" деньги та же разработка? И что такое "разработка" - только лишь кодирование? Получаешь ответ "Конечно же нет,  разработка это не только кодирование но и то-то то-то и то-то"... И в итоге получается, что ни одна стадия без другой немыслима. "Входы" одних завязаны на "выходы" других и наоборот.. Так кто "сам по себе" приносит деньги? Более подходящего ответа, чем "инкассатор" у меня ничего другого на ум не приходит :) Таким образом, если признается, что в данной конкретной фирме, проекте, процессе "без тестирования нельзя", тогда и говорить о том, что "оно не приносит денег" по меньшей мере некорректно.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Если что-то нельзя пощупать оценить, значит этого просто нет&lt;/b&gt;&lt;br /&gt;Часто приходится получать встречный и резонный вопрос "Хорошо, допустим, тестирование приносит прибыль. Какую конкретно ?( в процентах, рублях или любой другой количественной форме)" Действительно , вопрос на первый взгляд непростой и , как говорится , с подвохом. Пытаться на него ответить "конкретными" процентами, полагаю, просто невозможно. Такой вопрос можно смело считать провокационным и смело об этом заявлять задающему :) Таких вопросов, считаю, после достижения понимания по п.2 ("Само по себе") быть попросту не должно.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Тестирование - не гарантия прибыли&lt;/b&gt;&lt;br /&gt;Да, тестирование ПО, как один из важнейших компонентов системы обеспечения качества,   в современных условиях играет все более важную роль в процессе разработки. Это тенденция. Неверное понимание этой тенденции иногда рождает и другие, ранее неведомые проблемы. Поясню на абстрактном примере: компания N инвестирует немалые деньги в тестирование своего софта, успешно продает его. Тем не менее время от време у клиентов возникают проблемы с этим софтом. Компания, считая процесс тестирования одним из важнейших компонентов СМК, начинает инвестировать в тестирование еще больше (нанимают больше людей, автоматизируют функциональное тестирование, вкладывают деньги в обучение тестировщиков и т.д. и т.п.) - результате количество проблем снижается, но тем не менее проблемы все еще есть и, иногда , довольно серьезные. "В чем дело? Тестировщики, плохо работаете? Тратим на вас деньги зря?" . Да, вполне может быть , что тестировщики работают неэффективно, может быть, некоторые из них некомпетенты. Но зачастую проблемы кроются не там, куда менеджмент раз за разом направляет свое внимание, средства и претензии. Например, на предприятии отсутствует система управления требованиями и , как следствие, управление изменениями хаотично и плохо контролируемо, что заведомо влечет большой оверхед для программистов и тестировщиков. Или, например, сами программисты работают с использованием устаревших методологий и технологий. Проблемы могут быть везде - у архитекторов (или в связи с их отсутствием) , у разработчиков, аналитиков, маркетологов, технической поддержки. Поэтому, уделяя пристальное внимание развитию тестирования, не стоит забывать, что этому процессу нужен надежный "фундамент" и не менее надежная "крыша". &lt;br /&gt;&lt;br /&gt;Таким образом, могу для себя резюмировать еще раз: прибыль приносит слаженные , технологичные и контролируемые взаимодействия всего коллектива, сплоченного общей целью. И тестирование вносит в итоговое количество  рублей (положительное или отрицательное =) свой существенный вклад. Поэтому, не стоит пренебрегать его развитием и нуждами, используя устаревшие и заведомо некорректные постулаты и тезисы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-530458087332082897?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/530458087332082897/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/05/blog-post_08.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/530458087332082897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/530458087332082897'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/05/blog-post_08.html' title='Приносит ли тестирование деньги?'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-EBfYFyH615Y/TcbIr3wM5xI/AAAAAAAAACA/3FHpAoKlTM8/s72-c/1233036840_sumka.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-3287410343965472775</id><published>2011-05-05T15:07:00.003+04:00</published><updated>2011-05-05T15:08:52.166+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips&apos;n tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Баги , которые лучше не фиксить :)</title><content type='html'>Сегодня очень развеселил Майкрософт, вернее его продукт Outlook 2007.&lt;br /&gt;Сегодня развернули внутреннюю ленту новостей с использованием Trac и его компонента Blog.&lt;br /&gt;Заведомо знал , что у компонента есть Rss-лента,а  у Outlook - Rss Reader.&lt;br /&gt;Когда дело дошло до того, чтобы прикрутить эту ленту к outlook столкнулся с тем, что ему обязательно требовался url в формате: http://example.com/feed/main.xml - то есть линк на xml-файл.&lt;br /&gt;Я расстроился, так как у Trac-a url следующий: http://trac.bm.in-line.local/blog?format=rss&lt;br /&gt;&lt;br /&gt;Решение пришло через минуту : http://имя хоста с ,где установлен trac/blog?format=rss&amp;blablabla.xml - и эврика! масдаевский софт на это клюнул, благополучно подгрузив в почтовик нужную мне ленту новостей))) &lt;br /&gt;&lt;br /&gt;Уж не знаю , как это назвать - баг или не баг , или просто имитация серьезного контроля входных данных.&lt;br /&gt;&lt;br /&gt;В общем, пользуйтесь ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-3287410343965472775?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/3287410343965472775/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/05/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3287410343965472775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3287410343965472775'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/05/blog-post.html' title='Баги , которые лучше не фиксить :)'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-4557970867895052415</id><published>2011-04-09T16:11:00.004+04:00</published><updated>2011-05-13T23:54:52.497+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='БД'/><category scheme='http://www.blogger.com/atom/ns#' term='программирование'/><category scheme='http://www.blogger.com/atom/ns#' term='полезные утилиты'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Визуализатор схемы БД "на коленке"</title><content type='html'>Недавно мне потребовалось проверить соответствие существующей схемы БД (&lt;b&gt;sqlite&lt;/b&gt;), тому , что должно быть согласно ТТ: все ли сущности есть в схеме, все ли отношения между ними указаны.&lt;br /&gt;&lt;br /&gt;Потребовался способ быстро &lt;b&gt;визуализировать &lt;/b&gt;имеющуюся схему, чтобы наглядно убедиться в наличии или отсутствии несоответствий.&lt;br /&gt;&lt;br /&gt;Под рукой был &lt;b&gt;python &lt;/b&gt;с установленным модулем sqlalchemy, а также вспомогательная python-овская библиотека для &lt;b&gt;визуализации графов&lt;/b&gt;, средствами &lt;b&gt;GraphViz&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Простейший скрипт на &lt;b&gt;python&lt;/b&gt;: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#script: visualize.py&lt;br /&gt;from sqlalchemy import MetaData&lt;br /&gt;from sqlalchemy_schemadisplay import create_schema_graph&lt;br /&gt;graph = create_schema_graph(metadata=MetaData('sqllite:///database.db'),&lt;br /&gt;show_datatypes=False, &lt;br /&gt;show_indexes=False, &lt;br /&gt;rankdir='LR', &lt;br /&gt;concentrate=False &lt;br /&gt;)&lt;br /&gt;graph.write_png('database.png') &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;и у меня перед глазами был png-файл , где вся схема была как на ладони.&lt;br /&gt;&lt;br /&gt;Итак, еще раз ингридиенты:&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;python &lt;/b&gt;2.5 (2.6,2.7)  (aptitude install python) &lt;br /&gt;2. &lt;b&gt;sqlalchemy    &lt;/b&gt;(easy_install sqlalchemy)&lt;br /&gt;3. библиотека-&lt;b&gt;GraphViz  &lt;/b&gt;(aptitude install graphviz)&lt;br /&gt;4. &lt;b&gt;sqlalchemy_schemadisplay   &lt;/b&gt;(wget http://pypi.python.org/packages/source/s/sqlalchemy_schemadisplay/sqlalchemy_schemadisplay-1.0.zip#md5=14b8366bb27b6abef32df65710d4380f )&lt;br /&gt;5. visualize.py  (см. код выше)&lt;br /&gt;6. создаем произвольную директорию и кидаем туда п.5 и п.4,  а также sqlite-базу)&lt;br /&gt;7. запускаем: python visualize.py  и получаем database.png&lt;br /&gt;&lt;br /&gt;Все это хозяйство точно работает и с mysql (проверял лично) , а также должно теоретически работать почти со всеми известными СУБД (oracle, ms sql server, access db, postgres ...)&lt;br /&gt;&lt;br /&gt;Если кому понадобится - пишите, выложу куда-нибудь архив-пример. Вот так , например, выглядит результат визуализации более менее сложной схемы (картинка размыта по просьбе правообладателя =)):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GjqIqLStq8Q/TaCQjNkWIxI/AAAAAAAAAB4/WlxrDvJyK3A/s1600/dbschema.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="150" src="http://1.bp.blogspot.com/-GjqIqLStq8Q/TaCQjNkWIxI/AAAAAAAAAB4/WlxrDvJyK3A/s320/dbschema.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;p.s. на этот раз ограничений с ОС нет. Все это работает и под Windows. Надо только скачать инсталлеры &lt;b&gt;python&lt;/b&gt;-а &lt;b&gt;graphviz&lt;/b&gt;-а с соответствующих офсайтов.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-4557970867895052415?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/4557970867895052415/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/04/blog-post_09.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/4557970867895052415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/4557970867895052415'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/04/blog-post_09.html' title='Визуализатор схемы БД &quot;на коленке&quot;'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-GjqIqLStq8Q/TaCQjNkWIxI/AAAAAAAAAB4/WlxrDvJyK3A/s72-c/dbschema.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-5790347863894333644</id><published>2011-04-05T14:55:00.003+04:00</published><updated>2011-04-05T14:56:28.910+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><title type='text'>Миллиарды от багов не спасают )</title><content type='html'>В феврале 2007 года ВВС США решили впервые вывести F-22 за пределы страны, перегнав несколько истребителей на базу ВВС Кадена на Окинаве. Звено из шести F-22, вылетевших с Гаваев, после пересечения 180-го меридиана - международной линии перемены дат - полностью лишилось навигации и частично - связи. На базу ВВС на Гавайях истребители вернулись, визуально следуя за самолетами-заправщиками. Причиной неполадки стала ошибка в программном обеспечении, из-за которого произошел сбой в работе компьютера при смене времени.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-5790347863894333644?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/5790347863894333644/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/04/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5790347863894333644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5790347863894333644'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/04/blog-post.html' title='Миллиарды от багов не спасают )'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-8160378154402025132</id><published>2011-03-31T20:03:00.003+04:00</published><updated>2011-04-01T09:40:53.589+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><title type='text'>Сказка о профессионализме... )</title><content type='html'>Сегодня на закате рабочего дня попался на глаза пост-шедевр, которым не могу не поделиться...)&lt;br /&gt;Смеялся до слез)) &lt;br /&gt;&lt;br /&gt;Петров пришел во вторник на совещание. Ему там вынули мозг, разложили по блюдечкам и стали есть, причмокивая и вообще выражая всяческое одобрение. Начальник Петрова, Недозайцев, предусмотрительно раздал присутствующим десертные ложечки. И началось.&lt;br /&gt;&lt;br /&gt;— Коллеги, — говорит Морковьева, — перед нашей организацией встала масштабная задача. Нам поступил на реализацию проект, в рамках которого нам требуется изобразить несколько красных линий. Вы готовы взвалить на себя эту задачу?&lt;br /&gt;&lt;br /&gt;— Конечно, — говорит Недозайцев. Он директор, и всегда готов взвалить на себя проблему, которую придется нести кому-то из коллектива. Впрочем, он тут же уточняет: — Мы же это можем?&lt;br /&gt;&lt;br /&gt;Начальник отдела рисования Сидоряхин торопливо кивает:&lt;br /&gt;&lt;br /&gt;— Да, разумеется. Вот у нас как раз сидит Петров, он наш лучший специалист в области рисования красных линий. Мы его специально пригласили на совещание, чтобы он высказал свое компетентное мнение.&lt;br /&gt;&lt;br /&gt;— Очень приятно, — говорит Морковьева. — Ну, меня вы все знаете. А это — Леночка, она специалист по дизайну в нашей организации.&lt;br /&gt;&lt;br /&gt; Леночка покрывается краской и смущенно улыбается. Она недавно закончила экономический, и к дизайну имеет такое же отношение, как утконос к проектированию дирижаблей...........&lt;a href="http://alex-aka-jj.livejournal.com/66984.html?page=2&amp;cut_expand=1#cutid1"&gt;ЧИТАТЬ ДАЛЕЕ &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Как говорится , сказка -  ложь, да в ней намек... )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-8160378154402025132?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/8160378154402025132/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/03/blog-post_31.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8160378154402025132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8160378154402025132'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/03/blog-post_31.html' title='Сказка о профессионализме... )'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-6763978573141344736</id><published>2011-03-23T07:23:00.003+03:00</published><updated>2011-08-06T19:21:52.271+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='команда'/><title type='text'>Новый сотрудник</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-v5uVwXiscI8/TYl3I_m7TfI/AAAAAAAAABg/s7Jn2k9xi4Q/s1600/vopros_2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://2.bp.blogspot.com/-v5uVwXiscI8/TYl3I_m7TfI/AAAAAAAAABg/s7Jn2k9xi4Q/s320/vopros_2.jpg" width="120" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я, как правило, с сожалением отношусь к тому, что люди время от времени покидают команду, но в то же время я люблю, когда в коллективе появляются новички. &lt;br /&gt;Много всего положительного происходит вместе с этим. Незначительные минусы, связанные с необходимостью траты времени на обучение нового коллеги внутренним процедурам и ознакомлением с особенностями и тонкостями,  с лихвой компенсируется тем, что свежий взгляд способного мыслить критически человека (а именно такие люди, как правило, успешно проходят собеседование) вскрывает такие изъяны, которые мы либо не замечали, либо почему-то мирились с ними:&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;Неточности во всевозможных HOWTO для новых сотрудников.&lt;/b&gt; Как правило не всегда хватает времени , чтобы держать подобные мануалы в полностью актуальном состоянии - поэтому при работе нового тестировщика с этими документами появляется неплохой шанс привести инструкции в соответствие реальному положению дел. В данном вопросе можно пойти на дополнительную хитрость: обеспечить новичка документом, заведомо содержащим изъян и понаблюдать за тем, как человек будет решать возникшую проблему, заметит ли он ее вообще? Немного по-иезуитски, но это позволяет лишний раз убедиться в правильности решения после собеседования.&lt;br /&gt;2. &lt;b&gt;Порция некритичных ошибок в тестируемом ПО&lt;/b&gt; Незашоренность взгляда,а также отсутствие груза важной и срочной работы у нового сотрудника позволяет ему замечать множество мелких ошибок и недочетов в тестируемом ПО. Как правило это незначительные ошибки в GUI, ошибки эргономики , пропущенные более опытными коллегами,  а также порция замечаний и предложений по улучшению. Многое из всего, что "замечает" новый тестировщик в итоге не приводит к изменениям и улучшениям, но какой-то процент действительно полезных замечаний обеспечен в любом случае.&lt;br /&gt;3. &lt;b&gt;Ошибки в документации к ПО&lt;/b&gt; Не знаю как у других, но в число обязанностей моей команды входит и тестирование пользовательской документации к ПО. В силу разных причин пользовательская документация неизбежно начинает накапливать неточности, несоответствия с реальным поведением системы. И новый тестировщик, априори внимательно относясь к пользовательской документации (ведь зачастую именно по ней он знакомится с системой ), неизбежно натыкается  на эти несоответствия , а также на отсутствие необходимых ему сведений. Это позволяет повысить качество этой самой документации.&lt;br /&gt;4. &lt;b&gt;Повторение - мать учения&lt;/b&gt;. Во время помощи новому коллеге часто приходится вспоминать некоторые аспекты функционирования тестируемого софта, пояснять и уточнять последовательности настройки, развертывания тестовых стендов и т.д. и т.п. - все это может показаться скучным, но иногда это позволяет вспоминать уже подзабытые ньюансы, освежая и закрепляя таким образом собственное знание системы.&lt;br /&gt;5. &lt;b&gt;Новые техники&lt;/b&gt;. Новый сотрудник, особенно опытный, может привнести с собой новые техники тестирования. Например, когда-то давно пришел к нам тестировщик, хорошо знакомый с техниками пентеста. Его знания и умения пошли на пользу и успешно дополнили уже имевшиеся на тот момент наборы тестов безопасности системы. Сотрудник уже давно перешел в другую компанию, но его опыт продолжает приносить нам пользу.&lt;br /&gt;&lt;br /&gt;Есть еще множество других положительных эффектов от появления в команде нового, пусть еще и неопытного, коллеги. Среди них немаловажную роль играют и психологические моменты, улучшающие микроклимат.. Но об этом , как-нибудь в другой раз...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-6763978573141344736?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/6763978573141344736/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/03/blog-post_23.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6763978573141344736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/6763978573141344736'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/03/blog-post_23.html' title='Новый сотрудник'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-v5uVwXiscI8/TYl3I_m7TfI/AAAAAAAAABg/s7Jn2k9xi4Q/s72-c/vopros_2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-3876759298172006700</id><published>2011-03-16T19:42:00.000+03:00</published><updated>2011-03-16T19:42:56.902+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='требования'/><category scheme='http://www.blogger.com/atom/ns#' term='литература'/><title type='text'>Требования:  по ту сторону баррикад</title><content type='html'>На страницах блогов тестировщиков и других онлайн-ресурсов , посвященных тестированию ПО и вообще качеству ПО , часто затрагивается тема требований к ПО. Большинство специалистов по тестированию предпочитают работать с четкими требованиями к ПО для того, чтобы иметь возможность также четко организовывать свою деятельность и выдавать продукт максимально удовлетворяющий чаяниям заказчика. Но при этом познания многих тестировщиков о процессе составления требований заканчиваются содержимым соответствующей  страницы в Wikipedia. &lt;br /&gt;Желающим немного приоткрыть завесу того, что из себя представляет процесс создания требований к ПО и управления ими , могу посоветовать недавно перечитанную мной книгу, которая стала классикой для многих аналитиков и системных архитекторов &lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-M5fIAYoAXrw/TYDm9oWgyvI/AAAAAAAAABY/GhjlJzjWUdM/s1600/382fe704d52eda8278db42fd4f68db4a.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="200" width="135" src="http://1.bp.blogspot.com/-M5fIAYoAXrw/TYDm9oWgyvI/AAAAAAAAABY/GhjlJzjWUdM/s320/382fe704d52eda8278db42fd4f68db4a.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;"ПРИНЦИПЫ РАБОТЫ С ТРЕБОВАНИЯМИ К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ"&lt;/b&gt; (Дин Леффингуэлл, Дон Уидриг) &lt;br /&gt;&lt;br /&gt;Книга написана в 2002 году и за это время условия рынка разработки ПО ужесточились, но многие принципы работы с требованиями по-прежнему остаются актуальными. Например, описанные техники выявления всех явных и скрытых пожеланий заказчика ( о которых он и сам с трудом пока еще догадывается ) , считаю, могут действительно помочь сэкономить кучу сил и времени.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-3876759298172006700?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/3876759298172006700/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/03/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3876759298172006700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3876759298172006700'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/03/blog-post.html' title='Требования:  по ту сторону баррикад'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-M5fIAYoAXrw/TYDm9oWgyvI/AAAAAAAAABY/GhjlJzjWUdM/s72-c/382fe704d52eda8278db42fd4f68db4a.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-3591648417901966031</id><published>2011-03-11T19:21:00.002+03:00</published><updated>2011-05-13T23:57:08.590+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='полезные утилиты'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматизация'/><title type='text'>lsof+gdb - надежные помощники при "трудном"  моделировании</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-xiek4hZDnmc/TXpL-CkYg-I/AAAAAAAAABI/IO3vTh-6zFU/s1600/pinguin.gif" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="101" width="85" src="http://1.bp.blogspot.com/-xiek4hZDnmc/TXpL-CkYg-I/AAAAAAAAABI/IO3vTh-6zFU/s320/pinguin.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Совсем недавно в ходе попыток моделирования очередного "мигающего" и трудновоспроизводимого бага потребовалось запустить очень продолжительную серию испытаний , в ходе которой требовалось эмулировать частую потерю соединения приложения с СУБД. Эмуляция активности приложения , естественно, автоматизирована. Продолжительность теста - минимум 30 минут, максимум - 2-3 часа. В общем, понятно, что вручную "дергать" витую пару - не вариант =) Первое, что пришло в голову использовать файер (iptables). Попробовали - и по ряду причин (здесь их не описываю) вынуждены были отказаться от этого способа.&lt;br /&gt;&lt;br /&gt;Встала задача "&lt;i&gt;узнать дескрипторы соединений с СУБД нужного процесса&lt;/i&gt;" и "извне процесса эти по этим самым дескрипторам закрыть соответствующие соединения".&lt;br /&gt;На помощь пришел всесильный отладчик gdb, который умеет работать в так называемом "batch"-режиме.&lt;br /&gt;&lt;br /&gt;С помощью &lt;b&gt;lsof&lt;/b&gt; узнаем дескрипторы соединений (у ислледуемого нами их могло быть несколько), а с помощью &lt;b&gt;gdb&lt;/b&gt; в "batch"-режиме закрываем сокеты по их дескрипторам.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#генерируем файл с командами на закрытие нужных нам дескрипторов (в данном случае дескрипторы соединения с СУБД висящей на фиксированном порту 1521)&lt;br /&gt;&lt;br /&gt;lsof -p 5239 | grep ':1521' | awk '{print $4}' | sed 's/u//' | awk '{print "call shutdown("$1",2)"}' &gt; commands&lt;br /&gt;&lt;br /&gt;#скармливаем пакет команд gdb&lt;br /&gt;&lt;br /&gt;gdb -p 5239 -batch -x commands&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Указанные команды помещаем в цикл с произвольными задержками между итерациями и в результате приложение начинает работать в условиях периодичеких "&lt;i&gt;проблем  с сетью и соединением с СУБД&lt;/i&gt;".&lt;br /&gt;&lt;br /&gt;Все это под linux, все это бесплатно , быстро и эффективно.&lt;br /&gt;&lt;br /&gt;Возможно, кто-то  спросит "&lt;i&gt;Как сделать аналогичное под Windows&lt;/i&gt;?" - сразу не отвечу, но на досуге ничего не мешает выяснить, если это действительно кому-то понадобится =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-3591648417901966031?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/3591648417901966031/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/03/lsofgdb.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3591648417901966031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3591648417901966031'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/03/lsofgdb.html' title='lsof+gdb - надежные помощники при &quot;трудном&quot;  моделировании'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-xiek4hZDnmc/TXpL-CkYg-I/AAAAAAAAABI/IO3vTh-6zFU/s72-c/pinguin.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-4944043196301111707</id><published>2011-03-06T04:55:00.001+03:00</published><updated>2011-03-06T04:57:03.752+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='гаджеты'/><title type='text'>Небольшой совет покупающим e-book</title><content type='html'>Тем, кто надумал приобрести электронную книгу позволю себе дать небольшой совет. &lt;br /&gt;Собираясь в магазин, прихватите с собой SD-карту, на которую предварительно запишите экземпляры книг/журналов в нужных вам электронных форматах. Особенно стоит уделить вниманиe "отсканированным" pdf и djvu - как правило именно с масштабированием таких книг могут возникать проблемы у девайсов для чтения с E-ink технологией. &lt;br /&gt;С такой SD-картой вам не придется верить на слово продавцу о том, что то или иное устройство "отлично справится с любым форматом" -  вы просто проверите это сами. Заодно "ПРОТЕСТИРУЕТЕ"  usability устройства и гарантированно сможете подобрать то, что вам нужно с первого раза.&lt;br /&gt;В общем, этот совет родился не на пустом месте - сам совсем недавно помучился с обменами и возвратами, не слишком въедливо исследовав первоначально купленный девайс.&lt;br /&gt;Берегите свое время ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-4944043196301111707?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/4944043196301111707/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/03/e-book.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/4944043196301111707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/4944043196301111707'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/03/e-book.html' title='Небольшой совет покупающим e-book'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-3882573797344462167</id><published>2011-03-01T20:22:00.002+03:00</published><updated>2011-05-13T23:53:13.764+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='selenium'/><category scheme='http://www.blogger.com/atom/ns#' term='ошибки'/><title type='text'>Повышаем стабильность запуска SeleniumRC по крону</title><content type='html'>В одном из &lt;a href="http://qaimprove.blogspot.com/2010/12/selenium-rc-firefox-crond.html"&gt;&lt;b&gt;предыдущих постов&lt;/b&gt;&lt;/a&gt; я описывал вариант использования &lt;b&gt;SeleniumRC&lt;/b&gt; на &lt;b&gt;Linux&lt;/b&gt;-машине с использованием &lt;b&gt;cron&lt;/b&gt; и виртуального X-сервера &lt;b&gt;Xvfb&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Некоторое время эта связка работала исправно. crond - обеспечивал то, что RC всегда запущен, сам RC прилежно "гонял" тесты. Но время от времени случались непонятные массовые провалы автотестов со следующими записями в STDERR:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;10:23:50.037 INFO - Preparing Firefox profile...&lt;br /&gt;Error: cannot open display: :1&lt;br /&gt;10:24:16.152 ERROR - Failed to start new browser session, shutdown browser and clear all session data&lt;br /&gt;java.lang.RuntimeException: Timed out waiting for profile to be created!&lt;br /&gt;at org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher.waitForFullProfileToBeCreated(FirefoxChromeLauncher.java:348)&lt;br /&gt;....&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p&gt;После некоторого времени "копания" выяснил (по информации от syslog-а), что в &lt;b&gt;Xvfb&lt;/b&gt; периодически случался &lt;b&gt;SIGFAULT&lt;/b&gt; (причина пока не ясна и требует отдельного времени на анализ). Ну случался и случался - никто не мешает также по крону запускать и сам Xvfb. Да, только есть ньюанс. Эта утилита, как принято у *nix-демонов, при запуске создает лок-файл со своим pid-ом. Делается это для предотвращения попытки запуска нескольких виртуальных серверов на одном и том же виртуальном дисплее.&lt;/p&gt;&lt;p&gt;Все хорошо, только разработчики забыли сделать "джентльменскую" проверку "живости" того самого процесса, pid которого любезно указан в lock-файле. Соответственно, после аварийного завершения самогО процесса давно нет в живых, но его lock-файл все еще на диске и мешает запуску новых экземпляров &lt;b&gt;Xvfb&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Рассуждая дальше, как говорится "нечего на зеркало пинять.." , ведь я при периодическом запуске Xvfb и RC не позаботился (подобно разработчикам самогО Xvfb) о проверке того, запустился ли виртуальный менеджер окон или нет , поэтому и получал запущенный SeleniumRC, не имеющий в своем распоряжении виртуального дисплея , где бы он мог корректно запустить Firefox. В итоге, простая проверка и принудительная чистка ненужных уже lock-ов позволили "закрыть" глаза на возможные ошибки в стороннем ПО, получая стабильный результат тестирования собственного.&lt;br /&gt;&lt;/p&gt;"Мораль сей басни такова": если указываешь другим на их ошибки, старайся сам не допускать аналогичных =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-3882573797344462167?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/3882573797344462167/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/03/seleniumrc.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3882573797344462167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3882573797344462167'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/03/seleniumrc.html' title='Повышаем стабильность запуска SeleniumRC по крону'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-1688072005788536386</id><published>2011-02-16T18:30:00.001+03:00</published><updated>2011-02-16T18:30:56.397+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='планирование'/><title type='text'>Дедлайны по проектам и полнота тестирования</title><content type='html'>Недавно столкнулся с проблемой,  когда составленный мною план тестирования очередного релиза категорически не устроил руководителей проекта. Не устроил по очень веской причине - планируемая дата окончания релиза выходит далеко за рамки жестко фиксированной (реалиями рынка) дате этого самого релиза. &lt;br /&gt;Наверняка многие из QA-менеджеров оказывались в подобной ситуации. На мой взгляд есть следующие способы ее решения:&lt;br /&gt;&lt;br /&gt;1. Руководство идет на откладывание даты релиза и при этом достигается максимальное качество за счет выполнения всех запланированных тестов (по всем функциональным и нефункциональным возможностям)&lt;br /&gt;2. руководство идет на дополнительные инвестиции в привлечение дополнительных ресурсов : временное расширение штата, аутсорс...&lt;br /&gt;3. QA-менеджер , как Роден, "берет кусок гранита и отсекает все ненужное", оставляя в плане тестирования лишь задачи на тестирование наиболее критичных функций приложения&lt;br /&gt;&lt;br /&gt;Я был вынужден остановиться на варианте 3. &lt;br /&gt;&lt;br /&gt;А как Вы решаете подобные проблемы?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-1688072005788536386?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/1688072005788536386/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2011/02/blog-post.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1688072005788536386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1688072005788536386'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2011/02/blog-post.html' title='Дедлайны по проектам и полнота тестирования'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-9164449798505185298</id><published>2010-12-14T12:53:00.002+03:00</published><updated>2011-05-13T23:50:43.099+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='виртуализация'/><category scheme='http://www.blogger.com/atom/ns#' term='ошибки'/><title type='text'>Странный баг в VirtualBox и способ его решения</title><content type='html'>Вчера меня впервые подвела утилита &lt;b&gt;VirtualBox&lt;/b&gt;. Думаю, не стоит расписывать для чего она нужна - слишком она известна).&lt;br /&gt;В общем случилась следующая проблема. Для одной из виртуальных машин дал команду сохранить состояние и завершить ее работу.&lt;br /&gt;При последующем старте VirtualBox обнаружил , что завершенную виртуальную машину запустить нельзя из-за следующей ошибки:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Runtime error opening 'D:\Users\will\.VirtualBox\Machines\XP1\XP1.xml' for reading: -102 (File not found.).&lt;br /&gt;D:\tinderbox\win-3.2\src\VBox\Main\MachineImpl.cpp[679] (Machine::registeredInit).&lt;br /&gt;Код ошибки: &lt;br /&gt;E_FAIL (0x80004005)&lt;br /&gt;Компонент: &lt;br /&gt;VirtualBox&lt;br /&gt;Интерфейс: &lt;br /&gt;IVirtualBox {3f36e024-7fed-4f20-a02c-9158a82b44e6}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Если кто столкнется с подобным, не торопитесь удалять и пересоздавать виртуальную машину. Чтобы решить проблему надо перейти в директорию с настройками проблемной виртуалки. Там будет два файла: &lt;имя машины&gt;.xml-prev и &lt;имя машины&gt;.xml-tmp. То есть при сохранении состояния машины и завершении работы почему-то не был создан файл &lt;имя машины&gt;.xml и именно из-за его остутствия и возникала указанная выше проблема.&lt;br /&gt;В общем, берем и переименовываем -prev Или -tmp в .xml и пользуемся созданной ранее машиной.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-9164449798505185298?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/9164449798505185298/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/12/%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9-%D0%B1%D0%B0%D0%B3-%D0%B2-virtualbox-%D0%B8-%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1-%D0%B5%D0%B3%D0%BE.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/9164449798505185298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/9164449798505185298'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/12/%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9-%D0%B1%D0%B0%D0%B3-%D0%B2-virtualbox-%D0%B8-%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1-%D0%B5%D0%B3%D0%BE.html' title='Странный баг в VirtualBox и способ его решения'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-4877181381196198460</id><published>2010-12-10T15:22:00.001+03:00</published><updated>2011-03-31T20:05:57.307+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Забавное'/><title type='text'>Башорг о тестировании</title><content type='html'>Сегодня попалась забавная байка, которая должна понравиться любому тестировщику :)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Суровые российские монтажники: получили задание от начальника установить лампу освещения на входе в здание с автоматом выключения. Есть такие, вырубающие ток в светлое время суток. Собрали, подключили, а так как на дворе светлый день, то проверка прошла на ура. Закрыли датчик шапкой - темно. Лампа включается. Сняли шапку с датчика - светло. Лампа выключается. И с чувством выполненного долга ушли домой. Самый цирк начался поздно вечером, потому что датчик монтажники закрепили прямо над лампой. Всю ночь у дежурного была дискотека: стемнело - датчик лампу зажег, лампа зажглась и стало светло, а стало светло - датчик лампу гасит, ой опять темно - датчик лампу зажигает .... и так от заката до рассвета.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;:D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-4877181381196198460?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/4877181381196198460/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/12/blog-post_10.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/4877181381196198460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/4877181381196198460'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/12/blog-post_10.html' title='Башорг о тестировании'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-184002809926186826</id><published>2010-12-08T17:28:00.006+03:00</published><updated>2011-05-14T00:00:30.447+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='полезные утилиты'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматизация'/><category scheme='http://www.blogger.com/atom/ns#' term='selenium'/><title type='text'>Selenium RC + Firefox + crond</title><content type='html'>Некоторое время назад потребовалось обеспечить бесперебойность работы &lt;b&gt;selenium rc&lt;/b&gt; на одном из &lt;b&gt;linux&lt;/b&gt;-серверов с установленной &lt;b&gt;X-window&lt;/b&gt;.&lt;br /&gt;До этого RC вручную запускался вручную либо непосредственно на сервере (DISPLAY :0) либо вручную же через &lt;b&gt;vnc&lt;/b&gt;. После перезагрузки сервера или из-за пока неустановленных редких сбоев в самом RC процесс автоматического тестирования нарушался. Для решения проблемы было решено добавить запуск Selenium RC в cron.&lt;br /&gt;В &lt;b&gt;crontab&lt;/b&gt; была добавлена соответствующая строчка, запускающая RC-сервер. В этот момент не было учтено , что firefox оконное приложение и требует возможности работать на конкретном дисплее =) Соответственно по крону RC-сервер стартовать не мог. Вернее сам-то сервер стартовал, но запустить X-овое приложение (firefox) без дисплея уже не мог.&lt;br /&gt;Возник вопрос о том, о каком вообще дисплее может идти речь, если приложение запускается в ситуации отсутствия каких-либо X-сессий? На некоторое (короткое) время возможность запуска X-программ из под cron была поставлена под сомнение, но довольно быстро было найдено решение.&lt;br /&gt;В описанной ситуации можно использовать утилиту &lt;a href="http://en.wikipedia.org/wiki/Xvfb"&gt;Xvfb&lt;/a&gt;, которая позволяет совершать графические операции в памяти и запускать "иксовые" приложения на виртуальных дисплеях.&lt;br /&gt;Ниже привожу последовательность команд, решившая мою проблему:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Xvfb :1&lt;br /&gt;export DISPLAY=:1&lt;br /&gt;java -jar selenium-server.jar&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Таким образом, если &lt;b&gt;SeleniumRC&lt;/b&gt; будет запущен из-под cron описанным образом , то запускаемый им firefox будет запускаться на дисплее :1 и послушно выполнять все команды автотеста, с которого при желании можно даже снять скриншоты)&lt;br /&gt;&lt;br /&gt;Надеюсь, данная информация кому-нибудь поможет и сэкономит время.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-184002809926186826?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/184002809926186826/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/12/selenium-rc-firefox-crond.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/184002809926186826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/184002809926186826'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/12/selenium-rc-firefox-crond.html' title='Selenium RC + Firefox + crond'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-2779817227336965924</id><published>2010-12-07T14:02:00.002+03:00</published><updated>2011-05-13T23:57:39.948+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='требования'/><category scheme='http://www.blogger.com/atom/ns#' term='Elfreide Dusting'/><category scheme='http://www.blogger.com/atom/ns#' term='литература'/><category scheme='http://www.blogger.com/atom/ns#' term='жизненный цикл ПО'/><title type='text'>Тестирование требований</title><content type='html'>Перечитываю старую добрую кингу Альфреда Дастина (Elfreide Dusting) "Автоматизированное тестирование программного обеспечения" (Automated Software Testing). Читал ее когда-то очень давно, не имея реального шанса проверить на практике советы и предположения, которые делает автор в своей книге. Сейчас, став чуть более опытным, многое из прочитанного становится более понятным, подтверждающим полученный опыт и "набитые шишки". Особенно понравилась следуюшая мысль (которая для кого-то может показаться банальной):&lt;br /&gt;&lt;cite&gt;Программа, в основе которой лежат неточные требования, не будет удовлетворять заказчика или &lt;b&gt;конечного пользователя независимо от качества описания архитектуры или программного кода, составляющего модули приложения&lt;/b&gt;&lt;/cite&gt; (выделил жирным , по-моему , главную фразу предложения:)&lt;br /&gt;Тысячу раз СОГЛАСЕН - так оно зачастую и происходит...&lt;br /&gt;В качестве мер по предотвращению дефектов и проблем с конечным пользователем автор предлагает привлекать тестировщиков (высокой квалификации) с самых ранних стадий разработки ПО. В частности, со стадии составления спецификаций требований. Это мне также кажется верной стратегией, но ее соблюдение требует дополнительных трудозатрат со стороны тестирования. Кроме того, есть и психологический момент - не все разработчики, сисарки, менеджеры видят в тестировщиках людей, способных влиять на архитектурные решения до начала кодирования. &lt;br /&gt;Интересно было бы узнать, насколько распространена практика привлечения сотрудников группы(сектора,отдела) тестирования к фазе составления требований к программному продукту и , соответственно, насколько она эффективна? &lt;br /&gt;Если у кого есть желание поделиться своим опытом  и мнением на этот счет, то буду признателен за соответствующие комментарии.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-2779817227336965924?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/2779817227336965924/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/12/blog-post.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/2779817227336965924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/2779817227336965924'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/12/blog-post.html' title='Тестирование требований'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-7016313448106443085</id><published>2010-11-26T16:54:00.001+03:00</published><updated>2010-11-26T19:28:33.006+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ротация'/><title type='text'>Ротация</title><content type='html'>&lt;blockquote&gt;"На фронте я любил наблюдательного человека посылать. Старый ему видимую обстановку докладывал, а новый свежим взглядом проверял. И представляете, очень удачно это порой получалось. У старого наблюдателя от целого дня напряженного высматривания глаз, что называется, замылился. Он чего и не было замечал, а то что вновь появлялось не видел…». &lt;i&gt;Володя Шарапов :)&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;Добрый день, коллеги.&lt;br /&gt;Несколько слов о ротации тестировщиков...&lt;br /&gt;При тестировании сложной программной системы , состоящей из множества подсистем , модулей, обеспечивающих функционирование различных бизнес-процессов , команда тестировщиков неизбежно делится на людей, специализирующихся на конкретных частях тестируемой системы. То есть со временем тестировщик начинает узнавать систему все лучше и лучше, но в какой-то отдельной ее части он разбирается лучше других.&lt;br /&gt;Все новые доработки этой наиболее близкой и понятной ему части распределяются на него, он быстрее всех и качественнее всех диагностирует проблемы в этой подсистеме. В общем, его руководителю проще и дешевле дать эту подсистему на откуп. И так для каждой части сложного программного комплекса. В такой ситуации работы по тестированию проходят с максимальной скоростью. Люди досконально знают тестируемые ими части системы и не тратят время на лишние выяснения и ознакомления.&lt;br /&gt;Все хорошо до тех пор, пока у человека не начинается "замыливаться взгляд". Он продолжает быстро справляться с задачами , связанными с его областью, но его тестирование становится все менее въедливым и растет риск пропуска (или намеренного игнорирования) сначала некритичных ошибок , а затем и серьезных проблем. Это ненадуманная проблема -  с ней приходилось сталкиваться в реальной практике.&lt;br /&gt;Способ решения довольно прост и напрашивается сам собой. Производить ротацию тестировщиков по подсистемам, время от времени давая им длительное время поработать с поначалу плохо знакомой им частью программного комплекса. При систематическом применении такого подхода средний уровень "знания" тестировщиками программного продукта повышается, люди по-прежнему ценны для компании , но в то же время взаимозаменяемы, им интереснее трудиться и еще много плюсов побольше и поменьше, самый главный из которых состоит в том, что как правило сразу после ротации в каждой подсистеме "новичками" обнаруживаются ошибки казалось бы там, где уже все "вылизано"... &lt;br /&gt;Отмечу, что подобный процесс должен сопровождаться качественным документированием методик тестирования, особенностей реализации и функционирования тестируемых подсистем, для того, чтобы снизить временные затраты на ознакомление.&lt;br /&gt;&lt;br /&gt;Так что товарищ Шарапов все сказал правильно =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-7016313448106443085?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/7016313448106443085/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/11/blog-post_26.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7016313448106443085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7016313448106443085'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/11/blog-post_26.html' title='Ротация'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-8034395318487664181</id><published>2010-11-16T00:36:00.002+03:00</published><updated>2011-05-13T23:51:26.186+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='полезные утилиты'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматизация'/><category scheme='http://www.blogger.com/atom/ns#' term='непрерывная интеграция'/><title type='text'>Первый опыт непрерывной интеграции</title><content type='html'>&lt;img src="http://www.cmake.org/cmake/img/software-process.png" alt="схема процесса с использованием продуктов Kitware"/&gt;&lt;br /&gt;Пару лет назад, когда я только начинал проектировать систему автоматического тестирования программного обеспечения, которое производит мой работодатель, я еще не знал такого понятия как &lt;b&gt;"непрерывная интеграция"&lt;/b&gt; (&lt;a href="http://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BF%D1%80%D0%B5%D1%80%D1%8B%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F"&gt;wiki&lt;/a&gt;). Теперь, оценивая сделанное, я прихожу к выводу, что во многом (но не во всем) этой самой "непрерывной интеграции" удалось достичь. Далее я вкратце попытаюсь рассказать какими именно средствами это было реализовано...&lt;br /&gt;&lt;br /&gt;Для сборки проекта используется кроссплатформенная система сборки &lt;b&gt;CMake&lt;/b&gt; (взамен устаревших и более сложных в использовании Autotools), а также две другие утилиты из CMake-семейства: &lt;b&gt;CTest&lt;/b&gt; и &lt;b&gt;CDash&lt;/b&gt;.&lt;br /&gt;&lt;b&gt;CTest&lt;/b&gt; используется для прогона модульных и комплексных автотестов.&lt;br /&gt;&lt;b&gt;CDash&lt;/b&gt; для обработки, хранения и отображения результатов автоматических сборок (результатов работы CTest-а).&lt;br /&gt;&lt;br /&gt;Для проведения автосборок и сеансов автоматического тестирования выделен отдельный сервер.&lt;br /&gt;cron-настроен на проведение автоматических ночных сборок.&lt;br /&gt;Результаты каждого ночного сеанса тестирования автоматически экспортируются в &lt;b&gt;CDash&lt;/b&gt;(в xml-формате) для обработки , архивирования и возможности отображения и анализа в любой момент времени.&lt;br /&gt;Так "система" работает сейчас. Но, как говорится, всегда есть к чему стремиться. Проведение ночных сборок хоть и повышает скорость реакции на "поломки" в коде, но иногда и такая скорость недостаточна.&lt;br /&gt;Сейчас есть желание и потребность прогона &lt;b&gt;сборки &lt;/b&gt;после каждого коммита в репозиторий. Проблема в том, что коммиты могут быть многочисленны в течение одного дня и прогонять весь набор тестов (модульных и комплексных) после каждого изменения может стать трудновыполнимой задачей. В связи с этим вижу 2 варианта решения проблемы:&lt;br /&gt;&lt;br /&gt;1. После каждого коммита прогонять лишь модульные тесты, а полноценный сеанс &lt;b&gt;автоматического тестирования&lt;/b&gt; запускать только по ночам.&lt;br /&gt;2. Разделить критичные коммиты от некритичных (например  с помощью тегов в комментариях к коммитам) и прогонять сборку только после критичных коммитов.&lt;br /&gt;&lt;br /&gt;Реагирование на появление изменений в репозитории - не проблема. Можно использовать готовые и навороченные решения, либо обойтись собственными скриптами.&lt;br /&gt;&lt;br /&gt;В общем,  в ближайшее время задуманное будет реализовано.&lt;br /&gt;&lt;br /&gt;Комментарии, вопросы, отзывы - милости прошу )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-8034395318487664181?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/8034395318487664181/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/11/blog-post_16.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8034395318487664181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/8034395318487664181'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/11/blog-post_16.html' title='Первый опыт непрерывной интеграции'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-937398217351707620</id><published>2010-11-13T16:10:00.002+03:00</published><updated>2011-05-13T23:49:46.722+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TestLink'/><category scheme='http://www.blogger.com/atom/ns#' term='TSS'/><title type='text'>Установка TestLink</title><content type='html'>Коллеги, отвечающие на мой предыдущий пост, помимо разных OpenSource TSS систем упомянули &lt;b&gt;TestLink&lt;/b&gt;. Краем глаза мне удалось почитать документацию о нескольких из них, где-то даже попользоваться "демками".. В итоге из всего просмотренного решил более детально остановиться на TestLink. У этого проекта есть демо-версия, но она слишком медленно работает, заполнена кучей демо-данных со всех уголков мира ) и не дает реального представления о том, как система устроена изнутри. В общем, решил поставить и посмотреть. Забегая вперед, скажу , что процесс установки предельно прост и для многих его описание может показаться излишним, но , быть может, кому-то окажется полезным. Поэтому, опишу процесс инсталляции &lt;b&gt;TestLink 1.9&lt;/b&gt; на одном из имеющихся в моем распоряжении хостов:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;OS&lt;/span&gt;: Debian Lenny9&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;web server&lt;/span&gt;: apache 2.0&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;php&lt;/span&gt;: 5.2.6 (требуется любая версия &amp;gt;= 5.2.0 )&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;mysql:&lt;/span&gt; Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2&lt;br /&gt;&lt;br /&gt;1. &lt;span style="font-weight: bold;"&gt;Получение дистрибутива&lt;/span&gt;&lt;br /&gt;Скачиваем дистрибутив с офсайта: &lt;a href="http://downloads.sourceforge.net/project/testlink/Development%20and%20Testing/1.9/testlink_1_9_RC1.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Ftestlink%2Ffiles%2F&amp;amp;ts=1289653972&amp;amp;use_mirror=citylan"&gt;прямая ссылка на архив&lt;/a&gt;&lt;br /&gt;2. &lt;span style="font-weight: bold;"&gt;Виртуальный хост&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;создаем директорию для виртуального хоста. В моем случае: &lt;code&gt;&lt;br /&gt;sudo -s&lt;br /&gt;mkdir /var/www/vhosts/testlink&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;распаковываем содержимое скачанного архива в созданную директорию&lt;/li&gt;&lt;li&gt;производим настройку виртуального хоста&lt;br /&gt;&lt;code&gt;&lt;br /&gt;...&lt;br /&gt;ServerName   testlink:80&lt;br /&gt;DocumentRoot /var/www/vhosts/testlink&lt;br /&gt;CustomLog  /var/www/vhosts/testlink/logs/access_log combined&lt;br /&gt;ErrorLog  /var/www/vhosts/testlink/logs/error_log&lt;br /&gt;&lt;directory testlink="" var="" vhosts="" www=""&gt;&lt;br /&gt;DirectoryIndex index.html index.phtml index.php&lt;br /&gt;&amp;ltifmodule mod_php4.c&amp;gt&lt;br /&gt;php_admin_flag engine on&lt;br /&gt;php_admin_flag safe_mode on&lt;br /&gt;&amp;lt/ifmodule&amp;gt&lt;br /&gt;&amp;ltifmodule mod_php5.c&amp;gt&lt;br /&gt;php_admin_flag engine on&lt;br /&gt;php_admin_flag safe_mode on&lt;br /&gt;&amp;lt/ifmodule&amp;gt&lt;br /&gt;AllowOverride All&lt;br /&gt;Options +Indexes FollowSymLinks +ExecCGI&lt;br /&gt;&amp;lt/directory&amp;gt&lt;br /&gt;&amp;ltlocation ^/ &amp;gt&lt;br /&gt;SetHandler mod_php5&lt;br /&gt;order allow,deny&lt;br /&gt;allow from all&lt;br /&gt;&amp;lt/location&amp;gt&lt;br /&gt;...&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;В моем случае конфиги виртуальных хостов располагаются в отдельных файлах и включаются в главный файл настроек апача.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; перезапускаем апач чтобы новые настройки вступили в силу&lt;br /&gt;&lt;code&gt;&lt;br /&gt;apache2ctl graceful&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;3. настраиваем /etc/hosts (для *nix машин) или %windows%\system32\drivers\etc\hosts (для виндовых машин) на клиентской машине для возможности указания teslink в url:&lt;br /&gt;для этого достаточно в указанном файле достаточно прописать&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;ip-адрес&gt; testlink&lt;br /&gt;&lt;/ip-адрес&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;4. &lt;span style="font-weight: bold;"&gt;тест url&lt;/span&gt;&lt;br /&gt;проверяем доступность инсталляции testlink:&lt;br /&gt;http://testlink/index.php&lt;br /&gt;&lt;br /&gt;Должны увидеть форму инсталляции:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_xGQcTEVzBZI/TN6R8CsbgyI/AAAAAAAAAAM/1b6DnNpQWtQ/s1600/testlink1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539025052413690658" src="http://4.bp.blogspot.com/_xGQcTEVzBZI/TN6R8CsbgyI/AAAAAAAAAAM/1b6DnNpQWtQ/s320/testlink1.png" style="cursor: pointer; float: left; height: 122px; margin: 0pt 10px 10px 0pt; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Переходим по ссылке New Installation и принимаем лицензионное соглашение.&lt;br /&gt;TestLink распространяется под Gnu GPL. Так что используем на здоровье )&lt;br /&gt;&lt;br /&gt;5.&lt;span style="font-weight: bold;"&gt; Проверка системных требований&lt;/span&gt;&lt;br /&gt;После принятия соглашения открывается форма проверки сервера на соответствие требованиям TestLink&lt;br /&gt;Если то или иное требование выполняется, то соответствующий пункт помечается зеленым цветом и магическим словом ОК. В противном случае, видим оранжевые сообщения о том, чего у нас нет и чем это чревато.&lt;br /&gt;Двигаемся по порядку:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Системные требования:&lt;/b&gt;&lt;br /&gt;Server Operating System (no constrains) Linux&lt;br /&gt;PHP version OK ( 5.2.0 [minimum version] &amp;lt;= 5.2.6-1+lenny9 [your version] )  Здесь у меня все ок.  &lt;b&gt;Web and PHP configuration&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Maximum Session Idle Time before Timeout 24 minutes and 0 seconds - (Short. Consider to extend.) - инсталлятор рекомендует мне увеличить пераметр Max Session Idle Timeout - пока не понятно для чего, потому пропускаем мимо ушей и смотрим дальше&lt;br /&gt;&lt;br /&gt;Checking max. execution time (Parameter max_execution_time) 30 seconds - We suggest 120 seconds in order to manage hundred of test cases (edit php.ini)  - эта рекомендация понятна, но пока некритична (нам еще далеко до "сотен" тест-кейсов ) - решаем проблемы по мере постуления и двигаемся дальше&lt;br /&gt;&lt;br /&gt;Checking maximal allowed memory (Parameter memory_limit) OK (128 MegaBytes)&lt;br /&gt;Checking if Register Globals is disabled OK&lt;br /&gt;Checking MySQL Database  OK&lt;br /&gt;Checking Postgres Database  Failed! Postgres Database cannot be used. - на моем сервере не установлен Postgres. Пока пропускаю этот ворнинг, надеясь, что MySql для корректной работы будет достаточно.&lt;br /&gt;&lt;br /&gt;Checking GD Graphic library  Failed! GD Graphic library not enabled.&lt;br /&gt;Graph rendering requires it. This feature will be disabled. It's recommended to install it..&lt;br /&gt;&lt;br /&gt;- вот тут уже надо вмешаться. Не установлена графическая либа для php. Подозреваю, что не смогу смотреть всякие там графики и отчетики. Хочу, чтобы было все красиво, потому ставим либу:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo aptitude install php5-gd&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;далее добавляем строку extenstion=gd.so в php.ini и перезапускаем Apache.&lt;br /&gt;В результате должны увидеть:&lt;br /&gt;&lt;br /&gt;Checking GD Graphic library  OK&lt;br /&gt;&lt;br /&gt;Checking LDAP library  Failed! LDAP library not enabled. LDAP authentication cannot be used. (default internal authentication will works). - С этим предупредением поступаем как с предыдущим - ставим нужную библиотеку (для возможности ldap-аутентификации в будущем):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo aptitude install php5-gd&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;далее добавляем строку extenstion=ldap.so в php.ini и перезапускаем Apache.&lt;br /&gt;В результате должны увидеть:&lt;br /&gt;Checking LDAP library  OK&lt;br /&gt;&lt;br /&gt;Checking JSON library  OK - тут изначально у меня все ок. Если , у кого соответствующая библиотека не установлена, то вы знаете теперь как поступить )&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Read/write permissions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Checking if /var/www/vhosts/testlink/gui/templates_c directory exists OK&lt;br /&gt;Checking if /var/www/vhosts/testlink/gui/templates_c directory is writable OK&lt;br /&gt;Checking if /var/www/vhosts/testlink/logs directory exists OK&lt;br /&gt;Checking if /var/www/vhosts/testlink/logs directory is writable OK&lt;br /&gt;Checking if /var/www/vhosts/testlink/upload_area directory exists OK&lt;br /&gt;Checking if /var/www/vhosts/testlink/upload_area directory is writable OK&lt;br /&gt;&lt;br /&gt;В общем цель данной страницы визарда установщика: увидеть сообщение "Your system is prepared for TestLink configuration (no fatal problem found)." и нажать Continue. Что и делаем! (Если у кого возникли фатальные проблемы, пишите о них в комментариях, а также о том , как вы их обошли - буду признателен )&lt;br /&gt;Двигаемся дальше...&lt;br /&gt;&lt;br /&gt;6. &lt;b&gt;Definition of DB access&lt;/b&gt;&lt;br /&gt;О назначении этого шага нетрудно догадаться по его названию - на следующей странице визарда мы должны:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;br /&gt;Выбрать тип бд - мой выбор "MySQL (5.0 and later)"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;адрес сервера, где находится наша СУБД - я выбрал localhost (пока все на одном сервере)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;Указать имя схемы бд (соответствующую схему надо будет создать) - оставляем "testlink"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;Опционально указать префикс таблиц: оставляем незаполненным&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;В полях "Database admin login" и "Database admin password" указываем логин и пароль админа СУБД для того, чтобы инсталлятор смог автоматически создать нужную схему и все нужные объекты в ней&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;В полях "TestLink DB login" и "TestLink DB password" указываем логин и пароль пользователя схемы из-под которого будет вестись вся внутренняя работа с БД (полет фантазии в выборе логина и пароля =)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Далее убеждаемся что демон (служба) mysql запущена и жмем батон "Process TestLink Setup!"&lt;br /&gt;&lt;br /&gt;После этого инсталлятор:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;создает файл &lt;i&gt;config_db.inc.php&lt;/i&gt; в DocumentRoot-дериктории сайта , поэтому убедитесь, что у пользователя, из-под которого у вас запущен apache есть w-права на соответствующую директорию&lt;/li&gt;&lt;li&gt;&lt;br /&gt;Удаляет все , что есть в бд testlink (внимание! на случай, если вы используете уже существующую бд)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;Создает все нужные таблицы в бд заново&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;code a="" addresses="" admin="" and="" attempt="" attention="" can="" click="" complete="" configuration="" configure="" connecting="" connection="" copy="" correct="" creating="" data="" database="" db="" email="" following="" from="" fully="" functional="" grant="" have="" installation="" into="" log="" login="" mail="" mysql="" need="" now="" ok="" please="" regarding="" section="" server="" setup="" sql="" steps="" testlink="" the="" this="" to="" user="" user_exists="" using="" was="" will="" writing="" you="" your=""&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Видим два предупреждения, касающихся настройки почтовых уведомлений.&lt;br /&gt;Пока пропускаем это.&lt;br /&gt;Переходим по ссылке "Please Click Me" и радуемся тому, что все благополучно установилось.&lt;br /&gt;Логинимся под учеткой admin/admin и приступаем к созданию первого проекта по тестированию.&lt;br /&gt;&lt;br /&gt;Эту систему я только начинаю исследовать и осваивать, чтобы принять решение о том, буду ли использовать ее в повседневной деятельности или нет.. поживем - увидим, как говорится..&lt;br /&gt;&lt;br /&gt;Всем удачи.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-937398217351707620?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/937398217351707620/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/11/testlink.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/937398217351707620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/937398217351707620'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/11/testlink.html' title='Установка TestLink'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xGQcTEVzBZI/TN6R8CsbgyI/AAAAAAAAAAM/1b6DnNpQWtQ/s72-c/testlink1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-5054357225364446306</id><published>2010-11-03T13:04:00.001+03:00</published><updated>2011-05-13T23:56:20.727+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TSS'/><title type='text'>Оптимизация повторного использования тестов</title><content type='html'>Добрый день!&lt;br /&gt;&lt;br /&gt;Все мы знаем , что &lt;strong&gt;повторно использовать&lt;/strong&gt; тесты - хорошая практика, позволяющая экономить ресурсы. Для этого (в частности для этого) мы автоматизируем часть тестов, а остальное документируем и сохраняем для возможности ручной регрессионной проверки в будущем. &lt;br /&gt;Есть идея в своей повседневной практике внедрить некую систему управления тестами, в которой тест - отдельно хранимая сущность, доступная для повторного использования в произвольном количестве тестовых сценариев. То есть, нужна возможность компоновать &lt;strong&gt;тестовые сценарии&lt;/strong&gt; из уже заготовленных тестов , как из кирпичиков. &lt;br /&gt;Сейчас в своей профессиональной деятельности использую *.odt и *.doc форматы для хранения тестовых сценариев. Зачастую сталкиваюсь с ситуацией, когда один и тот же тест приходится копировать в разные сценарии. А при необходимости актуализации теста (например, в связи с изменениями в тестируемой системе) приходится актуализировать целый ряд документов. Этот "мартышкин труд" уже порядком надоел. Тем более, на одной из конференций, посвященной QA , я познакомился с решением для &lt;strong&gt;поддержки тестирования&lt;/strong&gt; из MS Team Foundation Server 2010 и был , признаться , печатлен той степенью автоматизации поддержки тестирования, которой удалось достичь разработчикам VS2010.&lt;br /&gt;По ряду причин продукция Microsoft нам не подходит. В связи с этим нахожусь в поиске упрощенных openSource и , возможно, платных (неполных) аналогов TFS. Полнейшая автоматизация traceability требований, кода и &lt;strong&gt;тестов&lt;/strong&gt; на данный момент не цель. Главное - возможность повторного использования описаний тестов ;)&lt;br /&gt;Если кто-то сталкивался с похожими проблемами, буду признателен за совет, отзыв , мнение.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-5054357225364446306?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/5054357225364446306/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/11/blog-post.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5054357225364446306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5054357225364446306'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/11/blog-post.html' title='Оптимизация повторного использования тестов'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-877398203929394636</id><published>2010-06-22T15:06:00.001+04:00</published><updated>2011-05-13T23:53:55.036+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web-технологии'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматизация'/><category scheme='http://www.blogger.com/atom/ns#' term='броузеры'/><title type='text'>Слишком умная мозилла (к вопросу о кроссброузерности)</title><content type='html'>Основным броузером для отладки и тестирования веб-интерфейса нашего продукта является Firefox. Недавно опытным путем выяснилась одна его особенность: дописывать закрывающие '&gt;' для html-тегов.&lt;br /&gt;&lt;br /&gt;Выявили так: была сделана доработка, протестирована вручную под Firefox. Написан Seleinum-автотест , который был прогнан на IE - тест провалился. &lt;br /&gt;Причина - не был закрыт один из тегов td из-за чего не отобразился на форме один из ключевых контролов. &lt;br /&gt;Этот же тест затем провалился и на Opera.&lt;br /&gt;&lt;br /&gt;Вопрос, на что лучше - этот "искусственный интеллект" Мозиллы, позволяющий все-таки работать с формой, имеющей мелкие недоработки,  или более четкое соблюдение стандартов в IE и Opera ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-877398203929394636?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/877398203929394636/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/06/blog-post_22.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/877398203929394636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/877398203929394636'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/06/blog-post_22.html' title='Слишком умная мозилла (к вопросу о кроссброузерности)'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-3148669099729478556</id><published>2010-06-04T20:15:00.001+04:00</published><updated>2010-11-14T00:51:58.266+03:00</updated><title type='text'>Кроссброузерность selenium-автотестов</title><content type='html'>С некоторых пор мы начали процесс автоматизации функционального тестирования нашего веб-интерфейса. Проводили разведку боем. Автоматизировали определенную часть функционала и временно приостановили работы по автоматизации, для того чтобы посмотреть как этот набор тестов поведет себя в  реальной жизни. НАсколько будет устойчив  к изменениям в интерфейсе, насколько продуктивен в диагностике проблем. В общем спустя времени , получив результат, поняли, что очень даже стоит продолжить начатое. Первоначально все тесты прогонялись под Firefox. Сейчас же решили включить аналогичные проверки на IE. Первый пробный запуск автотестов (без какой либо переделки и доводки) показал, что существенная часть тестов не прошла , причем большая часть - из-за особенностей IE (первый прогон был на v.6.0)... Радужное настроение немного померкло, перспектива затачивать скрипты отдельно под каждый броузер не слишком впечатляет) .. Ну что же, это небольшой вызов - будем разбираться, придумывать рецепты, которыми я обязательно поделюсь!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-3148669099729478556?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/3148669099729478556/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/06/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3148669099729478556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/3148669099729478556'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/06/blog-post.html' title='Кроссброузерность selenium-автотестов'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-607360925865505742</id><published>2010-04-23T14:12:00.000+04:00</published><updated>2010-04-23T14:53:34.852+04:00</updated><title type='text'>Дни Качества в Майкрософт)</title><content type='html'>В конце марта месяца 2010 посетил конференцию MS QA Days в Москве в Крылатском. Не являясь активным пользователем технологий MS ни в быту ни в работе, тем не менее нашел 2 из 4х докладов несомненно полезными для себя: первый - "Стратегические соображения о тестировании и готовности программного обеспечения к эксплуатации” (Strategic thoughts on testing and software readiness)" (Григорий Мельник) и последний - "BDD или элегантные тесты на доменную модель" (Андрей Бибичев). Второй доклад был откровенно скучным и автор явно был не совсем к нему готов, что вызывало желание поскорее дотянуть до кофе-брейка , дабы не уснуть. Третий доклад был откровенной рекламой одного из продуктов MS представителем Quest Software - живенько, наглядненько, но "мне это не подходит" (с)&lt;br /&gt;&lt;br /&gt;Программа и видео презентации можете найти на оф.сайте мероприятия...&lt;br /&gt;&lt;br /&gt;http://msqadays.ru/program.shtml&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-607360925865505742?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/607360925865505742/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/04/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/607360925865505742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/607360925865505742'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/04/blog-post.html' title='Дни Качества в Майкрософт)'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-1039387650934149800</id><published>2010-04-09T14:22:00.003+04:00</published><updated>2011-05-13T23:52:24.659+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web-технологии'/><category scheme='http://www.blogger.com/atom/ns#' term='броузеры'/><title type='text'>IE и cookie</title><content type='html'>В моей тестовой лабе имеется хост для тестирования веб-интерфейса,содержащий подчеркивания в имени... В код веб-интерфейса была добавлена поддержка куков.. проверяю... В мозилле все ок, в опере все ок, в хроме и сафари тоже все ок... Один IE 6,7,8 делает вид, что куков, которые ему отправляются просто нет.. ДЕлает вид, и молчит) Ковыряюсь в настройках безопасности, разрешаю ему все что можно разрешить броузеру.. Все равно, не работает....&lt;br /&gt;В итоге, оказалось, что проблема в том, что в имени хоста были подчеркивания )... То есть, IE молча решил что раз имя хоста не соответствует стандартам, то с этим сайтом можно в принципе работать... но без кукисов)))&lt;br /&gt;Уж не знаю, хвалить за такое молчаливое качество IE или ругать)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-1039387650934149800?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/1039387650934149800/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2010/04/ie-cookie.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1039387650934149800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/1039387650934149800'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2010/04/ie-cookie.html' title='IE и cookie'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-7005327573693705898</id><published>2009-12-02T15:58:00.000+03:00</published><updated>2009-12-02T16:16:24.735+03:00</updated><title type='text'>Selenium RC</title><content type='html'>Selenium RC (remote control) - утилита , написанная на java, основное назначение которой запускать по требованию автотеста нужный броузер и эмулировать деятельность юзера, выполняя команды этого автотеста. Благодаря java этот продукт кросплатформенный. Правда до определенной степени. Как только запущенному на Linux RC автотест "скажет" запустить IE - возможна нецензурная брань в консоли ))&lt;br /&gt;&lt;br /&gt;Запускается север просто: java -jar selenium-server.jar&lt;br /&gt;&lt;br /&gt;Последняя (на декабрь 2009 г) версия RC требовала джаву версии не мололже 1.5&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Необходимые настройки в автотесте&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Рассмотрим на примере сгенерированного Selenium IDE perl-ового скрипта:&lt;br /&gt;&lt;br /&gt;my $sel = Test::WWW::Selenium-&gt;new( host =&gt; "127.0.0.1",&lt;br /&gt;                                    port =&gt; "4444",&lt;br /&gt;                                    browser =&gt; "*chrome",&lt;br /&gt;                                    browser_url =&gt; "test1.ru" );&lt;br /&gt;&lt;br /&gt;то есть надо указать ip-адрес хоста, на котором должен быть запущен RC, tcp-порт на этом же хосте, тип броузера (что-то типа мнемоники) и тестируемый url.&lt;br /&gt;&lt;br /&gt;С ip-адресом все ясно.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Порт:&lt;/span&gt;&lt;br /&gt;Если при запуске RC явно не указать порт, то будет выбран порт 4444 по-умолчанию.&lt;br /&gt;&lt;br /&gt;Чтобы запустить на нужном вам порту необходимо к команде запуска добавить ключ -port&lt;br /&gt;&lt;br /&gt;java -jar selenium-server.jar -port 5555&lt;br /&gt;&lt;br /&gt;если он будет не занят, то все должно быть ок.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Тип броузера:&lt;/span&gt; &lt;br /&gt;*chrome - mozilla firefox&lt;br /&gt;*opera  - опера&lt;br /&gt;*iehta - IE&lt;br /&gt;&lt;br /&gt;запускать другие, не пробовал.&lt;br /&gt;&lt;br /&gt;Итак, запустили сервер RC , прописали в автотесте нужные параметры и запускаем тест на выполнение.&lt;br /&gt;Если все ок - RC сам запустит броузер, выполнит команды автотеста и завершит работу броузера.&lt;br /&gt;Все просто и со вкусом.&lt;br /&gt;&lt;br /&gt;Для своих повседневных "автоматических" целей я запускаю RC на виртуальной windows-машине - исключительно из необходимости тестирования под IE. Клиентская часть (набор автотестов) периодически запускается на Linux - машинах.&lt;br /&gt;&lt;br /&gt;В следующих постах буду подробнее останавливаться на технических трудностях с моделированием той или иной деятельности человека в броузере. В частности , расскажу как решал проблемы с js.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-7005327573693705898?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/7005327573693705898/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2009/12/selenium-rc.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7005327573693705898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/7005327573693705898'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2009/12/selenium-rc.html' title='Selenium RC'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-2325360000669296442</id><published>2009-10-29T19:47:00.000+03:00</published><updated>2009-10-29T20:08:28.152+03:00</updated><title type='text'>Selenium и Perl</title><content type='html'>Selenium IDE позволяет экспортировать записанный автотест в несколько популярных языков программирования. Один из них perl, который я и использую в практической деятельности.&lt;br /&gt;Экспорт производится из меню "Файл"-&gt;export test case as и далее выбирается нужный язык программирования. Для экспорта в perl  выбираем "Perl-Selenium RC".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Что такое Selenium RC подробно буду описывать в последующих постах. Сейчас достаточно сказать лишь, что это отдельный продукт Селениума, который представляет из себя сервер, принимающий команды из, которых и состоит скриптовый автотест.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;В результате экспорта получаем перловый скрипт.&lt;br /&gt;Для рассмотренного в предыдущем посте примера с автотестом на гмейл получим перл-скрипт со следующим содержанием:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;use Time::HiRes qw(sleep);&lt;br /&gt;use Test::WWW::Selenium;&lt;br /&gt;use Test::More "no_plan";&lt;br /&gt;use Test::Exception;&lt;br /&gt;&lt;br /&gt;my $sel = Test::WWW::Selenium-&gt;new( host =&gt; "localhost",&lt;br /&gt;                                    port =&gt; 4444,&lt;br /&gt;                                    browser =&gt; "*chrome",&lt;br /&gt;                                    browser_url =&gt; "http://www.google.ru/" );&lt;br /&gt;&lt;br /&gt;$sel-&gt;open_ok("/");&lt;br /&gt;$sel-&gt;click_ok("link=Gmail");&lt;br /&gt;$sel-&gt;wait_for_page_to_load_ok("30000");&lt;br /&gt;$sel-&gt;is_text_present_ok("Добро пожаловать в почту Gmail");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Для того, чтобы можно было выполнить этот скрипт необходим сам интерпретатор perl и модуль  Test::WWW::Selenium, который можно взять с CPANа. Этот компонент представляет из себя perl-драйвер  селениумовских автотестов. Для каждого языка программирования, в который  возможен эскпорт автотестов есть свой драйвер.&lt;br /&gt;&lt;br /&gt;Модуль довольно весомый и имеет много зависимостей - смело ставьте все, что попросит )&lt;br /&gt;Очень подозреваю, что этот модуль кросплатформенный, но я пользовался им только в linux.&lt;br /&gt;&lt;br /&gt;Итак, perl  у нас есть, все необходимые модули для запуска.&lt;br /&gt;&lt;br /&gt;добавляем права на запуск и выполняем скрипт : &lt;span style="font-style:italic;"&gt;perl gmail_test_01.pl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;В результате видим сообщение: &lt;span style="font-style:italic;"&gt;Error requesting http://localhost:4444/selenium-server/driver/:&lt;br /&gt;500 Can't connect to localhost:4444&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Это сообщение значит то, что у нас не запущен Selenium RC - сервер, который должен принимать команды нашего автотеста.&lt;br /&gt;&lt;br /&gt;О том как настроить и запустить RC (Remote Control) и о том, как он работает, я напишу в следующем посте...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-2325360000669296442?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/2325360000669296442/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2009/10/selenium-perl.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/2325360000669296442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/2325360000669296442'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2009/10/selenium-perl.html' title='Selenium и Perl'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-4418535816680330425</id><published>2009-10-26T18:30:00.000+03:00</published><updated>2009-10-27T11:44:54.976+03:00</updated><title type='text'>о Selenium IDE</title><content type='html'>Знакомство с продуктами Selenium лучше начинать с Selenium IDE.&lt;br /&gt;Для  начала необходимо установить броузер Mozilla Firefox.&lt;blockquote&gt;&lt;/blockquote&gt;Далее в меню "Инструменты"-&gt;"Дополнения" необходимо найти аддон Selenium IDE и установить его. После установки и перезапуска броузера можно начинать записывать свой  первый тест.&lt;br /&gt;&lt;br /&gt;Для наглядности пусть наш первый автотест проверяет доступность сайта gmail.com и наличие на его стартовой странице тех или иных записей.&lt;br /&gt;&lt;br /&gt;1. Меню "Инструменты"-&gt;"Selenium IDE" - должно появиться окошко с конструктором тестов&lt;br /&gt;2. откройте новую вкладку и наберите в адресной строке http://google.com&lt;br /&gt;3. перейдите в IDE и заполните поле "Базовый url" значени "http://google.com"&lt;br /&gt;4. начните запись теста нажатием на красный кружок&lt;br /&gt;5. перейдите на вкладку с гуглом и нажмите ссылку gmail -  в результате IDE должна записать нам первые команды автотеста:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;open /&lt;/li&gt;&lt;li&gt;click link=Gmail&lt;/li&gt;&lt;/ul&gt;6. критерием успешности теста для простоты выберем факт наличия на полученной странице надписи    "Добро пожаловать в почту Gmail" . Чтобы записать в тест команду такой проверки нажмите правой кнопкой мыши на надписи "Добро пожаловать в почту Gmail" и щелкните  по "verifyTextPresent (....)" - это действие добавит в сценарий вашего автотеста соответсвующую команду проверки. Для первого теста достаточно проверок!)&lt;br /&gt;7. Останавливаем запись теста нажатием на красный кружок.&lt;br /&gt;8. Проверяем работоспособность теста нажатием на  кнопку с хинтом "Play current test case" (имейте ввиду, что IDE прогоняет тест в текущей активной вкладке:)  -  в результате скорее всего вы увидите, что тест не прошел (красная строка "false")&lt;br /&gt;В чем же дело? Ведь мы прогнали тест той же утилитой, которой его и записали!&lt;br /&gt;Причина в том, что IDE записала в сценарий теста команду click, выполняя ее драйвер тестов не должидается загрузки нового содержимого  броузера, а сразу выполняет следующую команду (у нас это verifyTextPresent). Понятно, что моментально страницы не грузятся даже при очень быстром коннекте, и , следовательно, на момент проверки наличия текста, его еще нет в природе (то есть , в броузере) и тест проваливается. Чтобы данный тест прошел необходимо заменить команду click на clickAndWait. Сделать это нужно вручную. Щелкаете на команде и редактируете поле "Command", заменяя строку "click" на  "clickAndWait". Бага это или фича IDE? Скорее "особенность реализации", ведь в некоторых случаях нужен действительно click.&lt;br /&gt;&lt;br /&gt;9. Прогоняем еще раз записанный тест и видим , что на этот раз он "прошел" успешно.&lt;br /&gt;&lt;br /&gt;Отмечу, что в IDE есть возможность настройки для таймаута на загрузку страницы. По-умолчанию этот таймаут равен 30000 милисекунд. То есть, данный тест провалится , если  в течении 30 сек. от гугла не удастя получить страницу с искомой надписью.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Полученный тест можно сохранять в файл и даже экспортировать в некоторые наиболее популярные высокоуровневые языки программирования: java, c#, perl. В своей повседневной рабочей деятельности я имею дело с perl , поэтому в одном из следующих постов я опишу, как программно работать  с selenium , используя perl.&lt;br /&gt;&lt;br /&gt;Записывая тесты с помощью Selenium IDE время от времени вы будете сталкиваться с тем, что не все она умеет делать автоматически и не все автоматически делает так как нужно именно вам (см. пример выше). Скажу только, что всегда можно добавлять команды вручную и всегда можно искать нужные элементы html-страниц с помощью Xpath. Для получания корректного xpath  пользуйтесь расширением дополнения Firebug. Ну и если какие трудности  с этим, обращайтесь - постараюсь помочь.&lt;br /&gt;&lt;br /&gt;Файлы:&lt;br /&gt;&lt;a href="http://letitbit.net/download/8373.aa8b1357e87f4b798ba74eeef/gmail_test_01.html"&gt;Пример теста,&lt;/a&gt; который можно открыть в Selenium IDE для выполнения и модификации.&lt;br /&gt;&lt;br /&gt;p.s.&lt;br /&gt;Это , конечно, не все , что можно реализовать с помощью этой IDE. Поддерживается великое множество команд, с помощью которых сможно сэмулировать практически все, что может руками сделать пользователь в броузере. Подробнее обо всем этом читайте на офсайте Selenium - ну и гугл в помощь (с).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-4418535816680330425?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/4418535816680330425/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2009/10/selenium-ide.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/4418535816680330425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/4418535816680330425'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2009/10/selenium-ide.html' title='о Selenium IDE'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3261038697044244302.post-5524488414269901737</id><published>2009-10-22T16:05:00.000+04:00</published><updated>2009-10-22T17:16:17.928+04:00</updated><title type='text'>Опыт реального применения Selenium</title><content type='html'>Есть одна софтверная контора N, в которой я трудоустроен на должности QA-lead.&lt;br /&gt;Основным продуктом , кормящим сотрудников этой фирмы, является  некая биллинговая система на perl+Си . Она имеет веб интерфейс оператора , реализованный также на perl.&lt;br /&gt;За все время существования продукта делались несколько редких и робких попыток автоматизации лишь части рутинного ручного тестирования перлового gui. Но все заканчивалось ничем. Так происходило по большей части из-за того, что веб-интерфейс , так скажем, некритичная часть нашего продукта и тратить время на автоматизацию никто не хотел. До не давнего времени...&lt;br /&gt;В связи с известными фин.трудностями по всему миру у нас прошла волна сокращений.. Фронт работ не уменьшился, но штат тестировщиков уполовинился. Так как несмотря ни на что лозунг остался тот же "Качество, качество и еще раз качество" было решено взять постепенный курс на автоматизацию.. в т.ч. и GUI (гром не грянет  мужик не перекрестится).&lt;br /&gt;Для автоматизации GUI были выбраны продукты Selenium.&lt;br /&gt;В следующих постах я буду подробно останавливаться на всех стадиях внедрения Selenium - продуктов, вплоть до инструкций по инсталляции  и примеров развертывания...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3261038697044244302-5524488414269901737?l=qaimprove.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qaimprove.blogspot.com/feeds/5524488414269901737/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://qaimprove.blogspot.com/2009/10/selenium.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5524488414269901737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3261038697044244302/posts/default/5524488414269901737'/><link rel='alternate' type='text/html' href='http://qaimprove.blogspot.com/2009/10/selenium.html' title='Опыт реального применения Selenium'/><author><name>will</name><uri>http://www.blogger.com/profile/02812813329963523314</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://2.bp.blogspot.com/-CHCmLMEDQeM/Tc2q5_OLqHI/AAAAAAAAACM/Lxodx2A3SMA/s220/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png'/></author><thr:total>2</thr:total></entry></feed>
