пятница, 4 марта 2011 г.

Где брать данные для проверки

Вещь поразительно очевидна. Самые лучшие тестовые данные - реальные данные.

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

Господа и дамы лидеры команд тестирования и не только, обновляйте тестовые ХД с серверов так часто как возможно (перед релизом это крайне полезно).

среда, 2 марта 2011 г.

Почему мы не делаем работу на работе?

Пересматривал выступление Джейсона Фрида "Почему мы не делаем работу на работе" (Jason Fried Why Work Doesn't Happen at Work). Интересные результаты. 





Но вот при разработке программного продукта необходимо очень много командной работы. Когда действительно необходимо постоянное взаимодействие между людьми. И отвлекаться это нормально.
Хотя если надо написать тест дизайн или просто покрыть тестами функционал. Разобрать требования заказчика и проанализировать их. Проанализировать состояние проекта и написать отчет.... То тут явно хочется повесить видимую не только тебе табличку "Не беспокоить" на видимую не только тобой дверь (open space).

вторник, 1 марта 2011 г.

Overmeetinging

Зачем делать митинги ради митингов? Митинги - инструмент. И его надо правильно использовать. Микроскопом не забиваем гвозди, не рубим деревья бензопилой. Если в случае наших аутсорсовых айтишных проектов цель митинга для менеджера (проекта или тимлида) получить статус, то не всегда для этого надо собирать всю команду.

Допустим, несколько дней до релиза. И все, естесственно, не успевают. Не успевают работать в том же расслабленном режиме, что и в середине или начале итерации. И помимо ежедневных утренних стенд-ап митингов еще через несколько часов мы тоже проводим митинг. Просто чтобы более оперативно получать информацию и координировать ее. Правильно. Хорошо. Оперативно. Но людей зачем отрывать от работы, если мы хотим чтобы все было оперативно? Почему нельзя самому узнать необходивую информацию непосредственно, вместо того чтобы вырывать всех из контекста всех. Пусть они делают свою работу. Кто-то вот-вот что-то закончит, а кто-то только начал какой-то кусок работы. А информация вся будет у вас и так, и так. И анализировать ее и принимать решения можно в обоих случаях. Только второй получается "дешевле" и "безопаснее".

Следите за своими сроками

Подсмотрел у cartmendum'a тут. И не смог не перепостить :)

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



четверг, 10 февраля 2011 г.

Нет элемента? Давайте посмотрим

Если просто вызвать нажатие на любой контрол, а его нет, то Selenium просто вернет соответствующую ошибку как то: null com.thoughtworks.selenium.SeleniumException: ERROR: Element Control not found


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

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

1) public void clickIfPresent(String elementLocator) {
        if (super.isElementPresent(elementLocator)){
            click(elementLocator);
        }
        else
            logHtmlSource("Element " + elementLocator + " doesn't exist");
    }
2) public void clickIfPresent(String elementLocator) {
        try {
            click(elementLocator);
        }
        catch (SeleniumException e){
            logHtmlSource("Element " + elementLocator + " doesn't exist");
        }
    }

Как тест инженер я разницы не вижу, но наши Java-разработчики говорят, что второй правильнее :)