Показаны сообщения с ярлыком Для начинающих. Показать все сообщения
Показаны сообщения с ярлыком Для начинающих. Показать все сообщения

воскресенье, 10 мая 2020 г.

9 полезных инструментов тестирования с открытым исходным кодом


Какие инструменты нужны для ремонта - Строительный портал ...
Всем привет!

И снова перетряхивая дела давно ушедших дней, вытаскиваю на свет и стряхиваю пыль, короткий обзор инструментов всегда полезен, детали по ссылке: КЛАЦ.

Автор заметки: Виталий Крюков.

Берегите себя, оставайтесь дома, развивайтесь!

Хорошего дня,  коллеги!

суббота, 3 сентября 2016 г.

Джефф Сазерленд «SCRUM Революционный метод управления проектами»

Книгу посоветовало прочитать наше большое начальство. Книга автора SCRUM подхода. На примере реальных проектов, находящихся в глубоком и безысходном положении, Сазерленд рассказывает об их «оживлении» и в итоге успехе. Безусловно книга полезна, хотя местами и утопична. Реальные примеры – есть реальные примеры, в них можно увидеть свои ситуации, почерпнуть «вдохновение». Да и история термина раскрывается) Всем руководителям читать обязательно, остальным рекомендуется.

Факт в одном, нельзя стоять на месте, нельзя оставаться без изменений. Процессы и подходы к работе должны непрерывно оптимизироваться. 

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

Конспект полезностей из книги:
·       Цикл OODA, она же петля Бойда: observe, orient, decide, act.
·       Важные вопросы:
o   Почему все пошло не так?
o   Как удалось справиться с ситуацией?
·       «Все компании стоят перед выбором: изменись – или умри».
·       «SCRUM – это концепция, созданная мною, чтобы воплотить эти ценности в жизнь». (об agile манифесте)
·       Делать работы быстрее, но не за счет переработок, а за счет согласованности.
·       Скрам как сюхари (прием айкидо):
o   Сю – соблюдать;
o   Ха – прорываться;
o   Ри – отделяться.
·        Самоорганизация команды.
·       Эксперимент американского психолога Джорджа Миллера (1956). Краткосрочная память среднестатистического человека может удерживать одновременно не более семи объектов.
·       «Вините не игрока, а игру».
·       Синхронность в работе.
·       «Время – ваша жизнь. Поэтому не следует впустую расходовать его – это сродни медленному самоубийству».
·       «Сделать половину – не сделать ничего».
·       «Каждый разработчик программного обеспечения был обязан тестировать и проверять свой код в день его написания».
·       Без переработок, работы в выходные и в отпуске. (Утопия утопий ;).
·       Кайдзен.
·       Задавать неудобные вопросы и говорить неудобную правду.
·       «Оценка радости»

И жизнеутверждающая цитата для завершения )

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

четверг, 12 ноября 2009 г.

Для начинающих: Анализ граничных значений aka Boundary Analysis


Что же это такое, анализ граничных значений? Да-да, техника написания сценариев тестирования. Этот подход очень тесно связан с разбиением на классы эквивалентности, т.к. именно классы являются источником тех самых границ!
Почему может быть полезен данный подход? Как в коде задаются ограничения? Ага, обычно знаками больше, меньше, равно. И ошибку можно «накодить» (практически, можно нашкодить :)) запросто, поставить не то значение в выражении, не тот знак. Вернемся к нашим карандашам (см. Разбиение на классы эквивалентности), в зависимости от заказанного количества карандашей различается стоимость:
  • 1 – 100 – 10 руб. за карандаш;
  • 101 – 200 – 9 руб. за карандаш;
  • 201 - 300 – 8 руб. за карандаш и т.д. С каждой новой сотней, цена уменьшается на рубль.

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

  1. Невалидное значение: >1000 штук;
  2. Невалидное значение: <=0;
  3. Валидное значение: от 1 до 100;
  4. Валидное значение: от 101 до 200;
  5. Валидное значение: от 201 до 300;
  6. Валидное значение: от 301 до 400;
  7. Валидное значение: от 401 до 500;
  8. Валидное значение: от 501 до 600;
  9. Валидное значение: от 601 до 700;
  10. Валидное значение: от 701 до 800;
  11. Валидное значение: от 801 до 900;
  12. Валидное значение: от 901 до 1000.

Самое время взяться за граничные значения этих самых классов. Нужно брать не только само граничное значение, но и отступать на шаг вверх/вниз (на самый, самый малюсенький из возможных шажков). Для выше написанных классов получаем:

  1. 999; 1000; 1001;
  2. 1; 0; -1;
  3. 99; 100; 101;
  4. 199; 200; 201;
  5. 299; 300; 301;
  6. 399; 400; 401;
  7. 499; 500; 501;
  8. 599; 600; 601;
  9. 699; 700; 701;
  10. 799; 800; 801;
  11. 899; 900; 901;
  12. аналогично классу №1.

