Подготовка к экзамену по МДК

  • Билеты (1-90)

Билет 1. Понятие инструментальных средств разработки программного обеспечения

Инструментальные средства разработки программного обеспечения (ПО) — это специализированные программные продукты, которые используются программистами и разработчиками для создания, отладки, тестирования, анализа и сопровождения других программ. Они автоматизируют рутинные операции, повышают производительность труда и качество конечного продукта. Простыми словами, это «инструменты», с помощью которых создается программное обеспечение (как молоток и пила для столяра).

Билет 2. Классификация инструментальных средств разработки ПО

ИСР можно классифицировать по нескольким критериям:

А) По назначению (функциональности):

Б) По уровню интеграции:

В) По модели распространения:

Билет 3. Интегрированная среда разработки (IDE): назначение, состав, основные функции

Назначение IDE: Обеспечить комфортную и эффективную работу программиста, собрав всё необходимое в одном месте («всё включено»), чтобы не переключаться между разными программами.

Состав (типичные компоненты):

  1. Редактор исходного кода (с подсветкой, подсказками).
  2. Компилятор или интерпретатор.
  3. Отладчик (Debugger) — для пошагового выполнения и просмотра переменных.
  4. Средства автоматизации сборки (кнопка «Run/Build»).

Основные функции:

Билет 4. Компиляторы, интерпретаторы и трансляторы: назначение и различия

Общее: Все они переводят код, понятный человеку (исходный), в машинный код (или байт-код), который может выполнить компьютер.

Билет 5. Этапы создания программного продукта (классический водопад)
  1. Анализ требований: Сбор того, что хочет заказчик. Составление ТЗ.
  2. Проектирование: Создание архитектуры, выбор технологий, проектирование базы данных и интерфейсов.
  3. Реализация (кодирование): Непосредственное написание кода программистами.
  4. Тестирование: Проверка на ошибки, тестирование соответствия требованиям.
  5. Внедрение: Установка продукта на серверы или компьютеры пользователя, переход в эксплуатацию.
  6. Сопровождение: Исправление найденных после запуска ошибок, доработка под новые нужды.
Билет 6. Жизненный цикл программного обеспечения (ЖЦ ПО)

Жизненный цикл ПО — это период времени, который начинается с момента принятия решения о разработке ПО и заканчивается в момент его полного изъятия из эксплуатации.

Основные этапы ЖЦ (по стандарту ISO 12207):

  1. Загрузка (инициализация) — идея и закупка.
  2. Проектирование и разработка — создание кода.
  3. Эксплуатация и сопровождение — использование программы пользователями + исправление ошибок и небольшие обновления.
  4. Вывод из эксплуатации — отключение и замена на новую систему.

Модели ЖЦ: Каскадная (водопад), Итеративная, Гибкая (Scrum, Agile, Kanban).

Билет 7. Понятие репозитория, коммита, ветки и слияния (Git)
Билет 8. Работа с удалёнными репозиториями GitHub, GitLab, Bitbucket

Это веб-сервисы (хостинги) для хранения Git-репозиториев в облаке. Они позволяют команде работать с одним кодом из разных точек мира.

Основные действия при работе (команды Git):

  1. Клонирование (Clone): Скопировать удалённый репозиторий к себе на компьютер (git clone <url>).
  2. Fetch / Pull: Забрать свежие изменения от коллег с сервера.
    • git pull = fetch (узнать что нового) + merge (применить к своему коду).
  3. Push: Отправить свои новые коммиты (изменения) на удалённый сервер (git push).

Различия сервисов (небольшие):

Билет 9. Виды ошибок в программном обеспечении

По времени обнаружения и природе:

А) По этапу возникновения/обнаружения:

Б) По смыслу (классика тестирования):

Билет 10. Методы поиска и исправления ошибок в программе

Поиск (отладка / debugging):

  1. Ручное тестирование — запуск программы и проверка на разных входных данных.
  2. Использование отладчика (debugger) — пошаговое выполнение кода, просмотр значений переменных, точки остановки (breakpoints).
  3. Логирование (logging) — вывод в консоль или файл промежуточных значений переменных и сообщений о состоянии программы.
  4. Анализ стека вызовов (stack trace) — изучение цепочки вызовов функций в момент падения.
  5. Написание юнит-тестов — автоматическая проверка каждого маленького блока кода.
  6. Рецензирование кода (code review) — проверка кода другим разработчиком.
  7. Статические анализаторы кода — инструменты, которые ищут потенциальные ошибки без запуска программы (SonarQube, ESLint, Pylint).

Исправление:

  1. Воспроизвести ошибку — убедиться, что она возникает стабильно.
  2. Локализовать место — найти строку/функцию, где ошибка проявляется.
  3. Понять причину — почему это происходит.
  4. Исправить код — внести минимальные изменения.
  5. Протестировать заново — убедиться, что ошибка исчезла и не появилась новая (регрессия).
Билет 11. Тестирование программного обеспечения: понятие и цели
Понятие:
Тестирование ПО — это процесс проверки соответствия программы заявленным требованиям путём наблюдения за её работой в контролируемых условиях.
Цели тестирования (по Мейерсу):
Найти ошибки — основная цель (успешный тест — тот, который нашёл ошибку).
Убедиться, что программа работает правильно — подтверждение соответствия требованиям.
Повысить уверенность в качестве — снижение рисков.
Предотвратить регресс — убедиться, что новые изменения не сломали старую функциональность.
Оценить надёжность и производительность.

Билет 12. Инструменты для тестирования программного обеспечения

1. Для модульного тестирования (Unit testing):

2. Для интеграционного и системного тестирования:

3. Для нагрузочного тестирования:

4. Для управления тестированием (баг-трекинга):

5. Инструменты CI/CD (непрерывная интеграция):

6. Статические анализаторы:

Билет 13. Документирование программного обеспечения

Понятие:
Документирование ПО — это процесс создания текстовых материалов, описывающих различные аспекты программы: архитектуру, установку, использование, API, процесс разработки.

