В последнее время в России появляется все больше и больше приложений для мобильных телефонов, написанных серьезными компаниями. Конечно же, не стоит в стороне и Яндекс, предлагающий своим пользователям целый веер мобильных приложений для различных платформ. А если есть программисты, пишущие приложения, то должны быть и тестировщики этих приложений. В Яндексе, например, существует целый отдел тестирования мобильных приложений. А меж тем, видя в условиях вакансии «тестирование мобильных приложений», многие закрывают ее, не вчитывась: кому-то кажется неинтересным ограничиваться несложными программами для телефонов, а кому-то страшно пробовать что-то настолько новое. И совершенно зря: мобильное ПО не менее интересно в тестировании, чем обычное, а новая предметная область – это всего лишь новая предметная область. Хотя в ней, конечно же, есть свои подводные камни.
Казалось бы, ничего кардинально отличающегося в работе тестировщиков десктопных и мобильных приложений быть не должно: вот тебе программа, вот тебе требования – сиди и тестируй. Но не тут-то было. Простая настройка интернета на каком-нибудь Sony Ericsson или, не дай Бог, Blackberry может оказаться для новичка настоящим квестом. Рискну проанализировать те особенности тестирования мобильного ПО, с которыми так или иначе придется столкнуться любому тестировщику, решившему перейти от десктопов к мобильникам. Для удобства и простоты изложения буду называть далее смартофоны и коммуникаторы – телефонами.
Итак, что стоит иметь в виду, берясь за тестирование мобильного ПО:
1. Множество платформ: Windows Mobile, Symbian, iOS, Blackberry, Android, Bada, Linux, Maemo, старые добрые java-мобильники... и у каждой платформы множество версий, и на каждой платформе работают разные телефоны (каждый со своей хитрой прошивкой), и даже если у вас есть два одинаковых телефона – у них могут быть разные версии прошивки или разные особенности «железа» (скажем, если одна и та же модель была выпущена дважды с разницей в год, и оба телефона были прошиты одинаково – это не гарантирует их одинакового поведения в работе). Сложность конфигурационного тестирования по сравнению с десктопами поражает воображение – и количественно, и качественно.
2. Баги сложнее локализовать. Представьте себе – использовать дебаггер как правило невозможно, так что отлов «случайного» бага может занять куда больше времени, чем кажется на первый взгляд. К тому же, телефоны имеют свойство «глючить» независимо от ваших действий. И если баг повторяется только на одной конкретной модели телефона – то остается лишь надеяться, что он повторится на аналогичном телефоне у программиста. Или что программист сумеет понять по коду, что здесь может пойти не так. Потому что – сюрприз! – второго точно такого же телефона в тестовом стенде у вас, скорее всего, нет.
3. Следует уделять повышенное внимание юзабилити. Мобильники – это то, что часто используется на ходу, в не слишком подходящих для того местах. У пользователя не всегда есть возможность задействовать обе руки на управление программой. К тому же, у любого телефона экран ощутимо меньше, чем у самого маленького монитора. Если приложение будет неудобным в использовании, то вряд ли пользователи станут тратить на него свое время и место в памяти своего телефона.
4. Ваше официальное рабочее место выглядит особенно забавно. :-) Куча проводов, телефонов, зарядок, USB-хабов, GPS-навигаторов, сим-карт, переходников... уф! Вставай осторожнее, товарищ тестер, иначе все это богатство улетит вместе с тобой.
5. Зато неофициальным рабочим местом может стать что угодно. Конечно, Яндексу вообще в этом плане свойственна мобильность: ноутбук и WiFi сеть по всем офисам позволяют работать хоть в коридоре. Но когда основной необходимый инструмент – мобильник, подвижность возрастает в разы. Тестировать можно где угодно, включая дом и общественный транспорт. Более того – стоит переместиться в новое место – как срабатывает ассоциативность мышления, и в голову начинают приходить свежие идеи. Очень удобно. :-)
6. Менее сложные алгоритмически приложения, более завязанные на конкретное железо. Выписываю это отдельно от конфигурационного тестирования (первый пункт), поскольку даже тестируя на одном единственном телефоне, следует помнить о зависимости поведения программы от этого самого железа: проверять реакцию на все клавиши, на принятие звонка или сообщения во время работы программы, на обрыв связи, на включение фотокамеры, и т.д. и т.п. в зависимости от конкретного телефона.
7. Сложность автоматизации тестирования. Конечно, можно писать юнит-тесты. Конечно, какие-то отдельные алгоритмические решения можно проверить на эмуляторе – и написать к эмулятору фреймворк для тестирования. Но в итоге привязанность к железу все равно вынудит перепроверить совершенно всю функциональность на настоящих телефонах – так что существенного сокращения рутинного тестирования такая автоматизация не принесет. А писать полноценные автотесты и запускать их непосредственно на телефонах либо невозможно, либо слишком трудозатратно, чтоб оно того стоило.
И все-таки, несмотря на все отличия, это то же старое доброе тестирование: забавные баги, тест-идеи и тесткейзы, расстановка приоритетов, споры с программистами, постоянные потоки информации и самое, пожалуй, главное – драйв.
понедельник, 5 июля 2010 г.
суббота, 6 марта 2010 г.
"...Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперед соответствующие указания, а потому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, прилагать все усилия для оправдания своего назначения..."
(с) циркуляр Морского технического комитета №15 от 29 ноября 1910 года
(с) циркуляр Морского технического комитета №15 от 29 ноября 1910 года
Философия JIT
Вообще, это подход к управлению чем-либо, то есть, штука достаточно универсальная.
JIT - Just In Time, вкратце может быть описана как "делать только то, что нужно, с наименьшими затратами". Минус перфекционизм и прочее метание понтов - сюда же. На фоне кризиса и необходимости постоянно повышать эффективность труда - штука крайне актуальная. Впору распечатывать и на стенку вешать.
JIT включает в себя:
- постоянное улучшение:
(с) переведено-пересказано с сайта Кэмбриджского Университета
JIT - Just In Time, вкратце может быть описана как "делать только то, что нужно, с наименьшими затратами". Минус перфекционизм и прочее метание понтов - сюда же. На фоне кризиса и необходимости постоянно повышать эффективность труда - штука крайне актуальная. Впору распечатывать и на стенку вешать.
JIT включает в себя:
- постоянное улучшение:
- уничтожаем все, что нам мешает - то есть, не добавляет ценности конечному результату
- настраиваем систему для обнаружения ошибок автоматом
- стремимся к простоте. Чем проще система - тем ее проще понять, тем ей проще управлять и тем меньше вероятность ошибки.
- подстраиваем процесс под продукт - сокращаем расходы на всяческие транспортные издержки (в широком смысле).
Другими словами: организуем рабочее место максимально эффективно для данного конкретного продукта. - контроль качества от истоков: каждый в команде следит за качеством собственной работы.
- предотвращаем ошибки всеми доступными способами
- предвидим потребности в инструментарии и следим за тем, чтоб всегда использовать все, необходимое для продуктивной работы.
- издержки перепроизводства (сиречь тот самый перфекционизм)
- издержки на время ожидания между разными фазами процесса
- издержки на транспортировку
- издержки на обработку
- издержки на инвентаризацию
- издержки на перемещение
- потери от дефектов в конечном продукте.
(с) переведено-пересказано с сайта Кэмбриджского Университета
Подписаться на:
Сообщения (Atom)