Никита Галкин "spec driven development in microservices"

35

Upload: fwdays

Post on 15-Jan-2017

344 views

Category:

Technology


0 download

TRANSCRIPT

Никита

Галкин

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

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

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

наPHPиNode.js

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

galk-in galkin galk_in nikitagalkin

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

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

процессом

Вчем

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

процессом:

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

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

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

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

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

Вчем

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

Вчем

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

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

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

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

Термины

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

этоконтракт

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

Термины

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

неописывает

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

Термины

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

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

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

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

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

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

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

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

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

Различайте

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

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

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

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

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

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

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

НапримереREST:

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

JSONschema

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

endpoints

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

Responsecodes

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

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

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

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

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

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

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

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

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

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

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

–Чтоделать?

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

Как

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

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

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

–Приемочные

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

Как

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

–IntegrationTesting

–ComponentTesting

–ContractTesting

–EndtoEndTesting

TestingstrategiesinMicroServicesbyMartinFowler

Как

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

–TDDIntegrationTesting

–TDDComponentTesting

–SDDContractTesting

–BDDEndtoEndTesting

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

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

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

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

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

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

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

Нашопыт

Структура

данных 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

}

Валидация 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});

};

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

–НашвыборRAML

–Swagger

–ApiBlueprint

Выбиратьвам

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

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

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

Пример

TobecontinuedinLogDrivenDevelopment