Цели документирования:

Виды документации (по назначению):

Билет 14. Виды программной документации

1. Техническая документация (для разработчиков и админов):

2. Пользовательская документация (для пользователей):

3. Процессная и управленческая документация:

Билет 15. Требования к оформлению технической документации

Основные требования (часто по ГОСТ 19.xxx — ЕСПД, или ISO/IEC):

  1. Полнота — документ должен описывать все необходимые аспекты без пропусков.
  2. Точность и однозначность — каждое утверждение можно понять только одним способом (без «обычно», «как правило», если нет чётких условий).
  3. Актуальность — документация должна соответствовать текущей версии ПО.
  4. Структурированность — деление на разделы, подразделы, нумерация, оглавление.
  5. Читаемость — чёткий язык, краткие предложения, терминология без разночтений.
  6. Единообразие — оформление по единому шаблону (шрифты, отступы, стиль кода).
  7. Наличие иллюстраций — схемы, диаграммы, скриншоты для сложных моментов.
  8. Контроль версий — каждый документ должен иметь дату создания, автора, номер версии и историю изменений.
Билет 16. Назначение технического задания (ТЗ) на разработку ПО

Техническое задание (ТЗ) — это основной документ, который определяет требования к разрабатываемому программному продукту.

Назначение ТЗ:

Билет 17. Структура технического задания (типовые разделы)
  1. Введение (наименование, область применения, краткая характеристика).
  2. Основания для разработки (документ-основание, утвердивший орган).
  3. Назначение разработки (зачем нужен продукт, проблемы, которые решает).
  4. Требования к программе:
    • Требования к функциональным характеристикам (что должна делать программа — перечень функций).
    • Требования к надёжности.
    • Условия эксплуатации (ОС, железо, сеть).
    • Требования к составу и параметрам технических средств.
    • Требования к информационной и программной совместимости (с чем взаимодействует).
    • Требования к маркировке, упаковке (если дистрибутив).
    • Требования к защите информации (если нужно).
  5. Требования к программной документации (состав документов).
  6. Технико-экономические показатели (время разработки, стоимость).
  7. Стадии и этапы разработки (план работ).
  8. Порядок контроля и приёмки (как будут принимать, кто, какие тесты).
  9. Приложения (макеты экранов, форматы данных, протоколы).
Билет 18. Пользовательская документация и руководство пользователя

Пользовательская документация — это совокупность документов, предназначенных для конечных пользователей ПО (не программистов). Она объясняет, как установить, настроить и использовать программу для достижения целей пользователя.

Руководство пользователя (User Manual) — основной документ пользовательской документации.

Что обычно включает руководство пользователя:

  1. Введение — о программе, её возможностях, кому предназначена.
  2. Установка и настройка — как поставить, как ввести лицензию, какие настройки задать.
  3. Быстрый старт (Quick Start) — основные действия, чтобы начать работать за 5 минут.
  4. Описание интерфейса — главное окно, меню, панели инструментов, горячие клавиши.
  5. Пошаговые инструкции — как выполнить типовые задачи (создать отчёт, добавить клиента, распечатать).
  6. Описание сообщений об ошибках — что означают сообщения, как их исправить.
  7. FAQ (Часто задаваемые вопросы) — ответы на популярные проблемы.
  8. Глоссарий — объяснение специфических терминов.
  9. Алфавитный указатель — чтобы быстро найти нужный раздел.

Требования к руководству пользователя:

Билет 19. Совместная разработка программного обеспечения

Совместная разработка (коллаборативная разработка) — это процесс создания ПО, в котором участвуют несколько разработчиков (или команд), работающих над одной кодовой базой одновременно, часто географически удалённо.

Ключевые принципы:

Инструменты для совместной разработки:

Билет 20. Роли участников команды разработки ПО

Типичные роли (могут совмещаться в небольших командах):

  1. Заказчик / Product Owner (PO) — владелец продукта. Ставит цели, определяет требования, расставляет приоритеты. Отвечает за «что делать».
  2. Менеджер проекта (Project Manager, PM) — планирует сроки, управляет ресурсами, коммуницирует с заказчиком, снимает блокеры.
  3. Аналитик (Business Analyst, System Analyst) — переводит пожелания заказчика в чёткие технические требования, прорабатывает логику работы, создаёт ТЗ и user stories.
  4. Архитектор ПО (Software Architect) — проектирует высокоуровневую структуру системы, выбирает технологии, решает, как система будет работать внутри (её «скелет»).
  5. Разработчик / Программист (Developer) — непосредственно пишет код.
    • Backend-разработчик — серверная часть, базы данных, API.
    • Frontend-разработчик — интерфейс, то, что видит пользователь.
    • Full-stack — и то, и другое.
  6. Тестировщик / QA Engineer (Quality Assurance) — ищет ошибки, пишет тесты, проверяет соответствие требованиям.
  7. DevOps-инженер — настраивает серверы, CI/CD, сборку, развёртывание (деплой), мониторинг.
  8. Администратор баз данных (DBA) — проектирует и оптимизирует БД.
  9. Технический писатель (Technical Writer) — создаёт документацию (руководства пользователя, API-документацию).
Билет 21. Системы управления задачами в разработке ПО

Определение:
Система управления задачами (Task Tracker, Issue Tracker, Bug Tracker) — это программный инструмент для создания, назначения, отслеживания статуса и приоритета задач в процессе разработки.

Основные функции:

Популярные инструменты:

Билет 22. Средства разработки веб-приложений

Для frontend (клиентская часть — то, что в браузере):

Для backend (серверная часть):

Для взаимодействия frontend и backend:

Вспомогательные средства (DevOps для веба):

Билет 23. Основные требования к качеству программного обеспечения

