Загрузка данных


Отличный выбор варианта. Переход от gzip к chown требует более внимательного разбора синтаксиса, так как утилита chown имеет специфическую логику обработки аргументов (разделение на владельца/группу и целевые файлы, а также альтернативный синтаксис через флаг --reference).
Ниже представлено готовое, детально проработанное **Техническое задание (ТЗ) по ГОСТ 34.602-2020** для твоего варианта (Вариант 13), полностью адаптированное под синтаксис утилиты chown на основе её официального руководства (man chown).
# ТЕХНИЧЕСКОЕ ЗАДАНИЕ
**на разработку программного модуля проверки синтаксической корректности строки вызова утилиты chown операционной системы Linux**
## 1. Общие сведения
 * **Полное наименование системы:** Автоматизированная система проверки синтаксической корректности строки вызова утилиты chown операционной системы Linux.
 * **Условное обозначение:** chown_check.
 * **Разработчик:** студент группы [Номер группы] Мурзин М.
## 2. Цели и назначение создания автоматизированной системы
### 2.1 Цели создания АС
Целью разработки является реализация функции проверки синтаксической корректности строки вызова утилиты chown операционной системы Linux на языках программирования Pascal, C и Python, а также разработка структуры данных для накопления информации о результатах проверок и функций для управления этой структурой (обнуление, возврат, получение статистики успешных и неуспешных проверок).
### 2.2 Назначение АС
Программный модуль предназначен для:
 * Анализа и валидации текстовых строк, имитирующих вызов команды chown.
 * Хранения информации о количестве выполненных проверок.
 * Предоставления статистических данных в разрезе успешных/неуспешных проверок для интеграции в стороннее ПО на языках Pascal, C и Python.
## 3. Характеристика объекта автоматизации
### 3.1 Основные сведения (на основе man chown)
Объектом автоматизации является процесс синтаксического разбора и проверки корректности параметров строки вызова утилиты chown. Утилита chown предназначена для изменения владельца и/или группы для каждого указанного файла.
Согласно руководству man chown, синтаксис вызова утилиты разделяется на две основные формы:
 1. **Стандартная форма:** chown [ПАРАМЕТРЫ]... ВЛАДЕЛЕЦ[:[ГРУППА]] ФАЙЛ... (или :ГРУППА ФАЙЛ...)
 2. **Форма с эталоном:** chown [ПАРАМЕТРЫ]... --reference=ЭТАЛОННЫЙ_ФАЙЛ ФАЙЛ...
**Допустимые ключи и параметры (из man chown):**
 * -c, --changes — подробно докладывать о подлежащих изменению владельцах.
 * -f, --silent, --quiet — подавлять большинство сообщений об ошибках.
 * -v, --verbose — выводить диагностическое сообщение для каждого обрабатываемого файла.
 * --dereference — воздействовать на сами файлы, к которым ведут символьные ссылки (по умолчанию).
 * -h, --no-dereference — воздействовать на сами символьные ссылки вместо файлов, на которые они указывают (доступно только на системах, способных менять владельца ссылок).
 * --from=CURRENT_OWNER:CURRENT_GROUP — изменять владельца и/или группу только в том случае, если текущие владелец/группа совпадают с указанными.
 * --no-preserve-root — не обрабатывать корневой каталог / особым образом (по умолчанию).
 * --preserve-root — отклонять рекурсивную обработку корневого каталога /.
 * --reference=RFILE — использовать владельца и группу эталонного файла RFILE вместо явного указания аргумента ВЛАДЕЛЕЦ:ГРУППА.
 * -R, --recursive — рекурсивная обработка каталогов и их содержимого.
**Параметры изменения обхода дерева каталогов (используются совместно с -R):**
 * -H — если аргумент командной строки является символьной ссылкой на каталог, перейти по ней.
 * -L — переходить по всем встречающимся символьным ссылкам на каталоги.
 * -P — не переходить по символьным ссылкам (по умолчанию).
**Стандартные информационные ключи:**
 * --help — выдать справочную информацию и завершить работу.
 * --version — выдать информацию о версии и завершить работу.
> **Важное синтаксическое правило:** > Если ключ --reference **не задан**, то первый не-опциональный аргумент обязателен и должен интерпретироваться как спецификатор пользователя/группы ([OWNER][:[GROUP]]). После него должен идти как минимум один аргумент файла.
> Если ключ --reference **задан**, спецификатор пользователя/группы отсутствовать в строке команд, а все не-опциональные аргументы считаются целевыми файлами.
> 
## 4. Требования к автоматизированной системе
### 4.1 Требования к структуре и режимам функционирования
 * Система должна быть реализована в трех вариантах: автономные консольные утилиты на языках **C** и **Python** (работающие через стандартные потоки ввода-вывода stdin/stdout), и программный модуль (библиотека/юнит) на языке **Pascal**.
 * Все реализации должны функционировать в консольном режиме в среде ОС GNU/Linux x86-64.
