...Идет строительство пирамиды Хеопса. Работает много людей. Подходят к одному человеку, который тешет камни, и спрашивают: "Что ты делаешь?". Тот отвечает: "Что не видите - тешу камни." Подходят к другому, который тоже тешет камни, и задают такой же вопрос. Тот отвечает "Я строю самое величественное сооружение на земле!"вторник, 16 ноября 2010 г.
Притча о пирамидах
...Идет строительство пирамиды Хеопса. Работает много людей. Подходят к одному человеку, который тешет камни, и спрашивают: "Что ты делаешь?". Тот отвечает: "Что не видите - тешу камни." Подходят к другому, который тоже тешет камни, и задают такой же вопрос. Тот отвечает "Я строю самое величественное сооружение на земле!"четверг, 11 ноября 2010 г.
Полнота проверки на xss атаку



Главное вовремя!
Вчера по неосторожности установила QIP 2010. Мало того, что через 10 минут пользования сразу его снесла - это ужас, так еще и получила на почту очаровательное письмо с поздравлением с Новым 2010 годом :)среда, 3 февраля 2010 г.
Когда заносить баги в трекер?

Вероятно, все читали в умных книжках по тестированию, что лучше всего заносить баги по ходу их нахождения. Тестируешь – нашел баг – завел в баг-трекер – тестируешь дальше.
Но на практике очень многие тестировщики (в том числе и я) не придерживаются такого подхода. На то есть несколько причин и на этот счет каждый имеет свое мнение и свои причины.
Лично мне не удобно отрываться от процесса тестирования. Когда находишься «в потоке» и все мысли и чувства заострены под нахождение багов, то заведение отчетов об ошибках «здесь и сейчас» очень отвлекает, выбивает из процесса.
Конечно, если в процессе тестирования находится по багу в час, то тут нет никаких проблем, чтобы сразу же занести баг в трекер. Но попадаются (и не редко) такие проекты где «баг на баге сидит и багом погоняет». В такой ситуации заводить баги сразу же при их нахождении не очень удобно. Даже совсем не удобно. На переключение между тестированием и занесением уходит довольно много времени. Поэтому, я считаю вполне оправданным занесение багов не во время самого тестирования, а чуть позже.
Единственное, что я считаю неприемлемым – это заносить все найденные баги в конце дня. Во-первых, их тогда очень нудно описывать. Во-вторых, очень велика вероятность провтыкать какой-то баг и не занести. И в-третих, это плохо сказывается на здоровье программистов :), которые не видя в течении дня ни одного нового бага, радуются и спокойно, с чистой совестью собираются себе домой… И тут вдруг обнаруживают несколько десятков багов. А-а-а!!! Так и до нервного срыва недалеко :)
Я заношу баги после каждой логически законченной части тестирования. Например, после завершения проверки какой-то функциональности программы или после тестирования какой-то формы. То есть, части должны быть не большими.
А для того, чтобы не забыть баги очень удобно по ходу тестирования делать скриншоты. Ведь практически на каждый баг можно сделать скриншот. А по скриншотам уже очень легко вспоминать суть бага. Также можно делать заметки на бумаге. Завязывать узелки на память :) ... у каждого свои методы.
PS: Про узелки на память - это шутка.
среда, 28 октября 2009 г.
Имитаторы браузеров
1. Browser Sandbox. Позволяет запускать имитаторы различных браузеров и в них проверять работу приложения.
Одно время я пользовалась этим инструментом, но не долго. Мне не понравилась его медлительность.
2. Browsershots. Позволяет быстро проверить как выглядит страница во всех известных браузерах под Windows, Linux, MacOS, BSD. Но не позволяет проверить работу приложения. Он только снимает скриншоты страниц.
3. IETester. Совсем недавно открыла для себя это десктопное приложение. Позволяет запускать в отдельних вкладках имитаторы различных версий браузера Internet Explorer.
Примечание: не совсем корректно работает под WinXP SP3.
Хочу заметить, что не стоит полностью полагаться на эти или любые другие инструменты имитируюшие работу различных браузеров. Поскольку, они в некоторых случаях не ведут себя так, как настоящие браузеры. Это и понятно, имитаторы это ж тоже приложения, и тоже содержат баги. Например, тот же IETester выдает ошибки java script там, где настоящий браузер IE их не выдает.
Лучше всего установить на рабочем компьютере или сервере несколько виртуальных машин с различными операционными системами и браузерами. В таком случае мы тестируем приложения в реальном браузере и можем быть уверены в правильности результатов тестирования.
вторник, 27 октября 2009 г.
Mailinator - инструмент для создания мейлов
Коллега подсказал инструмент, с помощью которого можно быстро и просто создавать тестовые мейлы.
Инструмент называется Mailinator. Находится в интернете по адресу http://mailinator.com/.
Для создания почтового акунта нужно всего лишь ввести имя (например, mytest1) и нажать "GO".