Качество ПО оценивается по множеству характеристик. Ключевые (по стандарту ISO 25010):

  1. Функциональная пригодность (Functional Suitability) — программа делает то, что обещано (точность, полнота функций).
  2. Надёжность (Reliability) — работает без сбоев, устойчива к ошибкам, есть восстановление после сбоев.
  3. Производительность и эффективность (Performance Efficiency) — быстрая реакция, мало потребляет ресурсов (памяти, CPU).
  4. Удобство использования (Usability) — понятный интерфейс, лёгкость обучения, защита от ошибок пользователя.
  5. Безопасность (Security) — защита от несанкционированного доступа, утечек данных.
  6. Совместимость (Compatibility) — работает с другим ПО и оборудованием.
  7. Сопровождаемость (Maintainability) — код легко читать, модифицировать, тестировать (это про «чистый код»).
  8. Переносимость (Portability) — легко установить на разные ОС и окружения (Windows, Linux, Mac).
Билет 24. Понятие программного обеспечения

Программное обеспечение (ПО, Software) — это совокупность программ, правил и сопутствующей документации, позволяющая использовать компьютер для решения определённых задач.

Простыми словами: это невидимая часть компьютера (в отличие от «железа» — Hardware), которая управляет всеми процессами.

Три компонента ПО (расширенное определение):

  1. Исполняемые программы — код, который процессор выполняет.
  2. Данные — файлы, базы данных, конфигурации.
  3. Документация — руководства, инструкции, описание архитектуры.
Билет 25. Классификация программного обеспечения

По назначению (основная классификация):

  1. Системное ПО (System Software):
    • Операционные системы (Windows, Linux, macOS, Android, iOS).
    • Драйверы устройств.
    • Утилиты (антивирусы, архиваторы, средства дефрагментации).
    • Серверное ПО (веб-серверы, СУБД).
  2. Прикладное ПО (Application Software):
    • Общего назначения: текстовые редакторы (Word), таблицы (Excel), браузеры (Chrome), графические редакторы (Photoshop).
    • Специального назначения: бухгалтерские системы (1С), CAD-системы (AutoCAD), медицинские информационные системы.
    • Игры.
    • Веб-приложения и мобильные приложения.
  3. Инструментальное ПО (Development Tools):
    • IDE (среды разработки — VS Code, IntelliJ IDEA).
    • Компиляторы, интерпретаторы.
    • Системы контроля версий (Git).
    • Средства тестирования, профилировщики.
    • Это как раз то, о чём мы говорим в вашем проекте.

По лицензии:

Билет 26. Понятие технологии разработки программного обеспечения

Технология разработки ПО — это совокупность методов, инструментов, процессов и правил, которые используются для создания программного продукта. Это не про язык программирования, а про как вы работаете от идеи до готовой программы.

Что включает технология разработки:

Пример: «Технология разработки на Java с использованием Spring Boot по методологии Scrum с CI/CD через GitLab».

Билет 27. Основные этапы разработки программного обеспечения
  1. Формирование требований — сбор пожеланий, анализ, согласование с заказчиком.
  2. Проектирование — архитектура, выбор технологий, проектирование БД и интерфейсов.
  3. Реализация (кодирование) — написание кода программистами.
  4. Тестирование — поиск и исправление ошибок, проверка соответствия ТЗ.
  5. Внедрение — установка на серверы или компьютеры пользователей, переход в эксплуатацию.
  6. Сопровождение — исправление ошибок, обнаруженных после запуска, небольшие доработки.

В гибких методологиях (Agile, Scrum) этапы не следуют строго один за другим, а повторяются маленькими итерациями (спринтами по 1-4 недели), каждая из которых включает все этапы — от требований до тестирования и рабочего кусочка продукта.

Билет 28. Жизненный цикл программного обеспечения

Жизненный цикл ПО (ЖЦ) — это период времени от возникновения идеи о создании программы до её полного вывода из эксплуатации (когда ею перестают пользоваться).

Основные фазы ЖЦ (по стандарту ISO 12207):

  1. Загрузка (Initiation) — идея, предварительная оценка.
  2. Проектирование и разработка (Development) — создание кода и тестирование.
  3. Эксплуатация (Operation) — использование программы пользователями.
  4. Сопровождение (Maintenance) — исправление ошибок, доработки под новые нужды.
  5. Вывод из эксплуатации (Retirement) — отключение, замена на новую систему.

Модели ЖЦ:

Билет 29. Модели жизненного цикла программного обеспечения

Модель ЖЦ ПО — это абстрактное описание того, как устроен процесс разработки: в каком порядке выполняются этапы, можно ли возвращаться назад, как часто поставляется результат заказчику.

Основные типы моделей:

Билет 30. Каскадная модель разработки ПО (Waterfall)

Суть: Этапы выполняются строго последовательно. Переход на следующий этап возможен только после полного завершения предыдущего. Возврат назад — крайне сложен (и дорог).

Схема:
Требования → Проектирование → Реализация → Тестирование → Внедрение → Сопровождение

Плюсы:

Минусы:

Когда применяется: Проекты с чёткими, неизменными требованиями (например, системы управления ракетами, медицинские приборы, расчётные задачи, где ошибка недопустима).

Билет 31. Гибкие методологии разработки программного обеспечения (Agile)

Суть: Гибкие методологии (Agile) — это подход, основанный на итеративной разработке, когда продукт создаётся маленькими частями (итерациями по 1–4 недели), а требования могут меняться даже на поздних этапах.

Манифест Agile (4 ценности):

  1. Люди и взаимодействие важнее процессов и инструментов.
  2. Работающий продукт важнее исчерпывающей документации.
  3. Сотрудничество с заказчиком важнее согласования контракта.
  4. Готовность к изменениям важнее следования плану.

Основные Agile-методологии:

Билет 32. Понятие требований к программному обеспечению

Требование к ПО — это конкретное, измеримое, проверяемое описание того, что система должна делать (функция) или какими свойствами обладать (качество, ограничение).

Требования отвечают на вопрос: «Что система должна делать, чтобы решить проблему пользователя?»

Важно: Ошибочные или неполные требования — самая частая причина провала проектов (около 40–60% ошибок закладываются именно на этапе требований).

Билет 33. Виды требований к программному обеспечению

