SlideShare a Scribd company logo
Как защитить свой код 
Кузнецов Дмитрий 
01
Как сло 
ма т ь код 
✖ Дать джуниору доступ до репозитория 
✖ Сменить окружение 
✖ Сменить контент 
✖ Не проработанные требования 
✖ Противоречивые требования 
02
I. Вёрстка 
03
Иконка 
04
Текст 
Go! 
05
Длинный текст 
Поехали! 
06
Многострочный текст 
Нажмите чтобы 
поехать! 
07
Текст-подсказка 
Нажмите чтобы 
поехать! 
Это кнопка на которую 
можно нажимать 
08
Много букв 
Одиннадцатиклас 
сница 
рентгеноэлектрокардиогра 
фическая 
09
Крестик 
Одиннадцатикл 
ассница 
рентгеноэлектрокардиогра 
фическая 
10
Нет основного текста 
рентгеноэлектрокардиогра 
фическая 
11
Сколько мы 
сломали? 
12
Go! Поехали! Нажмите чтобы 
поехать! 
Нажмите чтобы 
поехать! 
Это кнопка на которую 
можно нажимать 
Одиннадцатикл 
ассница 
рентгеноэлектрокардиогра 
фическая 
Одиннадцатикл 
ассница 
рентгеноэлектрокардиогра 
фическая 
рентгеноэлектрокардиогра 
фическая 
13
А как надо? 
14
Графеновая 
вёрстка! 
15
100% регрессия 
Go! Поехали! Нажмите чтобы 
поехать! 
Нажмите чтобы 
поехать! 
Это кнопка на которую 
можно нажимать 
Одиннадцатик 
лассница 
рентгеноэлектрокарди 
ографическая 
Одиннадцати 
классница 
рентгеноэлектрокар 
диографическая 
рентгеноэлектрокар 
диографическая 
16
17
18
19
Защищаем вёрстку: 
— Одиннадцатиклассница 
— Многострочные тексты 
— Пустые строки 
— Совмещение макета с вёрсткой (pixel perfect) 
— И всё это на одной html странице 
20
II. +JavaScript 
21
auth 
22
А что если... 
— Не заполнены поля 
— Слишком короткий логин 
— Слишком длинный логин 
— Логин не существует 
— Пароль не подходит 
— Бэкенд не отвечает 
— Пароль не подходит более 3 раз подряд 
— Капча набрана неправильно 
— Заполнить и нажать вход 
— Следующий слайд пожалуйста 
23
Ошибка авторизации 
— А давайте 
напишем DOM-тест! 
24
DOM-тест 
Сколько будет 2 + 2? 
Будет 4 
Действительно 4! 
Что лучше, TypeScript или Dart? 
Dart 
Извините, вы нам не подходите. 
01. 
02. 
03. 
01. 
02. 
03. 
25
А что будет, если мыло занято и пароль 
формально не подходит? 
$('.login').val('existingName') 
$('.pass').val('1') 
$('.submit').click() 
01. 
02. 
03. 
26
Отвечает auth: 
$('.pass').hasClass('error') === true 
$('.errorMsg').length === 1 
$('.errorMsg').text() === 'Ошибка' 
01. 
02. 
03. 
27
auth.takeResponce 
28
...если бэкенд ответит, что пароль 
неправильный? 
$('.login').val('name') 
$('.pass').val('123456') 
$('.submit').click() 
auth.takeResponce(errorData) 
01. 
02. 
03. 
04. 
29
Отвечает auth: 
$('.pass').hasClass('error') === true 
$('.errorMsg').length === 1 
$('.errorMsg').text() === errorData.msg 
01. 
02. 
03. 
30
...бэкент не отвечает 10 секунд? 
var clock = sinon.useFakeTimers() 
$('.login').val('name') 
$('.pass').val('123456') 
$('.submit').click() 
clock.tick(10 * 1000) 
01. 
02. 
03. 
04. 
05. 
31
Отвечает auth: 
$('.auth').hasClass('timeout') === true 
$('.errorMsg').length === 1 
$('.errorMsg').text() === 'Ваш интернет плох' 
01. 
02. 
03. 
32
$.ajax 
33
...нажать на вход при формально правильных 
данных? 
sinon.spy($, 'ajax') 
$('.login').val('name') 
$('.pass').val('123456') 
$('.submit').click() 
01. 
02. 
03. 
04. 
34
Отвечает auth: 
$.ajax.called === true 
35
DOM-тесты на 
вёрстку 
36
Горизонтальная резиновость 
37
Вертикальная резиновость 
38
Итого 
— Проверка DOM элементов и атрибутов 
— CSS классов и свойств 
— Резиновости 
— Таймаутов 
— Слежение за методами 
— Всё это мы не делаем! 
39
Как сломать код 
✓ Дать джуниору доступ до репозитория графеновая вёрстка 
✓ Сменить окружение проверка резиновости 
✓ Сменить контент электрокардиографическая одиннадцатиклассница 
✓ Не проработанные требования прорабатываем 
✓ Противоречивые требования невозможны 
40
Как это работает у нас 
— Проработка контекста 
— Решение задачи 
— Написание тесткейсов и тестов 
— Регрессия вёрстки 
— git push -> хук с тестами 
41
Будь мужиком, 
защити свой код! 
42
Вопросы 
43

