Top Banner
35

Никита Галкин "Spec driven development in Microservices"

Jan 15, 2017

Download

Technology

fwdays
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Никита Галкин "Spec driven development in Microservices"
Page 2: Никита Галкин "Spec driven development in Microservices"

Никита

Галкин

Backendразработчик

ЛюблюHighload,OpensourceиХакатоны

Умеюделитьмонолитынамикросервисы

наPHPиNode.js

вкомпания Ciklum(ThomasCook)

galk-in galkin galk_in nikitagalkin

Page 3: Никита Галкин "Spec driven development in Microservices"

Вчемпроблема?

Page 4: Никита Галкин "Spec driven development in Microservices"

Бизнесрешаетлюбуюпроблемуновым

процессом

Page 5: Никита Галкин "Spec driven development in Microservices"

Вчем

проблема?Бизнесрешаетлюбуюпроблемуновым

процессом:

Плохо=>Будемпроверять=>TDD

Нето=>Делаемвместе=>Scrum

Долго=>Автоматизируем=>CI/CD

Дорого=>Наймемдругих=>Outsorcing

Непонятно=>Говоритепонятно=>DDD

Page 6: Никита Галкин "Spec driven development in Microservices"

Вчем

проблема? Итакдалее

Page 7: Никита Галкин "Spec driven development in Microservices"
Page 8: Никита Галкин "Spec driven development in Microservices"

Вчем

проблема? Организовывать

совместнуюработу

разработчиковэффективно

Page 9: Никита Галкин "Spec driven development in Microservices"

Чтотакоеспецификация?

Page 10: Никита Галкин "Spec driven development in Microservices"

Термины

Спецификация

этоконтракт

междуразработчиками.

Page 11: Никита Галкин "Spec driven development in Microservices"

Термины

Спецификация

неописывает

бизнеслогику.

Page 12: Никита Галкин "Spec driven development in Microservices"

Термины

Спецификация

фиксируетдоговоренности,

анеописываеткод.

Page 13: Никита Галкин "Spec driven development in Microservices"

–QAинформируетобаге

–Ответственныхнет,ниBE,ниFEнемогут

воспроизвести

–Фронтэндсчитает,чтовиноватбэкенд

–Бэкендсчитает,чтовиноватфронтэнд

–"Ивообщеунассвоихбаговхватает"(c)

Page 14: Никита Галкин "Spec driven development in Microservices"

Различайте

багивлогикеи

багивреализации

спецификации

Page 15: Никита Галкин "Spec driven development in Microservices"

Составныечастиспецификации

Page 16: Никита Галкин "Spec driven development in Microservices"

1.Структураданных

2.Методыработысданными

3.Информированиеобошибках

Page 17: Никита Галкин "Spec driven development in Microservices"

НапримереREST:

1.Структураданных

JSONschema

2.Методыработысданными

endpoints

3.Информированиеобошибках

Responsecodes

Page 18: Никита Галкин "Spec driven development in Microservices"

Требованиякспецификации

Page 19: Никита Галкин "Spec driven development in Microservices"

1.Использованиестандарта

2.Консистентность(согласованость)

3.Версионность

4.Семантичность(компилируемость)

5.Актуальность

Page 20: Никита Галкин "Spec driven development in Microservices"

Каквсеначиналось...

Page 21: Никита Галкин "Spec driven development in Microservices"

–ЕстьмонолитBackendдляiOS/Androidприложения

–Большойнакопленныйтехническийдолг

–СкоробудетрефакторингBackend-а

–Бэклогпустой

–Чтоделать?

Page 22: Никита Галкин "Spec driven development in Microservices"
Page 23: Никита Галкин "Spec driven development in Microservices"
Page 24: Никита Галкин "Spec driven development in Microservices"

Кактестировать

Page 25: Никита Галкин "Spec driven development in Microservices"

Как

тестировать–Юнит

–Интеграционные

–Функциональные

–Приемочные

Стандартноеделениетестов

Page 26: Никита Галкин "Spec driven development in Microservices"

Как

тестировать–UnitTesting

–IntegrationTesting

–ComponentTesting

–ContractTesting

–EndtoEndTesting

TestingstrategiesinMicroServicesbyMartinFowler

Page 27: Никита Галкин "Spec driven development in Microservices"

Как

тестировать–TDDUnitTesting

–TDDIntegrationTesting

–TDDComponentTesting

–SDDContractTesting

–BDDEndtoEndTesting

Page 28: Никита Галкин "Spec driven development in Microservices"

Чтоможноделатьнаоснованииспецификации?

Page 29: Никита Галкин "Spec driven development in Microservices"

Валидироватьвходныеданные

Автоматизироватьконтрактноетестирование

Делатьmockмикросервисов

Генерироватьstubданные

Генерироватьдокументацию

Автоматизироватьтиповыедействия

Page 30: Никита Галкин "Spec driven development in Microservices"

Нашопыт

Page 31: Никита Галкин "Spec driven development in Microservices"

Структура

данных JSONschema

{

"id":"http://example.com/entry-schema#",

"$schema":"http://json-schema.org/draft-04/schema#",

"title":"ExampleSchema",

"type":"object",

"properties":{

"firstName":{

"type":"string"

},

"lastName":{

"type":"string"

},

"age":{

"description":"Ageinyears",

"type":"integer",

"minimum":0

}

},

"required":["firstName","lastName"],

"additionalProperties":false

}

Page 32: Никита Галкин "Spec driven development in Microservices"

Валидация varschema=require('../../schemas/user.json');

varvalidate=require('jsonschema').validate;

Controller.prototype.validate=function(req,res,next){

varvalidatorResult=validate(req.body,schema);

if(validatorResult.valid)returnnext();

next({code:400,error:validatorResult.errors});

};

Page 33: Никита Галкин "Spec driven development in Microservices"

Спецификация

–НашвыборRAML

–Swagger

–ApiBlueprint

Выбиратьвам

Page 34: Никита Галкин "Spec driven development in Microservices"

AbaoКонтрактноетестированиеRAML–Abao

Подкапотомcoffeescriptиmocha

Валидируетсхемыикоды

Пример

Page 35: Никита Галкин "Spec driven development in Microservices"

TobecontinuedinLogDrivenDevelopment