Все! Адрес mytest1@mailinator.com можно использовать в тестовых целях.
воскресенье, 25 октября 2009 г.
Осторожно, люди!


пятница, 23 октября 2009 г.
Тестировщик – профессия не для слабонервных

«Success is the ability to go from one failure to another with no loss of enthusiasm»
понедельник, 12 октября 2009 г.
Хотят ли тестировщики быть программистами?

- те, кто пытается пробраться в программисты через временную работу тестировщиком (типа поработаю, освоюсь в компании, наберусь знаний и опыта и постепенно...)
- те, кто вообще ни кем не хочет быть, а деньги нужны, кушать хочется - почему бы и тестировщиком не "работать".
пятница, 9 октября 2009 г.
Особенности формирования требований к производительности В2В систем
С точки зрения тестирования производительности все системы разделяются на:Высоконагруженные. Сотни тысяч пользователей, десятки миллионов хитов в день, десятки гигабайт данных, терабайты трафика. Yandex.ru, например.
Низконагруженные. Например, системы В2В взаимодействия (системы межкорпоративного взаимодействия). Такую систему обычно используют около 100-500 сотрудников компании и 1000 – 5000 клиентов компании и, конечно же, не все одновременно.
Поэтому, при тестировании В2В систем основная часть средств и времени отдается таким видам тестирования как: функциональное, юзабилити и интеграционное тестирование. На тестирование производительности остается очень мало времени.
Но его все равно проводить необходимо.
Только тут важно понять чего мы хотим от нашей системы в плане производительности.
Конечно, всегда хочется иметь самое лучшее, но как говорится «что для русского хорошо, для немца - смерть».
Мы можем потратить кучу времени и средств на обеспечение супер производительности нашей системы. Допустим, она будет чудесно работать под нагрузкой миллион хитов в день. Но в реальности максимальная нагрузка, которой подвергается наша система – 10 тысяч хитов в день. И, по прогнозам экспертов, до миллиона хитов ей еще расти и расти. Что мы сделали? Мы просто выбросили деньги на ветер и потратили силы зря. Не нужна нашей системе такая производительность, и еще много лет будет не нужна. Лучше бы мы разработали какую-то новую функциональность, которая действительно облегчила бы жизнь нашим пользователям.
То есть, мы должны честно ответить на примерно такие вопросы:
- Какое среднее количество пользователей будет одновременно работать с системой (Сколько сотрудников ежедневно пользуются системой?. Сколько клиентов в день заходят в нашу систему?);
- Какое максимальное количество пользователей будет одновременно работать с системой (Скольким людям понадобится достать или загрузить данные в системе в конце квартала, например?);
- Какой запас производительности мы хотим иметь (Что если произойдет что-то непредсказуемое и куча людей ломятся в систему, сколько их может быть? Или, что если мы банально ошиблись в наших расчетах средней нагруженности системы. Насколько мы могли ошибиться?);
- Границы приемлемой производительности системы (Какие показатели производительности мы будем считать хорошими/нормальными/плохими/очень плохими. Время выполнения операции 3 секунды это хороший или плохой показатель для нашей системы, а 10 секунд? Ну, 10 секунд это точно плохо, скажете вы. Ок. А если это операция формирования квартального отчета по результатам деятельности отдела? Вы все еще уверены, что 10 секунд это много для такой операции? Подсказка: тут нет общепринятых стандартов. Для каждой конкретной системы и даже для каждой конкретной операции хорошие и плохие показатели могут отличаться в разы).
А менеджеры просто знают, что этим модулем пользуются от силы 1-2 пользователя в день и то не каждый день. То есть такая производительность модуля устраивает всех уже на протяжении нескольких лет. И еще несколько лет будет устраивать. Как только нарисуется тенденция к увеличению интереса пользователей к модулю, вот тогда найденная проблема станет действительно актуальной и ей уделят необходимое внимание.
То есть, перед тем как приступать к тестированию производительности какой либо системы, нужно четко понять что мы хотим (в реальности) от нашей системы. Иначе получится тестирование ради тестирования.
среда, 10 июня 2009 г.
«à la desktop» интерфейс для веб-портала
Получше рассмотреть, покликать можно здесь http://ibpro.com.ua/admin/ .По-моему смотрится очень интересно.
Для сайтов контентного направления я бы не делала такой интерфейс. А вот, для корпоративного портала, основной целью которого является решение бизнес задач таких как:
- размещение и скачивание документов
- заполнение и просмотр отчетов
- отслеживание логистических операций
- размежение и подписка на мероприятия
- ...
В основном информация на портале отображается табличной форме или в виде списков. Страницы укомплектованы набором фильтров для поиска данных, ну и стандартными кнопками «добавить», «удалить», «сохранить», «скачать», «просмотреть»…
Вид «à la desktop» для портала видится мне примерно вот так.
Возникают вопросы:- Насколько удобен для пользователей такой интерфейс?
- Какие преимущества он имеет по сравнению со стандартным стилем отображения в вебе?
- Какие недостатки?
- Не испугает ли он пользователей, все-таки непривычно? :)
Скажем, если бы Вы попали на такой портал, какой бы была Ваша реакция?
понедельник, 1 июня 2009 г.
Брутфорс атака