### 4.2 Требования к функциям (функциональные требования)
Модуль должен обеспечивать выполнение следующих задач:
 1. **Ввод и первичный разбор строки:** Разбиение входной строки на токены с учетом пробелов. Поддержка комбинированных коротких ключей (например, объединение -Rvf в один токен).
 2. **Проверка имени команды:** Первым токеном строго должно являться слово chown.
 3. **Анализ ключей (опций):**
   * Проверка всех токенов, начинающихся с - или --, на соответствие списку допустимых ключей из раздела 3.1.
   * Корректное извлечение аргументов для параметров --from=... и --reference=....
   * Проверка совместимости: ключи обхода дерева (-H, -L, -P) могут быть указаны только при наличии флага рекурсии -R (или --recursive).
 4. **Валидация аргумента OWNER/GROUP (если нет --reference):**
   * Проверка структуры токена: допустимы форматы owner, owner:group, :group, owner.group.
   * Проверка соответствия имен пользователей и групп правилам POSIX (разрешенные символы: латиница, цифры, знаки подчеркивания и дефисы; имя не должно начинаться с дефиса).
 5. **Проверка целевых файлов:** Наличие как минимум одного аргумента, определяющего целевой файл или каталог, после обработки всех опций и аргумента владельца.
 6. **Управление накоплением статистики:**
   * Реализация структуры данных CheckStats со счетчиками успешных проверок (success_count) и неуспешных проверок (fail_count).
   * Функция **обнуления** структуры (reset_stats): сбрасывает счетчики в 0.
   * Функция **возврата** структуры (get_stats_struct): передает копию или указатель на текущую структуру данных.
   * Функция **получения информации** (get_stats_info): возвращает раздельные значения успешных и неуспешных проверок.
### 4.3 Требования к видам обеспечения
#### 4.3.1 Программное обеспечение
 * **Вариант на C:** Компилятор GCC версии \ge 10.3.1, стандарт C11, исполняемый файл.
 * **Вариант на Pascal:** Free Pascal Compiler (FPC) версии \ge 3.2.2, объектный модуль (.ppu/.o).
 * **Вариант на Python:** Интерпретатор CPython версии \ge 3.10, файл сценария .py.
#### 4.3.2 Техническое обеспечение
 * Процессор с архитектурой x86-64.
 * Оперативная память (RAM) от 512 МБ.
 * Свободное дисковое пространство от 100 МБ.
## 5. Состав и содержание работ по созданию системы
Разработка разбивается на следующие этапы:
 1. **Анализ требований и проектирование (2–10 мая):** Формирование ТЗ и разработка алгоритма конечного автомата (или регулярных выражений) для разбора синтаксиса chown. Создание тестового плана.
 2. **Программирование модулей (2–16 мая):** Параллельная реализация логики на C, FreePascal и Python.
 3. **Тестирование и отладка (11–16 мая):** Проведение испытаний, сбор логов тестирования.
 4. **Оформление и защита (11–16 мая):** Сборка архива 7z и подготовка к защите результатов.
## 6. Порядок контроля и приемки
Контроль качества осуществляется посредством тестирования:
 * **Реализация на Pascal:** Тестирование методом **«белого ящика»**. Разрабатывается отдельный тестовый юнит, который напрямую вызывает внутренние функции синтаксического анализа и манипулирования структурой статистики, сверяя выходы с эталонами.
 * **Реализации на C и Python:** Тестирование методом **«черного ящика»**. Осуществляется через внешнюю скриптовую систему тестирования, подающую на стандартный ввод (stdin) утилит набор тестовых строк и сверяющую код ответа и сообщения на stdout/stderr.
### Требования к тестовому плану:
План тестирования должен содержать не менее **5 категорий (типов)** тестов и не менее **25 тестовых случаев** суммарно:
 1. **Категория 1 (Позитивные тесты):** Базовые корректные команды (например: chown root file.txt, chown -R user:group /dir).
 2. **Категория 2 (Ошибки в имени и ключах):** Неверная команда (chovn ...), неизвестные ключи (chown -z file), некорректные комбинации ключей (chown -H file).
 3. **Категория 3 (Ошибки синтаксиса OWNER/GROUP):** Недопустимые символы в именах, пустые строки вместо имен при наличии двоеточия (например, chown : file.txt).
 4. **Категория 4 (Специфика флага --reference):** Проверки с правильным использованием эталона (chown --reference=ref.txt file.txt) и конфликты (одновременное указание --reference и явного user:group).
 5. **Категория 5 (Проверка функций статистики):** Тесты на последовательный вызов функций валидации с контролем инкремента счетчиков, проверкой сброса (reset) и корректности возврата структуры.
## 7. Порядок подготовки объекта к вводу в действие
Инструкции по развертыванию сред для проверки:
 * **Для Pascal:** Наличие установленного пакета fpc. Компиляция проверочной программы: fpc test_chown.pas.
 * **Для C:** Наличие установленного пакета gcc. Компиляция: gcc -O2 chown_check.c -o chown_check.
 * **Для Python:** Наличие интерпретатора python3. Запуск проверки прав на исполнение: chmod +x chown_check.py.
## 8. Источники разработки
 1. ГОСТ 34.602—2020 «Информационные технологии. Комплекс стандартов на автоматизированные системы. Техническое задание на создание автоматизированной системы».
 2. Справочное руководство Linux: man chown (пакет coreutils).
 3. Документация к компиляторам GCC, Free Pascal и интерпретатору CPython.