понедельник, ноября 30, 2009

SPMGuild: бесплатный вебинар по Lean, 4 декабря

4-го декабря с 13:00 до 14:30 (по московскому времени) под эгидой “Гильдии менеджеров программных проектов”, aka SPMGuild, пройдёт бесплатный вебинар с коротким и ёмким названием “Lean”.

Выступать будет Сурен Самарчян, руководитель  департамента управления проектами компании Innova Systems.

Записаться можно тут: https://www2.gotomeeting.com/register/176042747 .

Ниже -- официальный анонс.

Гильдия менеджеров программных проектов (www.spmguild.org) приглашает Вас 4-ого декабря в 13:00 принять участие в вебинаре на тему «Лин» - подходу к организации  работы, используемому такими компаниями как Toyota, Boeing, Intel и другими мировыми лидерами в своих отраслях. В России на Лин недавно начали переходить такие гиганты как «Сухой», «Камаз», «Сбербанк» и другие. Более того, эти компании не просто используют данный подход, а считают его одним из нескольких ключевых элементов своей стратегии. В софтверной индустрии Лин подходы используют Google, Nokia, Yahoo, British Telecom, IBM, Microsoft и многие другие.

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

1. Основные принципы Лин

2. Какие компании используют Лин и какие результаты были получены

3. Стандартные классы потерь

4. Канбан

5. Картирование потока добавления ценности для пользователя

6. Переработки, вариабельность и их влияние на скорость выпуска продуктов

7. Лин для разработки инновационных продуктов

8. С чего начать при внедрении Лин

Это первый из серии вебинаров, которые подготавливаются для вас Гильдией менеджеров программных  проектов. Темы вебинаров были выбраны на основе анализа наиболее частых причин неудач менеджеров и директоров софтверных компаний. Ждем Ваших пожеланий и комментариев по выбору тем вебинаров.

понедельник, ноября 23, 2009

Подробная программа тренинга "Программирование для тестировщиков"

3 декабря мы запускаем онлайн-тренинг "Программирование для тестировщиков" (анонс и условия участия по ссылке), в рамках которого мы будем учить тестировщиков программировать. Не просто использовать запись тестов в стиле catch-n-replay с последующей незначительной ручной доработкой, а создавать по настоящему хорошие автоматизированные тесты. Во-первых, хорошие с архитектурной точки зрения, которые легко изменять и добавлять новые. Во-вторых, хорошие с точки зрения читаемости, так чтобы посмотрев на код теста можно было легко понять, что он проверяет. В-третьих, хорошие с точки зрения возможности выполнять сложные проверки правильности результатов, даже если для этого требуется заглянуть в базу данных или проанализировать лог-файлы.

Весь изучаемый материал будет демонстрироваться на одном сквозном примере -- мы будем разрабатывать на языке Java автоматизированные тесты для веб-приложения, используя драйвер Selenium RC. И с каждым занятием мы будем писать всё более и более сложные тесты, добавляя в свой арсенал новые возможности как для управления тестируемой системой и её окружением, так и для выполнения проверок различного рода. Кроме того, мы будем не только учиться делать автоматизированные тесты, но также разрабатывать вспомогательные программы -- генераторы данных, анализаторы содержимого файлов, эмуляторы.
Мы не будем изобретать велосипед. К настоящему моменту в мире существует огромное количество уже готовых компонентов и библиотек, которыми можно воспользоваться для решения типичных задач. Поэтому программисту в наши дни требуется не только и не столько умение кодировать алгоритмы, сколько умение проектировать программу из готовых компонентов. Автоматизация тестирования не является исключением из этого правила. Поэтому мы будем делать основной упор не на алгоритмы, а на изучение различных полезных библиотек и фреймворков. Кроме того, мы будем параллельно рассматривать различные шаблоны проектирования, позволяющие организовать код автоматизированных тестов таким образом, чтобы его было легко модифицировать и расширять.

Подробная программа тренинга "Программирование для тестировщиков"

1. Основы программирования: структуризация кода.

