Преглед на файлове

added the final report and presentation on the project. The end

Chernoshchekova_Anastasya преди 3 месеца
родител
ревизия
9a3dda5fb1

+ 1784 - 0
Отчет_Презентация/УП_Отчет по проекту.docx

@@ -0,0 +1,1784 @@
+Министерство образования, науки и молодежной политики Нижегородской области
+Государственное бюджетное профессиональное образовательное учреждение "Нижегородский Губернский колледж"
+
+
+
+
+
+
+
+
+
+
+
+                ОТЧЕТ ПО УЧЕБНОЙ ПРАКТИКЕ
+                                       
+ПМ.02. Осуществление интеграции программных модулей
+Специальность 09.02.07 Информационные системы и программирование
+
+
+
+
+Выполнил
+
+Студент ____________
+А. Р. Чернощекова
+                                          [подпись]
+
+Студент ____________
+А. С. Шапкин
+                                          [подпись]
+
+Студент ____________
+А. Н. Щекалева
+                                         [подпись]
+
+Руководители ________
+Л. В. Мухина
+                                                   [подпись]
+
+                                                                      _________
+Ю. С. Мамшева
+                                                  [подпись]
+
+
+
+
+
+
+
+
+
+
+
+
+
+                         Нижний Новгород
+                                     2024
+                             СОДЕРЖАНИЕ
+ВВЕДЕНИЕ	3
+РАЗРАБОТКА И ОФОРМЛЕНИЕ ТЕХНИЧЕСКОГО ЗАДАНИЯ	5
+РАЗРАБОТКА ПЛАНОВОЙ ДОКУМЕНТАЦИИ	11
+РАЗРАБОТКА UML-ДИАГРАММ	13
+1.	Диаграмма вариантов использования (use case diagram)	13
+2.	Диаграмма последовательности (sequence diagram)	14
+3.	Диаграмма классов (class diagram)	16
+4.	Диаграмма коммуникации (communication diagram) или диаграмма кооперации (collaboration diagram)	18
+5.	Диаграмма деятельности (activity diagram)	19
+6.	Диаграмма состояния (state chart diagram)	21
+7.	Диаграмма развертывания (deployment diagram)	22
+8.	Диаграмма компонентов (component diagram)	23
+9.	Диаграмма потоков данных (data flow diagram)	25
+РАЗРАБОТКА ТЕСТОВОЙ ДОКУМЕНТАЦИИ	27
+1.	Тестовый план для ИС <<Учебная часть>>	27
+2.	Тестовая стратегия для ИС <<Учебная часть>>	31
+3.	Тестовый сценарий для ИС <<Учебная часть>>	32
+4. Тестовый набор для ИС <<Учебная часть>>	34
+РАЗРАБОТКА БАЗЫ ДАННЫХ	36
+1.	Описание предметной области	36
+2.	Описание основных сущностей предметной области	36
+РАЗРАБОТКА ПРОГРАММНЫХ МОДУЛЕЙ	40
+ТЕСТИРОВАНИЕ ИНТЕРФЕЙСА СИСТЕМЫ	41
+1.	Планирование тестирования UI/UX	44
+2.	Функциональное тестирование UI/UX	46
+3.	Адаптивное тестирование UI/UX	53
+4.	Тестирование пользовательского опыта (UX)	56
+5.	Тестирование производительности интерфейса	57
+6.	Тестирование безопасности интерфейса	57
+ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ	59
+ЗАКЛЮЧЕНИЕ	67
+ПРИЛОЖЕНИЕ А	69
+ПРИЛОЖЕНИЕ Б	71
+
+
+                               ВВЕДЕНИЕ
+   Учебная практика является разделом рабочей программы профессионального модуля ПМ 02. Осуществление интеграции программных модулей.
+   Учебная практика направлена на формирование умений, приобретение практического опыта для последующего освоения общих и профессиональных компетенций и реализуется в форме практической подготовки.
+   Цель учебной практики  -  закрепление и углубление знаний, приобретенных в процессе изучения профессиональных дисциплин данного модуля, формирование необходимых профессиональных навыков и качеств будущего специалиста.
+   Задачи учебной практики:
+ Приобретение практических навыков работы с современными информационными системами и программным обеспечением и реализация на практике теоретических знаний;
+ Ознакомление студентов с методами и технологиями разработки программного обеспечения;
+ Практическое применение знаний, полученных в теоретическом обучении, на практике;
+ Овладение навыками тестирования, отладки и оптимизации программного кода;
+ Изучение процесса управления проектами в области информационных технологий;
+ Повышение профессиональной компетенции и уверенности в своих знаниях и навыках;
+ Формирование детального представления о будущей профессии;
+ Приобретение навыков в работе с документами, регламентирующими будущую профессиональную деятельность;
+ Получение представления об этике профессиональной коммуникации;
+ Сбор и обработка материалов, необходимых для составления отчета по практике.
+Этапы проходимой учебной практики:
+ Подготовительный этап  -  ознакомление с программой учебной практики и графиком ее прохождения.
+ Основной этап  -  выполнение заданий в соответствии с графиком.
+ Заключительный этап  -  формирование итогового отчета и презентации для защиты результатов и итогов учебной практики.
+
+РАЗРАБОТКА И ОФОРМЛЕНИЕ ТЕХНИЧЕСКОГО ЗАДАНИЯ
+   Информационная система <<Учебная часть>> предоставляет доступ к личному кабинету студента/преподавателя и хранит информацию о всех дисциплинах, занятиях, семестрах и студентах с возможность удаления/изменения/обновления данных. Разрабатывается на основе языка C# с использованием фреймворка Avalonia.
+   Актуальность:
+ Удобный доступ к информации: Система обеспечивает удобный и быстрый доступ к актуальной информации о дисциплинах, расписании занятий, семестрах и контактным данным преподавателей. Это позволяет студентам и преподавателям эффективно планировать учебный процесс и своё время.
+ Централизованное хранение данных: Вся информация о студентах, преподавателях, дисциплинах, занятиях и семестрах хранится в одной системе. Это обеспечивает централизованное и структурированное хранение данных, исключает возможность их потери или дублирования.
+ Управление данными: Система позволяет администраторам управлять данными, включая возможность удаления, изменения и обновления информации о студентах, преподавателях и других сущностях. Таким образом, обеспечивается актуальность и достоверность данных в системе.
+ Улучшение процесса обновления информации: благодаря возможности удаления, изменения и обновления данных, система "Учебная часть" способствует более оперативному обновлению информации о студентах, преподавателях и других сущностях. Это особенно важно в случае изменения контактных данных или перевода студента на другую специальность.
+   Цель проекта:
+   Создать удобный и функциональный инструмент для студентов и преподавателей, обеспечивающий доступ к актуальным учебным материалам, оценкам, расписанию занятий и другой информации о учебном процессе. Система также целью имеет централизованное хранение и управление данными о студентах, преподавателях, дисциплинах и семестрах, обеспечивая возможность удаления, изменения и обновления информации. В итоге, разработка системы "Учебная часть" позволяет сократить временные затраты на поиск и обновление информации, повысить качество коммуникации между студентами и преподавателями, а также обеспечить централизованное и безопасное хранение данных об учебном процессе.
+   Задачи проекта:
+ Реализовать функционал авторизации и аутентификации пользователей (студентов, преподавателей) для обеспечения безопасного доступа к системе.
+ Создать механизм просмотра расписания занятий с возможностью настройки отображения по датам, группам и преподавателям, обеспечивая актуальность данных и удобство использования.
+ Разработать модуль для предоставления информации о преподавателях и контактных данных, который будет интегрирован с другими функциональными блоками системы.
+ Создать механизм просмотра оценок студентами за выполненные задания, тесты, контрольные работы и экзамены, обеспечивая конфиденциальность и целостность данных.
+ Создать модуль для предоставления статистики о посещаемости занятий студентами и их активности в системе, что позволит преподавателям более детально оценивать учебный прогресс студентов.
+ Обеспечить возможность изменения личных данных о пользователей.
+ Построить масштабируемую и надежную архитектуру системы, выбрав подходящие технологии и инструменты разработки. Также следует обеспечить хорошую документацию и настройку процесса непрерывной интеграции и доставки для удобной разработки и сопровождения системы.
+   Стадии реализации проекта:
+                                                              Таблица 1 
+               Стадии реализации проекта
+                                      №
+Стадия реализации
+Срок
+Временные рамки
+                                        
+Анализ предметной области и оформление ТЗ
+1 день
+16.05
+                                        
+Разработка плановой документации
+1 день
+17.05
+                                        
+Проектирование системы
+1 день
+18.05
+                                        
+Построение UML-диаграмм
+3 дня
+18.05-21.05
+                                        
+Проектирование базы данных
+(1/2) дня
+18.05
+                                        
+Реализация базы данных
+(1/2) дня
+18.05
+                                        
+Проектирование интерфейсов
+1 день
+18.05
+                                        
+Реализация интерфейсов
+3 дня
+20.05-23.05
+                                        
+Проектирование модулей
+2 дня
+20.05-22.05
+                                        
+Реализация модулей
+5 дней
+23.05-28.05
+                                        
+Интеграция системы
+3 дня
+29.05-31.05
+                                        
+Разработка тестовой документации
+3 дня
+01.06-04.06
+                                        
+Тестирование
+1 день
+04.06
+                                        
+Защита проекта
+1 день
+05.06
+
+
+                                       
+Рисунок 1  -  Сетевой график распределения работ
+
+                                       
+  Рисунок 2 - Критический путь работ - 18 дней
+
+   Участники:
+   За реализацию информационной системы <<Учебная часть>> для образовательного учреждения ответственны студенты ГБПОУ <<Нижегородский Губернский колледж>> группы 31П специальности 09.02.07 Информационные системы и программирование:
+ Щекалева Александра Николаевна
+ Чернощекова Анастасия Романовна
+ Шапкин Алексей Сергеевич
+   Распределение ролей:
+                                                               Таблица 2
+                     Распределение ролей
+                                      №
+Участник
+Ответственный за
+                                       1
+Чернощекова А. Р.
+Тестирование
+1/3 разработка программных модулей
+1/3 интеграция модулей
+1/3 проектирование UML-диаграмм
+                                       2
+Шапкин А. С.
+Проектирование и реализация интерфейсов
+1/3 разработка программных модулей
+1/3 интеграция программных модулей
+1/3 проектирование UML-диаграмм
+                                       3
+Щекалева А. Н.
+Разработка базы данных
+1/3 разработка программных модулей
+1/3 интеграция программных модулей
+1/3 проектирование UML-диаграмм
+   
+   
+   Ресурсы:
+ 3 компьютера, минимальные требования к которым: 8 ГБ оперативной памяти, процессор с 4 ядрами, диск не менее 256 Гб;
+ Операционная система Windows/Linux;
+ На всех устройствах должен быть обеспечен доступ к интернету;
+ Удаленный	 сервер для хранения БД;
+ СУБД PostgreSQL;
+ На рабочих компьютерах должны быть следующие программы:
+  Браузер;
+  MS Word;
+  MS Excel;
+  MS PowerPoint;
+  Клиент PostgreSQL;
+  .NET;
+  IDE для работы с C#;
+  Шаблоны Avalonia;
+  Редактор диаграмм drawio.
+ Система контроля версий  -  Git;
+ Удаленный репозиторий на сервере Gogs;
+ 18 рабочих дней.
+
+        РАЗРАБОТКА ПЛАНОВОЙ ДОКУМЕНТАЦИИ
+   Информационная система "Учебная часть" предоставляет доступ к личному кабинету студента/преподавателя, где они могут удобно просматривать информацию о своих дисциплинах, занятиях, семестрах и др. Система хранит данные о студентах, их оценках, посещаемости и академической производительности, обеспечивая возможность удаления, изменения и обновления информации для актуальности и точности данных. Это позволяет учебному учреждению эффективно управлять учебным процессом, обеспечивая студентам и преподавателям доступ к необходимой информации для успешного обучения и преподавания.
+   Варианты использования информационной системы <<Учебная часть>> преподавателем:
+ Регистрация/авторизация пользователя;
+ Добавление/изменение информации о преподавателе;
+ Получение информации о группах специальности;
+ Получение информации о рабочих часах по дисциплинам;
+ Добавление оценок за работы, тесты, контрольные работы, экзамены, выполненные студентом;
+ Добавление информации о посещаемости студентов;
+ Получение отчетов о посещаемости студентов;
+ Получение отчетов об успеваемости студентов по дисциплинам.
+   Варианты использования информационной системы <<Учебная часть>> студентом:
+ Регистрация/авторизация пользователя;
+ Добавление/изменение информации о студенте;
+ Получение информации о расписании занятий;
+ Получение информации об оценках за выполненные работы, тесты, контрольные работы, экзамены;
+ Получение информации об экзаменах/зачетах по дисциплинам;
+ Получение информации о преподавателях, их контактных данных;
+ Получение списка дисциплин за текущий семестр группы.
+
+                   РАЗРАБОТКА UML-ДИАГРАММ
+ Диаграмма вариантов использования (use case diagram)
+   Диаграмма использования (use case diagram)  -  это наиболее общее представление функционального назначения системы.
+   Разработка диаграммы вариантов использования преследует цели:
+ Определить общие границы и контекст моделируемой предметной области на начальных этапах проектирования системы;
+ Сформулировать общие требования к функциональному поведению проектируемой системы;
+ Разработать исходную концептуальную модель системы для ее последующей детализации в форме логических и физических моделей;
+ Подготовить исходную документацию для взаимодействия разработчиков системы с ее заказчиками и пользователями.
+   Суть данной диаграммы состоит в следующем: проектируемая система представляется в виде множества сущностей или актеров, взаимодействующих с системой с помощью так называемых вариантов использования. При этом актером или действующим лицом называется любая сущность, взаимодействующая с системой извне. Это может быть человек, техническое устройство, программа или любая другая система, которая может служить источником воздействия на моделируемую систему так, как определит сам разработчик. В свою очередь, вариант использования (use case) служит для описания сервисов, которые система предоставляет актеру.
+   Другими словами, каждый вариант использования определяет некоторый набор действий, совершаемый системой при диалоге с актером. При этом ничего не говорится о том, каким образом будет реализовано взаимодействие актеров с системой.
+   Диаграмма вариантов использования, разработанная для информационной системы <<Учебная часть>>, представлена на рис. 3.
+
+Рисунок 3  -  Диаграмма вариантов использования (use case diagram)
+
+ Диаграмма последовательности (sequence diagram)
+   Диаграмма последовательности (sequence diagram)  -  это способ описания поведения системы <<на примерах>>. Можно сказать, что диаграмма последовательности  -  это запись протокола конкретного сеанса работы системы (или фрагмента такого протокола).
+   Диаграмма последовательности относится к диаграммам взаимодействия UML, описывающим поведенческие аспекты системы, но рассматривает взаимодействие объектов во времени. Другими словами, диаграмма последовательности отображает временные особенности передачи и приема сообщений объектами.
+   На диаграмме последовательности изображаются исключительно те объекты, которые непосредственно участвуют во взаимодействии и не показываются возможные статические ассоциации с другими объектами. Для диаграммы последовательности ключевым моментом является именно динамика взаимодействия объектов во времени.
+   Для информационной системы <<Учебная часть>> были разработаны диаграммы последовательности для студента и преподавателя (рис. 4, рис. 5).
+
+Рисунок 4 - Диаграмма последовательности для студента
+
+
+Рисунок 5 - Диаграмма последовательности для преподавателя
+
+ Диаграмма классов (class diagram)
+   Диаграмма классов (class diagram)  -  основной способ описания структуры системы.
+   Диаграмма классов служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования. Диаграмма классов может отражать, в частности, различные связи между отдельными сущностями предметной области, такими как объекты и подсистемы, а также описывает их внутреннюю структуру (поля, методы и т.д.) и типы отношений. На данной диаграмме не указывается информация о временных аспектах функционирования системы.
+   На диаграмме классов применяется один основной тип сущностей: классы, включая многочисленные частные случаи классов: интерфейсы, примитивные типы, классы-ассоциации и др., между которыми устанавливаются следующие основные типы отношений:
+ Ассоциация между классами;
+ Обобщение между классами;
+ Зависимости между классами и между классами и интерфейсами.
+   Для разрабатываемой информационной системы <<Учебная часть>> была спроектирована диаграмма классов, представленная на рис. 6.
+
+     Рисунок 6 - Диаграмма классов (class diagram)
+
+ Диаграмма коммуникации (communication diagram) или диаграмма кооперации (collaboration diagram)
+   Диаграмма коммуникации (communication diagram) или диаграмма кооперации (collaboration diagram)  -  способ описания поведения, семантически эквивалентный диаграмме последовательности.
+   Диаграмма коммуникации отображает ту же информацию, что и диаграмма последовательности, но на диаграмме коммуникации зависимость от времени указывается посредством нумерации сообщений.
+   На диаграмме коммуникации отражается распределение процессов между объектами и их зависимости друг от друга, что очень полезно при разработке различных проектов. Основной целью построения данной диаграммы является понимание структурной организации занятых в системе объектов, принимающих и передающих сообщения.
+   Диаграмма коммуникации, разработанная для информационной системы <<Учебная часть>>, представлена на рис. 7.
+
+Рисунок 7 - Диаграмма коммуникации (кооперации)
+
+ Диаграмма деятельности (activity diagram)
+   Диаграмма деятельности (activity diagram)  -  еще один способ описания поведения, который визуально напоминает блок-схему алгоритма.
+   На диаграмме деятельности применяют основной тип сущностей  -  действие и один тип отношений  -  переходы. Также используются такие конструкции как развилки, слияния, соединения, ветвления, которые похожи на сущности, но таковыми на самом деле не являются.
+   Каждая диаграмма деятельности должна иметь единственное начальное и единственное конечное состояния. При этом каждая деятельность начинается в начальном состоянии и заканчивается в конечном состоянии. Саму диаграмму деятельности принято располагать таким образом, чтобы действия следовали сверху вниз. В этом случае начальное состояние будет изображаться в верхней части диаграммы, а конечное - в ее нижней части.
+   Для разрабатываемой информационной системы <<Учебная часть>> была разработана диаграмма деятельности, представленная на рис. 8.
+                                       
+Рисунок 8 - Диаграмма деятельности (activity diagram)
+ Диаграмма состояния (state chart diagram)
+   Диаграмма состояния (state chart diagram)  -  это один из способов детального описания поведения в UML.
+   Главное предназначение данной диаграммы  -  описать возможные последовательности состояний и переходов, которые в совокупности характеризуют поведение элемента модели в течение его жизненного цикла. Диаграмма состояний представляет динамическое поведение сущностей, на основе спецификаций их реакции на восприятие некоторых конкретных событий.
+   На диаграмме состояния применяют один основной тип сущностей  -- состояния, и один тип отношений  --  переходы, но и для тех, и для других определено множество разновидностей, специальных случаев и дополнительных обозначений.
+	Диаграмма состояния, разработанная для информационной системы <<Учебная часть>>, представлена на рис. 9.
+
+Рисунок 9 - Диаграмма состояния (state chart diagram)
+ Диаграмма развертывания (deployment diagram)
+   Диаграмма развертывания (deployment diagram)  -  предназначена для представления общей конфигурации или топологии распределенной программной системы и содержит изображение размещения различных артефактов по отдельным узлам системы.
+   Диаграмма развертывания предназначена для визуализации элементов и компонентов программы, существующих лишь на этапе ее выполнения (runtime). При этом представляются только компоненты-экземпляры программы, являющиеся исполнимыми файлами или динамическими библиотеками. Те компоненты, которые не используются на этапе исполнения, на диаграмме развертывания не отражаются.
+   Диаграмма развертывания содержит графические изображения процессоров, устройств, процессов и связей между ними. В отличие от диаграмм логического представления, диаграмма развертывания является единой для системы в целом, поскольку должна всецело отражать особенности ее реализации. Эта диаграмма, по сути, завершает процесс ООАП (объектно-ориентированный анализ и проектирование) для конкретной программной системы и ее разработка, как правило, является последним этапом спецификации модели.
+    Для разрабатываемой информационной системы <<Учебная часть>> была разработана диаграмма развертывания, представленная на рис. 10.
+
+Рисунок 10 - Диаграмма развертывания (deployment diagram)
+
+ Диаграмма компонентов (component diagram)
+   Диаграмма компонентов описывает особенности физического представления системы. Диаграмма компонентов позволяет определить архитектуру разрабатываемой системы, установив зависимости между программными компонентами, в роли которых может выступать исходный, бинарный и исполняемый код. Основными графическими элементами диаграммы компонентов являются компоненты, интерфейсы и зависимости между ними.
+   Диаграмма компонентов разрабатывается для следующих целей:
+ визуализации общей структуры исходного кода программной системы;
+ спецификации исполнимого варианта программной системы;
+ обеспечения многократного использования отдельных фрагментов программного кода;
+ представления концептуальной и физической схем баз данных.
+   Диаграмма компонентов обеспечивает согласованный переход от логического представления к конкретной реализации проекта в форме программного кода. Одни компоненты могут существовать только на этапе компиляции программного кода, другие  -  на этапе его исполнения. Диаграмма компонентов отражает общие зависимости между компонентами, рассматривая последние в качестве классификаторов.
+   Диаграмма компонентов, разработанная для информационной системы <<Учебная часть>>, представлена на рис. 11.
+                                       
+Рисунок 11 - Диаграмма компонентов (component diagram)
+   
+ Диаграмма потоков данных (data flow diagram)
+   Диаграмма потоков данных (data flow diagram)  -  это метод, с помощью которого проводится графический структурный анализ, в котором описаны внешние для системы источники данных, функции, потоки и хранилища данных, к которым имеется доступ. С помощью этой диаграммы проводится структурный анализ и проектируются информационные системы.
+   Модель системы в контексте DFD представляется в виде некоторой информационной модели, основными компонентами которой являются различные потоки данных, которые переносят информацию от одной подсистемы к другой. Каждая из подсистем выполняет определенные преобразования входного потока данных и передает результаты обработки информации в виде потоков данных для других подсистем.
+   Основными компонентами диаграмм потоков данных являются:
+ внешние сущности;
+ накопители данных или хранилища;
+ процессы;
+ потоки данных;
+ системы/подсистемы.
+   Для разрабатываемой информационной системы <<Учебная часть>> была разработана диаграмма потоков данных, представленная на рис. 12.
+                                       
+Рисунок 12 - Диаграмма потоков данных (data flow diagram)
+
+        РАЗРАБОТКА ТЕСТОВОЙ ДОКУМЕНТАЦИИ
+ Тестовый план для ИС <<Учебная часть>>
+   Цель документа:
+   Цель данного тестового плана - описать план тестирования информационной системы "Учебная часть" и определить стратегию тестирования, состав тестовой команды, необходимое тестовое окружение и другие аспекты тестирования.
+   Область применения:
+   Тестирование ИС "Учебная часть", которая предоставляет удобный и функциональный интерфейс для студентов и преподавателей, обеспечивает доступ к актуальным учебным материалам, оценкам, расписанию занятий и другой информации о учебном процессе.
+   Перечень работ:
+   Внешний вид и дизайн:
+ Визуальное тестирование / тестированием пользовательского интерфейса
+   Функциональные возможности:
+ Тестирование функционала регистрации и авторизации пользователей.
+ Тестирование функционала просмотра расписания занятий.
+ Тестирование функционала учета посещения занятий студентами.
+ Тестирование функционала представления информации о преподавателях и контактных данных.
+ Тестирование функционала просмотра оценок студентами и преподавателями.
+ Тестирование функционала управления данными в системе.
+  Критерии качества:
+ Адекватность:
+ Функционал ИС должен соответствовать требованиям и ожиданиям пользователей.
+ Информация, предоставляемая в ИС, должна быть точной, полной и актуальной.
+ Доступность:
+ ИС должна быть доступна пользователям в любое время, при условии наличия интернет-соединения.
+ Интерфейс ИС должен быть удобным, понятным и легко навигируемым для всех категорий пользователей.
+ Преемственность:
+ При обновлении ИС и внедрении новых версий необходимо обеспечить сохранение и перенос данных из предыдущих версий.
+ ИС должна корректно интегрироваться с другими системами учебной части образовательного учреждения.
+ Безопасность:
+ ИС должна обеспечивать конфиденциальность пользовательских данных и защиту от несанкционированного доступа.
+ При взаимодействии с другими системами ИС должна корректно обрабатывать и передавать данные, а также предотвращать возможные угрозы безопасности (например, инъекции или межсайтовые атаки).
+ Своевременность:
+ ИС должна оперативно предоставлять информацию о расписании занятий, оценках и других данных, связанных с учебным процессом.
+ Функционал ИС, связанный с учетом посещения занятий и оценками, должен работать в режиме реального времени и обеспечивать быструю обработку данных.
+ Эффективность:
+ ИС должна иметь оптимальную производительность и быстродействие, чтобы обеспечивать комфортное использование пользователями даже при большом объеме данных или одновременной нагрузке на систему.
+   Оценка рисков:
+ Риск неправильной работы функционала регистрации и авторизации пользователей может привести к нарушению конфиденциальности данных.
+ Риск неправильного отображения расписания занятий может привести к проблемам в организации учебного процесса.
+ Риск неправильного учета посещения занятий студентами может привести к ошибкам в оценках и некорректной статистике по успеваемости.
+ Риск неправильного представления информации о преподавателях и контактных данных может затруднить коммуникацию между студентами и преподавателями.
+ Риск неправильного отображения оценок студентами и преподавателями может привести к недоверию к системе и спорам по оценкам.
+   Документация:
+ Техническое задание на разработку ИС "Учебная часть".
+ Тест-план, тестовая стратегия, тестовый сценарий, тестовый набор.
+   Стратегия тестирования:
+ Для тестирования функционала ИС будут применены ручное тестирование и тестирование через автоматизированные тестовые сценарии.
+ Тестирование будет проводиться на каждом этапе разработки и внедрения ИС.
+ Для обеспечения качества тестирования будет использована требуемая тестовая инфраструктура и надлежащие тестовые данные.
+ Результаты тестирования будут документироваться и отчетливо представлены в виде тест-результатов.
+   Ресурсы:
+ Программные ресурсы: компьютеры для проведения тестирования, необходимое программное обеспечение (браузеры, инструменты для автоматизированного тестирования и др.).
+ Аппаратные ресурсы: серверы для развертывания ИС, компьютеры для разработчиков и тестировщиков.
+ Человеческие ресурсы: специалисты по тестированию, разработчики, системные администраторы.
+ Временные ресурсы: время для проведения тестирования, настройки тестовой среды, подготовки тестовых данных.
+   Метрики:
+ Количество выполненных тестовых случаев.
+ Количество обнаруженных и успешно исправленных ошибок.
+ Время, затраченное на тестирование каждой функциональной области ИС.
+ Процент покрытия тестами каждой функциональной области ИС.
+   Расписание и ключевые точки:
+   Начало тестирования: после завершения разработки каждой функциональной области ИС.
+                                                               Таблица 3
+                 Расписание тестирования
+                                       1
+Разработка тестовой документации
+3 дня
+01.06-04.06
+                                       2
+Тестирование
+1 день
+04.06
+   
+   
+   Окончание тестирования: за день до защиты учебной практики.
+   Ключевые точки: 
+ Проведение совместного тестирования ИС.
+ Предоставление отчета о результатах тестирования и исправлении всех обнаруженных ошибок.
+ Участие в обсуждении и решении вопросов, связанных с тестированием ИС.
+   
+ Тестовая стратегия для ИС <<Учебная часть>>
+   Цель документа:
+   Цель стратегии тестирования - стратегия помогает понять, сколько человек, какими инструментами и в какие сроки будет решать задачу по тестированию продукта.
+   Область применения:
+ ИС "Учебная часть" является частью общей информационной системы учебного учреждения и взаимодействует с другими компонентами системы.
+ Функциональность ИС "Учебная часть" включает в себя: учет студентов и преподавателей, формирование расписания занятий, управление учебным процессом, доступ к электронным образовательным ресурсам, предоставление информации о преподавателях и контактных данных, просмотр оценок студентами и преподавателями, возможность управления данными в системе.
+Методология:
+ Для тестирования ИС "Учебная часть" будет использоваться комбинированный подход, включающий функциональное тестирование, тестирование пользовательского интерфейса, регрессионное тестирование, тестирование производительности и нагрузочное тестирование.
+ Тестирование будет проводиться как вручную, так и с использованием автоматизированных тестовых инструментов.
+   Тестовые окружения:
+ Для тестирования ИС "Учебная часть" будет создано рабочее окружение, идентичное производственному окружению.
+ В тестовом окружении будут настроены все необходимые компоненты и настройки для полноценного тестирования системы.
+   Инструменты:
+ Для функционального тестирования будет использоваться среда Visual Studio.
+ Для модульного тестирования будет применяться фреймворк MSTest.
+ Для создания автотестов и генерации тестовых данных будет использоваться инструмент Microsoft Fakes.
+ Для нагрузочного и стресс-тестирования будет применяться инструментарий Visual Studio Load Testing Tools.
+   Управление релизами:
+ В каждом релизе ИС "Учебная часть" будет выделяться отдельная часть функциональности для тестирования.
+ Планирование и управление тестированием будет осуществляться с использованием документа тест плана и сохранение изменений и обновлений внутри репозитория gogs.
+   Результаты тестов:
+   По результатам тестирования будет составлен отчет, в котором будет указано количество и типы проведенных тестов, а также информация о найденных ошибках и их статусе.
+   Согласование и утверждение:
+   Стратегия тестирования будет согласована с командой разработки перед началом работ по тестированию ИС "Учебная часть".
+
+ Тестовый сценарий для ИС <<Учебная часть>>
+ Сценарий по учету студентов:
+ Шаг 1: Создание новой записи студента с заполнением всех обязательных полей.
+ Шаг 2: Проверка, что запись студента успешно создана и отображается в списке студентов.
+ Шаг 3: Редактирование информации о студенте, например, изменение контактных данных.
+ Шаг 4: Проверка, что информация о студенте успешно обновлена.
+ Шаг 5: Удаление записи о студенте.
+ Шаг 6: Проверка, что запись о студенте успешно удалена из системы.
+ Сценарий по формированию расписания занятий:
+ Шаг 1: Создание нового занятия в расписании с указанием всех необходимых данных (дата, время, преподаватель, аудитория, предмет и т.д.).
+ Шаг 2: Проверка, что занятие успешно добавлено в расписание и отображается корректно.
+ Шаг 3: Редактирование информации о занятии, например, изменение времени или аудитории.
+ Шаг 4: Проверка, что информация о занятии успешно обновлена в расписании.
+ Шаг 5: Удаление занятия из расписания.
+ Шаг 6: Проверка, что занятие успешно удалено и больше не отображается в расписании.
+ Сценарий по управлению учебным процессом:
+ Шаг 1: Выбор конкретного студента из списка для проверки его успеваемости.
+ Шаг 2: Проверка, что отображается актуальная информация об успеваемости выбранного студента.
+ Шаг 3: Добавление новой оценки студенту.
+ Шаг 4: Проверка, что оценка успешно добавлена и отображается в журнале успеваемости студента.
+ Шаг 5: Удаление оценки из журнала успеваемости.
+ Шаг 6: Проверка, что оценка успешно удалена и больше не отображается в журнале успеваемости студента.
+ Сценарий по сокращению временных затрат и повышению эффективности:
+ Шаг 1: Проверка возможности быстрого поиска конкретного студента в списке при большом количестве записей.
+ Шаг 2: Проверка возможности быстрого фильтрации списка студентов по определенным критериям, например, по группе или курсу.
+ Шаг 3: Проверка возможности массового импорта данных о студентах из внешнего источника, например, из CSV файла.
+ Шаг 4: Проверка, что данные о студентах успешно импортированы и отображаются в системе.
+ Шаг 5: Проверка возможности быстрого создания отчета о списке студентов с определенными фильтрами и сортировкой, например, отчета о студентах определенной группы или курса.
+ Шаг 6: Проверка возможности экспорта данных о студентах в CSV или Excel формате для дальнейшей обработки или использования в других системах.
+   4. Тестовый набор для ИС <<Учебная часть>>
+   Ниже приведен пример тестового набора для ИС "Учебная часть":
+ Тестовый случай для функции учета студентов:
+   Входные данные: ID студента = 123, ФИО = "Иванов Иван Иванович", группа = "Группа 1"
+   Ожидаемый результат: Студент с ID 123 успешно зарегистрирован. В базе данных появилась запись с информацией о студенте (ФИО, группа).
+ Тестовый случай для функции формирования расписания занятий:
+   Входные данные: ID преподавателя = 456, день недели = "Понедельник", время начала занятия = "10:00", продолжительность занятия = 2 часа, предмет = "Математика", аудитория = "Аудитория 101"
+   Ожидаемый результат: Расписание занятий успешно обновлено. В базе данных появилась запись с информацией о занятии (ID преподавателя, день недели, время начала и продолжительность занятия, предмет, аудитория).
+ Тестовый случай для функции ведения электронного журнала успеваемости:
+   Входные данные: ID студента = 123, предмет = "Математика", оценка = 5
+   Ожидаемый результат: в журнале успеваемости студента с ID 123 по предмету "Математика" появилась оценка 5.
+ Тестовый случай для функции обмена информацией между преподавателями и студентами:
+   Входные данные: ID студента = 123, ID преподавателя = 456, сообщение = "Вопрос по заданию"
+   Ожидаемый результат: Преподавателю с ID 456 пришло сообщение от студента с ID 123 с текстом "Вопрос по заданию". Сообщение отображается в интерфейсе преподавателя в разделе общения с студентами.
+   Каждый тестовый случай включает входные данные (аргументы функции) и ожидаемый результат. При проведении тестирования ИС "Учебная часть" будет использоваться подобный тестовый набор для проверки различных функций системы.
+   
+                  РАЗРАБОТКА БАЗЫ ДАННЫХ
+ Описание предметной области
+   Информационная система <<Учебная часть>> предназначена для управления учебным процессом, обеспечивая доступ к актуальным учебным материалам, оценкам, расписанию занятий и другой информации.
+   Информационная система предоставляет доступ к личному кабинету студента/преподавателя, где они могут удобно просматривать информацию о своих дисциплинах, занятиях, семестрах и др. Система хранит данные о студентах, их оценках, посещаемости и академической производительности, обеспечивая возможность удаления, изменения и обновления информации для актуальности и точности данных. Это позволяет учебному учреждению эффективно управлять учебным процессом, обеспечивая студентам и преподавателям доступ к необходимой информации для успешного обучения и преподавания.
+   Функциональные требования к базе данных:
+   База данных должна поддерживать операции по учету студентов и преподавателей, формированию расписания занятий, управлению учебным процессом и доступу к электронным образовательным ресурсам.
+   Нефункциональные требования к базе данных:
+   База данных должна обеспечивать высокую производительность, надежность, безопасность и масштабируемость.
+   
+ Описание основных сущностей предметной области
+   В результате проведенного анализа предметной области базы данных для информационной системы <<Учебная часть>> можно перечислить основные сущности данной базы данных. Так как на физическом уровне сущности соответствует таблица, то перечислим основные таблицы базы данных.
+   Реляционная модель проектированной базы данных будет содержать следующие таблицы (сущности): Роли, Пользователи, Кафедры, Специальности, Группы, Студенты, Корпусы (филиалы), Преподаватели, Дисциплины преподавателей, Дисциплины групп, Расписание, Оценки, Посещаемость.
+   Атрибут на физическом уровне  -  это колонки таблицы и отражает определенное свойство объекта.
+   Атрибуты: данные о студентах (ФИО, группа, контактные данные), данные о преподавателях (ФИО, предметы), данные о занятиях (дата, время, аудитория), данные об успеваемости (оценки).
+                                                               Таблица 4
+                     Таблицы базы данных
+                                      №
+                               Название
+                               Атрибуты
+                                       1
+Роли
+ ID (первичный ключ)
+ Название (varying (30))
+                                       2
+Пользователи
+ ID (первичный ключ)
+ Фамилия (varying (30))
+ Имя (varying (30))
+ Отчество (varying (30))
+ Почта (varying (30))
+ Номер телефона (varying (30))
+ Год рождения (date)
+ ID роли (вторичный ключ)
+                                       3
+Кафедры
+ ID (первичный ключ)
+ Название (varying (30))
+                                       4
+Специальности
+ ID (первичный ключ)
+ Название (varying (30))
+ ID кафедры (вторичный ключ)
+                                       5
+Группы
+ ID (первичный ключ)
+ ID специальности (вторичный ключ)
+ Дата поступления (date)
+ Название (varying (5))
+                                       6
+Студенты
+ ID пользователя (вторичный ключ)
+ ID группы (вторичный ключ)
+                                       7
+Корпусы (филиалы)
+ ID (первичный ключ)
+ Заведующий (вторичный ключ)
+ Адрес (varying (70))
+                                       8
+Преподаватели
+ ID пользователя (вторичный ключ)
+ ID кафедры (вторичный ключ)
+                                       9
+Дисциплины
+ ID (первичный ключ)
+ Название (varying (30))
+ ID кафедры (вторичный ключ)
+                                      10
+Дисциплины преподавателей
+ ID (первичный ключ)
+ ID преподавателя (вторичный ключ)
+ ID кафедры (вторичный ключ)
+                                      11
+Дисциплины групп
+ ID (первичный ключ)
+ Семестр
+ ID дисциплины преподавателя (вторичный ключ)
+ ID группы (вторичный ключ)
+                                      12
+Расписание
+ ID (первичный ключ)
+ Дата (date)
+ Номер (smallint)
+ ID дисциплины (вторичный ключ)
+ ID корпуса (вторичный ключ)
+                                      13
+Оценки
+ ID (первичный ключ)
+ ID студента (вторичный ключ)
+ ID группы (вторичный ключ)
+ Дата (date)
+ Оценка (int)
+                                      14
+Посещаемость
+ ID (первичный ключ)
+ ID расписания (вторичный ключ)
+ ID студента (вторичный ключ)
+ Посещение (bool)
+
+
+   Листинг создания таблиц базы данных представлен в Приложении А.
+   
+                                                               Таблица 5
+            Список связей между таблицами
+                                      №
+                          Название связи
+            Сущности, участвующие в связи
+                                       1
+                                     1:М
+                           Timetables  -  Attendance
+                                       2
+                                     1:М
+                            Students  -  Attendance
+                                       3
+                                     1:М
+                          Students  -  StudentGrades
+                                       4
+                                     1:М
+                       GroupDiscipline  -  StudentGrades
+                                       5
+                                     1:М
+                        GroupDiscipline  -  Timetables
+                                       6
+                                     1:М
+                           Buildings  -  Timetables
+                                       7
+                                     1:М
+                          Groups  -  GroupDiscipline
+                                       8
+                                     1:М
+                    TeachersDisciplines  -  GroupDiscipline
+                                       9
+                                     1:М
+                      Disciplines  -  TeachersDisciplines
+                                      10
+                                     1:М
+                       Teachers  -  TeachersDisciplines
+                                      11
+                                     1:М
+                          Departments  -  Disciplines
+                                      12
+                                     1:М
+                            Departments - Teachers
+                                      13
+                                     1:М
+                               Users - Teachers
+                                      14
+                                     1:М
+                               Users - Buildings
+                                      15
+                                     1:М
+                               Users - Students
+                                      16
+                                     1:М
+                               Groups - Students
+                                      17
+                                     1:М
+                             Specialties - Groups
+                                      18
+                                     1:М
+                           Departments - Specialties
+                                      19
+                                     1:М
+                                 Roles - Users
+
+
+   Спроектированная ER-диаграмма базы данных для информационной системы <<Учебная часть>> представлена на рис.13.
+   
+                                       
+         Рисунок 13 - Диаграмма базы данных
+
+   Скрипт заполнения таблиц базы данных представлен в Приложении Б к данному отчету.
+          РАЗРАБОТКА ПРОГРАММНЫХ МОДУЛЕЙ
+
+         ТЕСТИРОВАНИЕ ИНТЕРФЕЙСА СИСТЕМЫ
+                                                               Таблица 6
+ Представление страниц ИС <<Учебная часть>>
+                       Название страницы
+                               Описание
+                          Представление
+Начальная страница
+Появляется при заходе в приложение содержит логотип приложения и название приложения
+                                       
+Авторизация
+Содержит окно авторизации пользователя под своим логином и паролем
+                                       
+Меню
+Содержит информативные блоки и переходом на другие страницы приложения, служит навигацией приложения
+                                       
+Профиль преподавателя
+Содержит информацию о преподавателе, а также интерфейс с нужными окнами для него при работе в среде <<Учебная часть>>
+                                       
+Профиль студента
+Содержит информацию о студенте, а также интерфейс с нужными окнами для него при работе в среде <<Учебная часть>>
+
+Расписание
+Содержит актуальное расписание предметов в определенную дату, а также фильтрацию по группам или по преподавателю
+                                       
+Преподаватели
+Содержит информацию по всем преподавателям с фильтрацией по корпусам
+                                       
+Студенты
+Содержит информацию по всем студентам с фильтрацией по группам
+                                       
+Оценки для просмотра преподавателем
+Содержит все оценки студентов и может отфильтровать данные по группам
+                                       
+Оценки для просмотра студента
+Содержит все оценки студента и может отфильтровать данные по дисциплинам
+                                       
+Итоговые оценки для просмотра преподавателем
+Содержит итоговые оценки студентов и может отфильтровать данные по группам
+                                       
+Итоговые оценки для просмотра студента
+Содержит итоговые оценки студента по всем дисциплинам
+                                       
+Дисциплины (предметы)
+Содержит данные по всем дисциплинам и может фильтровать и сортировать данную информацию по преподавателю или группе
+                                       
+Посещаемость
+Содержит процент посещаемости, как и студента так и группы по разным дисциплинам 
+                                       
+
+
+ Планирование тестирования UI/UX
+ Определение целей и задач тестирования
+ Проверить соответствие интерфейса требованиям и ожиданиям пользователей.
+ Проверить удобство использования интерфейса и пользовательский опыт.
+ Выбор тестируемых платформ и устройств
+ Отладочное окно в среде Microsoft Visual Studio.
+ Устройство тестирования персональный компьютер, в частности, его монитор разрешением 1920 x 1080.
+ Составление плана тестирования UI/UX
+   Функциональное тестирование интерфейса:
+ Проверка корректного отображения информации о дисциплинах и оценках;
+ Проверка работы фильтров и сортировки в списках студентов, преподавателей и расписании.
+ Проверка возможности добавления, изменения и удаления данных о студентах и преподавателях.
+   Адаптивное тестирование интерфейса:
+ Проверка корректного отображения интерфейса на различных разрешениях экрана.
+ Проверка удобства взаимодействия с интерфейсом на различных устройствах.
+   Тестирование пользовательского опыта:
+ Выполнение типичных сценариев использования системы студентами и преподавателями.
+ Выявление потенциальных проблем и неудобств для пользователей.
+   Тестирование безопасности интерфейса:
+ Проверка защиты от уязвимостей (например, XSS или CSRF).
+ Проверка безопасного хранения и передачи пользовательских данных.
+Тестирование производительности интерфейса:
+ Проверка скорости загрузки страниц и отзывчивости интерфейса.
+ Оптимизация производительности интерфейса при необходимости.
+   
+ Функциональное тестирование UI/UX
+ Проверка входа пользователя с его авторизацией по логину и паролю:
+ Поле ввода логина и пароля видимо и доступно для ввода.
+ Кнопка <<Войти>> активна при заполненных полях ввода.
+ При неверно введенных данных в полях программа не пропускает пользователя дальше.
+                                       
+              Рисунок 14  -  Видимость полей
+                                       
+     Рисунок 15 - Возможность верного входа
+                                       
+Рисунок 16 - Ошибка авторизации при неверных данных для входа
+
+ Проверка корректного отображения информации в окнах вывода информации:
+ Информация в окнах, визуально воспринимаемая пользователем.
+ Во всех окнах информация выводится корректно.
+                                       
+Рисунок 17 - Отображение информации на странице <<Профиль>>
+
+Рисунок 18  -  Отображение информации на странице <<Дисциплины>>
+
+Рисунок 19  -  Отображение информации на странице <<Расписание>>
+                                       
+Рисунок 20 - Отображение информации на странице <<Посещаемость>>
+                                       
+Рисунок 21 - Отображение информации на странице <<Оценки>>
+
+ Проверка работы фильтров и сортировки в списках студентов, преподавателей, расписании и др.:
+ Фильтрация и сортировка работает корректно для каждого окна.
+                                       
+Рисунок 22 - Фильтрация по преподавателям (1)
+                                       
+Рисунок 23 - Фильтрация по преподавателями (2)
+                                       
+       Рисунок 24 - Фильтрация по группам (1)
+                                       
+       Рисунок 25 - Фильтрация по группам (2)
+
+ Проверка переходов между окнами, соответствующими ожиданиям:
+ Переходы между окнами быстрые.
+ Переходы соответствуют ожиданиям куда должен попасть пользователь.
+                                       
+Рисунок 26 - Наведение курсора на кнопку <<Профиль>>
+                                       
+  Рисунок 27 - Переход на страницу <<Профиль>>
+
+ Адаптивное тестирование UI/UX
+ Проверка корректного отображения интерфейса на различных разрешениях экранов:
+ Интерфейс адаптируется к маленькому экрану и элементы не перекрываются.
+                                       
+Рисунок 28 - Использование приложения на маленьком экране
+
+ Меню и другие элементы интерфейса удобно доступны на экране.
+ Интерфейс адаптируется к большому экрану и элементы корректно отображаются в отношении сторон.
+                                       
+Рисунок 29 - Использование приложения на большом экране
+
+ При открытии окон, заголовок и элементы управления отображаются по центру и с боков экрана.
+                                       
+         Рисунок 30 - Открытие другого окна
+
+ Интерфейс занимает всю доступную ширину экрана и элементы на слишком сжаты.
+ При изменении размера окна интерфейс корректно адаптируется к новому размеру.
+ Кнопки и ссылки имеют достаточный размер и кликабельны для любого размера используемых экранов.
+ Скролл-бары присутствуют при необходимости и позволяют прокручивать содержимое страницы.
+ Ввод данных (например, заполнение формы) удобен на всех экранах и валидация полей работает корректно.
+   
+ Тестирование пользовательского опыта (UX)
+ Оценка удобства использования интерфейса:
+ Навигация по системе интуитивно понятна и логична для пользователей.
+ Основные функции системы (просмотр информации о дисциплинах, оценок, расписания занятий и т.д.) доступны пользователю в несколько кликов.
+ Элементы интерфейса имеют понятные и информативные подсказки, которые помогают пользователям понять, как использовать функционал системы.
+ Интерфейс системы имеет приятный и современный дизайн, который способствует комфортному использованию системы.
+ Важная информация (например, контактная информация преподавателей или срочные уведомления) выделяется в интерфейсе и привлекает внимание пользователей.
+ Выявление потенциальных проблем и неудобств для пользователей:
+ При выполнении длительных операций (например, загрузка большого количества данных) пользователю не отображается индикатор прогресса или другая информация о процессе выполнения операции.
+ При возникновении ошибок пользователю выводятся понятные и информативные сообщения об ошибке, которые помогают пользователю понять, что пошло не так и как исправить ситуацию.
+ Система поддерживает использование системных горячих клавиш Tab и Enter, что упрощает и ускоряет работу пользователей.
+   
+ Тестирование производительности интерфейса
+ Проверка скорости открытия страниц:
+ Открытие страниц происходит с быстрой скоростью менее 1 секунды.
+ Отсутствует подгрузка информации уже при открытии страницы, вся информация предоставляется сразу в полном объёме.
+ Проверка отклика интерфейса на действия пользователя:
+ Нажатие кнопки или на выбор значения в выпадающем списке происходит быстро, менее 1 секунды.
+ Проверка загрузки базы данных с требуемой информацией:
+ Запросы к базе данных для вывода информации происходит быстро, менее 5 секунд.
+ Сортировка информации происходит быстро, менее 5 секунд.
+ Фильтрация информации происходит быстро, менее 5 секунд.
+   
+ Тестирование безопасности интерфейса
+ Проверка наличия уязвимостей в интерфейсе:
+ Анализ кода консольного приложения на наличие уязвимостей, таких как неправильная обработка пользовательского ввода или отсутствие проверок безопасности.
+ Система корректно защищена от таких атак.
+ Защита от возможных атак:
+ Консольное приложение правильно обрабатывает и экранирует пользовательский ввод, чтобы предотвратить возможность внедрения вредоносного кода.
+ Система использует механизмы защиты от уязвимостей внутри PostgreSQL, таких как SQL-инъекции или командные инъекции, при работе с базой данных или выполнении внешних команд.
+ Обеспечение безопасного хранения и передачи пользовательских данных:
+ Консольное приложение хранит пользовательские данные на частном сервере, такие как пароли или личную информацию, чтобы предотвратить возможность их компрометации в случае несанкционированного доступа к данным.
+
+   ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
+   Тестирование программного обеспечения является важным этапом в процессе разработки, обеспечивающим качество и надежность конечного продукта. Одним из методов тестирования является тестирование методом белого ящика (White Box Testing), который позволяет разработчикам проверять внутреннюю структуру и логику кода. В этом документе представлены тесты для нескольких классов ViewModel из проекта, связанного с образовательным учреждением. Эти тесты написаны с использованием MSTest в Visual Studio и покрывают различные аспекты логики внутри ViewModel классов.
+   Тестирование методом белого ящика позволяет разработчикам:
+ Проверять внутреннюю логику и структуру кода. Это помогает убедиться, что все ветви и условия в коде работают правильно.
+ Находить и устранять ошибки на ранних этапах разработки: Тесты могут выявить баги и логические ошибки, которые могут быть незаметны при поверхностном тестировании.
+ Обеспечивать высокое покрытие кода: Тесты белого ящика позволяют проверить максимальное количество строк кода и логических ветвей, что повышает надежность и стабильность приложения.
+ Документировать поведение кода: Тесты служат дополнительной документацией, показывая, как должны работать различные компоненты системы.
+                         ОПИСАНИЕ ТЕСТОВ
+   В данном документе представлены тесты для следующих классов ViewModel:
+ AttendanceViewModel
+ AuthorizationViewModel
+ TimetableViewModel
+ DisciplineViewModel
+ UserProfileViewModel
+   Каждый тест проверяет различные аспекты функциональности этих классов, включая вызов событий, корректность изменения свойств и правильность выполнения методов.
+   
+                                                               Таблица 7
+                                  Тесты
+                               Название
+                           Что тестирует
+                         Алгоритм работы
+                                    Код
+                      TestOnPropertyChanged_UpdatesValues
+Этот тест проверяет, что при изменении свойства SecondSelectedOption в AttendanceViewModel вызывается событие PropertyChanged для свойства Values.
+ Arrange: Создается mock-объект для Schekaleva31pContext и экземпляр AttendanceViewModel. Также создается флаг eventRaised, который отслеживает, было ли вызвано событие PropertyChanged.
+ Подписка: Подписываемся на событие PropertyChanged и проверяем, вызывается ли оно для свойства Values.
+ Act: Изменяем свойство SecondSelectedOption.
+ Assert: Проверяем, что событие PropertyChanged было вызвано для свойства Values.
+[TestMethod]
+public void TestOnPropertyChanged_UpdatesValues()
+{
+    // Arrange
+    var dbContextMock = new Mock<Schekaleva31pContext>(); // Creating a mock of the database context
+    var viewModel = new AttendanceViewModel(dbContextMock.Object); // Creating an instance of the AttendanceViewModel
+    bool eventRaised = false; // Flag to track if the PropertyChanged event was raised
+
+    // Subscribing to the PropertyChanged event to check for changes in the 'Values' property
+    viewModel.PropertyChanged += (sender, e) =>
+    {
+        if (e.PropertyName == nameof(viewModel.Values))
+        {
+            eventRaised = true;
+        }
+    };
+
+    // Act
+    viewModel.SecondSelectedOption = "SomeGroup"; // Triggering a property change
+
+    // Assert
+    Assert.IsTrue(eventRaised); // Verifying that the PropertyChanged event was raised for the 'Values' property
+}
+                TestAuthorizationViewModel_LoginPropertyChange
+Этот тест проверяет, что при изменении свойства Login в AuthorizationViewModel вызывается событие PropertyChanged.
+ Arrange: Создается экземпляр AuthorizationViewModel и флаг eventRaised, который отслеживает вызов события PropertyChanged.
+ Подписка: Подписываемся на событие PropertyChanged и проверяем, вызывается ли оно для свойства Login.
+ Act: Изменяем свойство Login.
+ Assert: Проверяем, что событие PropertyChanged было вызвано для свойства Login.
+[TestMethod]
+ public void TestAuthorizationViewModel_LoginPropertyChange()
+ {
+     // Arrange
+     var viewModel = new AuthorizationViewModel(); // Creating an instance of the AuthorizationViewModel
+     bool eventRaised = false; // Flag to track if the PropertyChanged event was raised
+
+     // Subscribing to the PropertyChanged event to check for changes in the 'Login' property
+     viewModel.PropertyChanged += (sender, e) =>
+     {
+         if (e.PropertyName == nameof(viewModel.Login))
+         {
+             eventRaised = true;
+         }
+     };
+
+     // Act
+     viewModel.Login = "newlogin@example.com"; // Triggering a property change
+
+     // Assert
+     Assert.IsTrue(eventRaised); // Verifying that the PropertyChanged event was raised for the 'Login' property
+ }
+ AttendanceViewModel_GetNewAttendance_SetsCorrectParameterForDisciplineFilter
+Этот тест проверяет, что метод GetNewAttendance в AttendanceViewModel корректно устанавливает значение свойства ParameterName при выбранной дисциплине.
+ Arrange создается mock-объект для Schekaleva31pContext и экземпляр AttendanceViewModel. Устанавливаются начальные значения для свойств SelectedOption и OptionValue.
+ Act: Вызывается метод GetNewAttendance.
+ Assert: Проверяется, что свойство ParameterName было установлено корректно.
+[TestMethod]
+public void AttendanceViewModel_GetNewAttendance_SetsCorrectParameterForDisciplineFilter()
+{
+    // Arrange
+    var dbContextMock = new Mock<Schekaleva31pContext>(); // Creating a mock of the database context
+    var attendanceViewModel = new AttendanceViewModel(dbContextMock.Object); // Creating an instance of the AttendanceViewModel
+    attendanceViewModel.SelectedOption = "Äèñöèïëèíà"; // Setting the SelectedOption
+    attendanceViewModel.OptionValue = "Âñå ãðóïïû"; // Setting the OptionValue
+
+    // Act
+    attendanceViewModel.GetNewAttendance(); // Invoking the GetNewAttendance method
+
+    // Assert
+    Assert.AreEqual("Ãðóïïû íà äèñöèïëèíå ", attendanceViewModel.ParameterName); // Verifying that the ParameterName is set correctly
+}
+       AttendanceViewModel_NewOption_ReturnsCorrectOptionsForGroupFilter
+Этот тест проверяет, что метод NewOption в AttendanceViewModel возвращает корректный список опций для выбранной группы.
+1. Arrange  Создается mock-объект для Schekaleva31pContext и экземпляр AttendanceViewModel. Устанавливается значение для свойства SelectedOption.
+2. Act: Вызывается метод NewOption.
+3. Assert Проверяется, что метод возвращает непустой список опций.
+[TestMethod]
+public void AttendanceViewModel_NewOption_ReturnsCorrectOptionsForGroupFilter()
+{
+    // Arrange
+    var dbContextMock = new Mock<Schekaleva31pContext>(); // Creating a mock of the database context
+    var attendanceViewModel = new AttendanceViewModel(dbContextMock.Object); // Creating an instance of the AttendanceViewModel
+    attendanceViewModel.SelectedOption = "Ãðóïïà"; // Setting the SelectedOption
+
+    // Act
+    var options = attendanceViewModel.NewOption(); // Invoking the NewOption method
+
+    // Assert
+    Assert.IsNotNull(options); // Verifying that the options are not null
+    Assert.IsTrue(options.Count > 0); // Verifying that the options list has at least one item
+}
+          TimetableViewModel_NewValues_ForGroup_ReturnsExpectedValues
+Этот тест проверяет, что метод NewValues в TimetableViewModel возвращает ожидаемое количество значений для выбранной группы.
+1. Arrange: Создается mock-объект для Schekaleva31pContext и экземпляр TimetableViewModel. Устанавливается значение для свойства SelectedOption и ожидаемое количество значений.
+2. Act: Вызывается метод NewValues с параметром "Группа".
+3.Assert: Проверяется, что метод возвращает ожидаемое количество значений.
+[TestMethod]
+public void TimetableViewModel_NewValues_ForGroup_ReturnsExpectedValues()
+{
+    // Arrange
+    var dbContextMock = new Mock<Schekaleva31pContext>(); // Creating a mock of the database context
+    var timetableViewModel = new TimetableViewModel(dbContextMock.Object); // Creating an instance of the TimetableViewModel
+    timetableViewModel.SelectedOption = "Ãðóïïà"; // Setting the SelectedOption
+    var expectedValuesCount = 40; // Defining the expected number of values
+
+    // Act
+    var values = timetableViewModel.NewValues("Ãðóïïà"); // Invoking the NewValues method with a specific group
+
+    // Assert
+    Assert.AreEqual(expectedValuesCount, values.Count); // Verifying that the count of values matches the expected count
+}
+      TimetableViewModel_NewTimetable_ForTeacher_ReturnsExpectedTimetable
+Этот тест проверяет, что метод NewTimetable в TimetableViewModel возвращает ожидаемое количество расписаний для выбранного преподавателя.
+1. Arrange: Создается mock-объект для Scheкaleва31pContext и экземпляр TimetableViewModel. Устанавливаются значения для свойств SelectedOption и OptionValue.
+2. Act: Вызывается метод NewTimetable.
+3.Assert: Проверяется, что метод возвращает ожидаемое количество расписаний.
+[TestMethod]
+public void TimetableViewModel_NewTimetable_ForTeacher_ReturnsExpectedTimetable()
+{
+    // Arrange
+    var dbContextMock = new Mock<Schekaleva31pContext>();
+    var timetableViewModel = new TimetableViewModel(dbContextMock.Object);
+    timetableViewModel.SelectedOption = "Ïðåïîäàâàòåëü";
+    var expectedTimetableCount = 0;
+    timetableViewModel.OptionValue = "John Doe";
+
+    // Act
+    timetableViewModel.NewTimetable();
+
+    // Assert
+    Assert.AreEqual(expectedTimetableCount, timetableViewModel.Timetable?.Count);
+}
+         DisciplineViewModel_NewValues_ForGroup_ReturnsExpectedValues
+Этот тест проверяет, что метод NewValues в DisciplineViewModel возвращает ожидаемое количество значений для выбранной группы.
+1. Arrange: Создается mock-объект для Scheкaleва31pContext и экземпляр DisciplineViewModel. Устанавливается значение для свойства SelectedOption и ожидаемое количество значений.
+2. Act: Вызывается метод NewValues с параметром "Группа".
+3. Assert: Проверяется, что метод возвращает ожидаемое количество значений.
+[TestMethod]
+public void DisciplineViewModel_NewValues_ForGroup_ReturnsExpectedValues()
+{
+    // Arrange
+    var dbContextMock = new Mock<Schekaleva31pContext>();
+    var disciplineViewModel = new DisciplineViewModel(dbContextMock.Object);
+    disciplineViewModel.SelectedOption = "Ãðóïïà";
+    var expectedValuesCount = 40;
+
+    // Act
+    disciplineViewModel.Values = disciplineViewModel.NewValues("Ãðóïïà");
+
+    // Assert
+    Assert.AreEqual(expectedValuesCount, disciplineViewModel.Values.Count);
+}
+   DisciplineViewModel_NewDisciplines_ForTeacher_ReturnsExpectedDisciplines
+Этот тест проверяет, что метод NewDisciplines в DisciplineViewModel возвращает ожидаемое количество дисциплин для выбранного преподавателя.
+1. Arrange: Создается mock-объект для Scheкaleва31pContext и экземпляр DisciplineViewModel. Устанавливаются значения для свойств SelectedOption и OptionValue.
+2. Act: Вызывается метод NewDisciplines.
+3. Assert: Проверяется, что метод возвращает ожидаемое количество дисциплин.
+[TestMethod]
+public void DisciplineViewModel_NewDisciplines_ForTeacher_ReturnsExpectedDisciplines()
+{
+    // Arrange
+    var dbContextMock = new Mock<Schekaleva31pContext>();
+    var disciplineViewModel = new DisciplineViewModel(dbContextMock.Object);
+    disciplineViewModel.SelectedOption = "Ïðåïîäàâàòåëü";
+    var expectedDisciplinesCount = 0;
+    disciplineViewModel.OptionValue = "John Doe";
+
+    // Act
+    disciplineViewModel.NewDisciplines();
+
+    // Assert
+    Assert.AreEqual(expectedDisciplinesCount, disciplineViewModel.Disciplines?.Count);
+}
+        UserProfileViewModel_GetDisciplines_ReturnsExpectedDisciplines
+Этот тест проверяет, что свойство Disciplines в UserProfileViewModel возвращает ожидаемое количество дисциплин для пользователя с заданным email.
+1. Arrange: Создается mock-объект для Scheкaleва31pContext и задается email пользователя. Определяется ожидаемое количество дисциплин.
+2. Act: Создается экземпляр UserProfileViewModel и вызывается свойство Disciplines.
+3. Assert: Проверяется, что количество дисциплин соответствует ожидаемому.
+[TestMethod]
+public void UserProfileViewModel_GetDisciplines_ReturnsExpectedDisciplines()
+{
+    // Arrange
+    var dbContextMock = new Mock<Schekaleva31pContext>();
+    var userEmail = "alex.ivanov@example.com";
+    var expectedDisciplinesCount = 4;
+
+    // Act
+    var userProfileViewModel = new UserProfileViewModel(dbContextMock.Object, userEmail);
+    var disciplines = userProfileViewModel.Disciplines;
+
+    // Assert
+    Assert.AreEqual(expectedDisciplinesCount, disciplines.Count);
+}
+               UserProfileViewModel_Initialization_UserIsNotNull
+Этот тест проверяет, что при инициализации UserProfileViewModel свойство User не равно null для пользователя с заданным email.
+1. Arrange: Создается mock-объект для Scheкалева31pContext и задается email пользователя.
+2. Act: Создается экземпляр UserProfileViewModel.
+3. Assert: Проверяется, что свойство User не равно null.
+[TestMethod]
+public void UserProfileViewModel_Initialization_UserIsNotNull()
+{
+    // Arrange
+    var dbContextMock = new Mock<Schekaleva31pContext>();
+    var userEmail = "alex.ivanov@example.com";
+
+    // Act
+    var userProfileViewModel = new UserProfileViewModel(dbContextMock.Object, userEmail);
+
+    // Assert
+    Assert.IsNotNull(userProfileViewModel.User);
+}
+   
+   
+   Данные тесты проверяют различные аспекты функциональности ваших ViewModel классов. Краткое описание каждого теста:
+ TestOnPropertyChanged_UpdatesValues
+   Проверяет, что изменение свойства SecondSelectedOption вызывает событие PropertyChanged для свойства Values.
+ TestAuthorizationViewModel_LoginPropertyChange
+   Проверяет, что изменение свойства Login вызывает событие PropertyChanged.
+ AttendanceViewModel_GetNewAttendance_SetsCorrectParameterForDisciplineFilter
+   Проверяет, что метод GetNewAttendance корректно устанавливает значение свойства ParameterName при выбранной дисциплине.
+ AttendanceViewModel_NewOption_ReturnsCorrectOptionsForGroupFilter
+   Проверяет, что метод NewOption возвращает корректный список опций для выбранной группы.
+ TimetableViewModel_NewValues_ForGroup_ReturnsExpectedValues
+   Проверяет, что метод NewValues возвращает ожидаемое количество значений для выбранной группы.
+ TimetableViewModel_NewTimetable_ForTeacher_ReturnsExpectedTimetable
+   Проверяет, что метод NewTimetable возвращает ожидаемое количество расписаний для выбранного преподавателя.
+ DisciplineViewModel_NewValues_ForGroup_ReturnsExpectedValues
+   Проверяет, что метод NewValues возвращает ожидаемое количество значений для выбранной группы.
+ DisciplineViewModel_NewDisciplines_ForTeacher_ReturnsExpectedDisciplines
+   Проверяет, что метод NewDisciplines возвращает ожидаемое количество дисциплин для выбранного преподавателя.
+ UserProfileViewModel_GetDisciplines_ReturnsExpectedDisciplines
+   Проверяет, что свойство Disciplines возвращает ожидаемое количество дисциплин для пользователя.
+ UserProfileViewModel_Initialization_UserIsNotNull
+   Проверяет, что при инициализации UserProfileViewModel свойство User не равно null для пользователя.
+
+                             ЗАКЛЮЧЕНИЕ
+   Учебная практика по профессиональному модулю ПМ. 02. Осуществление интеграции программных модулей проходила в Государственном бюджетном профессиональном учреждении <<Нижегородский Губернский колледж>> в период с 16.05.2024 г. по 05.06.2024 г. 
+   Основной целью учебной практики являлось формирование основных профессиональных умений, навыков, опыта работы, закрепления и углубления теоретических знаний, приобретенных в процессе изучения профессиональных дисциплин.
+   Для достижения поставленной цели был выполнен следующий перечень задач:
+ Приобретение практических навыков работы с современными информационными системами и программным обеспечением и реализация на практике теоретических знаний;
+ Ознакомление студентов с методами и технологиями разработки программного обеспечения;
+ Практическое применение знаний, полученных в теоретическом обучении, на практике;
+ Овладение навыками тестирования, отладки и оптимизации программного кода;
+ Изучение процесса управления проектами в области информационных технологий;
+ Повышение профессиональной компетенции и уверенности в своих знаниях и навыках;
+ Формирование детального представления о будущей профессии;
+ Приобретение навыков в работе с документами, регламентирующими будущую профессиональную деятельность;
+ Получение представления об этике профессиональной коммуникации;
+ Сбор и обработка материалов, необходимых для составления отчета по практике.
+   В процессе прохождения учебной практики были осуществлены все поставленные задачи, исходя из чего, можно считать, поставленная ранее цель учебной практики была достигнута.
+   
+                            ПРИЛОЖЕНИЕ А
+Листинг 1. Создание таблиц базы данных
+--роли
+create table Roles
+(
+	Id SERIAL primary key,
+	name character varying(30) unique
+);
+--пользователи
+create table Users
+(
+	Id Serial primary key,
+	first_name character varying(30) not null,
+	last_name character varying(30) not null,
+	middle_name character varying(30),
+	mail character varying(50) not null unique,
+	phone_number character varying(20) unique,
+	date_birth date,
+	Id_role int references Roles(Id) not null
+);
+--Кафедры
+create table Departments
+(
+	Id SERIAL primary key,
+	name character varying(70) unique not null
+);
+--Специальности
+create table Specialties
+(
+	Id SERIAL primary key,
+	name character varying(70) unique not null,
+	Id_department int references Departments(Id) not null
+);
+--Группы
+create table "Groups"
+(
+	Id Serial primary key,
+	Id_specialty int references Specialties(Id) not null,
+	start_date date not null,
+	name character varying(5) not null
+);
+--студенты
+create table Students
+(
+	user_Id int references Users(Id) primary key,
+	group_Id int references "Groups"(Id) not null
+);
+--корпусы (филиалы)
+create table Buildings
+(
+	Id serial primary key,
+	Mgr int references Users(Id) not null,--заведующий
+	address character varying(70) not null
+);
+--преподаватели
+create table Teachers
+(
+	user_Id int references Users(Id) primary key,
+	department_Id int references Departments(Id)
+);
+--дисциплины
+create table Disciplines
+(
+	Id serial primary key,
+	name character varying(60) not null,
+	department_Id int references Departments(Id) not null,
+	academic_hours int not null
+);
+--дисциплины преподавателей
+create table TeachersDisciplines
+(
+	Id serial primary key,
+	teacher_Id int references Teachers(user_Id) not null,
+	discipline_Id int references Disciplines(Id) not null
+);
+--дисциплины групп
+create table GroupDiscipline
+(
+	Id serial primary key,
+	semester int,
+	teacher_discipline_Id int references TeachersDisciplines(Id) not null,
+	group_Id int references "Groups"(Id) not null
+);
+--расписание
+create table Timetables
+(
+	Id serial primary key,
+	class_date date not null,
+	class_number smallint,
+	group_discipline_Id int references GroupDiscipline(Id) not null,
+   buildind_Id int references Buildings(Id) not null
+);
+--оценки
+create table StudentGrades
+(
+	Id Serial primary key,
+	student_Id int references Students(user_Id) not null,
+	group_discipline_Id int references GroupDiscipline(Id) not null,
+	graded_at date,
+	grade smallint not null,
+	work_name character varying(70)
+);
+--посещаемость
+create table Attendance
+(
+	Id serial primary key,
+	timetable_Id int references Timetables(Id) not null,
+	student_Id int references Students(user_Id) not null,
+	attended bool not null
+);
+  
+                            ПРИЛОЖЕНИЕ Б
+Листинг 2. Скрипт заполнения таблиц базы данных
+INSERT INTO Roles (name) VALUES ('преподаватель'), ('студент');
+
+INSERT INTO Users (first_name, last_name, middle_name, mail, phone_number, date_birth, Id_role) VALUES
+    ('Александр', 'Иванов', 'Петрович', 'alex.ivanov@example.com', '+12345678901', '1990-03-15', 1),
+    ('Елена', 'Смирнова', 'Андреевна', 'elena.smirnova@example.com', '+12345678902', '1995-08-22', 2),
+    ('Иван', 'Петров', 'Александрович', 'ivan.petrov@example.com', '+12345678903', '1993-05-11', 2),
+    ('Мария', 'Козлова', 'Дмитриевна', 'maria.kozlova@example.com', '+12345678904', '1998-11-30', 2),
+    ('Сергей', 'Соколов', 'Иванович', 'sergey.sokolov@example.com', '+12345678905', '1994-02-25', 1),
+    ('Анна', 'Михайлова', 'Сергеевна', 'anna.mikhailova@example.com', '+12345678906', '1996-07-14', 2),
+    ('Павел', 'Новиков', 'Артемович', 'pavel.novikov@example.com', '+12345678907', '1991-09-03', 2),
+    ('Юлия', 'Федорова', 'Алексеевна', 'yulia.fedorova@example.com', '+12345678908', '1997-04-20', 2),
+    ('Артем', 'Морозов', 'Павлович', 'artem.morozov@example.com', '+12345678909', '1992-12-09', 1),
+    ('Екатерина', 'Волкова', 'Игоревна', 'ekaterina.volkova@example.com', '+12345678910', '1999-01-18', 2),
+    ('Денис', 'Павлов', 'Федорович', 'denis.pavlov@example.com', '+12345678911', '1990-06-27', 2),
+    ('Ольга', 'Семенова', 'Денисовна', 'olga.semenova@example.com', '+12345678912', '1995-10-16', 2),
+    ('Игорь', 'Гончаров', 'Дмитриевич', 'igor.goncharov@example.com', '+12345678913', '1993-03-05', 1),
+    ('Евгения', 'Николаева', 'Олеговна', 'evgenia.nikolaeva@example.com', '+12345678914', '1998-08-24', 2),
+    ('Алексей', 'Кузнецов', 'Владимирович', 'alexey.kuznetsov@example.com', '+12345678915', '1994-01-13', 2),
+    ('Анастасия', 'Ильина', 'Юрьевна', 'anastasia.ilina@example.com', '+12345678916', '1991-07-02', 2),
+    ('Григорий', 'Савельев', 'Антонович', 'grigory.savelyev@example.com', '+12345678917', '1996-11-21', 2),
+    ('Татьяна', 'Беляева', 'Игнатьевна', 'tatyana.belyaeva@example.com', '+12345678918', '1992-04-10', 1),
+    ('Дмитрий', 'Тимофеев', 'Аркадьевич', 'dmitry.timofeev@example.com', '+12345678919', '1997-09-29', 2),
+    ('Елена', 'Калинина', 'Георгиевна', 'elena.kalinina@example.com', '+12345678920', '1999-02-08', 2);
+
+INSERT INTO Departments (name) VALUES
+    ('Отделение инженерии и технологии'),
+    ('Факультет информационных технологий'),
+    ('Кафедра гуманитарных наук');
+   
+INSERT INTO Specialties (name, Id_department) VALUES
+    ('Инженерия программного обеспечения', 1),
+    ('Автоматизация технологических процессов', 1),
+    ('Системный анализ и управление', 1),
+    ('Веб-разработка и программирование', 2),
+    ('Базы данных и информационные системы', 2),
+    ('Компьютерная безопасность', 2),
+    ('Лингвистика', 3),
+    ('Психология', 3),
+    ('История искусств', 3),
+    ('Социология', 3);
+   
+INSERT INTO "Groups" (Id_specialty, start_date, name) VALUES
+    (1, '2023-09-01', '11ИПО'),
+    (1, '2022-09-01', '21ИПО'),
+    (1, '2021-09-01', '31ИПО'),
+    (1, '2020-09-01', '41ИПО'),
+    (2, '2023-09-01', '11АТП'),
+    (2, '2022-09-01', '21АТП'),
+    (2, '2021-09-01', '31АТП'),
+    (2, '2020-09-01', '41АТП'),
+    (3, '2023-09-01', '11САУ'),
+    (3, '2022-09-01', '21САУ'),
+    (3, '2021-09-01', '31САУ'),
+    (3, '2020-09-01', '41САУ'),
+    (4, '2023-09-01', '11ВПР'),
+    (4, '2022-09-01', '21ВПР'),
+    (4, '2021-09-01', '31ВПР'),
+    (4, '2020-09-01', '41ВПР'),
+    (5, '2023-09-01', '11ВРП'),
+    (5, '2022-09-01', '21ВРП'),
+    (5, '2021-09-01', '31ВРП'),
+    (5, '2020-09-01', '41ВРП'),
+    (6, '2023-09-01', '11КБ'),
+    (6, '2022-09-01', '21КБ'),
+    (6, '2021-09-01', '31КБ'),
+    (6, '2020-09-01', '41КБ'),
+    (7, '2023-09-01', '11БД'),
+    (7, '2022-09-01', '21БД'),
+    (7, '2021-09-01', '31БД'),
+    (7, '2020-09-01', '41БД'),
+    (8, '2023-09-01', '11КО'),
+    (8, '2022-09-01', '21КО'),
+    (8, '2021-09-01', '31КО'),
+    (8, '2020-09-01', '41КО'),
+    (9, '2023-09-01', '11ЛИН'),
+    (9, '2022-09-01', '21ЛИН'),
+    (9, '2021-09-01', '31ЛИН'),
+    (9, '2020-09-01', '41ЛИН'),
+    (10, '2023-09-01', '11ПСИ'),
+    (10, '2022-09-01', '21ПСИ'),
+    (10, '2021-09-01', '31ПСИ'),
+    (10, '2020-09-01', '41ПСИ');
+   
+   
+select id from Users where id_role = 1   
+
+INSERT INTO Students (user_id, group_id) values
+(2,1),
+(3,1),
+(4,1),
+(6,1),
+(7,1),
+(8,3),
+(10,3),
+(11,3),
+(12,3),
+(14,3),
+(15,7),
+(16,7),
+(17,7),
+(19,7),
+(20,7);
+
+insert into Teachers values
+(1,1),
+(5,1),
+(9,2),
+(13,2),
+(18,3);
+
+INSERT INTO Disciplines (name, department_id, academic_hours)
+VALUES 
+    ('Программирование на Python', 1, 90),
+    ('Математический анализ', 1, 120),
+    ('Алгоритмы и структуры данных', 1, 100),
+    ('Промышленная автоматизация', 1, 80),
+    ('Веб-дизайн', 2, 80),
+    ('Базы данных и SQL', 2, 100),
+    ('Компьютерная безопасность', 2, 120),
+    ('Системное программирование', 2, 90),
+    ('История искусств', 3, 60),
+    ('Социология', 3, 80),
+    ('Психология', 3, 100),
+    ('Философия', 3, 70);
+
+-- Заполнение таблицы TeachersDisciplines
+-- Преподаватель 1 (Александр Иванов)
+INSERT INTO TeachersDisciplines (teacher_id, discipline_id)
+VALUES 
+    (1, 1), -- Программирование на Python
+    (1, 2), -- Математический анализ
+    (1, 3), -- Алгоритмы и структуры данных
+    (1, 4); -- Промышленная автоматизация
+
+-- Преподаватель 5 (Сергей Соколов)
+INSERT INTO TeachersDisciplines (teacher_id, discipline_id)
+VALUES 
+    (5, 1), -- Программирование на Python
+    (5, 3), -- Алгоритмы и структуры данных
+    (5, 4), -- Промышленная автоматизация
+    (5, 8); -- Системное программирование
+
+-- Преподаватель 9 (Артем Морозов)
+INSERT INTO TeachersDisciplines (teacher_id, discipline_id)
+VALUES 
+    (9, 5), -- Веб-дизайн
+    (9, 6), -- Базы данных и SQL
+    (9, 7), -- Компьютерная безопасность
+    (9, 8); -- Системное программирование
+
+-- Преподаватель 13 (Игорь Гончаров)
+INSERT INTO TeachersDisciplines (teacher_id, discipline_id)
+VALUES 
+    (13, 5), -- Веб-дизайн
+    (13, 6), -- Базы данных и SQL
+    (13, 7), -- Компьютерная безопасность
+    (13, 8); -- Системное программирование
+
+-- Преподаватель 18 (Татьяна Беляева)
+INSERT INTO TeachersDisciplines (teacher_id, discipline_id)
+VALUES 
+    (18, 9), -- История искусств
+    (18, 10), -- Социология
+    (18, 11), -- Психология
+    (18, 12); -- Философия
+
+    
+-- Для преподавателя с ID 1 (Александр Иванов)
+-- Группа 11ИПО
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 1, 1), -- Программирование на Python
+    (1, 2, 1), -- Математический анализ
+    (1, 3, 1), -- Алгоритмы и структуры данных
+    (1, 4, 1); -- Промышленная автоматизация
+
+-- Группа 21ИПО
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 1, 2), -- Программирование на Python
+    (1, 2, 2), -- Математический анализ
+    (1, 3, 2), -- Алгоритмы и структуры данных
+    (1, 4, 2); -- Промышленная автоматизация
+
+-- Группа 31ИПО
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 1, 3), -- Программирование на Python
+    (1, 2, 3), -- Математический анализ
+    (1, 3, 3), -- Алгоритмы и структуры данных
+    (1, 4, 3); -- Промышленная автоматизация
+
+-- Группа 41ИПО
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 1, 4), -- Программирование на Python
+    (1, 2, 4), -- Математический анализ
+    (1, 3, 4), -- Алгоритмы и структуры данных
+    (1, 4, 4); -- Промышленная автоматизация
+
+    
+    
+    
+    -- Для преподавателя с ID 1 (Александр Иванов)
+-- Группа 31ИПО
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 1, 3), -- Программирование на Python
+    (1, 2, 3), -- Математический анализ
+    (1, 3, 3), -- Алгоритмы и структуры данных
+    (1, 4, 3); -- Промышленная автоматизация
+
+-- Группа 41ИПО
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 1, 4), -- Программирование на Python
+    (1, 2, 4), -- Математический анализ
+    (1, 3, 4), -- Алгоритмы и структуры данных
+    (1, 4, 4); -- Промышленная автоматизация
+
+-- Продолжаем аналогично для остальных групп.
+
+-- Для преподавателя с ID 5 (Сергей Соколов)
+-- Группа 31ИПО
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 5, 3), -- Программирование на Python
+    (1, 3, 3), -- Алгоритмы и структуры данных
+    (1, 4, 3), -- Промышленная автоматизация
+    (1, 8, 3); -- Системное программирование
+
+-- Группа 41ИПО
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 5, 4), -- Программирование на Python
+    (1, 3, 4), -- Алгоритмы и структуры данных
+    (1, 4, 4), -- Промышленная автоматизация
+    (1, 8, 4); -- Системное программирование
+
+-- Продолжаем аналогично для остальных групп.
+
+-- Для преподавателя с ID 9 (Артем Морозов)
+-- Группа 11АТП
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 9, 5), -- Веб-дизайн
+    (1, 10, 5), -- Базы данных и SQL
+    (1, 11, 5), -- Компьютерная безопасность
+    (1, 8, 5); -- Системное программирование
+
+-- Продолжаем аналогично для остальных групп.
+
+-- Для преподавателя с ID 13 (Игорь Гончаров)
+-- Группа 11АТП
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 9, 5), -- Веб-дизайн
+    (1, 10, 5), -- Базы данных и SQL
+    (1, 11, 5), -- Компьютерная безопасность
+    (1, 8, 5); -- Системное программирование
+
+-- Продолжаем аналогично для остальных групп.
+
+-- Для преподавателя с ID 18 (Татьяна Беляева)
+-- Группа 11САУ
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 12, 9), -- Философия
+    (1, 10, 9), -- Социология
+    (1, 11, 9), -- Психология
+    (1, 9, 9); -- История искусств
+     
+ -- Для преподавателя с ID 1 (Александр Иванов)
+-- Группа 41САУ
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 1, 12), -- Программирование на Python
+    (1, 2, 12), -- Математический анализ
+    (1, 3, 12), -- Алгоритмы и структуры данных
+    (1, 5, 12); -- Философия
+
+-- Группа 11ВПР
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 1, 13), -- Программирование на Python
+    (1, 2, 13), -- Математический анализ
+    (1, 3, 13), -- Алгоритмы и структуры данных
+    (1, 5, 13); -- Философия
+
+-- Продолжаем аналогично для остальных групп.
+
+-- Для преподавателя с ID 5 (Сергей Соколов)
+-- Группа 41САУ
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 5, 12), -- Философия
+    (1, 3, 12), -- Алгоритмы и структуры данных
+    (1, 4, 12), -- Промышленная автоматизация
+    (1, 6, 12); -- Компьютерная безопасность
+
+-- Группа 11ВПР
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 5, 13), -- Философия
+    (1, 3, 13), -- Алгоритмы и структуры данных
+    (1, 4, 13), -- Промышленная автоматизация
+    (1, 6, 13); -- Компьютерная безопасность
+
+-- Продолжаем аналогично для остальных групп.
+
+-- Для преподавателя с ID 9 (Артем Морозов)
+-- Группа 11БД
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 10, 14), -- Базы данных и SQL
+    (1, 11, 14), -- Компьютерная безопасность
+    (1, 12, 14), -- Философия
+    (1, 13, 14); -- История искусств
+
+-- Группа 21БД
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 10, 15), -- Базы данных и SQL
+    (1, 11, 15), -- Компьютерная безопасность
+    (1, 12, 15), -- Философия
+    (1, 13, 15); -- История искусств
+
+-- Продолжаем аналогично для остальных групп.
+
+-- Для преподавателя с ID 13 (Игорь Гончаров)
+-- Группа 11БД
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 10, 14), -- Базы данных и SQL
+    (1, 11, 14), -- Компьютерная безопасность
+    (1, 12, 14), -- Философия
+    (1, 13, 14); -- История искусств
+
+-- Продолжаем аналогично для остальных групп.
+
+-- Для преподавателя с ID 18 (Татьяна Беляева)
+-- Группа 11ЛИН
+INSERT INTO GroupDiscipline (semester, teacher_discipline_id, group_id)
+VALUES 
+    (1, 9, 19), -- Веб-дизайн
+    (1, 10, 19), -- Базы данных и SQL
+    (1, 11, 19), -- Компьютерная безопасность
+    (1, 12, 19); -- Философия
+
+INSERT INTO Buildings (Mgr, address) VALUES 
+(1, 'ул. Пушкина, д. 10'),
+(5, 'пр. Ленина, д. 25');
+    
+ALTER TABLE Timetables
+RENAME COLUMN buildind_id TO building_id;
+-- Для преподавателя с ID 1 (Александр Иванов)
+-- Понедельник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-02', 1, 1, 1), -- 9:00-10:30 Программирование на Python
+    ('2024-09-02', 2, 1, 1), -- 10:45-12:15 Математический анализ
+    ('2024-09-02', 3, 1, 1), -- 12:30-14:00 Алгоритмы и структуры данных
+    ('2024-09-02', 4, 1, 1); -- 14:30-16:00 Промышленная автоматизация
+
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 1, 1), -- 9:00-10:30 Программирование на Python
+    ('2024-09-03', 2, 1, 1), -- 10:45-12:15 Математический анализ
+    ('2024-09-03', 3, 1, 1), -- 12:30-14:00 Алгоритмы и структуры данных
+    ('2024-09-03', 4, 1, 1); -- 14:30-16:00 Промышленная автоматизация
+
+-- Продолжаем аналогично для остальных дней и преподавателей.
+-- Для преподавателя с ID 5 (Сергей Соколов)
+-- Понедельник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-02', 1, 2, 1), -- 9:00-10:30 Программирование на Python
+    ('2024-09-02', 2, 2, 1), -- 10:45-12:15 Алгоритмы и структуры данных
+    ('2024-09-02', 3, 2, 1), -- 12:30-14:00 Промышленная автоматизация
+    ('2024-09-02', 4, 2, 1); -- 14:30-16:00 Системное программирование
+
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 2, 1), -- 9:00-10:30 Программирование на Python
+    ('2024-09-03', 2, 2, 1), -- 10:45-12:15 Алгоритмы и структуры данных
+    ('2024-09-03', 3, 2, 1), -- 12:30-14:00 Промышленная автоматизация
+    ('2024-09-03', 4, 2, 1); -- 14:30-16:00 Системное программирование
+
+-- Продолжаем аналогично для остальных дней и преподавателей.
+-- Для преподавателя с ID 9 (Артем Морозов)
+-- Понедельник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-02', 1, 3, 1), -- 9:00-10:30 Веб-дизайн
+    ('2024-09-02', 2, 3, 1), -- 10:45-12:15 Базы данных и SQL
+    ('2024-09-02', 3, 3, 1), -- 12:30-14:00 Компьютерная безопасность
+    ('2024-09-02', 4, 3, 1); -- 14:30-16:00 Системное программирование
+
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 3, 1), -- 9:00-10:30 Веб-дизайн
+    ('2024-09-03', 2, 3, 1), -- 10:45-12:15 Базы данных и SQL
+    ('2024-09-03', 3, 3, 1), -- 12:30-14:00 Компьютерная безопасность
+    ('2024-09-03', 4, 3, 1); -- 14:30-16:00 Системное программирование
+-- Для преподавателя с ID 13 (Игорь Гончаров)
+-- Понедельник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-02', 1, 4, 1), -- 9:00-10:30 Программирование на Java
+    ('2024-09-02', 2, 4, 1), -- 10:45-12:15 Веб-дизайн
+    ('2024-09-02', 3, 4, 1), -- 12:30-14:00 Базы данных и SQL
+    ('2024-09-02', 4, 4, 1); -- 14:30-16:00 Компьютерная безопасность
+
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 4, 1), -- 9:00-10:30 Программирование на Java
+    ('2024-09-03', 2, 4, 1), -- 10:45-12:15 Веб-дизайн
+    ('2024-09-03', 3, 4, 1), -- 12:30-14:00 Базы данных и SQL
+    ('2024-09-03', 4, 4, 1); -- 14:30-16:00 Компьютерная безопасность
+
+-- Продолжаем аналогично для остальных дней и преподавателей.
+-- Для преподавателя с ID 18 (Татьяна Беляева)
+-- Понедельник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-02', 1, 5, 1), -- 9:00-10:30 История искусств
+    ('2024-09-02', 2, 5, 1), -- 10:45-12:15 Лингвистика
+    ('2024-09-02', 3, 5, 1), -- 12:30-14:00 Психология
+    ('2024-09-02', 4, 5, 1); -- 14:30-16:00 Социология
+
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 5, 1), -- 9:00-10:30 История искусств
+    ('2024-09-03', 2, 5, 1), -- 10:45-12:15 Лингвистика
+    ('2024-09-03', 3, 5, 1), -- 12:30-14:00 Психология
+    ('2024-09-03', 4, 5, 1); -- 14:30-16:00 Социология
+
+-- Продолжаем аналогично для остальных дней и преподавателей.
+-- Для преподавателя с ID 1 (Александр Иванов)
+-- Понедельник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-02', 1, 1, 2), -- 9:00-10:30 Программирование на Python
+    ('2024-09-02', 2, 1, 2), -- 10:45-12:15 Математический анализ
+    ('2024-09-02', 3, 1, 2), -- 12:30-14:00 Алгоритмы и структуры данных
+    ('2024-09-02', 4, 1, 2); -- 14:30-16:00 Промышленная автоматизация
+
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 1, 2), -- 9:00-10:30 Программирование на Python
+    ('2024-09-03', 2, 1, 2), -- 10:45-12:15 Математический анализ
+    ('2024-09-03', 3, 1, 2), -- 12:30-14:00 Алгоритмы и структуры данных
+    ('2024-09-03', 4, 1, 2); -- 14:30-16:00 Промышленная автоматизация
+
+-- Продолжаем аналогично для остальных дней и преподавателей.
+
+ -- Для преподавателя с ID 5 (Сергей Соколов)
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 2, 2), -- 9:00-10:30 Программирование на Python
+    ('2024-09-03', 2, 2, 2), -- 10:45-12:15 Алгоритмы и структуры данных
+    ('2024-09-03', 3, 2, 2), -- 12:30-14:00 Промышленная автоматизация
+    ('2024-09-03', 4, 2, 2); -- 14:30-16:00 Системное программирование
+
+-- Продолжаем аналогично для остальных дней и преподавателей.
+-- Для преподавателя с ID 9 (Артем Морозов)
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 3, 2), -- 9:00-10:30 Веб-дизайн
+    ('2024-09-03', 2, 3, 2), -- 10:45-12:15 Базы данных и SQL
+    ('2024-09-03', 3, 3, 2), -- 12:30-14:00 Компьютерная безопасность
+    ('2024-09-03', 4, 3, 2); -- 14:30-16:00 Системное программирование
+
+    -- Для преподавателя с ID 13 (Игорь Гончаров)
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 4, 2), -- 9:00-10:30 Программирование на Java
+    ('2024-09-03', 2, 4, 2), -- 10:45-12:15 Веб-дизайн
+    ('2024-09-03', 3, 4, 2), -- 12:30-14:00 Базы данных и SQL
+    ('2024-09-03', 4, 4, 2); -- 14:30-16:00 Компьютерная безопасность
+
+-- Для преподавателя с ID 18 (Татьяна Беляева)
+-- Вторник
+INSERT INTO Timetables (class_date, class_number, group_discipline_id, building_id)
+VALUES 
+    ('2024-09-03', 1, 5, 2), -- 9:00-10:30 История искусств
+    ('2024-09-03', 2, 5, 2), -- 10:45-12:15 Лингвистика
+    ('2024-09-03', 3, 5, 2), -- 12:30-14:00 Психология
+    ('2024-09-03', 4, 5, 2); -- 14:30-16:00 Социология
+
+INSERT INTO StudentGrades (student_id, group_discipline_id, graded_at, grade, work_name)
+SELECT 
+    s.user_id,
+    gd.id,
+    now() - interval '1' month * (random() * 12 + 1), -- Случайная дата за последние 12 месяцев
+    floor(random() * 4) + 2, -- Случайная оценка от 2 до 5
+    CASE floor(random() * 4)
+        WHEN 0 THEN 'Контрольная работа'
+        WHEN 1 THEN 'Экзамен'
+        WHEN 2 THEN 'Лабораторная работа'
+        ELSE 'Курсовая работа'
+    END
+FROM 
+    Students s
+JOIN 
+    "Groups" g ON s.group_id = g.id
+JOIN 
+    GroupDiscipline gd ON g.id = gd.group_id;
+ 
+-- Заполняем таблицу Attendance для всех студентов и их дисциплин, учитывая группу студента
+INSERT INTO Attendance (timetable_id, student_id, attended)
+SELECT 
+    tt.id,
+    s.user_id,
+    CASE floor(random() * 2)
+        WHEN 0 THEN true -- Случайно выбираем, посетил ли студент занятие
+        ELSE false
+    END
+FROM 
+    Timetables tt
+JOIN 
+    GroupDiscipline gd ON tt.group_discipline_id = gd.id
+JOIN 
+    Students s ON gd.group_id = s.group_id;
+

BIN
Отчет_Презентация/УП_Учебная часть_.pptx