SlideShare a Scribd company logo
Кузнецов Дмитрий
Как защитить свой ко
д
д
01
Как сло
✖ Дать джуниору доступ до репозитория
✖ Сменить окружение
✖ Сменить контент
✖ Не проработанные требования
✖ Противоречивые требования
мать код
02
I. Вёрстка
03
Иконка
05
Текст
Go!
07
Длинный текст
Поехали!
11
Многострочный текст
Нажмите чтобы
поехать!
Нажмите чтобы
поехать!
13
Текст-подсказка
Нажмите чтобы
поехать!
Это кнопка на которую
можно нажимать
17
Много букв
Одиннадцатиклас
сница
рентгеноэлектрокардиогра
фическая
19
Крестик
Одиннадцатикл
ассница
рентгеноэлектрокардиогра
фическая
23
Нет основного текста
рентгеноэлектрокардиогра
фическая
29
Всё починено?
31
Go! Поехали! Нажмите чтобы
поехать!
Нажмите чтобы
поехать!
Это кнопка на которую
можно нажимать
Одиннадцатикл
ассница
рентгеноэлектрокардиогра
фическая
Одиннадцатикл
ассница
рентгеноэлектрокардиогра
фическая
рентгеноэлектрокардиогра
фическая
37
А как надо?
41
Графеновая
вёрстка!
43
47
100% регрессия
Go! Поехали! Нажмите чтобы
поехать!
Нажмите чтобы
поехать!
Это кнопка на которую
можно нажимать
Одиннадцатик
лассница
рентгеноэлектрокарди
ографическая
Одиннадцати
классница
рентгеноэлектрокар
диографическая
рентгеноэлектрокар
диографическая
53
59
61
67
Защищаем вёрстку:
— Одиннадцатиклассница
— Многострочные тексты
— Пустые строки
— Совмещение макета с вёрсткой (pixel perfect)
— И всё это на одной html странице
71
II. +JavaScript
73
auth
79
А что если...
— Не заполнены поля
— Слишком короткий логин
— Слишком длинный логин
— Логин не существует
— Пароль не подходит
— Бэкенд не отвечает
— Пароль не подходит более 3 раз подряд
— Капча набрана неправильно
— Заполнить и нажать вход
— Следующий слайд пожалуйста
83
Ошибка авторизации
— А давайте
напишем DOM-тест!
89
DOM-тест
Сколько будет 2 + 2?
Будет 4
Действительно 4!
Запишите формулу Эйлера
--no-verify
Вы правы как никогда!
01.
02.
03.
01.
02.
03.
97
А что будет, если мыло занято и пароль
формально не подходит?
$('.login').val('existingName')
$('.pass').val('1')
$('.submit').click()
01.
02.
03.
101
Отвечает auth:
$('.pass').hasClass('error') === true
$('.errorMsg').length === 1
$('.errorMsg').text() === 'Ошибка'
01.
02.
03.
103
auth.takeResponce
107
Асинхронный колбек
$.ajax({
...
callback: function(data) {
auth.takeResponce(data);
}
});
01.
02.
03.
04.
05.
06.
109
...если бэкенд ответит, что пароль
неправильный?
$('.login').val('name')
$('.pass').val('123456')
$('.submit').click()
auth.takeResponce(errorData)
01.
02.
03.
04.
113
Отвечает auth:
$('.pass').hasClass('error') === true
$('.errorMsg').length === 1
$('.errorMsg').text() === errorData.msg
01.
02.
03.
127
...бэкент не отвечает 10 секунд?
var clock = sinon.useFakeTimers()
$('.login').val('name')
$('.pass').val('123456')
$('.submit').click()
clock.tick(10 * 1000)
01.
02.
03.
04.
05.
131
Отвечает auth:
$('.auth').hasClass('timeout') === true
$('.errorMsg').length === 1
$('.errorMsg').text() === 'Ваш интернет плох'
01.
02.
03.
137
$.ajax
139
...нажать на вход при формально правильных
данных?
sinon.spy($, 'ajax')
$('.login').val('name')
$('.pass').val('123456')
$('.submit').click()
01.
02.
03.
04.
149
DOM-тесты на
вёрстку
151
Горизонтальная резиновость
157
Вертикальная резиновость
163
Итого
— Проверка DOM элементов и атрибутов
— CSS классов и свойств
— Резиновости
— Таймаутов
— Слежение за методами
— Всё это мы не делаем!
167
Как сломать код
✓ Дать джуниору доступ до репозитория графеновая вёрстка
✓ Сменить окружение проверка резиновости
✓ Сменить контент электрокардиографическая одиннадцатиклассница
✓ Не проработанные требования прорабатываем
✓ Противоречивые требования невозможны
173
Как это работает у нас

