Представьте, что вам предстоит собеседование на позицию системного аналитика (СА). Что нужно знать для успешного прохождения интервью и какие вопросы могут задать? Эта статья может стать roadmap при подготовке к собеседованию.    Для начала, давайте обозначим границы, чтобы понимать для кого эти темы и вопросы актуальны. Границы роли системного аналитика далеко не всегда четко обозначены. От компании к компании я встречаю совершенно разные интерпретации должностных обязанностей таких специалистов. Однако, большинство компаний, занимающихся веб- и мобильной разработкой близки в своем понимании роли СА и требованиях к кандидатам. Чаще всего требования к кандидатам следующие (помимо опыта работы в определенном домене): Основная деятельность: сбор, анализ и документирование требований к ПО на техническом языке. Сопутствующее общение с заказчиками и проектной командой, изучение предметной области, участие в проектировании решений, проверка реализованного функционала на соответствие требованиям, участие в показах.   Требуемые hard skills: навыки разработки технической документации (BRD, SRS), опыт работы с различными СУБД, уверенные знания SQL, проектирование модели данных, знание нотаций UML, BPMN, знание различных методов интеграции систем, понимание принципов проектирования REST API, опыт работы с SOAP, понимание особенностей форматов обмена данными JSON/XML.   Требуемые soft skills: коммуникабельность, способность находить общий язык и с разработкой, и с бизнесом, аналитическое мышление, умение работать в условиях недостатка информации, адаптивность к изменениям, проактивность и ответственность за конечный результат.   За последний год на позиции тимлида группы системных аналитиков я провела немало собеседований. Но не менее ценным опытом считаю личные собеседования на позицию СА в других компаниях, в ходе которых я выявила для себя ТОП-5 тем с возможными вопросами, которые повторялись практически на каждом интервью. Во избежание читерства я не буду давать ответы, но оставлю ссылки на ресурсы, изучив которые вы с легкостью ответите на все вопросы. Сразу уточню, что далеко не все вопросы встретятся у вас на собеседовании одновременно. Но если вы претендуете на высокую позицию и пройдете N собеседований, то с большой долей вероятности встретите все эти вопросы на своем пути. Также хочу отметить, что для аналитиков разного уровня требуется разная детализация ответов. Если вы junior/pre-middle, то обычно достаточно поверхностного ответа на приведенные примеры вопросов, чтобы интервьюер понял, что вы сталкивались с темой или хоть чуть-чуть в этом разбирались. Тема очень важная, я бы даже сказала основополагающая, но при этом достаточно холиварная. Потому что обилие информации провоцирует ее разночтения. Чаще всего интервьюеры ожидают услышать ответы на основании модели, представленной в книге К. Вигерса и Д. Битти "Разработка требований к ПО". Поэтому не лишним будет заранее подготовить примеры по уровням требований (бизнес-требования, пользовательские и функциональные). Что такое требование к ПО? Какие виды требований вы знаете? Чем отличаются бизнес-требования от функциональных? Чем отличаются функциональные требования от нефункциональных? Чем отличаются пользовательские требования от функциональных? Привести примеры каждого из требований или классифицировать предложенные требования. Какие критерии качества требований вы знаете? Для компаний, где роль СА объединена с БА (бизнес-аналитиком). Сюда же могут попасть вопросы про выявление требований: основные техники сбора требований, управление стейкхолдерами (заинтересованными сторонами), выбор стратегии работы со стейкхолдерами и тп.   Ответы на все вопросы есть в замечательной книге К. Вигерса и Д. Битти «Разработка требований к ПО». Книга, на мой взгляд, обязательна к прочтению каждому СА. Но если вам все-таки лень читать 716 страниц достаточно сложного к восприятию текста, то вот список ресурсов, где хорошо описаны ответы на вопросы выше: Полезные выдержки вышеобозначенной книги вы можете найти тут и тут Про критерии качества требований Интересная презентация про разные подходы к классификации требований (по Вигерсу, ГОСТ34, SWEBOK, IEEE 830 и RUP) В основном тут достаточно рассказывать про свой опыт и про то, как организован процесс разработки на текущем месте работы. Но будет плюсом, если вы покажете эрудицию, рассказав про разные методологии и их использование. Какие методологии вы знаете? Работали ли вы по Agile/Waterfall или любой другой методологии. Расскажите про жизненный цикл разработки проекта: этапы, роли, артефакты. Какую роль выполняет системный аналитик в проектах разработки ПО? Какие обязанности закреплены за вами на вашем текущем месте работы? Про процесс, роли и артефакты Модели жизненного цикла, принципы и методологии разработки программного обеспечения (ПО), а можно и покороче Про БА vs СА Опять же, как и в предыдущем блоке в основном вопросы про ваш опыт, чтобы оценить насколько он релевантен тому, что вам предстоит делать. Какую документацию вы пишете на текущем месте работы? Что вы описываете в ТЗ на разработку? Насколько детально вы описываете то, что требуется реализовать? Бизнесовым или техническим языком? Какие артефакты остаются в итоге вашей работы и для чего они используются в дальнейшем? Был ли опыт работы с ГОСТом 34/19? Кто ставит задачи на разработку? В описании постановок на разработку придерживаетесь ли вы какого-то определенного формата? Какой уровень детализации ваших постановок? Про разные стандарты ТЗ на разработку ПО Шаблон спецификации требований к ПО Как показывает практика, далеко не каждый СА участвует в проектировании решения. Это связано с различиями в понимании роли СА в разных компаниях, а также с уровнем компетенции СА (достаточно ли у аналитика знаний и опыта, для влияния на выбор реализации решения или нет). Но, как минимум, аналитик всегда может облегчить задачу тем, кто занимается проектированием решения, предоставив им исчерпывающее, грамотно оформленное и понятное всем описание бизнес-задачи и ожидаемых функциональных возможностей системы.   Участвуете ли вы в проектировании решения? Если да, то каким образом? Вопросы про работу с базами данных: Что такое БД? Какие бывают БД (речь про классификацию по модели данных)? С какими БД работали? Что такое СУБД? Основные функции СУБД? С какими СУБД работали? Какие клиенты для работы с СУБД использовали? Чем отличаются SQL и NoSQL БД? Что лежит в основе реляционных БД? С какими нереляционными БД работали? Какие типы ограничений в реляционных БД знаете (constraints)? Что такое нормализация? Зачем она нужна? Какие нормальные формы (НФ) вы знаете? Решить кейс с нормализацией данных. Что такое ER-модель? Умеете ли вы строить ER-диаграмму? Какие нотации знаете? Есть ли у вас опыт проектирования БД? Могут попросить спроектировать концептуальную/логическую модель данных для некоторой предметной области. Есть ли у вас опыт написания запросов на SQL? Уровень запросов? Далее уточняющие вопросы по уровню знаний SQL: Какие подмножества SQL вы знаете? (речь идет про DDL, DQL, DML и DCL). Расшифровать аббревиатуры и привести примеры операторов для каждого подмножества. Рассказать про самые популярные операторы, зачастую это: JOIN UNION ORDER BY GROUP BY HAVING Различные агрегатные функции Могут попросить написать простенький запрос или же рассказать про логику построения запроса для какого-то кейса. Работали ли вы с индексами? Что это и для чего они нужны? Вопрос для знатоков, но на паре собеседований он у меня встречался. Важно для вакансий, где особое внимание уделено работе с БД. Какие нотации моделирования бизнес-процессов знаете (зачастую подразумевается BPMN и UML)? СА все таки чаще используют UML. Соответственно вопросы такие: Какие диаграммы вы использовали в своей работе? Для чего используют диаграмму деятельности (Activity diagram)/диаграмму состояний (Statechart diagram)/диаграмму вариантов использования (UseCase diagram)/диаграмму последовательности (Sequence diagram)? Описывали ли вы варианты использования в табличном формате? Основы проектирования БД (теория)  Основы проектирования БД (практика) SQL и NoSQL Про ER-модель ER в нотации Чена ER в нотации Баркера и Мартина Основные команды SQL Про DDL, DML, DCL и TCL Про BPMN 2.0 Про UML С этой темой надо быть аккуратнее. Есть ситуации, когда лучше сказать хоть что-то чем не сказать ничего, но здесь работает ровно противоположное. Если вы не уверены в том, что достаточно разбираетесь в теме, лучше не утверждать ничего, что вызовет дополнительные вопросы на понимание.  Какие способы интеграции систем вы знаете? Чем отличаются синхронное и асинхронное взаимодействия? Что знаете про очереди сообщений? Для чего их используют? Проектировали ли вы API? Каким образом описывали спецификации? Тестировали ли вы сами API? Какое ПО использовали? HTTP: Какие основные HTTP методы знаете? Расскажите про HTTP сообщения. Какую структуру имеет запрос? Какую структуру имеет ответ? Какие коды состояния (status code) знаете и что они означают?   Чем отличается POST от PUT от PATCH? Что знаете про концепцию CRUD? Что такое JSON? Для чего используется? REST: Что такое REST? Какие основные принципы REST знаете? SOAP: Что такое SOAP? В каком формате передаются сообщения? Какая структура у сообщения SOAP? Работали ли с XML? Что это?  Что такое XSD? Проектировали ли вы XSD схемы? Для чего используется XSLT? Приходилось ли вам писать XSLT преобразование? Методы и подходы к интеграции систем и подробнее Синхронное, асинхронное и реактивное взаимодействие Про очереди сообщений Поверхностно про REST API, а заодно и HTTP, SOAP и JSON - это все есть в статье Про сообщения HTTP  Подробнее про REST, HTTP и SOAP и все связанное с этими темами можно почитать как минимум в википедии и этого на мой взгляд уже будет достаточно для большинства интервьюеров (при условии, что вы понимаете о чем говорите, конечно) Мало знания теории по той или иной теме, нужны и навыки практического применения этих знаний. Важно уметь погружаться в предметную область, раскапывать все до мелочей, анализировать добытую информацию и делать на основе нее корректные и полезные выводы. Любое развитие предполагает решение задач по выбранной тематике и наработку опыта. Поэтому изучайте реальные кейсы, пытайтесь продумать как бы вы решали подобные задачи, анализируйте чужой опыт, старайтесь найти альтернативные пути, узкие места, потенциальные ошибки в знакомых вам системах, ищите общее в подходах к проектированию систем. В общем, тренируйте свою “нейросеть” мыслить аналитически :)   На мой взгляд, сейчас идеальное время для вхождения в профессию и развития в ней. Рынок предлагает огромное число вакансий для аналитиков с очень достойной оплатой труда и возможностью удаленной работы (к слову, для тех, кто находится в поиске – у нас в компании вакансий тоже много). А какие из вопросов встречались на собеседовании у вас? Возможно какие-то вопросы вам кажутся неуместными для СА? Иллюстрации: Михаил Голев System Analyst, Team Lead