Не люблю integration ...
Есть наша система, скажем А, и другая - скажем Б. И они друг с другом замечательно работают. В лаборатории. Но вот подошло время их познакомить в "диком поле". И что оказалось ? Нифига не работает. Б в А посылает полную чухню, и откуда она берется - никому неведомо. Что примечательно, в реальности (в отличии от лаборатории), между Б и А есть несколько сот километров и неизвестное число всяческих сетей, систем и firewalls неизвестного предназначения, конфигурации и принадлежности.Начали идти с тестером (сниффером) по пунктам.
1. На выходе Б - полный порядок. В А ничего не приходит. Выход Б подсоединен к чужой сети, товарищ который за нее отвечает "занят, подойдет позже".
2. Подошел. Посмотрел. Сказал - "А черт его знает, я в том что Б передает - ничего не понимаю". Был словесно облагорожен и вооружен сниффером. Посмотрел еще раз.Сказал "что пришло, то и ушло, отстаньте".
3. Выход его сети подсоединен к другой сети .. Таким образом пункты (2) и (3) были повторены раз 10, и ушло на это с месяц.
4. Добрались до неизвестной коробки, которая на раутер не похожа. Спросили - чья ? Получили ответ - "неизвестно." Спросили - "А что будет, если мы ее выключим ?" Получили ответ - "нельзя". Спросили - а что она делает ? Получили ответ - "вроде переводит UDP в TCP и обратно". Задумались ... Хотели спросить "нафиг?" но постеснялись. Осенило - спросили "а кто нибудь проверял что она работает ?". И - ура - получили в ответ "да нет, ее вот только недавно написали и сюда поставили".
5. Поставили сниффер на вход коробки, и на выход. На входе все правильно, на выходе - чухня.
6. Нашли авторов. Выяснили, что гениальный алгоритм перевода работает так - получает UDP пакет, посылает его через TCP. Читает из TCP некое число байт (не имеющее никакого отношение к длинне первоначального UDP пакета), и посылает его через UDP. С точки зрения автора - коробка совершенно "прозрачна" для внешнего наблюдателя, "и чего вы на меня ругаетесь ?"
7.Написали на пальцах что надо сделать, послали автора думать над смыслом жизни.
8.Коробка с новой версией программы поставлена, и ура - данные стали приходить .... С задержкой в несколько секунд.
9.Но тут уже пошло быстро - нашли кого-то, кто знал какие сегменты там есть дальше, оказалось - один из них какой-то WAN со странной конфигурацией, привезли спеца - тот наладил, и вот - данные стали приходить !!! Ура !!!
10.Но не все .... Х% сообщений кто-то оставлял себе на память. Пункт (9) повторили пару раз.
11. Уффф. Все приходит, без потерь, и быстро
12. Система А, наконец-то дождавшись данных, их быстренько отвергла с диагнозом - а чо вы мне такую тухлятину суете ? Что за фигня, вежливо вопросили все присутствующие (к этому моменту вопрос интеграции стал общим местом на совещаниях, типа вопрос о погоде в Лондоне -
А как у них там ?
Да никак вроде.
Да уж.
Смотрим - и видим, что поле "время отсыла", который проставляет система Б, содержит в себе время на 3 часа "в прошлом".
Действие второе.
13. Сообщили клиенту (К1), который сообщил своему клиенту (К2), который обязывался обеспечить ход интеграции с принадлежащей ему системой Б. В процессе обнаружилось, что у К2 за Б отвечает некое подразделение которому на нас, на К1, и вообще на все в большой степени чихать. Поэтому - тишина. В цикле.
14. Обнаружилось что как система А, так и система Б, хотя и разрабатываются в разных предприятиях, фактически пишутся работниками одной и той же маленькой, но гордой фирмы. Поэтому, вместо того чтобы дожидаться когда вопрос будет закрыт по официальным каналам, человек писавший в системе А интерфейс к Б, просто позвонил человеку, писавшему в Б интерфейс к А.
15. Девятый вагон - это не тот который после восьмого, а который перед десятым. Именно об этом подумал я, когда мне доложили причину проблемы - в спецификации интерфейса черным по белому написано, что поле времени содержим в себе "Местное время системы Б, в формате UTC". Из этого утверждения система Б поняла что надо посылать "местное время" - local time. А система А поняла что время в формате UTC. И в чем-то обе правы. После железного аргумента - "ты что, хочешь еще интегрироваться на момент изменения летнего/зимнего времени ?" коллектив системы Б быстренько изменил форматирование ...
16. И УРА - ОНО ЗАРАБОТАЛО !!!! Целый интерфейс, содержащий целую пару сообщений, который в лаборатории заработал сходу.
17. Вопрос - бонус - почему, раз времена посылались неправильно, А и Б работали вместе в лаборатории ? Ответ - потому что в момент интеграции, товарищЪ из группы Б, видя что система А жалуется на время, поменял в компьютере Б time zone,так, чтобы local time Б соответствовал UTC ожидаемый А. И - главное- ниииикому об этом не рассказал. Ибо - нефиг, сюрприз - это главное в жизни.
К чему это я ?
Надо было дать оценку стоимости на один проект. Один из пунктов - интеграция простенького интерфейса, дня на 2-3 работы.
Я дал оценку - $20,000. С разбивкой:
System Engineering
STD
Design
Implementation
Unit Testing
Simulators Design
Simulators Implementation
Testing
Software Laboratory Integration
Integration Laboratory Integration
Field Integration
Так вот, Field Integration я кажется недооценил ...
П.С.
50% времени всех попыток у развернутой в "диком поле" системы А сидел наш человек, вяло глядя на открытый экран сниффера, и периодически отвечающий на звонки:
видишь ?
не вижу
А сейчас ?
Тоже не вижу
И т.д.