Задача хорошо продуманной компьютерной системы - не дать пользователям создать пароль, который легко ломается. Например, Петя, 1234, pass.
Поетому, при тестировании нужно обратить внеимание на следующие моменты:
- не рекомендуется длина пароля меньше 8-ми символов;
- пароль должен содержать комбинацию букв, цифр и символов;
- должно быть ограничение на кол-во попыток аутентификации за промежуток времени (например, не более 4-х раз в течении 1 минуты);
- пароли должны храниться обязательно в зашифрованном виде;
- пароли не должны передаваться методом GET;
- при работе с важной информацией должна использоваться защищенная передача данных (https протокол).
пятница, 29 мая 2009 г.
Негативное тестирование

При выполнении негативного тестирования мы проверяем как ведет себя приложение, получая на вход неправильные данные (например, символы в поле, где ожидаются цифры) или в нестандартных ситуациях (например, если выключить принтер во время печати документа) .
Во многих ресурсах по тестированию, при описании последовательности выполнения видов тестирования, негативное тестирование отделяют в отдельную процедуру и ставят на 4-е место.
При этом приводится следующий план тестирования:
- Изучение документации (для того, чтобы понять что, собственно тестируем)
- Дымовое тестирование или Smoke testing (первый прогон программы, чтобы понять работает ли она вообще)
- Позитивное тестирование (для того, чтобы проверить работу программы при получении ею "правильных" входных данных)
- Негативное тестирование
А можем ли мы сказать что программа работает, если проверили ее реакцию только на правильные входные данные?
А главное, я вот представляю ситуацию. Сижу я тестирую формочку. Проверила все соответственно ТЗ, проверила как обрабатываются данные, которые ожидается, что пользователь будет вводить в поля (заметьте, ожидается совсем не значит, что так и будет) и тут же в моем тестерском уме возникает небезосновательное подозрение, что если ввести вот в это поле "0" - то произойдет что-то нехорошее :) И что? Я должна сказать себе "Нет. По плану у меня сейчас позитивное тестирование. Негативное на следующей неделе, вот тогда и проверю с нулем"?
По-моему, такой подход неправильный. Он не просто неправильный, он неэффективный.
Во-первых, проведение отдельно позитивного и негативного тестирования займет больше времени, чем если их совместить.
Во-вторых, есть риск, что негативное тестирование вообще не будет проведено или проведено кое-как в условиях страшного недостатка времени.
А в третих, это противоречит тестерскому мышлению. Ведь основная задача тестировщика - стараться проверить реакцию программы на все действия, которые с ней может совершить пользователь. И, поверьте, большинство этих действий не укладываются в критерии позитивного тестирования.
суббота, 28 марта 2009 г.
Самые важные качества тестировщика. Часть1.