More Related Content

PDF
“Атличнаи дивчачьи каньки”: исправляем ошибки" Андрей Смирнов (Avito)
PDF
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
PDF
Highway to Continuous Integration — Денис Трифонов, 2ГИС
PDF
Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...
PDF
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
PDF
«Автоматизация функционального тестирования REST API: секреты, тонкости и под...
PDF
Knockoutjs на примере 2ГИС-Онлайн
PDF
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
“Атличнаи дивчачьи каньки”: исправляем ошибки" Андрей Смирнов (Avito)
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
Highway to Continuous Integration — Денис Трифонов, 2ГИС
Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
«Автоматизация функционального тестирования REST API: секреты, тонкости и под...
Knockoutjs на примере 2ГИС-Онлайн
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС

Viewers also liked (9)

PDF
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
PDF
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
PDF
Суперсилы Chrome developer tools
PDF
Winium — это как Selenium, только под Windows
PDF
Тимофей Чаптыков «Верстальщик должен быть ленивый»
PDF
Роман Янке
PDF
Автоматизация тестирования как сервис
PDF
Github Flow. Тестировщики против тестирования
PPTX
Лайфхаки ручного тестирования на мобилках
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
Суперсилы Chrome developer tools
Winium — это как Selenium, только под Windows
Тимофей Чаптыков «Верстальщик должен быть ленивый»
Роман Янке
Автоматизация тестирования как сервис
Github Flow. Тестировщики против тестирования
Лайфхаки ручного тестирования на мобилках
Ad

Similar to Как защитить свой код (12)

PDF
Frontend
PPT
Web весна 2013 лекция 11
PPT
Web осень 2012 лекция 11
PPT
Информационная безопасность и web-приложения
PDF
Общая модель аутентификации HTTP-сообщений на основе хэш- функций в веб-прил...
PDF
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...
PPT
Web весна 2012 лекция 11
PDF
Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)
PDF
Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)
PDF
15 - Web-технологии. Сессии и авторизация
PPTX
Alexei Sintsov - "Between error and vulerability - one step"
PDF
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Frontend
Web весна 2013 лекция 11
Web осень 2012 лекция 11
Информационная безопасность и web-приложения
Общая модель аутентификации HTTP-сообщений на основе хэш- функций в веб-прил...
Общая модель аутентификации HTTP-сообщений на основе хэш-функций в веб-прилож...
Web весна 2012 лекция 11
Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)
Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)
15 - Web-технологии. Сессии и авторизация
Alexei Sintsov - "Between error and vulerability - one step"
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Ad

Как защитить свой код