Ctx

Resolve
 
Tests
 
Regression
 
push
 
hooks

179
Будь мужиком,
защити свой код!
181
Вопросы
191

More Related Content

Viewers also liked

Health econ Chapter 1
Health econ Chapter 1Health econ Chapter 1
Health econ Chapter 1rahman_mar
 
Ancient egypt homework
Ancient egypt homeworkAncient egypt homework
Ancient egypt homework
chlo464
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим Ипполитов
DevDay
 
Ancient egypt homework
Ancient egypt homeworkAncient egypt homework
Ancient egypt homeworkchlo464
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
DevDay
 
Isko product launch workshop
Isko product launch workshopIsko product launch workshop
Isko product launch workshop
Özge Duman
 
2 lina-y-diego-nic1
2 lina-y-diego-nic12 lina-y-diego-nic1
2 lina-y-diego-nic1
Alejandro Duque
 
Digitization of sales and marketing seminar in stockholm 17 october 2014
Digitization of sales and marketing seminar in stockholm 17 october 2014Digitization of sales and marketing seminar in stockholm 17 october 2014
Digitization of sales and marketing seminar in stockholm 17 october 2014
Kimmo Kanerva
 
Converse Case Study
Converse Case StudyConverse Case Study
Converse Case Study
Özge Duman
 
Nintendo Case Study
Nintendo Case StudyNintendo Case Study
Nintendo Case Study
Özge Duman
 

Viewers also liked (11)

Health econ Chapter 1
Health econ Chapter 1Health econ Chapter 1
Health econ Chapter 1
 
Ancient egypt homework
Ancient egypt homeworkAncient egypt homework
Ancient egypt homework
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим Ипполитов
 
Before the gym
Before the gymBefore the gym
Before the gym
 
Ancient egypt homework
Ancient egypt homeworkAncient egypt homework
Ancient egypt homework
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
 
Isko product launch workshop
Isko product launch workshopIsko product launch workshop
Isko product launch workshop
 
2 lina-y-diego-nic1
2 lina-y-diego-nic12 lina-y-diego-nic1
2 lina-y-diego-nic1
 
Digitization of sales and marketing seminar in stockholm 17 october 2014
Digitization of sales and marketing seminar in stockholm 17 october 2014Digitization of sales and marketing seminar in stockholm 17 october 2014
Digitization of sales and marketing seminar in stockholm 17 october 2014
 
Converse Case Study
Converse Case StudyConverse Case Study
Converse Case Study
 
Nintendo Case Study
Nintendo Case StudyNintendo Case Study
Nintendo Case Study
 

More from DevDay

«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
DevDay
 
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
DevDay
 
«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков
DevDay
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
DevDay
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
DevDay
 
Devops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим Пашук
DevDay
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий Кожевников
DevDay
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
DevDay
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин
DevDay
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко
DevDay
 
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоМанипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
DevDay
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв
DevDay
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
DevDay
 
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
DevDay
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
DevDay
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»
DevDay
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
DevDay
 
Распределенные приложения и Azure Service Bus
Распределенные приложения и Azure Service BusРаспределенные приложения и Azure Service Bus
Распределенные приложения и Azure Service Bus
DevDay
 
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
DevDay
 

More from DevDay (20)

«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
 
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
 
«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Devops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим Пашук
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий Кожевников
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко
 
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоМанипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
 
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 
Распределенные приложения и Azure Service Bus
Распределенные приложения и Azure Service BusРаспределенные приложения и Azure Service Bus
Распределенные приложения и Azure Service Bus
 
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
 

Frontend