Тестировщику важно иметь хорошо развитое не логическое, а, я бы сказала, антилогическое мышление. Тестировщик не должен думать стандартно, как все, типа: если А это Б, а Б это С, то А это С. Он должен смотреть шире и глубже, чем того требует логика. В тестируемых программах логически правильные пути содержат намного меньше ошибок, чем логически неправильные.
Столкнувшись с вышеприведенной задачкой, хороший тестировщик должен подумать примерно так: Если А это Б, а Б это С то
Чем еще может быть А, кроме как В?
Чем еще может быть В, кроме как С?
И вообще, что такое А, В и С?
Для тестировщика также очень важно уметь видеть, замечать и учитывать все возможные неточности, несоответствия, противоречия… Особенно это важно во время составления технического задания и обсуждения его с заказчиком.
Заказчики часто не могут (да и не должны) учесть все возможные варианты выполнения той или иной бизнес операции. А если задачу по разработке этой бизнес операции поставить в ТЗ так, что ее можно трактовать двузначно, то программист обязательно поймет и сделает не так, как это понимал и хотел заказчик. Поэтому тестировщику важно уметь выявить такие неоднозначные моменты еще на этапе составления ТЗ и согласовать с заказчиком.
Еще тестировщику важно иметь критическое мышление. Я бы сказала, что критическое мышление для тестировщика намного важнее, чем логическое. Перефразировав японскую мудрость, которая гласит «Во всем ищи красивое», получаем мудрость тестерскую – «Во всем ищи недостатки».
Приведу пример на себе. Если я получаю от программиста готовый функционал, тестирую его и не нахожу серьезных дефектов (несерьезных дефектов обычно достаточно и очень важно за этими несерьезными дефектами не забыть найти серьезные), я откладываю тестирование. Не прекращаю тестирование, не закрываю таск, даже если кажется что уже все перепробовала и все пути проверила. Я иду попить кофе, отвлечься… И потом, через некоторое время, возможно на второй день, опять сажусь тестировать этот функционал. И нахожу серьезные дефекты! Потому что всегда, повторюсь – ВСЕГДА в программе есть баги.
Конечно, логическое мышление тестировщику тоже не помешает, ведь ему ж тестировать программы, которые будут использовать люди думающие в большинстве своем логически.
Итак, важные качества, которыми должен обладать тестировщик это:
- антилогическое мышление – умение мыслить глубже, шире и не так как того требует логика.
- внимательность - умение замечать неточности и противоречия
- критическое мышление – умение во всем находить недостатки
- не помешает и наличие логического мышления
Это далеко не все важные для тестировщика качества. Продолжение читайте в следующих постах.
Тестирование стабильности (stability testing)

Причем, тут берется не максимальная нагрузка, а средняя (рабочая) нагрузка. И систему нагружают на протяжении длительного времени (я обычно ставлю на ночь, когда ухожу домой).
При проведении тестирования стабильности показатели времени выполнения операций для нас имеют второстепенное значение. Главная задача - выявить утечки памяти или другие проблемы, которые не позволяют системе стабильно работать.
Хотя показатели времени выполнения операций тоже могут пригодиться. Они могут показать степень деградации системы. Если после многочасового тестирования Ваша система не упала, но время выполнения операций постоянно увеличивалось, то это говорит о том, что проблемы все же есть, просто для полного падения системе не хватило времени. Нужно погрузить систему дольше.
Обьемное тестирование (volume testing)

Тут нас интересуют те же показатели, что и при тестировании производительности, тоесть в основном - время выполнения операций в зависимости от количества пользователей, только в этом случае мы проводим тестирование на большых обьемах данных.
В моей практике есть случай, когда система отчетности отлично работала на обьеме данных за пол года, но значительно хуже работала на уже даже годовых данных и совсем плохо работала на данных за 2 года.
Самые первые претенденты на обьемное тестирование, это те места, где выбираются большие обьемы данных из БД или выполняются сложные sql запросы для выборки данных. Хочу сказать что, если первые места более-менее очевидны (где много данных выводится, там много данных и выбирается из БД), то вторые - не всегда очевидные (вы можете увидеть пару строк, но для того чтобы эти пару строк показать программисту пришлось перерыть пол базы). Имея немного опыта в программировании и базах данных, а таже неотъемлемую для тестера интуицию можно постараться самостоятельно выявить в системе такие узкие места, но все же тут лучше обратиться за помощью к программистам, которые знают систему и все ее проблемные места изнутри.
Тоесть для проведения нагрузочного тестирования нужно:
Стрессовое тестирование (stress testing)

