понедельник, 27 декабря 2010 г.

С Новым Годом и Рождеством!

Доброго всем времени суток!

Когда-то очень давно я вычитал старое пожелание: "Чтоб ты жил в интересное время". Самое интересное в нем то, что смысл и посыл этого пожелания воспринимается в зависимости от состояния того, кому оно адресовано: уставший от событий человек услышит в нем проклятие, человек же, уставший от монотонности, - благословение... Хотя о чем это я, если бы вы не хотели чего-то нового, о чем-то узнать, чем-то поделиться, что-то новое почитать, наконец, - врядли бы я Вас здесь увидел :) Спасибо Вам за посещение этой страницы, если бы я не видел Вас в статистике блога, врядли бы я его продолжал. Так что, это даже не совсем мой блог :)

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

Со своей же стороны могу пообещать, что здесь и дальше будут появляться посты, связанные с разными аспектами тестирования, в основном об автоматизации, но не только. В частности, следующий пост я хочу посвятить особенностям и превратностям жития тестировщиков в Agile. А потом снова вернусь к UIAutomation, причем начну с обзора плюсов и минусов продукта, а продолжу тем, как эти самые минусы мы обходили или устраняли. Надеюсь, будет интересно.

С наступающим Новым Годом и Рождеством!

воскресенье, 12 декабря 2010 г.

Там на неведомых дорожках. FoneMonkey.

Наконец добрался до поста про FoneMonkey. Собирался уже давно, но то отвлекался на пожелания для разработчиков инструментов, то на конференцию катался (кстати о конференции SQA Days-8 я еще планирую рассказать отдельно), то на работе всякое-разное сваливалось в больших количествах...

В общем, хоть и с большим перерывом, - FoneMonkey. Скажу сразу, инструмент мне понравился. Наши с ним пути пересеклись в начале июня сего года, когда я искал подходящую штуковину для автоматизации под iOS (немножко о том, чего именно хотелось и из-за чего затевалось, можно прочитать в моем первом посте). Чтобы было более понятно, чем именно он мне понравился и почему, несмотря на это, я его все же не стал использовать, я построю рассказ на перечислении его достоинств и недостатков, а заодно упомяну некоторые политические моменты, которые всегда присутствуют при выборе инструмента.

Итак, какие же у этой штуковины достоинства? А вот какие:
  • Инструмент бесплатный и открытый (GPL v. 3). Тут палка о двух концах, но если учесть наличие неплохой документации, что обычно является слабым местом open-source инструментов, то возможность посмотреть, как оно работает, плюс подшаманить, где надо, - несомненный плюс.
  • Наличие документации, и даже полезной. Собственно говоря, мы уже об этом упомянули, но я думаю, что хорошее не грех и повторить :) Кстати, разработчики довольно бодро откликались на возникшие вопросы, правда сейчас, говорят, прыти у них поубавилось. Может быть потому, что они за поддержку начали деньги брать, - видать решили, что раскрутился уже инструмент.
  • Возможность работы как с симулятором, так и с реальным девайсом, - iPhone и iPad. Кстати, чтобы оно таки заработало на симуляторе, надо включить поддержку Accessibility. Это верно для всех (по крайней мере, известных мне) инструментов под iOS. Суть в том, что Accessibility Framework используется для доступа к элементам интерфейса всеми найденными тулами, что и не удивительно, зная историю использования этого фреймворка.
  • Возможность записи действий пользователя. Немножко коряво, но работает. Почему коряво? А потому, что получившийся в результате "скрипт" записывается не в виде кода, а как последовательность шаблонных операций. Это сложно объяснить, это надо видеть. Этот список заготовок можно даже редактировать, но из-за такого подхода к записи действий пользователя полезность такого функционала под большим вопросом. Но то, что он есть, - уже приятно. Надо сказать, остальные тулы не имеют и того.
  • Инструмент честно работает с объектами пользовательского интерфейса, а не просто с их координатами. Это очень большой плюс, кто переписывал скрипты из-за изменения расположения элементов - поймет. Идентифицирует инструмент эти самые элементы с помощью так называемых Accessibility Labels - это специальные тестовые свойства, используемые в Accessibility Framework'e. Если свойство не задано явно (обязательно расскажу про способы это сделать, но попозже, - в одном из постов про UIAutomation), то будет автоматически сгенерировано из имени типа объекта и численного идентификатора, - суть номера элемента в родительском контейнере.
  • Есть возможность писать настоящие скрипты, правда либо в виде массива строк-команд (по сути - текстовое представление уже упоминавшихся команд-заготовок, которые получаются при рекординге), либо на Objective-C. В последнем случае придется использовать связку FoneMonkey + OCUnit. OCUnit (также известный как SentTestKit) это инструмент для юнит-тестинга, прямой родственник таких инструментов, как SUnit, JUnit, NUnit и прочих букво-юнитов. Кому интересно, подробнее про то, как OCUnit использовать по прямому назначению, можно посмотреть тут. Если же использовать его вместе с FM, можно писать настоящие скрипты для пользовательского интерфейса, вкрутить запуск тестов в билд и даже использовать получившиеся тесты в Continuous Integration билдах. Правда запускаться такие тесты будут только в headless-режиме, т.е. их выполнения вы не увидите, что сильно мешает отладке в случае чего. Инструкция по созданию симбиоза FM и OCUnit есть на сайте GorillaLogic (это фирма-разработчик, если кто не понял) - а вот и ссылка.
  • API, написанный все на том же Objective-C, можно (и нужно) расширять. У нас например просто прорва кастомных компонент, с которыми оно не будет работать без дополнительного шаманства.
  • Несколько сомнительное, но все же достоинство: FoneMonkey умеет работать с приложениями, написанными на iPhone OS, так называлась iOS до июня 2010, т.е. до версии 4. До входа четвертой версии iOS у FoneMonkey фактически не было конкурентов, - Apple еще не разродилась своей UIAutomation (вышла она как раз в связке с iOS 4) и единственным более-менее конкурентоспособным продуктом на тот момент был UISpec, но, по моему мнению, он все же сильно проигрывал обезьянке.
