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


ТЕХНИЧЕСКОЕ ЗАДАНИЕ

на разработку программного модуля проверки синтаксической корректности строки вызова утилиты 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 версии ≥ 10.3.1, стандарт C11, исполняемый файл.

Вариант на Pascal: Free Pascal Compiler (FPC) версии ≥ 3.2.2, объектный модуль (.ppu/.o).

Вариант на Python: Интерпретатор CPython версии ≥ 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.