Мы не станем пытаться брать крепость программирования "лобовой атакой", последовательно изучая типы данных, операторы и конструкции языка. Вместо этого мы зайдём "с тыла", начав понимание основ программирования с изучения тех тестов, которые генерируются инструментами catch-n-replay. Это может показаться странным, потому что я часто повторяю, что эти инструменты создают плохие тесты, и вдруг я выбрал их как пример для изучения. Да, именно по этой причине и выбрал. Эти тесты слишком примитивны, чтобы быть пригодными к использованию в реальной жизни, но как учебные примеры они достаточно хороши -- они крайне просты по своему устройству, но несмотря на это являются готовыми к выполнению тестами. Кроме того, эти тесты уже используют специальный фреймворк для запуска тестов, который нам также предстоит освоить в рамках тренинга.
Сначала мы изучим возможности языка Java по структуризации кода -- пакеты и классы, методы и данные, а также посмотрим на то, как среда разработки позволяет манипулировать этой структурой кода. Затем поговорим о том, как тестовый фреймворк накладывает на код дополнительную структуру, выделяя специальные методы для работы с тестовым окружением, которые в нужный момент автоматически выполняются, чтобы выполнить инициализацию и зачистку.

2. Основы программирования: управление потоком выполнения кода.

Разобравшись с правилами структуризации кода, мы конечно же заглянем внутрь отдельных методов и изучим две основных конструкции для управления потоком выполнения кода -- ветвление и зацикливание. А также специальную конструкцию аварийного выхода -- выброс и перехват исключений. Это три кита, на которых стоит практически всё управление ходом выполнения программ, в том числе и автоматизированных тестов.
Мы рассмотрим, как использовать ветвления в тестах для повышения их "интеллектуальности", так чтобы тесты могли вести себя по разному в зависимости от ситуации. Мы научимся перехватывать исключения, приходящие от тестируемой системы (или драйвера пользовательского интерфейса), и соответствующим образом реагировать на возникшие проблемы. Мы освоим использование циклов для создания генераторов тестовых данных, в том числе динамических генераторов, автоматически создающих данные в процессе выполнения тестов.

3. Работа с контейнерами, предназначенными для хранения наборов данных: множествами, списками, ассоциативными массивами.

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

4. Работа со строками -- анализ строк, проверка соответствия образцу, регулярные выражения.

Текст -- один из наиболее распространённых форматов представления информации, особенно для веб-приложений. Текстовые данные вводятся в поля форм, в виде текста выдаются результаты работы приложения или сообщения об ошибках. Поэтому умение работать с текстовыми строками является непременным условием для тестировщика-автоматизатора. И наиболее сложной задачей является анализ содержимого текстовых строк, чтобы проверить, правильный ли результат выдало приложение или верно ли оно сообщило об ошибке.
Разумеется, с текстовой информацией приходится много работать не только тестировщикам, поэтому эту область можно считать хорошо "культивированной". Для анализа строк имеются как простые средства, типа проверки вхождения подстроки в строку, так и потрясающей мощности регулярные выражения, позволяющие сформулировать весьма сложные описания формата, на соответствие которому нужно проверить текст.
Тестировщикам, использующим Selenium RC, нужно особенно хорошо уметь работать со строками. Дело в том, что характерной особенностью Selenium RC, отличающей его от других драйверов веб-интерфейса, является то, что большинство обмена данными с браузером производится в виде строк. Это определяется особенностями архитектуры Selenium RC -- тесты отправляют через сервер текстовые команды браузеру, и получают ответ также в виде текста. Поэтому при использовании других драйверов веб-интеферйса тестировщик в равной мере работает как с коллекциями объектов (элементов пользовательского интерфейса), так и со строками, а при работе с Selenium RC работа ведётся преимущественно с текстом.

5. Автоматизация управления веб-приложением через браузер.

Несмотря на то, что в этом тренинге мы с самого начала и до конца будем заниматься автоматизацией работы с веб-приложением через браузер, это занятие особое. Это "экватор" тренинга, и к этому моменту у нас будет уже достаточно знаний и умений, чтобы поговорить не только о низкоуровневом кодировании (типа анализа строк), но о проектировании тестов, о хороших и плохих архитектурных решениях. Фактически мы вернёмся к самому началу, к обсуждению структуризации кода, но уже на качественно новом уровне.

6. Автоматизация Java GUI.

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

7. Работа с файлами -- чтение и запись данных из файла и в файл, анализ содержимого директорий.

Многие приложения читают или пишут файлы. В конфигурационных файлах хранятся различные настройки. В файлы журнализации сбрасываются сообщения об ошибках и иная служебная информация. Файлами приложения обмениваются между собой, передавая таким образом информацию. В файлы записывается информация с целью её хранения и использования впоследствии. И конечно же при тестировании нужно создавать файлы, которые приложение читает, а также проверять корректность содержимого файлов, созданных приложением.
Нам нужно научиться читать и писать файлы различного формата. Для работы с содержимым текстовых файлов нам пригодятся изученные ранее приёмы работы со строками. Для работы с более сложными форматами (MS Office, PDF, ZIP и т.д.) существуют специальные библиотеки, которыми мы тоже научимся пользоваться.