По классификации IEEE 830 и ISO/IEC 25010:

  1. Функциональные требования (Functional Requirements) — что система ДЕЛАЕТ (конкретные действия, реакции).
  2. Нефункциональные требования (Non-Functional Requirements) — какими СВОЙСТВАМИ обладает (скорость, безопасность, удобство).
  3. Ограничения (Constraints) — рамки проекта (бюджет, сроки, обязательная технология, законодательство).

Также выделяют:

Билет 34. Функциональные требования к ПО

Определение: Описывают, какие действия и задачи должна выполнять система в ответ на определённые входные данные или условия.

Примеры:

Характеристики хорошего функционального требования: Конкретность, проверяемость (можно написать тест), однозначность.

Билет 35. Нефункциональные требования к ПО

Определение: Описывают качества и ограничения системы — как она работает, а не что делает.

Основные категории (по ISO 25010):

Пример: «Система должна обрабатывать 1000 запросов в секунду с задержкой не более 200 мс».

Билет 36. Методы сбора требований к программному обеспечению
  1. Интервью — беседа с заказчиками и будущими пользователями по заранее подготовленным вопросам.
  2. Анкетирование — массовый сбор информации через опросы (хорошо для большого числа пользователей).
  3. Наблюдение — анализ того, как пользователи сейчас работают (без системы).
  4. Анализ документов — изучение существующих регламентов, инструкций, отчётов.
  5. Мозговой штурм — групповая генерация идей.
  6. Создание прототипов — быстрый набросок интерфейса, чтобы пользователь «пощупал» и уточнил пожелания.
  7. Анализ историй (User Stories) — описание задач пользователя короткими фразами: «Как <роль>, я хочу <действие>, чтобы <ценность>».
  8. Use Cases (варианты использования) — формальное описание сценариев работы.
Билет 37. Анализ требований к программному обеспечению

Анализ требований — это этап, на котором собранная информация проверяется, структурируется, выявляются противоречия и пропуски.

Цели анализа:

Результат анализа: Проверенный и согласованный список требований, готовый к документированию.

Билет 38. Документирование требований

Документирование требований — это процесс фиксации проанализированных требований в письменном виде в формализованном или полуформализованном документе.

Основные артефакты (что создаётся):

  1. Техническое задание (ТЗ) — традиционный документ (ГОСТ, IEEE) — формальный, детальный, юридически значимый.
  2. SRS (Software Requirements Specification) — международный аналог ТЗ по стандарту IEEE 830.
  3. User Stories + Acceptance Criteria — в гибких методологиях (Agile): короткие карточки с критериями приёмки.
  4. Use Case Diagram + Descriptions — диаграммы вариантов использования (UML).
  5. Backlog — список задач и требований в Jira / Trello.

Принципы хорошего документирования: Полнота, непротиворечивость, нумерация (для отслеживания изменений), понятность всем сторонам.

Билет 39. Техническое задание на разработку программного продукта

Техническое задание (ТЗ) — это официальный документ, который полностью определяет требования к разрабатываемой программе и служит основой для проектирования, реализации, приёмки и всей юридической ответственности по контракту.

Назначение ТЗ:

Билет 40. Структура технического задания
  1. Введение — наименование системы, область применения, краткое описание.
  2. Основания для разработки — документ-основание (приказ, договор), утвердивший орган.
  3. Назначение разработки — функциональное (для каких задач) и эксплуатационное (кто будет использовать).
  4. Требования к программе:
    • Требования к функциональным характеристикам (что делает — конкретные функции).
    • Требования к надёжности (время безотказной работы, восстановление).
    • Условия эксплуатации (ОС, железо, температура, сеть).
    • Требования к совместимости (с каким ПО и железом работает).
    • Требования к информационной безопасности.
    • Требования к эргономике и удобству использования.
  5. Требования к программной документации — состав документов (руководство пользователя, руководство администратора, описание API).
  6. Технико-экономические показатели — примерная стоимость, трудоёмкость, эффект от внедрения.
  7. Стадии и этапы разработки — план-график (проектирование, кодирование, тестирование, даты контрольных точек).
  8. Порядок контроля и приёмки — кто принимает, какие тесты проводятся, какой протокол подписывается.
  9. Приложения — схемы данных, макеты экранов, форматы обмена, примеры расчётов.
Билет 41. Назначение спецификации требований (SRS — Software Requirements Specification)

Спецификация требований (SRS) — это формальный документ, который детально описывает все функциональные и нефункциональные требования к разрабатываемой программной системе.

Назначение SRS:

  1. Единый источник истины — все участники проекта (заказчик, аналитики, разработчики, тестировщики) работают по одному документу.
  2. Устранение неоднозначности — требования формулируются чётко, без вариантов толкования («скорость должна быть высокой» → «время отклика не более 0.5 секунды»).
  3. Основа для оценки — по SRS оцениваются сроки, стоимость, ресурсы.
  4. Базис для тестирования — тест-кейсы и критерии приёмки пишутся на основе SRS (каждое требование должно быть проверяемым).
  5. Юридическая защита — при передаче проекта заказчику проверяется соответствие SRS.
  6. Управление изменениями — любое новое требование официально меняет SRS, а не вносится «на словах».

Отличие от ТЗ: SRS — это международный стандарт (IEEE 830), более формализованный. В России часто используют ТЗ (ГОСТ), но суть та же.

Билет 42. Проектирование программного обеспечения

Проектирование ПО — это этап разработки, следующий за анализом требований, на котором определяется архитектураструктура и внутреннее устройство будущей программы до того, как начнётся написание кода.

Что делают на этапе проектирования:

Билет 43. Основные принципы проектирования ПО

