понедельник, 1 февраля 2016 г.

Типичный программист — Как вести себя на собеседованиях? Что там будут спрашивать? Как лучше готовиться?


Как вести себя на собеседованиях? Что там будут спрашивать? Как лучше готовиться?

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

Специально готовиться к собеседованиям, в ночь перед встречей перечитывая стопку книг, на мой взгляд, не имеет смысла. Все равно будут спрашивать не о том, что вы прочитали, готовясь к собеседованию. Что вы знаете, то знаете, что не знаете — то не знаете. Основные моменты, которые на собеседованиях HR-специалисту, техническому эксперту, руководителю важно оценить — насколько успешно вы сможете справиться с теми задачами и планами, под которые они ищут человека, насколько быстро и безболезненно вы сможете адаптироваться к работе и команде, какие могут быть риски и возможные проблемы при работе с вами. Соответственно, если обобщить, то разговоры будут о том, что вы умеете и знаете, какие ваши интересы и планы на будущее, насколько ваши взгляды на работу и жизнь, ваша культура общения, ваши планы и стремления совпадают с планами, культурой команды и компании.

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


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

Что касается вопросов на собеседовании… Про это мне сказать особо нечего. Я не спец по прохождению собеседований.

Как вести: не пытаться обмануть.
Спрашивать будут про практический опыт. Попросят решить бытовую задачу по программированию.

Приготовьтесь думать на интервью. Учтите, у вас нет опыта. Что, уже поработали на кафедре и сделали какой-то проект для преподавателя? Тогда вы меня не поняли. Повторю: у вас нет опыта! Все, что у вас есть сейчас — это живой, гибкий ум. Приготовьтесь демонстрировать именно его на собеседовании. Хотя, я немного сгущаю краски. Конечно, мы порадуемся, если вы с воодушевлением расскажете о тех проектах, над которыми вам уже удалось поработать, потому что это выгодным образом отделит вас от толпы, которая обладает нулевыми коммуникативными навыками и не способна рассказать ни о чем вообще.

И еще, будьте готовы показать весь английский язык, которым владеете. Потренируйтесь перед собеседованием с друзьями или родными в разговоре на любую, самую простую тему. Поверьте, английский язык необходим.

Помните, что любая работа — это контракт двух сторон. Также как работодатель выбирает себе сотрудника, вы выбираете работодателя. Если собеседование напоминает экзамен, откажитесь от этой позиции, там будет грустно работать. Не нужно «готовиться» к собеседованию, нужно честно рассказать о себе как о человеке, а ваши профессиональные достижения продемонстрирует гитхаб.

Собеседование во многих IT компаниях — это обычная беседа. Да, есть такие места, где собеседования крайне формальны и их минимум три или четыре штуки, но если у вас есть выше озвученный вопрос, то в такую компанию вам рано.

Никогда не пытайтесь делать две вещи: выглядеть наигранно крутым и врать. И то, и другое очень быстро всплывает. Ведите себя непринужденно, как будто беседуете с другом, показывайте свои сильные стороны, признавайте слабые и рассказывайте о том как вы работаете над их развитием.

Понимайте, что уровень Junior—Middle не подразумевает то, что вы должны знать всё, от вас ожидают лишь светлой головы, адекватности и готовности обучаться. Будьте дружелюбны, быстро отвечайте, не тяните время, если не знаете ответ, и стройте логическую цепочку, даже если в итоге она будет ошибочна — важно показать что вы умеете думать в тот момент, когда вам дадут задачу которую вы раньше не решали.

Отдельным моментом является резюме. Это важно тем, что все смотрят на ваше резюме прежде, чем позвать вас на собеседование. Будьте готовы к тому, что вас спросят про все пункты, что вы указали в документе, и если вы сказали, что знаете Memcached, то вас спросят, как он работает. А если сказали что умеете работать по SCRUM, то вас попросят описать методологию.

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

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

На собеседовании ведите себя открыто и доброжелательно и не ищите в вопросах подвох: его там, как правило, нет. Подробно и честно отвечайте на все вопросы, внятно рассказывайте о своем опыте. Не стесняйтесь задавать свои вопросы: о компании, вакансии и особенностях работы. Это важно: соискатель, у которого вопросов нет, выглядит как минимум незаинтересованным.

Перед встречей обязательно хорошо выспитесь! Опрятный внешний вид обязателен. Заранее посмотрите схему проезда и контактное лицо, если опаздываете — предупредите.

Диапазон вопросов может быть очень широким: от темы дипломной работы до хобби и увлечений. Вам могут предложить технический тест или пару нестандартных задач на логику. Если предстоит сугубо техническое интервью, большинство вопросов будет именно такого характера.

Когда человек приходит на собеседование, то за его плечами уже есть годы работы, или, как минимум, годы учёбы. По существу, именно это вы и собираетесь показать на собеседовании. Поэтому в тот момент, когда уже назначена дата собеседования, мне кажется, нет особого смысла пытаться прочитать тонны литературы, чтобы изучить что-то новое. С другой стороны, если есть какой-то вопрос, ответа на который вам не хватало для построения гармоничной картины мира, то есть смысл перед собеседованием восполнить этот пробел. Ещё советую перед собеседованием немного отдохнуть и выспаться — со свежей головой вы имеете намного больше шансов показать себя с лучшей стороны.

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

Также рекомендуем по теме:


Создаем юнит-тесты с phantomjs | Stepan Suvorov Blog


Создаем юнит-тесты с phantomjs

Для начала скажу что phantomjs – это совсем не библиотека для юнит-тестов, как вы могли подумать; phantomjs – это возможность работать с WebKit из консоли используя JavaScript и без браузера.

Интересно? Тогда идем под кат.


Сначала проверим как работает phantomjs.