8. Работа с базами данных.

Подавляющее большинство многопользовательских приложений (к которым относятся и веб-приложения), а также многие однопользовательские приложения, используют базы данных для хранения информации. Когда пользователь вводит какую-то информацию через интерфейс приложения, она после некоторой обработки попадает в базу данных и хранится там до тех пор, пока она не потребуется для работы того же самого или или какого-то иного приложения. При тестировании часто бывает удобно проверить, правильно ли сохранилась информация в базе данных. Поэтому многие тестировщики, даже не умея программировать, достаточно хорошо владеют языком запросов к базе данных SQL.
Сначала мы научимся пользоваться технологией доступа к базам данных JDBC, которая позволяет выполнять привычные SQL-запросы и анализировать полученный ответ как таблицу. Затем мы освоим более современную технологию объектно-реляционных преобразований Java Persistence, позволяющую практически полностью забыть про язык запросов SQL, а вместо него использовать более высокоуровневый и не зависящий от конкретной базы данных язык запросов. Наконец, мы научимся пользоваться инструментами, которые позволяют сохранять и сравнивать снимки (снапшоты) базы данных.

9. Работа с почтой -- сервер James и клиент Java Mail.

10. Сетевое программирование -- HTTP, FTP и другие протоколы прикладного уровня.

Последние два занятия будут посвящены рассмотрению особенностей тестирования распределённых приложений и вопросам автоматизации интеграционного тестирования.
Помимо того, что приложения читают и пишут файлы, а также работают с базами данных, они ещё и взаимодействуют между собой. Поэтому при тестировании постоянно приходится решать задачу создания такого окружения для тестируемого приложения, которое либо эмулирует поведение сторонних систем, либо содержит специальные тестовые версии таких систем. Двигаясь по первому пути мы приходим к необходимости разработки специальных приложений-эмуляторов. Второй путь ставит перед нами задачу разработки таких автоматизированных тестов, которые способны управлять не только тестируемым приложением, но и рядом вспомогательных систем.
Для веб-приложений характерным случаем является использование электронной почты -- отправка ссылки для подтверждения регистрации, восстановление пароля, оповещения о каких-либо событиях. Для тестирования такого рода функциональности мы научимся работать с почтовым сервером из автоматизированных тестов: принимать и отправлять почту, анализировать содержимое почтовых сообщений. Одновременно с этим будут рассмотрены шаблоны проектирования тестов для распределённых систем.
Мы научимся из автоматизированных тестов получать файлы с тестового стенда или загружать их туда по протоколу FTP, это позволит проверять функциональность загрузки файлов на сервер через веб-приложение. Мы научимся формировать и отправлять произвольные HTTP-запросы, а не только такие, которые можно отправить через браузер, это позволит разрабатывать тесты для проверки надёжности и устойчивости приложений. Выйдя за пределы автоматизации только через пользовательский интерфейс путём эмуляции действий пользователя в браузере, мы научимся создавать комплексные тесты, проверяющие интеграцию нескольких систем.
Ну и конечно же эти два последних занятия будут сопровождаться наиболее сложными самостоятельными заданиями, поэтому в конце тренинга мы будем больше внимания уделять уже не столько изучению нового материала, сколько повторению уже пройденного, закреплению приобретённых навыков, разбору типичных ошибок, улучшению стиля программирования.

вторник, ноября 03, 2009

Онлайн-тренинг "Программирование для тестировщиков"