Базовые принципы хорошего проектирования:

  1. Принцип единственной ответственности (Single Responsibility) — каждый модуль/класс должен иметь только одну причину для изменения (решает только одну задачу).
  2. Принцип открытости/закрытости (Open/Closed) — сущности должны быть открыты для расширения, но закрыты для изменения (новую функциональность добавляем новым кодом, не переписывая старый).
  3. Принцип подстановки Лисков (Liskov Substitution) — объекты наследников должны заменять объекты родителя без нарушения логики.
  4. Принцип разделения интерфейсов (Interface Segregation) — не нужно заставлять класс реализовывать методы, которые он не использует (большие интерфейсы лучше разбивать на маленькие).
  5. Принцип инверсии зависимостей (Dependency Inversion) — зависимости должны быть от абстракций (интерфейсов), а не от конкретных классов (модули высокого уровня не зависят от модулей низкого уровня).
Билет 44. Архитектура программного обеспечения

Архитектура ПО — это фундаментальная организация системы, выраженная в её компонентах, их отношениях друг с другом и с внешней средой, а также принципах, определяющих её проектирование и эволюцию.

Простыми словами: Архитектура — это «скелет» программы, её крупные блоки и то, как они общаются между собой.

Что определяет архитектура:

Билет 45. Виды архитектуры программного обеспечения

Основные архитектурные стили:

  1. Монолитная (Monolithic) — все компоненты собраны в одну программу, работающую на одном сервере.
  2. Модульная (Modular) — монолит, но внутри разбит на независимые модули.
  3. Клиент-серверная (Client-Server) — выделены клиентская и серверная части.
  4. Многоуровневая (N-tier / Layered) — вертикальное разделение на слои (уровни), каждый слой решает свой класс задач.
  5. Микросервисная (Microservices) — система разбита на множество маленьких независимых сервисов, каждый работает в своём процессе.
  6. Событийно-ориентированная (Event-Driven) — компоненты обмениваются событиями через брокер сообщений (Kafka, RabbitMQ).
  7. Потоковая (Pipe-and-Filter) — данные проходят через последовательные обработчики (UNIX-конвейеры).
  8. Одноранговая (Peer-to-Peer, P2P) — все узлы равноправны (торренты, блокчейн).
Билет 46. Модульная архитектура программного обеспечения

Модульная архитектура — это подход, при котором программа разбивается на относительно независимые, слабо связанные части — модули, каждый из которых отвечает за конкретную подзадачу.

Основные идеи:

Пример: Модуль авторизации (логин/пароль), модуль работы с базой данных, модуль отправки email, модуль расчёта скидок.

Преимущества:

Билет 47. Клиент-серверная архитектура

Клиент-серверная архитектура — это модель взаимодействия, в которой система разделена на две части: клиент (инициирует запросы) и сервер (обрабатывает запросы и возвращает ответы).

Клиент:

Сервер:

Примеры:

Плюсы: Централизованное управление данными, безопасность (логика на сервере), масштабируемость.
Минусы: Сервер — единая точка отказа, требуется сетевое соединение.

Билет 48. Многоуровневая архитектура программного обеспечения

Многоуровневая архитектура — это развитие клиент-серверной модели, где система разделена на логические слои (уровни), каждый из которых решает свой тип задач. Уровни могут быть физически на разных машинах или на одной.

Классическая трёхуровневая архитектура (3-tier):

  1. Уровень представления (Presentation Tier / UI) — интерфейс, то, что видит пользователь (веб-страницы, мобильное приложение). Только ввод/вывод.
  2. Уровень бизнес-логики (Business Logic Tier / Application Tier / Middle Tier) — основные вычисления, правила, алгоритмы. Здесь работает сервер приложений.
  3. Уровень данных (Data Tier) — хранение информации (база данных, файловое хранилище).

Схема: Пользователь → (UI) → (Business Logic) → (Data)

Преимущества:

Билет 49. Понятие программного модуля

Программный модуль — это функционально законченный фрагмент программы, который имеет чётко определённые входные и выходные данные, может быть скомпилирован отдельно и предназначен для использования в составе более крупной системы.

Характеристики модуля:

Примеры модулей:

В языках программирования аналогами модулей служат: функции, классы, пространства имён (namespace), пакеты (package), библиотеки.

Билет 50. Связность и сцепление программных модулей

1. Связность (Cohesion) — показывает, насколько элементы внутри одного модуля связаны друг с другом и работают на одну цель.

Виды связности (от лучшей к худшей):

2. Сцепление (Coupling) — показывает, насколько сильно модули зависят друг от друга.

Виды сцепления (от лучшего к худшему):

Билет 51. Декомпозиция программной системы

Декомпозиция — это процесс разбиения сложной программной системы на более мелкие, простые и понятные части (модули, компоненты, подсистемы) для упрощения разработки, понимания и сопровождения.

Цели декомпозиции:

Принципы декомпозиции:

Пример: Декомпозиция системы интернет-магазина → модуль каталога, модуль корзины, модуль оплаты, модуль доставки, модуль пользователей.

Билет 52. Алгоритмизация в разработке программного обеспечения

Алгоритмизация — это процесс разработки алгоритмов решения задач, который предшествует написанию кода. Это этап, на котором придумывается последовательность действий, приводящая от входных данных к нужному результату, без привязки к конкретному языку программирования.

Место алгоритмизации в разработке:
Проблема → Постановка задачи → Алгоритмизация (придумываем алгоритм) → Кодирование (пишем код на языке) → Тестирование.

Что даёт алгоритмизация:

Способы описания алгоритмов:

Билет 53. Понятие алгоритма

Алгоритм — это конечная, точная, детерминированная (однозначная) последовательность действий (команд), которая преобразует исходные данные (вход) в требуемый результат (выход) за конечное число шагов.

Свойства алгоритма (классические):

  1. Дискретность — разбит на отдельные законченные шаги (действия).
  2. Детерминированность (определённость) — каждая команда выполняется однозначно, без вариантов.
  3. Результативность (конечность) — за конечное число шагов приводит к результату.
  4. Массовость — применим к любому множеству входных данных из заданной области (не для одного конкретного числа, а для всех).
  5. Понятность — команды понятны исполнителю (человеку или компьютеру).