Для установки скачиваем программу с официального сайта. Стоит отметить что есть версии для Windows, Mac и Linux. Я буду описывать вариант для Linux, для которого можно запускать приложение(начиная с версии 1.5) из консоли. В скачанном архиве оказалось всего 2 папки – исполняемый файл и примеры.

В "быстром старте" нам предлагают создать hello.js со следующим содержанием

console.log('Hello, world!');  phantom.exit();

и выполнить его:

phantomjs hello.js

Очень важно в конце выполнения вызывать phantom.exit();

Попробуем разобрать более сложные пример с загрузкой страницы и получением ее скриншота:

var page = require('webpage').create();  page.open('http://google.com', function () {      page.render('google.png');      phantom.exit();  });

После чего в текущей директории должен появится файл google.png, в котором будет снимок сайта.

Далее рассмотрим скрипт для определения времени загрузки страницы:

var page = require('webpage').create(),      t, address;    if (phantom.args.length === 0) {      console.log('Usage: loadspeed.js <some URL>');      phantom.exit();  }    t = Date.now();  address = phantom.args[0];  page.open(address, function (status) {      if (status !== 'success') {          console.log('FAIL to load the address');      } else {          t = Date.now() - t;          console.log('Loading time ' + t + ' msec');      }      phantom.exit();  });