Бытует мнение, что тестировщикам вредно уметь программировать. Якобы это умение мешает им потому, что из-за него они слишком много думают о реализации программы и слишком мало о том, как же её протестировать.
Определённый смысл в этом есть, возможно для кого-то умение программировать действительно служит отвлекающим фактором. Но если вы умеете бороться с искушениями, тогда этот навык может оказаться весьма полезным, потому что он даёт возможность переложить часть своей работы на компьютер.
Да, имеется в виду автоматизацию тестирования. Но под автоматизацией подразумевается не только написание скриптов, которые эмулируют взаимодействие пользователя с графическим интерфейсом программы. Помимо этих скриптов можно автоматизировать генерацию тестовых данных, проверку содержимого базы данных, развёртывание и настройку тестового окружения, проверку отсутствия сообщения об ошибках в лог-файлах, генерацию отчётов, и многое-многое другое.
Сложно ли научиться программировать? Вероятно, бывают люди, для которых алгоритмический стиль мышления абсолютно неприемлем. Но большинство айтишников по крайней мере на интуитивном уровне уже обладают алгоритмическим мышлением. Многие тест-дизайнеры пишут весьма подробные инструкции для ручного тестирования, это почти готовые программы, но предназначенные для "биороботов". Осталось сделать один небольшой шаг и научиться управлять настоящими роботами-компьютерами.
Разучитесь ли вы тестировать, научившись программировать? Вовсе нет, существующие навыки тестировщика от вас никуда не денутся. Но в дополнение к ним в ваших руках появится ещё один инструмент, и весьма мощный. Разумеется, владение навыками программирования не означает, что их нужно применять здесь и там без разбора, стремясь автоматизировать всё подряд. Силу нужно держать под контролем и применять её лишь там, где её применение обосновано. Для этого нужно хорошо овладеть силой, чтобы она подчинялась вам, чтобы это был привычный инструмент с понятными принципами работы, а не магический артефакт, управляемый загадочными заклинаниями.

Ну что ж, довольно слов, пора перейти к делу.

Как и всякий навык, умение программировать нужно тренировать и закреплять. Недостаточно просто прочитать книжку и выучить набор команд. Знать ещё не значит уметь. Поэтому тренинг "Программирование для тестировщиков" будет содержать как теоретические сессии, так и практические задания для самостоятельного выполнения.

Программа курса

В этом курсе мы будем учиться программировать на языке Java.

Первые два занятия посвящены основам программирования. Вы учили это в школе и вузе, но если всё благополучно забылось, придётся вспомнить.
1.2. Основы программирования.
На остальных занятиях будет рассмотрен ряд задач, с которыми часто приходится сталкиваться тестировщикам в реальной жизни, и будет рассказано, как средствами программирования эти задачи решаются. Мы не станем углубляться в изучение различий между парадигмами программирования и в тонкости использования тех или иных конструкций. Всё это придёт потом. А пока мы просто научимся решать конкретные практические задачи.
3. Работа со строками -- анализ строк, проверка соответствия образцу, регулярные выражения.
4. Работа с контейнерами, предназначенными для хранения наборов данных: множествами, списками, ассоциативными массивами.
5. Работа с файлами -- чтение и запись данных из файла и в файл, анализ содержимого директорий.
6. Автоматизация браузера с использованием инструментов Selenium и WebDriver.
7. Автоматизация Java GUI с использованием Jemmy.
8. Работа с базами данных -- JDBC и Java Persistence.
9. Работа с почтой -- сервер James и клиент Java Mail.
10. Сетевое программирование -- HTTP, FTP и другие протоколы прикладного уровня.

Формат курса

Онлайн-тренинг продолжительностью примерно два с половиной месяца (10 занятий), с еженедельными онлайн-занятиями и практическими домашними заданиями.
Онлайн-занятия состоятся каждый четверг, начиная с 3 декабря с 19.00 до 20.30 за исключением 31 декабря и 7 января :-).

Кроме того, каждый вторник с 18.00 до 18.30 тренер Алексей Баранцев будет ждать в скайпе вопросы участников курса, которым необходима помощь в выполнении домашнего задания.
Каждый участник курса будет получать обратную связь от тренера по результатам выполнения домашнего задания.
Наиболее типичные ошибки будут разбираться на онлайн-занятиях.

В случае, если Вы пропустите какое-либо занятие, Вы получите его запись и домашнее задание.

Технические требования

Все семинары будут организованы с использованием системы DimDim (http://www.dimdim.com).

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

Для участия Вам не нужно устанавливать никакого специального программного обеспечения, требуется только браузер c плагином Adobe Flash Player и достаточно быстрое Интернет-соединение.
Проверить пропускную способность своего соединения можно здесь: http://www.dimdim.com/support/dimdim_tools.html (слева инструмент Bandwidth Checker).
Необходимы наушники или другая акустическая система, чтобы слушать ведущего. Микрофон не требуется, вопросы можно будет задавать письменно в чате.
В случае возможных технических сбоев с ведущим можно будет связаться через систему Skype.

Узнать условия участия: http://www.software-testing.ru/events/834-programming-for-testers