При проведении стрессового тестирования нас интересует:
как система восстанавливается после прекращения предельной нагрузки. Для этого, в течении короткого промежутка времени дают системе предельную нагрузку, после чего возвращают нормальную (рабочую) нагрузку. Конечно, предельную нагрузку нужно сначала выявить (если помните, это была цель тестирования производительности, описанного здесь). После прекращения предельной нагрузки, система должна постепенно вернуться в нормальное состояние (тоесть, мы должны увидеть нормальное (среднее) время отклика).
как долго система может работать на предельной нагрузке. Для этого дают системе предельную нагрузку и смотрят через какое время она свалится (или не свалится).
Примечание: предельная нагрузка - это не нагрузка при которой система сваливается, а нагрузка, при которой система еще остается работоспособной, но если ее немного увеличить - то сваливается.
Тестирование производительности (performance testing)
Например, в первые 20 мин моделируем одновременную работу 10 пользователей (10 пользователей выполняют операции с интервалом в 5 сек). Потом следующие 20 мин увеличиваем кол-во пользователей до 20, следующие 20 мин - увеличиваем до 50 и.т.д пока приложение не свалится или пока не начнет работать так медленно, что работой это не назовешь.
Примечание: кол-во пользователей и интервал зависит от тестируемой системы. Некоторым системам для нормальной работы достаточно поддерживать одновременную работу 10-ти пользователей, а некоторым - 10 тысяч пользователей.
Можно также изменять интервал выполнения операций.
Чем больше пользователей - тем больше нагрузка на систему.
С интервалом все наоборот, чем меньше интервал выполнения операций - тем больше нагрузка на систему.
При тестировании производительности нас интересует:
- изменение времени выполнения операций в зависимости от интенсивности операций (где интенвисность операций = кол-во пользователей * кол-во операций на единицу времени)
- определение границы приемлемой производительности (где приемлемая производительность - это либо четко прописанное в ТЗ среднее время отклика системы, либо такая скорость работы,когда уже с приложением нормально работать невозможно) Кстати, для разных операций приемлемая производительность может быть разной. Например, если пользователю приложения нужно выполнять операцию 10 раз в час - то выполняться она должна быстро и не раздражать пользователя вечным ожиданием. Если пользователю нужно выполнить операцию раз в неделю или даже раз в день (например, сформировать сложный отчет), то такая операция может выполняться и дольше. Пользователь в это время может заниматься другими делами или просто пойти выпить кофе.
- определение количества пользователей, которые могут одновременно работать с приложением
Введение в нагрузочное тестирование (load testing)
Количество пользователей и частота их действий зависит от цели, которую ставят перед тестированием и уже исходя из целей, нагрузочное тестирование разделяют на несколько видов:
- тестирование производительности (performance testing)
- стрессовое тестирование (stress testing)
- обьемное тестирование (volume testing)
- тестирование стабильности (stability testing)
Есть множество инстументов для проведения нагрузочного тестирования, с помощью которых можно смоделировать необходимую модель нагрузки на приложение, провести тестирование и получить результаты. Каждый выбирает инструменты под себя, и если погуглить, то можно найти, то что нужно именно Вам и именно для Ваших целей. Для себя я выбрала WAPT на примере которого и буду рассказывать о моделировании разных видов нагрузки для разных целей тестирования.В следующих постах я расскажу отдельно о каждом виде нагрузочного тестирования.
суббота, 21 марта 2009 г.
Указатель направления сортировки
На днях в нашем коллективе завязался спор по поводу стрелки, которая указывает направление сортировки столбика таблицы (также, вместо стрелок для указания сортировки часто используются треугольники).
Мнения разделились. Одни (в том числе и я) утверждают, что правильно, когда стрелка вниз или треугольник, направленный углом вниз должен показывать направление обратной сортировки
А стрелка вверх или треугольник углом вверх должен показывать направление прямой сортировки.
Другие, утверждают, что все наоборот. Тоесть, стрелка (треугольник) вниз должен показывать прямую сортировку, в вверх – обратную.
Исследовав несколько примеров ПО, мы увидели что встречаются оба случая указания сортировки. Например, в почтовике Microsoft Outlook треугольник углом вниз указывает на обратное направление сортировки, а углом вверх – на прямое. А вот в почтовике The Bat! Все с точностью, до наоборот.
Получается, что в нашем споре победителя не оказалось. Интересно, правда, было бы узнать побольше мнений. Сколько людей считают правильным первый случай (треугольник носом вниз – это обратное направление сортировки)? Сколько людей считают правильным второй случай (треугольник носом вниз – это прямое направление сортировки)?
Ответы пишите в комменты.