Кстати в официальной документации в этом скрипте ошибка: зачем-то в if блоке стоит return. Чтобы запустить скрипт вторым параметром(после имени скрипта) ставим адрес сайта, который хотим проверить (обязательно с http://)

По умолчанию JavaScript код страницы, которую мы загружаем не выполняется, но мы это можем сделать в режиме песочницы через метод evaluate:

var page = require('webpage').create();  url = phantom.args[0];    page.onConsoleMessage = function (msg) {      console.log(msg);  };  page.open(url, function (status) {      var title = page.evaluate(function () {          //return document.title;          console.log(some_variable);      });      phantom.exit();  });

Также мы можем просматривать запрашиваемые/получаемые страницей ресурсы задав callback методы onResourceRequested и onResourceReceived:

page.onResourceRequested = function (request) {      console.log('Request ' + request.contentType + ' ' + request.url);  };  page.onResourceReceived = function (response) {      console.log('Receive ' + response.contentType + ' ' + response.url);  };

Request и responce – json объекты, в которые хранятся данные о запросе и ответе.

С основами phantomjs разобрались, теперь определим, как он нам может помочь в написании тестов.

Есть 2 подхода: основной и тот, который мы только что придумали для решения своей частной задачи. Основной заключается в том, чтобы запустить на выполнение юнит тест страничку в phantomjs, а потом считать с результирующей таблички данные и как-то их обработать. Этот подход хорошо разобран тут, тут и тут оф пример. Поэтому на нем не останавливаемся, а переходим к нашему изощренному: мы хотим проверить правильно ли были применены стили и изменения структуры к документу. Для этого мы делаем снимок экрана эталонного варианта, потом применяем стили к базовой страничке, опять делаем снимок и сравниваем полученные скрины.

Логика на стороне phantomjs выглядит следующим образом:

//массив тестов  var tests = [ "test1", "test2", "test3", "test4", "test5"];  var pages = [];  // в цикле по ним проходим  for(var i in tests ){      // получаем ссылку на тест      var url = host + '#!runtest/' + tests[i];      page = require('webpage').create()      pages.push(page);      // открываем-выполняем страницу теста      pages[i].open(url,          (function(testName, page){              return function(){                  setTimeout(function(){                       // по таймауту ренедерим страницу в png-base64                       // и сравниваем с эталонным значением                       equal(page[i].renderBase64('PNG'), expected[testName], testName + " - OK");                  }, 2000);              };          })(tests[i], pages[i])       );  }

попрошу обратить внимание так как мы используем цикл с внесением значений в callback-метод нам необходимо создать дополнительное замыкание для сохранения значений:

(function(testName, page){

Посмотрим как система покажет себя в бою…

понедельник, 25 января 2016 г.

Человек в ванной из жидкого стекла и другие видео недели

Человек в ванной из жидкого стекла и другие видео недели

Все мы вынуждены жить под тяжелым давлением. Удивительной мощи атмосферного столба мы, по счастью, не чувствуем, но на герметичные предметы с пониженным внутренним давлением он оказывает самое замечательное действие. Даже если это железнодорожная цистерна, вмещающая более 100 т воды, сделанная из довольно толстой стали и сама весящая больше 30 т. Просто разогрев воздух внутри и дождавшись, пока он охладится — при герметично закрытых люках давление будет падать, — ведущие программы Myth Busters сняли, как атмосфера сминает цистерну, словно жестяную банку из-под колы.

Кстати, о коле. «Самым сложным способом достать банку колы» назвал видеоблогер Berlagawesome свою машину. Бессмысленный, но эффектный механизм включает 175 отдельных эффектных, но бессмысленных шагов, которые занимают около трех минут — и лишь затем позволяют получить вожделенную банку. По словам автора, на создание этой машины Руба Голдберга у него ушло больше трех месяцев — было сделано 114 неудачных попыток, прежде чем все заработало. Трудно спорить: это, безусловно, один из сложнейших способов достать обычную банку газированного напитка.

С неменьшей пользой проводит время и немецкий спортсмен-экстремал Тим Нолль, который пытается объединить две замечательные вещи — байкерские BMX-трюки и модный паркур — в нечто вроде «велопаркура». Насколько можно судить, объединение прошло скорее в пользу BMX, с которым Тим вытворяет нечто действительно невообразимое. Впрочем, смотрите сами.

Ну а чемпионами в области полезных развлечений на этой неделе объявляются ведущие видеоблога Vat19.com. Взяв более 200 кг прозрачной «жвачки для рук» — вязкого кремнийорганического полимера, из которого изготавливают популярные игрушки Silly Putty, они заполнили ей ванну — и отправили добровольца искупаться в этой тягучей массе. «Как-то холодно, и тяжело дышать, давит на грудь», — отозвался он, погрузившись внутрь. Ну а чем это закончилось — смотрите в следующем ролике.

пятница, 8 января 2016 г.

Купив MacBook у официального поставщика, можно остаться без официальной гарантии Apple / Хабрахабр

Купив MacBook у официального поставщика, можно остаться без официальной гарантии Apple



Несколько дней назад я решил купить себе макбук. Вначале порыскал по Авито и понял, что б/у MacBook Air в хорошем состоянии будет стоить довольно дорого, а гарантий при этом никто никаких дать не может. Можно вспомнить хотя бы этот пост.

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

Открыв Яндекс.Маркет, я был довольно неприятно удивлен ценами, но, что поделать, курс доллара оставляет желать лучшего. Так как совсем уж полного доверия к Яндекс.Маркету у меня нет (он показал новый MacBook Air 13" 256gb, Early 2014 в Евросети за сумму 50 с чем-то тыс. рублей, а на деле сей девайс уже давно отсутствует в наличии), я решил порыскать, для верности, по сайтам в отдельности.

Каково же было мое удивление, когда я зашел на сайт MediaMarkt! Там, помимо списка макбуков с ценами, было несколько моделей без цен, но с припиской «Товар можно приобрести только в магазине MediaMarkt».



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

Так вот, MacBook Air 13" 256gb, Early 2014 обнаружился в магазине MediaMarkt МЕГА Белая Дача всего за 64999 руб!

Так что я позвонил в магазин, где мне сказали, что ноутбук последний, в наличии.
Я приехал в указанный магазин, где после часа поисков (про нерасторопность сотрудников этой сети магазинов можно писать отдельный пост, но сейчас не об этом) этот ноутбук таки откопали и согласились мне продать.
Правда, коробка была не запечатана, на что продавец сказал, что, наверное, ноутбук ранее был на витрине. Но так как состояние было явно новое, я возражать не стал. На всякий случай я уточнил, будет ли официальная годовая гарантия. Мне сказали, что да, разумеется будет.

Так что я сдавив жабу спокойно купил этот девайс.
Приехав же домой и вдоволь наигравшись с заморской техникой, я решил все-таки проверить гарантию. И тут меня ждало разочарование:


(Я понятия не имею, что за странные надписи на непонятном языке появились рядом с названием при проверке серийника. Сам ноутбук для России, код модели MD761RU/B)

Видимо, витринный образец уже активировали до этого. И поэтому Apple считает, что гарантия закончилась. Разумеется, я решил связаться с техподдержкой Apple и MediaMarkt, чтобы узнать, как же исправить эту проблему.

Общение с MediaMarkt

Я написал им запрос, в котором объяснил ситуацию. Меня попросили прислать номер покупки. Через день мне позвонил молодой человек из поддержки и заявил, что не стоит беспокоиться, их ни коим образом не волнует информация с сайта Apple, потому что ремонт в течение года их магазин делает самостоятельно, нужен только чек.
Тут стоит отметить, что на чеке, почему-то, отсутствует серийный номер моего ноутбука. Но мне сказали, что это не должно быть проблемой. Что ж, пока поверю.


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

Apple

На официальном сайте при проверке гарантии есть кнопка «Подтвердить дату покупки». Я перешел по ссылке и отправил в Apple запрос.
На следующий день мне пришло письмо с просьбой прислать фотографии чека, а еще через некоторое время пришло другое письмо. В нем было сказано, что в подтверждении даты покупки отказано, так как по их сведениям ноутбук уже был куплен и активирован ранее.
Я ответил, что не согласен с таким решением, после чего меня попросили позвонить им, дабы уточнить ситуацию.


По телефону, после нескольких минут разбирательств, меня переключили на отдельного специалиста, который пообещал попытаться разобраться в ситуации. Для этого я выслал ему на личный-корпоративный email фотографии чека.
Мне пообещали связаться с американским офисом и разобраться, можно ли все таки исправить дату покупки, числящуюся в их системе и дать мне гарантию на мой свежекупленный ноутбук.
Еще раз напомню, чек не содержит серийного номера (спасибо, MediaMarkt), так что у меня есть некоторые сомнения в положительном решении. Но я, если что, постараюсь добиться успеха.
Пока что я жду ответа.

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

Как будет ответ от Apple, я обязательно тут отпишусь.

UPD
По просьбе выкладываю фото чека



Sent from my iPhone

Инструменты тестирования приложений для мобильных устройств: обзор вариантов и возможностей


Константин Шлыков


Как улучшить качество труда тестировщика приложений для мобильных устройств и избавиться от рутины? Очевидно, с помощью дополнительных инструментов – от небольших приложений и надстроек над SDK до многофункциональных автоматизированных комбайнов, осуществляющих комплексное тестирование.

Захват видео с экрана устройства

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

Android screen capture – приложение для передачи видеопотока с экрана Android-устройства на монитор компьютера. Правда программа не умеет пока записывать видео – только автоматически делать серию скриншотов при изменении экрана. Но ничто не мешает использовать десктопные скриншотеры с возможностью записи видео. Требует установленного Android SDK.

Reflector – платный (от 13$) инструмент для записи видео с iOS-устройств без проводного подключения к десктопу. Работает под Windows и Mac. Есть десятиминутный триал.
Так же для iPad и iPhone существует приложение Display Recorder, но оно постоянно то исчезает из AppStore, то появляется. На данный момент поиск в AppStore ничего не даёт (обратите внимание, что Display Recorder HD – это другое приложение, не имеющее функции записи экрана). Различные источники называют различные цены за приложения (от двух до десяти долларов).

Эмуляторы

Эмулятор – программа, полностью или частично копирующая функционал и поведение устройства или другой программы.

Некоторые из преимуществ использования эмулятора:

  • оперативное тестирование приложения, когда целевой мобильный телефон недоступен (или оказывается в дефиците);
  • тестирование сложных или опасных сценариев, которые невозможно или не рекомендуется проверять на реальных мобильных телефонах (например, тесты, которые каким-либо образом могут вывести телефон из строя или нарушить условия соглашения с оператором сотовой связи).

Минусы:

  • зачастую эмуляторы очень требовательны к ресурсам, так как наиболее качественные из них эмулируют работу приложения с самых нижних уровней;
  • то, что приложение работает на эмуляторе, не значит практически ничего, ведь пользователи будут запускать приложения на реальных мобильных телефонах, которые всегда отличаются даже от самых лучших эмуляторов.

Тестирование на целевом мобильном телефоне – это самый верный способ убедиться в правильном функционировании приложения, поскольку вы выполняете приложение на том же аппаратном обеспечении, которое будет у ваших пользователей.

Для всех распространённых мобильных ОС предлагаются бесплатные (для разработчиков) и довольно функциональные эмуляторы. Например, для Android есть официальный Android SDK, который включает в себя эмулятор мобильного устройства, реализующий все аппаратные и программные особенности типичного устройства. Такие же «нативные» решения есть и для iOS, и для Windows Phone.

Так же, конечно, есть и альтернативы:

MobiOne Developer – это mobile Web IDE для Windows, помогающее разработчику программировать, тестировать, отлаживать упаковывать и внедрять мобильные веб-приложения на устройства. Имеет много полезных функций вроде просмотра исходников страницы и инспектор кода. Решение платное (на данный момент – 100$), есть 15-дневный триал, поддерживает iOS и Android.

Electric Mobile Studio 2012 – эмулятор для тестирования веб-приложений iOS под Windows. Поддерживает jQuery Mobile, Mobile Web JavaScript, HTML5. Встраивается в Visual Studio 2012, позволяет эмулировать работу с геолокацией, переключаться между типом устройства «на лету» и прочее. Решение платное (на настоящий момент – около 40$), есть семидневный триал. Так же в сети ещё можно найти более старые бесплатные lite-версии.

Opera Mobile Emulator и Opera Mini Simulator позволяют протестировать веб-приложение под соответствующим браузером. Оба продукта бесплатны (второй вообще онлайновый – не требует установки на компьютер).

BlueStacks App Player позволяет запускать Android-приложения на Windows XP-8 и MacOS. Судя по всему, приложение представляет собой виртуальную машину, которая не эмулирует поведения устройств, но может быть полезна для тестирования функциональности приложения в условиях недоступности других способов.

Облачные платформы устройств

Позволяют удалённо протестировать свой продукт на множестве различных устройств, передавая данные о тестирования разработчику. Самые знаменитые – Perfecto Mobile и Device Everywhere. Суть этих решений в том, что у них стоит стенд с реальными мобильными устройствами, подключенными по кабелю, и веб-камера, передающая изображения с телефона. Внутрь фотографии телефона вставлено изображение с веб-камеры. Управляется мышкой, либо с помощью автоматического скрипта. Также Perfecto Mobile и Device Anywhere удалённо предоставляют устройства «напрокат». У них стоит множество различных телефонов, и час работы с одним телефоном стоит около $15. Можно оформить подписку. Есть бесплатные триальные версии.

Плюсы:

  • почти нет вмешательства в тестируемое приложение;
  • один тестовый скрипт используется для тестирования на всех нужных мобильных платформах;
  • многообразие устройств (iOS, Android, WP, Blackberry и другие);
  • нет ограничений в приложениях с технологической точки зрения – можно тестировать хоть нативные приложения, хоть HTML5.

Минусы:

  • большая цена;
  • задержки при взаимодействии с телефоном из России.

Автоматизированное воспроизведение скриптовых тестов

При выборе подходящего инструмента следует принимать во внимание его принцип работы. Наиболее распространены два варианта:

  • Воспроизведение теста происходит по обращению к экрану, без анализа самого экрана и элементов интерфейса. Обычно такое воспроизведение осуществляется через координаты жестов на экране. Главный плюс – обычно нет необходимости модифицировать приложение. Главный минус – зависимость тестов от размера экрана, ориентации устройства, дизайна приложения.
  • Воспроизведение теста посредством обращения к интерфейсным элементам приложения. В тесте указаны метки для форм, кнопок, текстбоксов и прочей визуальной «начинки». Главный плюс – даже существенные изменения в интерфейсе приложения вряд ли повлияют на работу теста. Главный минус – придётся просить разработчиков собирать тестировщикам версии приложений с дополнительными библиотеками.

UIAutomation – стандартное решение от Apple, которое позволяет выполнять написанные на JavaScript тестовые сценарии как в эмуляторе, так и на устройстве. Входит в состав Instruments. Компилировать дополнительные библиотеки не требуется. Начиная с Xcode 4.3 появилась возможность записи тестов через рекодер.

Robotium – пожалуй, самый известный на текущий момент инструмент для автоматизации тестирования Android-приложений. "It's like Selenium, but for Android" – утверждают разработчики. Тесты пишутся на Java (есть сторонние решения, позволяющие писать их, например, на Python). Возможности запускать тесты на устройстве нет, только в эмуляторе. Необходимо добавлять библиотеку в сборку приложения.

MonkeyRunner поставляется в составе Android SDK, позволяет выполнять функциональное тестирование приложения под Android, предоставляя API для управления устройством. MonkeyRunner является более низкоуровневым по сравнению с Robotium, и не требует исходного кода приложения. Тесты пишутся на Python, или с помощью рекордера, выполняются как в эмуляторе, так и на реальных устройствах, подключенных к компьютеру. Большой минус этого решения в том, что жесты записываются в координатах, проверка результатов только путём сравнения скриншотов, что очень усложняет использование одного скрипта для тестирования на нескольких устройствах, а так же делает скрипты неподходящими для регрессионного тестирования в случае изменения GUI приложения.

TestStudio – бесплатное приложение для автоматического тестирования на платформе iOS. Базируется на обращении к компонентам приложения, а не на скриншотах. Имеется как рекодер, так и возможность писать и редактировать тесты вручную. Позволяет тестировать web и native компоненты. Интересная особенность: можно записывать и воспроизводить тесты на устройстве без подключения к компьютеру.

AppThwack – интересный сервис для тестирования на Android-устройствах (поддержка iOS обещается в скором времени). Вы загружаете своё приложение на ресурс, оно устанавливается на настоящие устройства (ассортимент переваливает за сотню) и подвергается «исследованию» – запуск, замеры используемой памяти и загрузки процессоров, выявление ошибок и проблем, нагрузка небольшим манки-тестом. По результатам исследования создаётся отчёт со скриншотами. Имеется триал (неделя), цена – от 29$ в месяц за тестирование на 10 наиболее распространённых устройствах.

JamoSolution – одна из самых многообещающих платформ, на которой сейчас разрабатывается несколько инструментов (например, M-eux test и SeeTest). Она позволяет тестировать iOS, Android, Windows Phone и другие платформы. Поддерживается запись тестов (record&play). Работает через установку на устройстве приложения-агента, что освобождает разработчика от модифицирования своего приложения. Есть триальная версия.

EggPlant от студии TestPlant позволяет запускать свой тестовый скрипт на множестве устройств одновременно, определяя выходные данные методом распознавания картинки на экране. Поддерживает тестирование на устройствах Android и iOS и их эмуляторах, а так же на эмуляторе Windows Phone. Приложение разработано под Windows, Linux, Mac. Есть триальная версия.

Squish – платное (2400$) средство для автоматического тестирования Qt, Web, Java, iOS и других приложений. Поддерживает запись тестов, воспринимает скрипты на Javascript, Python, Perl или Tcl. Есть 30-дневная триал-версия.

Sikuli – open sourсe инструмент для автоматизации тестирования GUI Java-приложений (в том числе и Android). Открытая кросс-платформенная визуальная среда создания сценариев-скриптов, которая ориентирована на программирование графического интерфейса при помощи изображений (скриншотов). Особенность – скрипт, задающий последовательность действий, позволяет использовать скриншоты – чтобы дать команду нажать кнопку, достаточно подставить в скрипт скриншот этой кнопки. Поддерживает написание скриптов на Java и Python.

MonkeyTalk – бесплатный инструмент для тестирования Android и iOS-приложений. Имеет собственный мощный скриптовый язык (можно писать скрипты и на Javascript), позволяет создавать и хранить тестовые проекты (тест-кейсы, тест-сьюты). Так же имеется интеграция с Eclipse, есть рекодер. Требует вставки своей библиотеки в приложение.

Robot Framework – это open-source фреймворк для автоматизации приемочного тестирования и разработки через приемочные тесты (ATDD), имеющий широкий функционал. Поддерживает дополнительные библиотеки (можно использовать собственные, написанные на Python или Java) – именно с помощью уже реализованных библиотек и появляется возможность тестирования приложений на Android и iOS.

Нагрузочное тестирование

HP Virtual User Generator. Служит для нагрузки сервера мультиплицированием входящего траффика. Тестировщик создаёт скрипт, запускает его на устройстве, HP VuGen перехватывает траффик и имитирует запросы к серверу с подобной информацией, но от нескольких тысяч или миллионов устройств одновременно.

Neoload позволяет эмулировать правдоподобные условия сети (эмуляция 3G, 3G+, H+, 4G LTE). Может настраиваться для эмуляции нагрузки с разношёрстного списка устройств (есть предустановки для устройств iPhone5, Samsung Galaxy Tab II, Nokia Lumia 800, Blackberry Bold 9900 и других), основной скрипт нагрузки можно записать с помощью любого реального устройства по Wi-Fi. Есть бесплатный месячный триал, стоимость самой дешёвой лицензии (на пять пользователей) – 1200 евро. Поддерживает устройства на базе iOS, Android, Windows Phone и другие.

Манкитестинг

Monkey является инструментом стресс-тестирования для Android, содержащимся в Android SDK. Генерирует псевдослучайные действия пользователя. Позволяет настроить «хаотичность», интервал между событиями, их тип и т. п. Модификация кода приложения не требуется. Тестировать можно как на эмуляторе, так и на подключенном устройстве.

Anteater – инструмент для манкитестинга iOS-приложений. Имеет более широкий функционал, чем Monkey для Android. По-видимому, существует только под Mac. Бесплатен.

Сервисы для бета-тестирования

uTest – сообщество из 45 тысяч профессиональных тестеров из 180 стран. Реальные пользователи протестируют работу приложения. Платный. (iOS, Android, Windows Phone)

The Beta Family – бесплатный сервис для тестирования приложения. Заводите аккаунт, заливаете бета-версию приложения, рассылаете приглашение на тестирование, обрабатываете результаты тестирования. Можно выбрать тип бета-тестеров: private или public. Если public, то приложение смогут тестировать все желающие. Работает с iOS, Android, Windows Phone.

Zubhium. Предоставляет SDK для Android, с помощью которого вы в свое приложение встраиваете код для автоматического сбора информации об ошибках. Разработчик выкладывает бета-версию, приглашает тестеров, получает информацию. Стоимость подписки от 10$/мес. Есть 30-дневный триал.

Сборщики статистики

Полезно знать, как пользователи работают с вашим приложением: какие функции наиболее востребованы, какие кнопки нажимаются, какие настройки меняются, какие ошибки совершаются, сколько времени пользователь проводит на различных экранах приложения. Неплохо так же иметь статистику по пользователям – какая версия ОС у их девайсов, где они географически расположены и т.д. Самый простой путь сбора такой статистики – воспользоваться готовой системой сбора аналитической информации. Например:

  • Flurry (бесплатная) (iOS, Android, Windows Phone)
  • BugSence (бесплатная) (iOS, Android, Windows Phone)
  • Apsalar (бесплатная) (iOS, Android)
  • Google Analytics (бесплатная) (iOS, Android)
  • Mixpanel (платная) (iPhone, Android)
  • Localytics (платная) (iOS, Android, Windows Phone)
  • Bango (платная) (Android, Windows Phone)

У каждой системы есть свои изюминки: обновление статистики в реальном времени (Localytics), суперточность с отслеживанием уникальных ID каждого пользователя (Bango), наличие средств для проведения опроса среди пользователей (Apsalar) и т. д. Естественно, есть и море отличий: в интерфейсе, в средствах анализа, в наличии дополнительных API, в стоимости, в наборе поддерживаемых платформ.

Другие полезные инструменты

Fake GPS – приложение для Android-устройств, позволяющее установить произвольные данные в модуле геолокации.
Так же, в ранее упоминавшемся Android SDK есть неплохой спектр мелочей, облегчающих тестирование приложений под Android – консольные возможности установки, удаления и запуска приложений, просмотр в реальном времени и вывод логов работы устройства в файл, перезагрузка приложения и так далее. Описание всех этих возможностей легко находятся в Интернете. Много полезного можно найти в книге от разработчика SDK Diego Torres Milano: "Android Application Testing Guide".

Комплексные решения

TestQuest Pro – инструмент для полного автоматического тестирования, разработанный для компаний и предприятий. Поддерживает функциональное, нагрузочное, регрессивное тестирование, тестирование качества и взаимодействия.

Experitest.com – позволяет проводить автоматическое, ручное (удалённо) и облачное тестирования на большом спектре устройств (2500$ в год за автоматическое тестирование, 4000$ в год за ручное).

Стоит отметить существование компаний, специализирующихся на тестировании, в том числе и на тестировании приложений на мобильных устройствах. Например, Qulix QA производят всестороннее тестовое покрытие – верификация работы приложения относительно ОС, платформ, языков и др; прохождение сертификации для подписи продуктов и попадания в маркет; тестирование приложений на реальных мобильных устройствах.

iReaderiReader Logo

воскресенье, 27 декабря 2015 г.

Nmap для Mac OS X обнаруживает сети сканирует порты и не только

nmap-dlya-mac-os-x-obnaruzhivaet-seti-skaniruet-porty-i-ne-tolko

Nmap для Mac OS X

Nmap является мощной утилитой по обнаружению локальных сетей, работающая в виде командной строки и позволяющая исследовать полный комплекс локальных сетей поблизости, определять время доступа к локальному хосту и принимать от него ответ, выполнять проверку безопасности путем сканирования портов, определять OS и обнаруживать файервол и так далее. Хотя эта утилита бесплатная (и с открытым исходным кодом), поставляющаяся и работающая уже со многими версиями Linux, она не входит в стандартную комплектацию установки OS X, и, следовательно, должна быть инсталлирована отдельно. Nmap, как правило, довольно продвинутая и усовершенствованная система, она имеет множество полезных приложений и будет полезна и понятна даже для тех из нас, кто не является сетевым администратором и специалистом по безопасности, а также может быть полезна для решения простых задач по настройке сети и устранению неполадок.

При установке Nmap вы также будете иметь возможность инсталлировать полный набор утилит сетевого исследования, в том числе ncat, zenmap (требуется X11), ndiff и nping. Все это полезные инструменты, так что было бы очень неплохо установить их на своей локальной машине.

Установка Nmap для Mac OS X

Использование установщика DMG – это самый простой способ инсталляции, но вы также можете скачать под себя Nmap с официального сайта или получить его через какой-нибудь клиент типа Homebrew или MacPorts.

Скачать Nmap для Mac OS X (бесплатно)
Установить через dmg, для чего следует щелкнуть правой кнопкой мыши и выбрать «Открыть», чтобы обойти предупреждение Gatekeeper, если он включен
Установить полный набор Nmap или установить выборочно нужные приложения — ncat, ndiff, nping и т. д.
Необходимости в перезагрузке компьютера нет, но вам может понадобиться обновить или перезапустить Terminal, чтобы система обнаружила Nmap в одной из своих директорий.

Примеры работы в Nmap

Nmap работает как с LAN, так и с WAN IP-адресами и имеет несчетное количество приложений, но мы рассмотрим несколько наиболее часто используемых команд и опций. Заметьте: не стоит удивляться тому факту, что будет получено очень мало информации сообщены с машин OS X, особенно если файервол включен и нет ни единого публичного доступного сервиса, предоставляемого сетью. С другой стороны, сканирование ПК с Windows или сети машин на Windows часто дает огромное количество информации и выявляет многие сервисы, даже если брандмауэр Windows включен.
Найти открытые порты на Localhost

Nmap создан так, что очень легко узнать, какие порты открыты на локальном (то есть вашем) компьютере:

Nmap локальный

Вы сможете увидеть что-то вроде приведенного ниже отчета:

PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
445/tcp open microsoft-ds
548/tcp open afp
6817/tcp open unknown

Это позволит вам узнать, что SSH / SFTP, HTTP, Samba и протокол обмена файлами Apple открыты на локальном компьютере Mac, и показывает, под какими портами они работают.

Для Mac переключение различных вариантов непосредственно в панели System Preference «Sharing» будет непосредственно влиять то, что вы увидите в качестве рабочей информации, будь то активация SSH и SFTP сервера и возможность удаленного входа в систему, включение и выключение обмена файлами для компьютеров Mac и (или) Windows, сетевой контроль над локальной машиной и так далее. Кроме того, если вы запустили локальный веб-сервер в определенной точке (даже супербыстрый Python HTTP сервер), вы также найдете информацию о том, что он полноценно функционирует.

Сканирование и создание списка локальных сетевых IP

Вы также можете найти информацию о других машинах в локальной сети. Мы предположим, что ваша локальная сеть работает в IP диапазоне от 192.168.0.1 до 192.168.0.25, измените эти цифры соответственно:

Nmap — sP 192.168.0.1-25

Если вы не знаете диапазон, вы можете пользоваться специальными символами-джокерами:

Nmap 192.168.0.*
Сканирование и обнаружение операционных систем

Используя совокупность того же IP диапазона, который указан выше, вы можете попытаться выяснить, какие операционные системы и сопутствующие им версии работают на сетевых машинах. Это не всегда получится, но нет ничего страшного в этой попытке:

Nmap — O 192.168.0.1-5

Если никакой информации сообщено не будет (что не редкость), вы можете попробовать оператор –osscan-guess, вместо того чтобы попытаться угадать, какая ОС работает на обнаруженных устройствах:

Nmap —osscan-guess 192.168.0.2

Использование Nmap с альтернативными серверами DNS и отслеживание маршрутизации

Nmap также очень полезно для устранения неполадок подключения к Интернету, вопросов по WAN и общедоступных файлов и сервисов, и это может быть полезно при попытке выяснить, заключается ли проблема вашей сети, ISP или еще где-то в другом месте. С помощью команды –traceroute and –dns-servers вы сможете определить, что не так работает и где именно, и последнее особенно полезно, если у вас возникли проблемы с доступом к отдельным удаленным IP, но вы не уверены, на самом ли деле хост отсутствует или есть проблемы с вашими DNS-серверами.

Команда –dns-servers аннулирует системные DNS настройки для такого рода проверки. Здесь мы будем использовать Nmap для сканирования через альтернативный DNS (DNS от Google серверов в нашем примере) от yahoo. com:

Nmap —dns-servers 8.8.8.8 yahoo. com

На этом примере, если yahoo. com будет работать через альтернативный DNS, но недоступно для вас без указания DNS-серверов, то у вас могут быть проблемы с любыми DNS-серверами, которые используете вы, а не хост.

Команда –traceroute объединяет обычные возможности трассировки при проверке. Обратите внимание, что команда должна быть запущена из администраторской учетной записи:

Sudo nmap —traceroute yahoo. com
Дополнительные возможности

Nmap имеет намного больше различных приложений и команд, чем те, которые мы упомянули выше, и вы можете увидеть полный список возможных команд и возможностей, введя:

Nmap —help

Или вызвав страницу с руководством по программе:

Man nmap

Если вы заинтересованы в получении дополнительной информации, то на сайте Nmap имеется множество полезных ресурсов и дополнительной информации.


суббота, 26 декабря 2015 г.

Руководство по оптимизации сайтов для начинающих. Часть 2 / Хабрахабр


Руководство по оптимизации сайтов для начинающих. Часть 2


Часть 1

Процесс оптимизации


Установить в организации хорошо прописанный и формальный процесс оптимизации – это очень полезная практика, поскольку она:

  1. организует рабочий процесс и задаёт реальные сроки окончания
  2. устанавливает стандарты контроля качества и уменьшает количество ошибок
  3. добавляет веса всей операции – логику процесса можно объяснить владельцам компании


На общем уровне планирования я бы рекомендовал устраивать совещания по планированию оптимизации 1-2 раза в неделю, на которых необходимо:

  1. Просмотреть текущие тесты, чтобы понять, нужно ли их остановить или признать «завершёнными» (см. ниже). Для законченных тестов есть две возможности:
    1. есть явный победитель. В этом случае необходимо разработать его вывод в продакшн
    2. нет явного победителя в текущей контрольной группе. В этом случае нужно определить, требуется ли дополнительное изучение вопроса, или же нужно просто прекращать эксперимент.

  2. Рассмотреть источники данных и подумать над новыми идеями для тестов
  3. Обсудить и назначить приоритет любым новым идеям.


Как же понять, когда тест завершён?


Критерии завершённости – вещь сложная и даже являются коммерческими секретами. Определю минимальные необходимые условия для объявления теста «завершённым». Общепринятых стандартов не существует, и критерии зависят в основном от представлений вашей команды. Мы для себя выработали следующие критерии:

  1. Время. Тесты должны идти не менее двух недель, чтобы сгладить колебания, связанные с днями недели
  2. Статистическая уверенность. Мы использовали интервал уверенности в 90-95%
  3. Стабильность по времени. Варианты должны хотя бы неделю находиться на своих местах.
  4. Общее количество конверсий. Минимум 200 шт.


Создание нового теста оптимизации может идти по той же схеме, что и разработка продукта. Я рекомендую следующую основную структуру:

  1. анализ данных
  2. поиск идей для улучшения
  3. разработка тестовых вариантов
  4. написание плана тестирования
  5. разработка
  6. контроль качества
  7. запуск тестов
  8. анализ результатов и составление отчётов


Шаг 1: Анализ данных


Сначала необходимо решить, на чём сконцентрировать усилия. Мы использовали следующий список:

  1. Недавние релизы продуктов, или страниц, которые ещё не оптимизированы
  2. Особо ценные страницы:
    1. Высокодоходные (корзина, описание дорогих продуктов, и т.д.)
    2. Высокопосещаемые (домашняя страница)
    3. Особые стратегические места, важные по каким-то другим причинам
  3. Страницы с плохой статистикой:
    1. Низкая конверсия
    2. Высокий процент ухода


Шаг 2: Поиск идей по улучшению


Вопрос улучшения страницы – такой же крупный, как вопрос пользовательского интерфейса, и находится за рамками этой статьи. Улучшать можно тексты, дизайн форм, показ медиаданных, рендер страниц, внешний вид, доступность…

Советую только собирать идеи сообща – используйте силу всей команды, чтобы искать новые идеи. Включайте в процесс не только дизайнеров, но и разработчиков, копирайтеров, бизнес-аналитиков, маркетологов, тестировщиков… Хорошая идея может появиться где угодно.

Шаг 3: Пишем план тестирования


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

В хорошем плане должны быть следующие пункты:

  1. Название теста
  2. Описание
  3. Цели
  4. Возможности (что мы получим в случае успеха)
  5. Методология
    1. Ожидаемые даты работы теста
    2. Ресурсы (кто будет над ним работать)
    3. Метрики для отслеживания
    4. Критерии завершения
    5. Варианты (скриншоты разных дизайнов, которые будут видеть посетители)


Вот вам примерный план тестирования.

Шаг 4: Дизайн и разработка теста


Обычно идут по пути разработки продукта – но поскольку тест проще, чем полновесный продукт, я использую облегчённую версию пути.

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

Шаг 5: Контроль качества


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

Плюс оптимизационных тестов в том, что вы можете устраивать любой таргетинг. Можно нацеливать разные варианты на определённые браузеры, платформы, аудитории, и т.д. Допустим, что ваша команда проверила работу только одного A/B теста – для десктопных браузеров, но не для мобильных. Тогда вы можете тестировать его результаты исключительно на декстопных пользователей. Если у вас пока есть какие-то проблемы с отображением в мобильных браузерах, на результаты теста они не повлияют.

Шаг 6: Запуск


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

Варианты нужно показывать одновременно

Первый принцип настолько очевиден, что о нём не говорят. Но я очень часто слышал высказывания вроде «после запуска нового дизайна наши продажи/конверсии увеличились – значит, новый дизайн лучше».

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

Отслеживайте несколько метрик конверсии

Один из A/B тестов, который мы проводили, использовался на странице описания фильма на латиноамериканском сайте DIRECTV. Мы увеличили размер и заметность кнопки "Ver adelanto" (просмотр трейлера), решив, что если люди посмотрят трейлер, это сподвигнет их на покупку фильмов с сайта.



Так и вышло – через несколько недель мы увидели увеличение количества покупок на 4,8%. В год такое увеличение привело бы к увеличению прибыли на $18000. К счастью, поскольку мы также отслеживали другие параметры сайта, мы увидели, что этот вариант уменьшил покупки пакетов каналов (HBO, Showtime) на целых 25%. Это бы гораздо сильнее уменьшило прибыль. Поэтому мы не стали вводить этот вариант в продакшн.

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

Тесты должны достигать приемлемого уровня статистической значимости

В одной из презентаций консультант сообщил, что предварительные тесты сегментации электронной почты показали многообещающие результаты.



На графике у последнего сегмента пользователей (залогинившихся более 4 раз за год) конверсия составила 0,00139% (0,139 апгрейдов на 1000 емейлов). И хотя такая конверсия очень маленькая, согласно консультанту она показывает на 142% прирост, что является неплохим результатом.

Даже не упоминая сомнительную пользу данной статистики (предлагается ли на основе доклада отправлять емейлы только тем пользователям, которые залогинились более четырёх раз?), в тесте есть другая проблема. Если вы посмотрите на колонку «Upgrades», вы увидите, что результаты были выведены всего лишь из пяти случаев заказа апгрейда. Пять из сорока восьми тысяч отправленных писем. Получается, что плюс/минус один заказ радикально поменял бы всю статистику.

Хотя это не пример теста оптимизации, а просто исследование сегментации емейлов, он содержит важный урок: не объявляйте победителя, не набрав приемлемого количества статистики.

Что же такое «приемлемый»? В науке приняты понятия «значимый» (95% уверенности) и «высокозначимый» (99% уверенности) в результатах. И то, в них, соответственно, есть 5% и 1% шанс, что ваши заключения неверны. Кроме того, чем больше статистики нужно собрать, тем больше времени это займёт. Я бы рекомендовал остановиться на результатах в районе 90-95% уверенности, в зависимости от важности ситуации.

Продолжительность тестов должна учитывать естественные вариации (рабочие и выходные дни, и т.п.) и быть стабильной во времени

В статье на сайте AnalyticsInspector.com Ян Петрович описывает проблему преждевременного окончания тестов. Тест проводился на популярном сайте всего лишь один день, и в конце было объявлено, что победивший вариант увеличил конверсию на 87% с уверенностью в 100%.



Ян пишет: «Если бы мы остановили тест прямо тогда и похлопали бы друг друга по плечу, мы бы совершили ошибку. Мы ведь не проверили наш тест на пятничном или понедельничном трафике. Но, поскольку мы не остановили тест, реальный результат получился совершенно другим».



Через четыре недели стало ясно, что новый дизайн, хоть он работал и лучше контрольного, показал улучшение всего в 10,49%.

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

Шаг 7: Анализ и отчёты

По окончанию теста, когда вы нажали кнопку «стоп», вам нужно собрать результаты в отчёт. Отчёт может быть продолжением плана из шага 2, но со следующими дополнительными разделами:

  1. Результаты
  2. Обсуждение
  3. Дальнейшие шаги


Очень хорошо включать графики и различные детали в секцию «результаты», чтобы те, кто знакомится с отчётом, могли сами проследить за тенденциями и проанализировать данные. Это добавит вашим исследованиям убедительности и привлечёт людей в программу оптимизации.

Обсуждение полезно для объяснения деталей и описания причин, приведших к полученным результатам. Она должна заставить команду задуматься о поведении пользователей и разработать дальнейшие улучшения продукта.