В общем достоинств много, перейдем к недостаткам:
  • Прозвучит странно, но последнее упомянутое мною достоинство продукта сыграло с ним злую шутку. FoneMonkey использовала так называемый private API из iPhone OS и с выходом iOS 4.0 Apple с этим API поступила очень вольно - соответствующий код был чуть ли не полностью переписан. Соответственно, FoneMonkey перестал работать напрочь. Когда я пытался выяснить у разработчиков когда, ну когда же FM перезаточат под новую ось, внятного ответа я так и не получил, но понял, что нескоро (можно даже посмотреть, мои вопросы - они остались у них на форуме под текущим же моим ником). Надо сказать, что на данный момент они вроде как выпустили версию для 4.x, но это уже прошло практически вне моего внимания, ибо ждать столько (а ждать, как оказалось, надо было бы до 13 ноября - полгода!) я не мог. Именно по этой причине я и отказался от использования этого инструмента.
  • Скрипты таки придется писать на Objective-C, который знаком совсем не каждому, а при первом знакомстве просто полностью сносит мозг и изменяет сознание. Уверяю, работать с объектами и методами вам крайне понравится Да я помню, что я говорил о еще одном способе писать скрипты, но мне он крайне не нравится ибо, во-первых, он не позволяет использовать и трети функционала и API инструмента, а во-вторых, писать скрипт в виде массива строк, которые суть команды, - это, пардон, полное извращение.
  • Использовать в реальных условиях "скрипт", созданный с помощью рекордера, невозможно. И даже не потому, что это те же команды в графическом воплощении, а потому, что перенести его на другой девайс мне не получилось. Вот не получилось, - и все! И никакие хелпы и поддержка не помогли (поддержка вовсе отмолчалась в ответ на этот вопрос).
  • Для того, чтобы подружить FoneMonkey и ваше родное приложение, придется добавлять к нему две дополнительные библиотечки и пересобирать. Тут две проблемки. Первая заключается в том, что тестирование вашего приложения, это совсем не то же самое, что тестирование вашего же приложения с каким-то добавленным кодом, про который вы ничего не знаете. Собственно, не мне рассказывать что два полностью исправных и оттестированных компонента могут вытворять очень неприятные коленца при интеграции. Вторая проблема заключена в том, что вам придется иметь две версии продукта, одну "чистую", вторую - с указанными библиотеками, и быть очень осторожными. В принципе, это не страшно, решаемо созданием дополнительного таргета в проекте, но все таки. Помните, я говорил о приватном коде? А знаете, как Apple относится к приложениям с использованием приватного кода - она их очень не любит, в частности не допускает к продаже через AppStore, а это больший кусок рынка. Так что думайте сами.
Но все это несущественно, даже с этими недостатками инструмент был очень хорош. Но всего два критерия сделали его неудобоваримым. Первый - невозможность, на тот момент работать с последней платформой, а ведь мы на нее очень быстро перешли, - я оглянуться не успел, а уже все, iOS 4. И, что важнее, второй - насколько долго тянулся процесс адаптации к новой оси. Ведь если посмотреть с какой скоростью Apple клепает обновления iOS, становится понятно, что GorillaLogic просто не будет за ними успевать, а это означает непокрытый функционал, сваленные без причины тесты, увеличение ошибок в инструменте, ибо если разработчики начинают кого-то там догонять, от них обиженно убегает качество, и т.д и т.п. Плюс, наконец, хочется таки работать, а не ждать с моря погоды. Так что не знаю кому как, для меня этот инструмент не подходит - я не настолько терпелив.

В общем, вот таким получился обзор этого инструмента. Не знаю, что будет дальше, но я к нему возвращаться не планирую, даже если все указанные огрехи и проблемы будут решены - слишком много сделано в другом направлении. Но если кому-то будет полезно вышеизложенное, - буду только рад. За сим прощаюсь до следующего поста.