Итак, получаем по 3 значения для границ, а также берем по одному значению из «тел» классов эквивалентности, итого: 33 + 12 = берем для проверки 45 значений. М-м-м-м-м, это больше 12, но гораздо меньше 1000. Да еще и проверяем не только валидные значения, но и невалидные! Но это только две техники из… продолжение следует…

среда, 7 октября 2009 г.

Selenium: пробуем "на зуб" вместе

Автоматизация тестирования, применяемая по месту, по времени и по теме весьма и весьма полезна. А если инструмент автоматизации бесплатный, мммм… «ни в сказке сказать, ни пером описать».

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

Используя надстройку над Firefox Selenium IDE, записываем и воспроизводим тесты. IDE позволяет экспортировать тесты во множество различных языков (включая Ruby, PHP, java, perl, C# и Python). Меня интересует связка Firefox-Selenium-JAVA. Почему? А не скажу, корыстные цели у меня :). Если будут появляться интересные моменты, буду описывать.

Самое главное, как это все добро запускать! А очень просто. Мне помогла вот эта
инструкция. Однако переменные среды я менять совсем не хотела, и один разработчик подсказал мне простой обходной путь (сама я в JAVA полный чайник, вот и мучаю знакомых ассов :)). Ниже мой вариант инструкции:

  • Скачиваем Selenium IDE & RC, устанавливаем (RC просто распаковываем, место расположения запоминаем). Все что нужно, перезагружаем.
  • Открываем Firefox. Разворачиваем меню «Инструменты» и о чудо! Видим подменю «SeleniumIDE». Кликаем дрожащей рукой уверенно и радостно. Если SeleniumIDE не видим, то, либо не установили, либо Firefox не перезагрузили.
  • И вот ОНО, «фриварное» чудо, перед нами. Уже записывающее, между прочим. Дабы остановить/начать необходимо нажимать кнопку с красным кругом :). Предлагаю посмотреть, как ЭТО работает на следующем примере:
  • Проверяем, что SeleniumIDE пишет (красная кнопка нажата).
  • В адресной строке Firefox пишем: wikipedia.org.
  • На заглавной странице в выпадающем меню выбираем язык: English.
  • В строку поиска вводим: testing. Жмем ввод.
  • На странице результата поиска кликаем по: Software testing.Заканчиваем запись.
  • Видим следующее в Selenium IDE:


  • Полюбовались? Попробуем нажать на кнопочку play? Вау, оно живое! Порадовались? Ну хватит, хватит, давайте продолжать. В IDE в меню файл выбираем Export Test Case As->Java(Junit)-SeleniumRC. Я использую имя: TrySelenium.java. Пойдем посмотрим, чего там на экспортировалось?

package com.example.tests;

import
com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

public
class TrySelenium extends SeleneseTestCase {
public void setUp() throws
Exception {
setUp("http://wikipedia.org/", "*chrome");
}
public void
testTrySelenium() throws Exception {
selenium.open("/");
selenium.select("language", "label=English");
selenium.type("searchInput", "testing");
selenium.click("go");
selenium.waitForPageToLoad("30000");
selenium.click("link=Software
testing");
selenium.waitForPageToLoad("30000");
}
}

Имеем-с класс (название должно совпадать с именем файла!), содержащий последовательность вызовов селениум-методов, реализующих последовательность наших действий. Красота! Однако, хочется все это добро запустить через Selenium RC, а почему? Да потому, что Selenium RC позволяет преобразить записанный тест в оружие автоматизированного тестирования, используя мощь языка программирования и селениумовский библиотечных классов (громко сказано, а? а вдруг и правду может!). Для начала так далеко заходить не будем, а просто немного преобразуем java-код, дабы запускалось через RC.

import com.thoughtworks.selenium.*;
import junit.framework.*;
import java.util.regex.Pattern;

public class TrySelenium extends SeleneseTestCase {
public void setUp() throws Exception {
setUp("http://wikipedia.org", "*chrome");
}
public void testTrySelenium() throws Exception {
selenium.open("/");
selenium.select("language", "label=English");
selenium.type("searchInput", "testing");
selenium.click("go");
selenium.waitForPageToLoad("30000");
selenium.click("link=Software testing");
selenium.waitForPageToLoad("30000");
}
public static Test suite(){
return new TestSuite(TrySelenium.class);
}

public static void main(String args[]){
junit.textui.TestRunner.run(suite());
}
}

