Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практики, тренды

112 views

Published on

JS Lab2017, 25 марта, Одесса
Евгений Сафронов (Senior developer at DataArt)
Тестирование Javascript кода. Инструменты, практики, тренды
О тестах и качестве с различных точек зрения и ракурсов. Тестирование, выполняемое разработчиками. Основные тренды, методы и инструменты для тестирования Javascript кода. Лучшие практики и подходы.
Все материалы: http://jslab.in.ua/
Организаторы: http://geekslab.org.ua/

Published in: Technology
  • Be the first to comment

  • Be the first to like this

JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практики, тренды

  1. 1. ТЕСТИРОВАНИЕ JAVASCRIPT КОДА. ИНСТРУМЕНТЫ, ПРАКТИКИ, ТРЕНДЫ Евгений Сафронов Senior developer 25.03.2017 evgeniy.safronov@outlook.com skype: lambda.omega1
  2. 2. Тестирование, как инженерная практика, появилось раньше чем программирование
  3. 3. Здесь тоже есть своя философия
  4. 4. Здесь тоже есть своя философия
  5. 5. ЭДСГЕР ДЕЙКСТРА «Тестирование программ можно использовать для того, чтобы показать наличие ошибок и никогда — для того чтобы показать их отсутствие!»
  6. 6. Почему тестировать программы так важно?
  7. 7. Как правило, самые дорогостоящие ошибки вызваны изменением одного символа.
  8. 8. Ivan Ivanov i.ivanov First name: Last name: Login: 0..255 0..255 0..20 a-z, A-Z a-z, A-Z a-z, A-Z, 0-9, . - % $ Количество возможных ситуаций > 52255 + 52255 + 3620
  9. 9. 25.18% Структурные 22.14% Данных 16.19% Реализация функциональности 9.88% Конструирования 8.98% Интеграции 8.12% Функциональных требований 2.76% Определение и выполнение тестов 1.14% Архитектура ПО 4.71% Другие 9 Типы ошибок в проектах
  10. 10. 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 2K 8K 32K 128K 512K Конструирование Проектирование Выработка требований Статистика ошибок на стадиях разработки
  11. 11. Правило Парето работает и в тестировании ПО: 80% дефектов локализированы лишь в 20% вашего кода.
  12. 12. Т.е. если тестами покрыто 50% кода нельзя утверждать, что удалось предотвратить 50% возможных дефектов
  13. 13. Тестирование - самая популярная методика управления качеством.
  14. 14. Классификация
  15. 15. Тестирование может выполнятся разработчиками, тестировщиками, заказчиками и т.д.
  16. 16. Тестирование черного и белого ящиков
  17. 17. Классификация по цели: • Регрессионное • Нагрузочное • UX - тестирование • Тестирование защищенности и надежности • Обнаружение дефектов
  18. 18. Какие тесты пишут разработчики? • Модульные тесты • Функциональные тесты • Интеграционные • End-to-end
  19. 19. Модульное тестирование
  20. 20. • Быстрота (Fast) - Если тесты выполняются медленно, вам не захочется их запускать. • Независимость (Independent) - Один тест не должен создавать условия для выполнения следующего теста. Все тесты должны выполняться независимо и в любом порядке. • Повторяемость (Repeatable) - Тесты должны давать повторяемые результаты в любом окружении. • Очевидность (Self-Validating) - Результатом выполнения теста должен быть логический признак. Тест либо прошел либо нет. Тесты должны создаваться своевременно. • Своевременность (Timely) F.I.R.S.T.
  21. 21. TDD и BDD
  22. 22. TDD процесс
  23. 23. suite('#factorial()', function (){ test('equals 1 for sets of zero length', function (){ assert.equal(1, factorial(0)); }); test('equals 1 for sets of length one', function (){ assert.equal(1, factorial(1)); }); test('equals 2 for sets of length two', function (){ assert.equal(2, factorial(2)); }); test('equals 6 for sets of length three', function (){ assert.equal(6, factorial(3)); }); }); TDD стиль написания тестов
  24. 24. describe('#factorial()', function (){ it('should return 1 when given 0', function (){ factorial(0).should.equal(1); }); it('should return 1 when given 1', function (){ factorial(1).should.equal(1); }); it('should return 2 when given 2', function (){ factorial(2).should.equal(2); }); it('should return 6 when given 3', function (){ factorial(3).should.equal(6); }); }); BDD стиль написания тестов
  25. 25. Особенности модульного тестирования • дает возможность писать много тестов, причем достаточно быстро • необходимость изолировать участки кода (mocks, stubs, spies) • требует понимания кода, который нужно тестировать (тестирование белого ящика)
  26. 26. Существует много инструментов которые позволяют выполнять модульное тестирование JS кода
  27. 27. QUnit Это библиотека от разработчиков jQuery, позволяющая писать unit- тесты в TDD стиле и имеющая свой механизм assert-ов. QUnit.test( "hello test", function( assert ) { assert.ok( 1 == "1", "Passed!" ); });
  28. 28. Mocha Фреймворк для тестирования, позволяющий писать тесты в TDD и BDD формате describe('User', function() { describe('#save()', function() { it('should save without error', function(done) { var user = new User('Luna'); user.save(function(err) { if (err) done(err); else done(); }); }); }); });
  29. 29. Chai Очень популярная библиотека assert’ов assert.typeOf(foo, 'string'); assert.equal(foo, 'bar'); assert.lengthOf(foo, 3; assert.property(tea, 'flavors'); assert.lengthOf(tea.flavors, 3); expect(foo).to.be.a('string'); expect(foo).to.equal('bar'); expect(foo).to.have.lengthOf(3); expect(tea).to.have.property('flavors').with.lengthOf(3); foo.should.be.a('string'); foo.should.equal('bar'); foo.should.have.lengthOf(3); tea.should.have.property('flavors').with.lengthOf(3);
  30. 30. Sinon Инструмент для создания Mocks, stubs, spies function () { var myAPI = { method: function () {} }; var spy = sinon.spy(); var mock = sinon.mock(myAPI); mock.expects("method").once().throws(); PubSub.subscribe("message", myAPI.method); PubSub.subscribe("message", spy); PubSub.publishSync("message", undefined); mock.verify(); assert(spy.calledOnce); }
  31. 31. Jasmine Популярный в экосистеме Angular’a, BDD фреймворк describe("A suite is just a function", function() { var a; it("and so is a spec", function() { a = true; expect(a).toBe(true); }); });
  32. 32. • Тестирование - это долго и дорого. Разумеется тестирование увеличивает время на разработку, но уменьшает время, затраченное на рефакторинг и багфикс. • Писать тесты – это скучно и нудно. Написание тестов позволяет еще раз взглянуть на вашу архитектуру и принять правильные решения • 100%-ое покрытия. Тестов необходимо ровно столько, сколько достаточно для выпуска стабильного и надежного продукта. • Тестирование не позволяет писать код без багов. Мифы
  33. 33. • Заказчик не поддерживает и не принимает идею unit-тестов в проекте • Тесты пишутся только для наличия и метрик, а «чистоте» тестов не уделяется должное внимание • Вы пишите тесты намного позже создания кода. Тесты не актуализируются Ситуации бывают разные
  34. 34. ?
  35. 35. Спасибо! F O O T E R H E R E 38

×