Пример алгоритма: Алгоритм заваривания чая.

  1. Вскипятить воду.
  2. Положить заварку в чашку.
  3. Залить кипятком.
  4. Подождать 3 минуты.
  5. Вынуть пакетик.
  6. (Результат — чай готов).
Билет 54. Свойства алгоритма
  1. Дискретность — алгоритм разбит на отдельные, законченные шаги (действия, команды). Каждый шаг выполняется строго последовательно.
  2. Детерминированность (определённость, однозначность) — для каждого возможного набора входных данных траектория выполнения алгоритма задана однозначно. Не может быть двух вариантов толкования одной команды.
  3. Результативность (конечность) — алгоритм должен завершать свою работу за конечное число шагов и выдавать результат. «Бесконечный алгоритм» — это не алгоритм.
  4. Массовость — алгоритм применим не к одному конкретному набору данных, а ко всем задачам определённого класса (например, алгоритм сложения двух чисел работает для любых чисел).
  5. Понятность — команды алгоритма должны быть понятны исполнителю (человеку или компьютеру). Нет неопределённостей вроде «сделай что-нибудь хорошее».
Билет 55. Способы записи алгоритмов
  1. Словесный (естественно-языковой) — описание алгоритма на русском (или другом естественном) языке. Хорош для понимания на начальном этапе, но может быть неоднозначным.Пример: «Взять два числа, сложить их, результат записать в память».
  2. Графический (блок-схемы) — описание с помощью геометрических фигур (блоков), соединённых стрелками. Нагляден, показывает поток управления. Самый популярный для обучения.
  3. Псевдокод — формальный язык, похожий на язык программирования, но без строгих синтаксических правил. Понятен и человеку, и разработчику перед написанием реального кода.
  4. Программный код — запись алгоритма на конкретном языке программирования (C++, Python, Java). Это конечная цель алгоритмизации — код, который выполнит компьютер.
Билет 56. Блок-схемы алгоритмов

Блок-схема — это графический способ представления алгоритма с помощью стандартных геометрических фигур (блоков), каждая из которых обозначает определённое действие. Блоки соединяются стрелками (линиями потока), показывающими порядок выполнения.

Основные элементы (ГОСТ 19.701-90):

ФигураНазваниеНазначение
ОвалТерминатор (Начало/Конец)Начало и конец алгоритма
ПрямоугольникПроцессВыполнение действия (вычисление, присваивание)
РомбРешение (условие)Ветвление (да/нет)
ПараллелограммВвод/ВыводВвод данных с клавиатуры или вывод на экран
ШестиугольникПредопределённый процессВызов вспомогательного алгоритма (подпрограммы)
Маленький кружокСоединительРазрыв линии (для больших схем)
СтрелкаЛиния потокаУказывает порядок выполнения блоков

Правила построения:

Билет 57. Линейные алгоритмы

Линейный алгоритм — это алгоритм, в котором все команды (блоки) выполняются строго последовательно, одна за другой, без пропусков, повторений и ветвлений. Поток управления идёт по прямой линии.

Характерные черты:

Билет 58. Разветвляющиеся алгоритмы

Разветвляющийся алгоритм — это алгоритм, в котором в зависимости от выполнения некоторого условия (истина/ложь) выбирается один из нескольких возможных путей (ветвей) выполнения.

Полное разветвление (if-else):

Неполное разветвление (if без else):

Билет 59. Циклические алгоритмы

Циклический алгоритм — это алгоритм, в котором некоторая последовательность команд (тело цикла) выполняется многократно, пока соблюдается заданное условие (или заданное количество раз).

Три типа циклов:

  1. Цикл с предусловием (while) — сначала проверяем условие. Если истинно — выполняем тело цикла, затем снова проверяем. Если ложно — выходим. Тело может не выполниться ни разу.
  2. Цикл с постусловием (do-while) — сначала выполняем тело цикла, затем проверяем условие. Если условие истинно — повторяем. Тело выполнится хотя бы один раз.
  3. Цикл со счётчиком (for) — выполняется строго заданное количество раз (от начального до конечного значения с шагом).

Обязательные элементы цикла:

Билет 60. Вспомогательные алгоритмы и подпрограммы

Вспомогательный алгоритм — это алгоритм, который решает некоторую подзадачу и может быть вызван из основного алгоритма (или из другого вспомогательного) многократно.

Подпрограмма — это программная реализация вспомогательного алгоритма. В разных языках называется: функция, процедура, метод, подпрограмма.

Зачем нужны:

Билет 61. Основные структуры данных

Структура данных — это способ организации и хранения данных в памяти компьютера, который определяет, как данные связаны между собой и какие операции над ними возможны.

Простейшие (примитивные):

Составные (классические):

СтруктураОписаниеПример
Массив (Array)Набор однотипных элементов, расположенных в памяти последовательно, доступ по индексу[10, 20, 30, 40]
Список (List / Linked List)Элементы связаны указателями; можно вставлять/удалять в серединеСвязный список
Стек (Stack)LIFO (Last In — First Out). Последний пришёл — первый ушёлСтопка тарелок
Очередь (Queue)FIFO (First In — First Out). Первый пришёл — первый ушёлОчередь в магазине
Хеш-таблица (Hash Map / Dictionary)Хранение пар «ключ → значение». Быстрый поиск по ключуТелефонная книга: имя → номер
Множество (Set)Набор уникальных элементов (без повторений){1, 2, 3}
Дерево (Tree)Иерархическая структура с корнем и ветвямиФайловая система
Граф (Graph)Вершины и рёбра между ними (связи)Карта дорог, социальная сеть
Билет 62. Понятие базы данных в программной системе

База данных (БД) — это организованная структура, предназначенная для хранения, изменения и обработки взаимосвязанной информации в программной системе. База данных обеспечивает долговременное хранение данных (даже после выключения программы).

Роль БД в программной системе:

Типы БД:

Система управления базами данных (СУБД) — это программное обеспечение, которое управляет БД (выполняет запросы, обеспечивает целостность, резервное копирование). Примеры: MySQL, PostgreSQL, Microsoft SQL Server, SQLite.