  • Надеюсь, JVM у вас в наличие? Будем считать, что да. Запускаем selenium-server. Открываем терминал, перемещаемся в папку, куда распаковали зипник с Selenium RC. Выполняем: cd selenium-remote-control-1.0-beta-1/selenium-server-1.0-beta-1 (Циферки зависят от скачанной версии!). И запускаем: java -jar selenium-server.jar. Можно запускать и в интерактивном режиме, но пока не трогаем. Смотрим, что не ругается, и радуемся, радуемся. А если ругается, текст ошибки «в зубы» и на просторы Интернета… Добились запуска? А кто бы сомневался.
  • Пришло время компилировать и запускать java-код. Инструкция (см. выше) предлагает поменять переменные среды, как сказано ранее, идем в обход. В папке, где обитает наш java файлик создаем директорию lib, в нее переписываем следующее добро: 1) Отсюда …/selenium-remote-control-1.0-beta-1/selenium-java-client-driver-1.0-beta-1/selenium-java-client-driver.jar; 2)Junit у Вас есть? Нет, ну так качаем, качаем. Отсюда в папку lib добро копируем …/junit-4.6/junit.jar.
  • Открываем еще один терминал, компилируем: javac -cp lib\selenium-java-client-driver.jar;lib\junit-4.6.jar TrySelenium.java. Ошибки не выпрыгнули? Хорошо! Выпрыгнули? Читаем, вникаем, в java-файл возвращаемся, исправляем, компилируем, повторяем, пока не перестанут выпрыгивать ошибки!
  • И вот он! Момент истины. Запускаем наше творение: java -cp .\;lib\selenium-java-client-driver.jar;lib\junit-4.6.jar TrySelenium. Ура! Оно живое! Браузер открывается, в поле текст запроса вводится… А если ошибка вываливается? Опять же читаем, понимаем, ищем решение! А потом радуемся, радуемся, что «каменный цветок» выходит!

Конечно же, приведенный пример очень и очень прост, ничего особенно стоящего он не делает. Но он поможет начать. На сайте Selenium «вагон и маленькая тележка» документации, а на просторах-то «нашего всего» интернета. Дерзайте!

четверг, 7 мая 2009 г.

Для начинающих: Эквивалентное разбиение, оно же разбиение на классы/по классам эквивалентности aka Equivalence partitioning


Чтобы тестирование было эффективным необходимы (прошу заметить, что только необходимы, а не достаточны) эффективные сценарии тестирования. Для создания эффективных сценариев тестирования существуют различные подходы, техники, методы. Рассмотрим разбиение на классы эквивалентности.

Согласно толковому словарю Ожегова класс - относительно целостное множество каких-нибудь единиц, существующее в составе сложного единства, расчленяемого на такие множества. Согласно БЭС, эквивалентность – отношение типа равенства.

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

Рассмотрим пример. Допустим, мы тестируем Интернет-магазин, продающий карандаши. В заказе необходимо указать количество карандашей (максиму для заказа – 1000 штук). В зависимости от заказанного количества карандашей различается стоимость:
  • 1 – 100 – 10 руб. за карандаш;
  • 101 – 200 – 9 руб. за карандаш;
  • 201 - 300 – 8 руб. за карандаш и т.д. С каждой новой сотней, цена уменьшается на рубль.

Если тестировать «в лоб», то, чтобы проверить все возможные варианты обработки заказанного количества карандашей, нужно написать очень много тестов (вспоминаем, что можно заказать аж 1000 штук), а потом еще все это и протестировать. Попробуем применить разбиение на классы эквивалентности. Очевидно, что наши входные данные мы можем разделить на следующие классы эквивалентности:


  1. Невалидное значение: >1000 штук;
  2. Невалидное значение: <=0;
  3. Валидное значение: от 1 до 100;
  4. Валидное значение: от 101 до 200;
  5. Валидное значение: от 201 до 300;
  6. Валидное значение: от 301 до 400;
  7. Валидное значение: от 401 до 500;
  8. Валидное значение: от 501 до 600;
  9. Валидное значение: от 601 до 700;
  10. Валидное значение: от 701 до 800;
  11. Валидное значение: от 801 до 900;
  12. Валидное значение: от 901 до 1000.

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

Приложение.
В качестве дополнения хочу привести парочку определений Equivalence partitioning.

Сем Канер, Джеймс Бах и Брет Петтихорд в Lessons Learned on Software Testing называют эту технику – Анализ классов эквивалентности (Equivalence class analysis) и определяют ее следующим образом:
«Класс эквивалентности – это набор значений переменной, который считается эквивалентным. Тестовые сценарии эквиваленты, если a) они тестируют одно и тоже; b) Если один из них выявляет ошибку, то и остальные выявят ее; c) Если одни из них не выявляет ошибку, то и остальные не выявят. Если определен класс эквивалентности, протестируйте только одно-два значения из него».

RSTQB

определяет технику следующим образом:

«Эквивалентное разбиение: Разработка тестов методом черного ящика, в которой тестовые сценарии создаются для проверки элементов эквивалентной области. Как правило, тестовые сценарии разрабатываются для покрытия каждой области как минимум один раз».

И напоследок, любая поисковая система (я предпочитаю, google) выдаст вам кучу определений, пояснений и примеров.