---
# System prepended metadata

title: ПРАКТИКА

---

# ПРАКТИКА

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