Билет 63. Проектирование базы данных для программного продукта

Проектирование БД — это процесс создания логической и физической структуры базы данных для конкретного программного продукта на основе требований к хранению данных.

Основные этапы проектирования БД:

  1. Концептуальное проектирование:
    • Выделение сущностей (объектов реального мира) — «Пользователь», «Заказ», «Товар».
    • Определение атрибутов (свойств) — у «Пользователя»: имя, email, пароль.
    • Определение связей между сущностями (один-ко-многим, многие-ко-многим).
  2. Логическое проектирование:
    • Построение логической модели (ER-диаграмма).
    • Приведение к нормальным формам (избавление от дублирования, противоречий).
    • Определение первичных и внешних ключей.
  3. Физическое проектирование:
    • Выбор конкретной СУБД (PostgreSQL, MySQL и т.д.).
    • Создание таблиц, индексов (для ускорения поиска).
    • Настройка типов данных и ограничений (NOT NULL, UNIQUE).

Пример (интернет-магазин):

Нормальные формы (ключевая концепция):

Билет 64. Этапы создания пользовательского интерфейса

Пользовательский интерфейс (UI, User Interface) — это совокупность средств, с помощью которых пользователь взаимодействует с программой (экранные формы, кнопки, меню, поля ввода).

Основные этапы создания UI:

  1. Анализ требований и исследование пользователей:
    • Кто будет пользоваться? (возраст, IT-грамотность).
    • Какие задачи решает? (user stories, сценарии использования).
    • Изучение конкурентов и лучших практик.
  2. Проектирование структуры (информационная архитектура):
    • Карта сайта / экранов (из каких страниц/окон состоит).
    • Навигация (как пользователь перемещается между экранами).
    • Не обязательно с графикой — только структура.
  3. Создание прототипов (от низкой до высокой детализации):
    • Wireframes (низкая детализация) — схема расположения блоков, без цветов и шрифтов.
    • Mockups (средняя детализация) — статичные макеты с цветами, типографикой.
    • Интерактивный прототип — кликабельная модель (Figma, Adobe XD) для тестирования.
  4. Дизайн (визуальное оформление):
    • Выбор цветовой схемы, шрифтов, иконок.
    • Разработка компонентов (кнопки, поля ввода, карточки).
    • Обеспечение единого стиля (UI Kit, Design System).
  5. Разработка (верстка / frontend-кодирование):
    • HTML/CSS/JavaScript (для веба) или Swift/Kotlin (для мобильных).
    • Реализация адаптивности (для разных размеров экранов).
    • Привязка интерфейса к бизнес-логике (обработка нажатий, отправка данных).
  6. Тестирование интерфейса (Usability Testing):
    • Проверка на реальных пользователях (выполняют задачи, исследователь наблюдает).
    • Сбор обратной связи (что непонятно, что раздражает).
    • Исправление ошибок и итерации.
  7. Сопровождение и обновление:
    • Исправление багов, найденных после запуска.
    • Добавление новых функций.
    • Анализ метрик (куда пользователи не кликают, где бросают).
Билет 65. Требования к пользовательскому интерфейсу

Пользовательский интерфейс (UI) должен соответствовать ряду требований, чтобы программа была удобной и эффективной.

  1. Интуитивность — пользователь должен понимать, как взаимодействовать с интерфейсом, без длительного изучения инструкции (или с минимальной подсказкой).
  2. Предсказуемость — одинаковые действия должны приводить к одинаковым результатам; элементы управления ведут себя стандартно (кнопка «Сохранить» не удаляет файл).
  3. Обратная связь — на любое действие пользователя система должна отвечать (визуально или звуково): кнопка нажалась, идёт загрузка, данные сохранены.
  4. Единообразие (стиль) — одинаковые элементы (кнопки, поля ввода) выглядят и ведут себя одинаково на всех экранах.
  5. Защита от ошибок пользователя — подтверждение опасных действий («Вы уверены, что хотите удалить?»), блокировка некорректного ввода.
  6. Эффективность — частая задача должна решаться за минимальное количество действий (горячие клавиши, шаблоны, автозаполнение).
  7. Адаптивность — интерфейс должен корректно отображаться на разных устройствах (компьютер, планшет, телефон) и разрешениях экрана.
  8. Доступность — интерфейс должен быть usable для людей с ограниченными возможностями (контрастность, поддержка экранных дикторов, управление с клавиатуры).
Билет 66. Принципы удобства и эргономики интерфейса

Эргономика интерфейса — это наука о том, как сделать взаимодействие человека с программой комфортным, безопасным и продуктивным.

Основные принципы:

  1. Принцип «8 золотых правил» (Бен Шнейдерман):
    • Стремитесь к единообразию.
    • Используйте сочетания клавиш для опытных пользователей.
    • Обеспечьте информативную обратную связь.
    • Проектируйте диалог так, чтобы он имел завершение (шаги понятны).
    • Предотвращайте ошибки.
    • Разрешайте легко отменять действия (undo/redo).
    • Дайте пользователю чувство контроля (не «компьютер решает», а «пользователь управляет»).
    • Снижайте нагрузку на память (не заставляйте запоминать информацию с предыдущего экрана — показывайте её).
  2. Закон Фиттса: Время достижения цели (курсором) зависит от расстояния до цели и размера цели. Крупные элементы (кнопки) в зоне досягаемости — хорошо.
  3. Принцип близости (Гештальт): Связанные элементы должны располагаться рядом (например, кнопки «Сохранить» и «Отмена» — вместе).
  4. Минимизация когнитивной нагрузки: Не заставляйте пользователя думать о том, как выполнить действие. Интерфейс должен подсказывать (серые подсказки в полях ввода, понятные иконки).
  5. Правило трёх кликов: Любое важное действие должно быть доступно не более чем за 3 клика мыши.
Билет 67. Прототипирование пользовательского интерфейса

Прототипирование — это процесс создания упрощённой, рабочей модели будущего интерфейса (прототипа) для проверки идей, сценариев и удобства использования до начала полноценной разработки.

