# ПРАКТИКА
### 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. Заключение: ожидаемые результаты от проекта.