team-work-it-anastasiakoc
Graph Analysis System - README
Аккаунты участников:
- ylyastar (Я выполняла роль Student 2 у этого участника команды)
- yanasim
- anastasiakoc
🎯 Описание процесса работы
Этапы разработки:
В качестве моделей использовались
-
Сборка команды
Объединились три разработчика с распределением ролей согласно требованиям проекта. -
Распределение ролей
Каждому участнику была назначена стартовая позиция (Student 1, 2, 3) с четким определением зон ответственности. -
Следование инструкциям
Работа выполнялась строго по предоставленной спецификации из файла, соблюдая все требования и ограничения.spec/codex.md
4 Выбор инструментов разработки
Для разработки проекта Graph Analysis System были выбраны ChatGPT (GPT-4) и Cursor IDE, которые предоставили комплексный набор возможностей для эффективной разработки:
🤖 ChatGPT (GPT-4)
Основные возможности:
-
Генерация архитектурных решений и дизайн-паттернов
Помогал проектировать структуру классов, интерфейсы и взаимодействие между компонентами системы -
Помощь в написании сложных алгоритмов
Участвовал в реализации графовых алгоритмов: DFS, BFS, поиск кратчайших путей, обнаружение циклов -
Проверка логики и выявление потенциальных проблем
Анализировал код на предмет логических ошибок, потенциальных багов и edge cases -
Объяснение концепций и лучших практик
Разъяснял сложные концепции графовой теории и принципы разработки на C# -
Анализ требований спецификации
Помогал интерпретировать требования изи преобразовывать их в технические решенияspec/codex.md
💻 Cursor IDE
Ключевые возможности:
-
Прикрепление ссылок на промты
Возможность работать с контекстом из разных источников, сохраняя историю обсуждений и решений -
Совместная работа над кодом
Встроенный AI ассистент для парного программирования (pair programming) -
Обсуждение архитектурных решений
Прямо в редакторе с инлайн-комментариями и обсуждениями рядом с кодом -
Проведение код-ревью
Автоматический анализ кода и предложения по улучшению качества, стиля и производительности -
Рефакторинг в реальном времени
Умные подсказки и автоматические исправления кода по мере написания -
Навигация по коду
Понимание контекста и семантики для быстрого перемещения между связанными частями проекта -
Генерация тестов
Создание unit-тестов на основе существующей реализации кода
🔄 Интеграция инструментов
Синергия подходов:
-
Использование ChatGPT для стратегического планирования
- Архитектурное проектирование высокого уровня
- Алгоритмические решения и выбор подходов
- Анализ требований и создание плана разработки
-
Применение Cursor для непосредственной реализации
- Написание и редактирование кода
- Локальный рефакторинг и оптимизация
- Непосредственная разработка с AI-помощником
-
Перемещение контекста между инструментами
- Экспорт архитектурных решений в Cursor для реализации
- Импорт конкретных проблем кода в ChatGPT для анализа
- Циклический процесс улучшения: проектирование → реализация → анализ
Рабочий процесс:
[Спецификация] → [ChatGPT: Анализ] → [Архитектура] → [Cursor: Реализация] → [Код] → [ChatGPT: Проверка] → [Улучшения]
Преимущества комбинации:
- ChatGPT обеспечивает глубину анализа и стратегическое мышление
- Cursor предоставляет точность реализации и локальный контекст
- Вместе они создают полноценный цикл разработки от концепции до готового кода
Такой подход позволил достичь высокого качества кода при сохранении соответствия всем требованиям спецификации и эффективного использования времени разработки.
-
Цикличная ротация ролей
В процессе разработки участники менялись ролями, что позволило:- Каждому поработать над разными аспектами проекта
- Получить разнообразный опыт
- Обеспечить более качественный код через разные подходы
-
Процесс исправления ошибок
При обнаружении проблем:- Создавались запросы на слияние (pull requests)
- Проводились обсуждения в комментариях
- Реализовывались исправления после согласования
- Тестировались изменения перед слиянием
📁 Описание репозитория
Структура каталогов и файлов:
Каталоги:
-
.gitverse/
Содержит служебные файлы для управления проектом и автоматического тестирования. -
demo/
Демонстрационные материалы:- примеры работы программыspec_compliance.md, test_scenarios.md- test_output.txt - подтверждение использования спецификации
-
dev/
Исходный код приложения:- основная реализация на C#solution.cs
-
spec/
Спецификация проекта:- техническое задание и требованияcodex.md
-
tasks/
Файлы с заданиями и задачами проекта
Файлы в корне:
- CONTRIBUTING.md - инструкция по участию в проекте
- README.md - этот файл с описанием проекта
Выводы о структуре:
- Организация по функциональности: Четкое разделение на разработку (dev), демонстрацию (demo), спецификации (spec) и задачи (tasks)
- Система контроля версий: Использование Git с автоматическим тестированием через .gitverse
- Полнота проекта: Включает как исходный код (C#), так и полную документацию
- Руководство для разработчиков: Наличие CONTRIBUTING.md для новых участников
- Демонстрационные материалы: Примеры работы программы в папке demo
💻 Описание кода программы
Архитектура программы
Программа представляет собой консольное приложение на C# для анализа графов городов и маршрутов. Реализована с использованием объектно-ориентированного подхода.
Основные классы:
1. Класс GraphStats
Вспомогательный класс для хранения статистики графа:
2. Класс Graph - Основной класс графа
Назначение:
Управляет структурой графа, реализует все алгоритмы работы с графом.
Структура данных:
Ключевые методы:
Операции с вершинами и рёбрами:
- добавление города с валидациейAddCity(string name)- удаление города со всеми связанными рёбрамиRemoveCity(string name)- создание связи между городамиAddEdge(string city1, string city2)- удаление связиRemoveEdge(string city1, string city2)
Алгоритмы обхода:
- рекурсивный глубинный поискDFS(string startCity)- поиск в ширину с использованием очередиBFS(string startCity)
Анализ графа:
- поиск компонент связности (рекурсивно)FindConnectedComponents()- поиск кратчайшего пути (BFS-based)FindShortestPath(string from, string to)- обнаружение циклов с использованием DFSDetectCycle()- получение статистики графаGetStats()
Вспомогательные методы:
- вывод списка смежностиPrintAdjacency()- ручная реализация быстрой сортировки (вместо LINQ)QuickSort()
3. Класс Program - Пользовательский интерфейс
Назначение:
Точка входа в программу, обработчик команд пользователя.
Основные функции:
- Чтение и парсинг команд из консоли
- Вызов соответствующих методов класса Graph
- Отображение результатов в понятном формате
- Обработка ошибок ввода
Поддерживаемые команды:
add city <name> - Добавить город
remove city <name> - Удалить город
connect <city1> <city2> - Соединить города
remove-edge <city1> <city2> - Удалить связь
path <city1> <city2> - Найти кратчайший путь
components - Показать компоненты связности
cycle-check - Проверить наличие циклов
stats - Показать статистику
show - Отобразить граф
help - Показать справку
exit - Выйти из программы
Алгоритмические особенности:
1. Рекурсивные алгоритмы с защитой
Все рекурсивные методы содержат проверку глубины:
2. Поиск кратчайшего пути
Используется алгоритм BFS с восстановлением пути:
- Обход в ширину от начальной вершины
- Запись родительских вершин
- Восстановление пути от конечной к начальной вершине
3. Обнаружение циклов
Алгоритм на основе DFS с проверкой обратных рёбер:
- Отслеживание вершин в текущем пути рекурсии
- Обнаружение рёбер к уже посещённым вершинам (кроме родительской)
4. Ручная сортировка
Для соответствия требованиям спецификации реализована быстрая сортировка:
- Алгоритм QuickSort для сортировки городов и соседей
- Разделение Ломуто (Lomuto partition scheme)
- Рекурсивная реализация
Технические характеристики:
Производительность:
- Сложность алгоритмов: O(V + E) для большинства операций
- Поддерживаемый размер: до 200 вершин (по спецификации)
- Время выполнения: < 1 секунды для всех операций
Ограничения по библиотекам:
- Используется только
иSystemSystem.Collections.Generic - Запрещены внешние NuGet пакеты
- Не используются графовые библиотеки
- LINQ не используется (все алгоритмы реализованы вручную)
Обработка ошибок и валидация:
-
Проверка существования городов:
- При операциях с несуществующими городами выводятся понятные сообщения об ошибках
-
Валидация входных данных:
- Проверка пустых имён городов
- Проверка дублирования городов
- Валидация рёбер (город не может быть соединён сам с собой)
-
Обработка граничных случаев:
- Пустой граф
- Отсутствие пути между городами
- Граф из одной вершины
- Циклы вида A-A
-
Защита от исключений:
- Все публичные методы обёрнуты в try-catch блоки
- Использование безопасных операций с коллекциями
Пример работы программы:
=== Graph Analysis System ===
> add city Moscow
City 'Moscow' added successfully.
> add city Kazan
City 'Kazan' added successfully.
> connect Moscow Kazan
Edge between 'Moscow' and 'Kazan' added successfully.
> show
=== Graph Adjacency List ===
Kazan: Moscow
Moscow: Kazan
> path Moscow Kazan
Shortest path: Moscow → Kazan
> stats
=== Graph Statistics ===
Nodes: 2
Edges: 1
Connected: yes
Ключевые преимущества реализации:
- Полное соответствие спецификации: Все требования из
выполненыspec/codex.md - Качественный код: После код-ревью добавлена обработка исключений, документация и улучшена надёжность
- Модульность: Чёткое разделение ответственности между классами
- Расширяемость: Легко добавлять новые алгоритмы и команды
- Пользовательский интерфейс: Интуитивно понятные команды с автоподсказками
Тестирование:
Программа включает комплексные тестовые сценарии, проверяющие:
- Все команды из спецификации
- Граничные случаи
- Обработку ошибок
- Производительность
Проект готов к использованию и полностью соответствует всем поставленным требованиям.