Уровни прототипов:

  1. Низкая детализация (Low-fidelity, Wireframes):
    • Серые схемы без цвета, шрифтов, деталей.
    • Прямоугольниками обозначены блоки.
    • Быстро, дёшево, легко менять.
    • Цель: проверить структуру и навигацию.
  2. Средняя детализация (Mid-fidelity, Mockups):
    • Добавлены цвета, типографика, иконки.
    • Но нет интерактивности (статичные картинки).
    • Цель: утверждение визуального стиля.
  3. Высокая детализация (High-fidelity, интерактивный прототип):
    • Полностью рабочий (кликабельный) макет.
    • Переходы между экранами, анимация.
    • Максимально похож на готовое приложение.
    • Цель: тестирование с пользователями.

Инструменты для прототипирования: Figma, Sketch, Adobe XD, Axure, Balsamiq (для низкой детализации).

Билет 68. Кодирование как этап разработки программного обеспечения

Кодирование (написание кода, реализация) — это этап жизненного цикла ПО, на котором создаётся исполняемый программный код на основе проектной документации, алгоритмов и архитектуры, разработанных на предыдущих этапах.

Место этапа кодирования:
Требования → Проектирование → Кодирование → Тестирование → Внедрение

Что происходит на этапе кодирования:

Результат: Исходный код программы, который затем компилируется (или интерпретируется) и тестируется.

Билет 69. Требования к качеству программного кода

Качественный код — это не просто работающий код, а код, который легко читать, поддерживать и развивать.

Основные требования:

  1. Читаемость (Readability) — код должен быть понятен другому разработчику (или вам самому через полгода). Понятные имена переменных, комментарии где нужно.
  2. Сопровождаемость (Maintainability) — легко исправлять ошибки и добавлять новые функции без страха всё сломать.
  3. Надёжность (Reliability) — код работает стабильно, обрабатывает ошибки (файл не найден, сеть отвалилась), не падает.
  4. Эффективность (Performance) — код не тратит лишнюю память и процессорное время (нет лишних циклов, медленных операций там, где не надо).
  5. Тестируемость (Testability) — код можно легко покрыть модульными тестами (отсутствие глобальных состояний, зависимостей, которые нельзя подменить).
  6. Безопасность (Security) — код защищён от типовых уязвимостей (SQL-инъекции, межсайтовый скриптинг, переполнение буфера).
  7. Документированность — для сложных участков есть комментарии; для API — формальная документация.
Билет 70. Стандарты оформления программного кода

Стандарт оформления кода — это набор правил (соглашений) о том, как писать код: отступы, имена переменных, расположение скобок, длина строки и т.д.

Зачем нужны:

Примеры правил (для языка C#/Java):

Популярные стандарты и инструменты:

Билет 71. Виды программной документации

По назначению документация делится на три большие категории:

  1. Техническая документация — для разработчиков, администраторов, архитекторов. (API, архитектура, развёртывание).
  2. Пользовательская документация — для конечных пользователей. (Руководство пользователя, инструкции).
  3. Процессная и управленческая документация — для менеджеров и заказчика. (ТЗ, планы, отчёты, тест-планы).
Билет 72. Пользовательская документация

Пользовательская документация — это документы, которые объясняют, как установить, настроить и использовать программный продукт конечному пользователю (не программисту). Пишется понятным языком, без технического жаргона (или с пояснениями).

Состав пользовательской документации:

Требования к пользовательской документации:

Билет 73. Техническая документация

Техническая документация — это документы, предназначенные для специалистов, которые разрабатывают, сопровождают или разворачивают ПО: программистов, архитекторов, DevOps, системных администраторов.

Что входит в техническую документацию:

Билет 74. Руководство пользователя

Руководство пользователя (User Manual) — это основной документ из состава пользовательской документации. Он предназначен для конечного пользователя, который работает с программой в повседневной деятельности.

Структура типового руководства пользователя:

  1. Введение — о программе, её возможностях, системе требований.
  2. Установка и запуск — как установить, как войти.
  3. Быстрый старт — за 5 минут сделать что-то полезное.
  4. Описание интерфейса — главное окно, панели инструментов, меню (с иллюстрациями).
  5. Пошаговые инструкции по выполнению основных задач:
    • Как создать новый документ.
    • Как сохранить.
    • Как распечатать и т.д.
  6. Справочная информация (горячие клавиши, форматы файлов).
  7. Сообщения об ошибках — что означает каждое сообщение и что делать.
  8. FAQ — частые проблемы и их решение.
  9. Алфавитный указатель — для быстрого поиска.
Билет 75. Руководство программиста

Руководство программиста (Developer’s Guide, Programmer’s Manual) — это технический документ, предназначенный для разработчиков, которые будут поддерживать, модифицировать или дорабатывать существующую программу (или подключаться к её API).

Что содержит руководство программиста:

  1. Общее описание архитектуры — из каких модулей/компонентов состоит система, как они связаны.
  2. Структура проекта — как организованы папки, пакеты, пространства имён.
  3. Описание API (Application Programming Interface):
    • Какие публичные классы/функции/методы доступны.
    • Параметры, возвращаемые значения, исключения (ошибки).
    • Примеры вызова.
  4. Описание внутренних алгоритмов (особенно сложных).
  5. Требования к среде разработки — какой IDE, компилятор, библиотеки использовать.
  6. Инструкция по сборке проекта (build): какие команды выполнить, чтобы собрать исполняемый файл.
  7. Инструкция по настройке среды отладки — как запустить отладчик, куда смотреть логи.
  8. Соглашения по стилю кода (code conventions), используемые в проекте.
  9. Описание системы контроля версий — как создавать ветки, коммитить, пулл-реквесты.
Билет 76.

Билет 77.

Билет 78.

Билет 79.

Билет 80.

Билет 81.

Билет 82.

Билет 83.

Билет 84.

Билет 85.

Билет 86.

Билет 87.

Билет 88.

Билет 89.

Билет 90.