Загрузка данных
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
на разработку программного модуля проверки синтаксической корректности строки вызова утилиты 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.