Tester Bill of Rights

Февраль 5th, 2013

У меня часто возникают мысли о том как правильно взаимодействовать тестировщикам и команде разработчиков? какова роль тестировщика в Agile-команде? Материалов на эту тему много хороших и разных. Очень интересно и точно описаны «Права тестировщика» в книге Agile Testing. A practical Guide for Testers and Agile Team. Lisa Crispin, Janet Gregory:

• You have the right to bring up issues related to testing, quality, and process at any time.
• You have the right to ask questions of customers, programmers, and other team members and receive timely answers.
• You have the right to ask for and receive help from anyone on the project teams, including programmers, managers, and customers.
• You have the right to estimate testing tasks and have these included in story estimates.
• You have the right to the tools you need to perform testing tasks in a timely manner.
• You have the right to expect your entire team, not just yourself, to be responsible for quality and testing.

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

Безопасность ваших паролей зависит от вас

Январь 24th, 2013

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

https://github.com/search?q=path:.ssh/id_rsa&type=Code&ref=searchresults

Как видно из результата работы поискового запроса некоторые разработчики не уделяют достаточно внимания вопросу сохранности своих SSH-ключей и в открытом доступе лежит целая куча ключей. Если добавить к этому лежащий (у некоторых) рядом файл known_hosts, то можно только представить размер дыры в безопасности серверов этих горе-программистов.

Проведем небольшое дополнительное исследование. Какие еще пароли могут храниться в репозитории на Github? Правильно — пароли к базе данных в файлах конфигурации веб-приложений. Поищем их:

https://github.com/search?q=path%3Awp-config.php&type=Code&ref=searchresults

https://github.com/search?q=path%3Aconfiguration.php&type=Code&ref=searchresults

https://github.com/search?q=path%3Aconfig.php&type=Code&ref=searchresults

https://github.com/search?q=path%3Adatabase.yml&type=Code&ref=searchresults

https://github.com/search?q=path%3Asettings.py&type=Code&ref=searchresults

Список можно продолжать долго, но выводы можно делать уже на основании этих запросов. Беглый осмотр показал, что, наряду с тестовыми БД на localhost с пользователем root без пароля, достаточно много логинов/паролей к реальным БД.

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

P.S. Данный материал написан исключительно в ознакомительных и исследовательских целях. Автор не пользовался ни одним из найденных паролей/ключей. Также автор снимает с себя ответственность за возможные последствия использования информации из статьи третьими лицами.

Code like it’s 1982

Январь 24th, 2013

Сегодня в процессе обсуждения старых домашних компьютеров вроде Atari и ZX Spectrum я вспомнил, что недавно нашел листочки, на которых писал свои первые программы для Speccy. Подумал, что стоит сохранить для истории. Внукам буду показывать :) Кому интересно — репозиторий на Github с самой первой программой для ZX Spectrum. Писал ее я, как сейчас помню — в 1998 году, на районной олимпиаде по физике. Задания были тогда сложноватые, решил что знал и стал программировать на Basic с помощью ручки и листочка в клеточку. Сохранить код это, конечно, хорошо, но запустить его спустя 14 лет еще лучше. В этом нам поможет BASin — практически полноценная IDE с отладчиком и эмулятором для написания программ на Sinclair Basic. Результат видно на заглавной картинке из поста. Работает!

Меняем расположение директории с базами MySQL на Ubuntu Server

Январь 20th, 2013

По мотивам моих вчерашних изысканий. Понадобилось сделать новую виртуалку на Amazon. Данные было решено хранить на отдельном EBS-разделе, чтобы предотвратить их потерю в случае отключения виртуалки и для бекапов через снепшоты. В качестве OS была выбрана Ubuntu Server 12.04 LTS. Что в итоге привело к небольшим сложностям при изменении директории с базами MySQL. В большинстве остальных Linux-дистрибутивов рецепт приблизительно следующий:

  1. Копируем старую директорию MySQL в нужное место (в моем случае это отдельный раздел)
  2. Меняем владельца новой директории ‘chown -R mysql:mysql newmysqldir’
  3. Меняем путь к директории с данными в конфиге MySQL — my.cnf
  4. Перезапускаем mysqld

Однако, на Ubuntu Server после выполнения этих шагов MySQL отказался стартовать и сыпал в dmsg сообщениями вида:

[26176757.175845] type=1400 audit(1358635795.168:93): apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/mysqld" name="/www-data/mysql/ibdata1" pid=7994 comm="mysqld" requested_mask="rw" denied_mask="rw" fsuid=106 ouid=106

Проблема заключается в AppArmor, который блокирует доступ для mysqld к новой директории. Решение простое:

  1. Редактируем конфиг /etc/apparmor.d/usr.sbin.mysqld
  2. Дописываем строчки вида:
    /www-data/mysql/ r,
    /www-data/** rwk,
  3. Перезапускаем AppArmor
  4. Перезапускаем mysqld

Вуаля, все работает :)

Cartoon Tester

Январь 19th, 2013

Сегодня пятница и не хочется чем-то техническим вас грузить. Поэтому пост будет про … тестировщиков :) А точнее про комиксы о них. Ссылка под картинкой:

Headless web browsers

Январь 17th, 2013

Для тестирования веб-приложений (а именно этим я сейчас и занимаюсь на текущей работе) крайне необходим веб-браузер. Поиграл в капитана Очевидность, ага :) Когда речь идет о ручном тестировании или о запуске небольших тестовых сценариев, то тут все ясно — используется один из обычных браузеров (Firefox, Chrome, Safari, Opera) или Internet Explorer. Но что делать, если у вас есть хороший набор браузерных тестов и вы хотели бы их запускать либо в фоне на рабочем компьютере, либо на выделенном CI-сервере? Запускать обычный браузер и наблюдать мельтешащие окна — не вариант. И тут на помощь нам приходят так называемые headless-браузеры, которые позволяют выполнять ваши тесты с использованием браузера (чаще всего Webkit-based), но при этом не отвлекают вас лишними окнами (создается некоторое виртуальное, невидимое окно браузера, в котором и проходят тесты) Основные существующие headless-браузеры перечислены тут. На случай, если ссылка устареет, ниже приведен этот перечень:

  • HtmlUnit — Java. Custom browser engine. JavaScript support/DOM emulated. Open source.
  • Ghost — Python only. WebKit-based. Full JavaScript support. Open source.
  • Twill — Python/command line. Custom browser engine. No JavaScript. Open source.
  • PhantomJS — Command line/all platforms. WebKit-based. Full JavaScript support. Open source.
  • Awesomium — C++/.Net/all platforms. Chromium-based. Full JavaScript support. Commercial/free.
  • SimpleBrowser — .Net 4/C#. Custom browser engine. No JavaScript support. Open source.
  • ZombieJS — Node.js. Custom browser engine. JavaScript support/emulated DOM. Open source.
  • EnvJS — JavaScript via Java/Rhino. Custom browser engine. JavaScript support/emulated DOM. Open source.
  • Watir-webdriver with headless gem — Ruby via WebDriver. Full JS Support via Browsers (Firefox/Chrome/Safari/IE).
  • Spynner — Python only. PyQT and WebKit.