# ПРАКТИКА ### 1. Обзор современных основных инструментальных средств разработки программных продуктов. Цель: изучить процесс проведения сравнительного анализа программных продуктов и средств разработки, с целью выявления наилучшего решения согласно критериям, определенным техническим заданием. Задание: для организации рабочих мест подобрать готовое программное обеспечение. Выбрать 2-3 наименования и провести сравнительный анализ. Сделать вывод. Пример: https://topuch.com/otchet-po-uchebnoj-praktike-pm-03-reveyuirovanie-programmnih-p/index.html --- ### 2. Разработка проектной документации. Цель: изучить способы оформления проектной документации и задачи которые она решает Задание: описать способы оформления, инструменты и стандарты проектной документации программных продуктов К ознакомлению - https://habr.com/ru/companies/inpglobal/articles/722792/ - http://lib.ulstu.ru/venec/disk/2017/460.pdf - https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 --- ### 3. Установка и настройка систем контроля версий. Цель: изучить систему контроля версий git Задание: Шаг 1: Создание репозитория 1. Откройте Visual Studio 2019 и создайте новый проект C#. 2. Выберите тип проекта и настройте его параметры. 3. Меню git -> "создать репозиторий Git" -> кнопка "только локальный" Шаг 2: Добавление изменений в код и фиксация изменений в контроле версий 1. Откройте файлы проекта и внесите несколько изменений. 2. Нажать на Git сверху и выбрать "Фиксация или скрытие" 3. Введите сообщение, чтобы назвать файл, в открывшемся окне справа и нажмите "зафиксировать все". Шаг 3: Создание ветки 1. Нажмите на Git сверху и выберите "Создать ветвь". 2. Введите имя ветки и нажмите "Создать". Шаг 4: Добавление коммитов в ветку 1. Переключитесь на созданную ветку, нажав на нее в окне "Контроль версий". 2. Внесите изменения в код и фиксируйте их в контроле версий, как описано в шаге 2. Шаг 5: Переключение между ветками 1. В правом окне, где происходит фиксация измений, нужно нажать на окошко рядом с кнопкой "отправить" 2. Выберите ветку, на которую хотите переключиться. Шаг 6: Добавление коммитов в основную ветку 1. Переключитесь на основную ветку, нажав на нее в окне "Контроль версий". 2. Внесите изменения в код и фиксируйте их в контроле версий, как описано в шаге 2. Шаг 7: Слияние веток 1. Нажмите правой кнопкой мыши на основной ветке в окне "Контроль версий" и выберите "Слить ветки". 2. Выберите ветку, которую вы хотите слить с основной, и нажмите "Слить". 3. Разрешите конфликты, если они возникнут, и сохраните изменения. --- ### 4. Выполнение оптимизации программного кода с использованием специализированных программных средств. Цель: изучить возможности по оптимизации кода Задание: описать задачи и способы оптимизации программного кода и поиск узких мест при помощи профилирования Привести графические примеры работы инструментов профилирования с пояснениями. Например flamegraph, memory profiler, thread profiler и т.д. - https://learn.microsoft.com/ru-ru/visualstudio/profiling/profiling-feature-tour?view=vs-2022 - https://professorweb.ru/my/csharp/optimization/level7/7_1.php - https://professorweb.ru/my/csharp/optimization/level7/7_2.php - https://professorweb.ru/my/csharp/optimization/level7/7_3.php - https://professorweb.ru/my/csharp/optimization/level7/7_4.php - https://professorweb.ru/my/csharp/optimization/level7/7_5.php - https://scienceforum.ru/2018/article/2018004080 - https://techrocks.ru/2019/01/25/code-optimization-tips/ --- ### 5. Планирование и проведение ревьюирования программных продуктов. Цель: Задание: выполнить ревью кода ниже и исправить ошибки и неточности ```csharp= using System; namespace FortuneTeller { class FortuneTeller { static void Main() { // Запрос количества людей и местоположения Console.Write("Введите количество людей: "); // Код может вызвать исключение int c = int.Parse(Console.ReadLine()); // Использование короткого названия переменной Console.Write("Введите местоположение: "); string l = Console.ReadLine(); // Использование короткого названия переменной // Создание экземпляра класса GoodFortune и вызов метода GetFortune GoodFortune g = new GoodFortune(); // Использование короткого названия переменной string r = g.GetFortune(); // Использование короткого названия переменной for (int i = 0; i < c; i++) // Использование нулевого индекса и неправильного условия в цикле { // Вывод результата на консоль Console.WriteLine($"Для человека {i + 1} в {l} произойдет {r}!"); } // Ожидание ввода пользователя перед выходом из программы Console.ReadKey(); } } class GoodFortune { // Создание массива предсказаний string[] fortunes = new string[10]{ "Вы найдете новую любовь", "Вы получите повышение на работе", "Вы получите наследство", "Удача будет на вашей стороне", "Вы найдете новую работу", "Вы получите неожиданный подарок", "Вам повезет в казино", "Вы победите в конкурсе", "Вы получите долгожданный отпуск", "Вы найдете новых друзей" }; Random random = new Random(); // объект случайных значений // Метод для получения случайного предсказания из массива public string GetFortune() { int index = random.Next(fortunes.Length); return fortunes[0]; // Возврат случайного элемента массива } } } ``` --- ### 6. Оформление результатов ревьюирования программных продуктов. Цель: научиться писать отчеты о выполненном ревьюировании Задание: написать отчет по проведенному ревью В отчете перечислить найденные ошибки, неточности, и указать возможные пути исправления, а также причину возникшей ошибки и теоретическое обоснование для исправления Оформить как отчет который будет читать человек писавший код и плохо разбирающийся в программировании, писать не что сделали, а рекомендации о том, что надо сделать, и самое главное зачем и почему то как есть - неправильно --- ### 7. Определение характеристик программных продуктов различными методами и инструментами. Цель: изучить методы и инструменты оценки различных характеристик Задание: сделать детальный отчет по каждому из методов, привести примеры 1. Исследование характеристик программного продукта с помощью метода экспертной оценки. Составление опросника для экспертов, определение критериев оценки, анализ результатов. 2. Анализ характеристик программного продукта с помощью метода функционального тестирования. Разработка тест-кейсов, проведение тестирования, анализ результатов. 3. Определение характеристик программного продукта с помощью метода анализа кода. Изучение исходного кода программы, выявление ошибок и уязвимостей, анализ качества кода. 4. Оценка характеристик программного продукта с помощью метода анализа пользовательского интерфейса. Изучение удобства использования, наглядности и эргономики интерфейса, анализ отзывов пользователей. 5. Исследование характеристик программного продукта с помощью метода сравнительного анализа. Сравнение программного продукта с аналогами на рынке, анализ преимуществ и недостатков, определение конкурентных преимуществ. --- ### 8. Оформление результатов сравнительного анализа программных продуктов и их версий. Цель: создать отчет о выборе программного продукта для малого предприятия с небольшим бюджетом Задание: сравнить 4 программных продукта в выбранной категории Отчет должен включать положительные и отрицательные стороны каждого решения, отзывы людей реально использовавших продукт, соответствие требованиям небольшого предприятия Выбрать одну из тем для сравнения продуктов: 1. базы данных 2. среда разработки ПО 3. биллинговая система 4. операционная система для сервера --- ### 9. Оценка трудоёмкости и сроков разработки ПО. Цель: изучить оценку трудоемкости Задание: ознакомиться с теорией оценки и выполнить оценку проекта 1. Описать теоретические аспекты оценки трудоемкости 1. Исследование методов оценки трудоемкости и сроков разработки ПО. Сравнение их преимуществ и недостатков. 2. Использование методов COCOMO, PERT, Function Point Analysis. 3. Анализ факторов, влияющих на трудоемкость и сроки разработки ПО. Определение наиболее значимых факторов и их влияния на проект. 4. Разработка плана проекта с учетом оценки трудоемкости и сроков разработки ПО. Определение этапов проекта, распределение ресурсов и контроль выполнения плана. 5. Оценка качества разработки ПО с учетом трудоемкости и сроков. Определение критериев качества, оценка их соответствия требованиям заказчика и сравнение с оценкой трудоемкости и сроков. 1. расчитать трудоемкость теоретического проекта по любому из методов, тему проекта выбрать самостоятельно --- ### 10. Разработка пояснительной записки в соответствии с техническим заданием. Цель: Задание: 1. Описать что такое пояснительная записка и зачем она нужна. 1. Написать пояснительную записку к ТЗ `\\dc1\obmen-stud\ИС20-1\Долгушин\TZ.pdf` Пояснительная записка к ТЗ должна содержать следующие разделы: 1. Введение: цель проекта, его основные задачи. 1. Пользователи: целевая аудитория проекта, ее потребности и ожидания. 1. Технические решения: объяснение выбора технологий для проекта. 1. Риски: возможные риски, связанные с проектом, и способы их минимизации. 1. Заключение: ожидаемые результаты от проекта.