НИР — различия между версиями
(→Дублирующий код) |
Krasko (обсуждение | вклад) (→Поиск дублирующих сообщений об ошибках) |
||
(не показана 51 промежуточная версия 13 участников) | |||
Строка 11: | Строка 11: | ||
** Кононенко: подготовить результаты прошлого семестра для коллективного проекта. | ** Кононенко: подготовить результаты прошлого семестра для коллективного проекта. | ||
** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей. | ** Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей. | ||
+ | * 20.03.2012 - Третья встреча. | ||
+ | ** Обсудили структуру проекта. Определили "первые шаги" реализации. | ||
+ | ** Задачи на неделю: | ||
+ | ** Кононенко: Презентация (reaches), организация проекта, загрузка OSM формата, reaches preprocessing. | ||
+ | ** Сорокин: создать wiki, github, разобраться с визуализатором и написать алг. Дейкстры, презентация? | ||
+ | ** Иванов: web интерфейс (client-side), работающий сервер обрабатывающий запросы поиска евклидова расстояния между 2мя точками | ||
+ | ** ?- допишите на какую тему презентации плиз. | ||
+ | * 27.03.2012 | ||
+ | ** Была проведена презентация Артема Сорокина по алгоритмам на графах (? уточни плз. название алгоритмов) | ||
+ | ** Задачи на неделю: | ||
+ | ** Иванов: закончить предыдущее задание. (ServerSide договорились делать на python'e, клиент уже почти написан на javascript'e с использованием openLayers api) | ||
+ | * 13.04.2012 | ||
+ | ** Задачи на неделю: | ||
+ | ** Кононенко: реализация препроцессинга с Penalties и Shortcuts. | ||
+ | ** Сорокин: Transit points (?) | ||
+ | ** Иванов: Веб-сервер (?) | ||
+ | * 15.05.2012 | ||
+ | ** Задачи на неделю: | ||
+ | ** Кононенко: приблизительные reaches для полного графа, точные reaches для объединения с transit nodes, структура и интерфейс проекта. | ||
+ | ** Иванов: взаимодействие с пользователем и интерфейсом проекта (?) | ||
== MyFit == | == MyFit == | ||
Строка 30: | Строка 50: | ||
* [http://redmine.osll.spb.ru/issues/3157 Башоров] (Готово) | * [http://redmine.osll.spb.ru/issues/3157 Башоров] (Готово) | ||
− | ==== 12.03.2012 === | + | ==== 12.03.2012 ==== |
Получены следующие задачи: | Получены следующие задачи: | ||
− | * [http://redmine.osll.spb.ru/issues/3175 Башоров] | + | * [http://redmine.osll.spb.ru/issues/3175 Башоров] (Готово) |
− | * [http://redmine.osll.spb.ru/issues/3177 Опейкин] | + | * [http://redmine.osll.spb.ru/issues/3177 Опейкин] (Готово) |
− | * [http://redmine.osll.spb.ru/issues/3176 Певзнер] | + | * [http://redmine.osll.spb.ru/issues/3176 Певзнер] (Готово) |
+ | |||
+ | ==== 27.03.2012 ==== | ||
+ | Митинг в EMC -- обсудили текущие задачи и тестовые задания. <br/> | ||
+ | Закоммитили рабочие версии кода по задачам, ожидаем ревью. <br/> | ||
+ | (задачи: [http://redmine.osll.spb.ru/issues/3175 Башоров], [http://redmine.osll.spb.ru/issues/3177 Опейкин], [http://redmine.osll.spb.ru/issues/3176 Певзнер]) | ||
+ | |||
+ | === 09.03.2012 === | ||
+ | Певзнер: обсудила замечания по результатам ревью по старой задаче, получила новую задачу переноса тегов для suite в button панель. <br/> | ||
+ | Башоров: сделать главную страницу для Test Suites. <br/> | ||
+ | Опейкин: реализация фильтрации на стороне сервера. <br/> | ||
+ | |||
+ | === 13.03.2012 === | ||
+ | Unit testing seminar | ||
+ | |||
+ | === 19.03.2012 === | ||
+ | Митинг в EMC -- обсудили текущие задачи и тестовые задания. <br/> | ||
+ | Башоров: получил новую задачу. <br/> | ||
+ | Опейкин: <br/> | ||
+ | Певзнер: обсудила некоторые вопросы по новой задаче. <br/> | ||
== GPU == | == GPU == | ||
Строка 54: | Строка 93: | ||
**# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.) | **# Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.) | ||
**# Реализовать обработчик РВ нa cuBLAS (Лазарев С.) | **# Реализовать обработчик РВ нa cuBLAS (Лазарев С.) | ||
− | * | + | *3я встреча: |
** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS | ** Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS | ||
** Решили какие паттерны РВ будут в бенчмарках | ** Решили какие паттерны РВ будут в бенчмарках | ||
** По CUDA на неделю нужно было реализовать простейшую схему распараллеливания существующих реализаций регулярных выражений(Regexp9, Cuda paper code) и посмотреть на производительность. | ** По CUDA на неделю нужно было реализовать простейшую схему распараллеливания существующих реализаций регулярных выражений(Regexp9, Cuda paper code) и посмотреть на производительность. | ||
+ | *4я встреча: | ||
+ | ** Портированная библиотека работать не хочет и разобраться без отладчика - очень трудно. Попытались настроить удалённую отладку на CUDA. Всё настроилось, но софт (Nsight) очень сырой, происходят непонятные ошибки и они нигде не журналируются и не объясняются. (Коровин А.) | ||
+ | *5я встреча: | ||
+ | ** Реализован поиск с помощью регулярных выражений на основе матричных вычислений с использованием библиотеки cuBLAS. Пока сделан поиск в одной строке. Дальше надо распараллелить на несколько строк. (Лазарев С.) | ||
+ | ** Портированная библиотека после длительной отладки начала матчить строку с регулярным выражением. Задача 1 выражение - 1 строка решена. Следующая задача задействовать все ядра видеокарты и научиться матчить N строк на одно регулярное выражение. (Коровин А.) | ||
+ | ** Реализовн поиск с помощью re2 одной строки на одном ядре. Теперь нужно сделать для n строк на к ядрах. | ||
+ | *6я встреча: | ||
+ | ** Был реализован матчинг N строк на 1 регулярное выражение на CUDA. К следующей встрече нужно попробовать оптимизировать программу. (Коровин А.) | ||
+ | *7я встреча: | ||
+ | ** Собираем данные, делаем отчет, приводим код в порядок. | ||
== Syrop == | == Syrop == | ||
Строка 74: | Строка 123: | ||
* 12/mar/2011 - Всё хорошо. | * 12/mar/2011 - Всё хорошо. | ||
* 19/mar/2011 - Снова всё хорошо - работаем. | * 19/mar/2011 - Снова всё хорошо - работаем. | ||
− | * | + | * 26/mar/2011 - Семен у нас большой шутник, см. список задач на трекере |
== Дублирующий код == | == Дублирующий код == | ||
Руководитель: Иваницкий<BR> | Руководитель: Иваницкий<BR> | ||
− | Ссылка на проект:<BR> | + | Ссылка на проект: http://code.google.com/p/aptu-practice-code-duplication/ <BR> |
Команда: | Команда: | ||
* Бандурин Дима (Project manager) | * Бандурин Дима (Project manager) | ||
Строка 86: | Строка 135: | ||
Отчёт: | Отчёт: | ||
− | + | ===28.02.2012 - Вводная встреча=== | |
* Распределение ролей в команде | * Распределение ролей в команде | ||
:Бандурин Дима (Project manager) | :Бандурин Дима (Project manager) | ||
Строка 94: | Строка 143: | ||
* Организационные вопросы | * Организационные вопросы | ||
− | + | ===06.03.2012 - Контрольная встреча=== | |
* Изучение существующих решений | * Изучение существующих решений | ||
** Michael Wise's Greedy String Tiling algorithm | ** Michael Wise's Greedy String Tiling algorithm | ||
Строка 102: | Строка 151: | ||
[[Файл:Solutions.pdf|краткое описание]] | [[Файл:Solutions.pdf|краткое описание]] | ||
− | + | ===15.03.2012=== | |
+ | В рамках НИР необходимо ответить на три вопроса. | ||
+ | * Научная новизна | ||
+ | ** Список существующих решений для нашей задачи.(Ярослав) | ||
+ | ** Способы оценки существующих решений.(Маша) | ||
+ | ** Библиотеки, для проведения испытания (исследуемая выборка) (Дмитрий) | ||
+ | * Рабочий прототип. Решено делать плагин на базе IntelliJ IDEA. Функциональность плагина будет выяснена дальше. | ||
+ | * Этапы разработки | ||
+ | Решено разбить разработку на три этапа. | ||
+ | # Определение требований к разрабатываемой программе.(3 недели) | ||
+ | # Создание прототипа (2 недели) | ||
+ | # Разработка плагина (4 недели) | ||
+ | ## Основная функциональность (2 недели) | ||
+ | ## Тестирование и доведение (2 неделя) | ||
+ | ## Документирование и создание презентационных материалов (1 неделя параллельно со вторым пунктом.) | ||
+ | Итого 9 недель. Предположительный срок завершения проекта : 21 мая | ||
− | + | ===21.03.2012=== | |
*Возможные метрики для сравнения алгоритмов поиска дубликатов | *Возможные метрики для сравнения алгоритмов поиска дубликатов | ||
** Время работы, используемая память, CPU | ** Время работы, используемая память, CPU | ||
Строка 114: | Строка 178: | ||
** Релевантность участка кода. Код считается иррелевантным, если его замена на предлагающийся код слишком трудоемка и не имеет смысла. | ** Релевантность участка кода. Код считается иррелевантным, если его замена на предлагающийся код слишком трудоемка и не имеет смысла. | ||
*Стоит также определить, на каких констукциях дубликатов алгоритмы работают лучше, а на каких хуже. | *Стоит также определить, на каких констукциях дубликатов алгоритмы работают лучше, а на каких хуже. | ||
+ | |||
+ | ===6.04.2012=== | ||
+ | *Исследованы IdeaCodeDuplicatePlugin, Digger, Simian и получены следующие метрики: | ||
+ | **Весовой коэффициент. Каждой строке присваивается вес, который соответствует числу программ, сказавших, что эта строка что-то дублирует. | ||
+ | ***idea 23310 | ||
+ | ***digger 34839 | ||
+ | ***simian 26050 | ||
+ | **Коэффициент по пересечению. Если строка встретилась в результате несколько раз, она учитывается несколько раз. | ||
+ | ***idea 0.94 | ||
+ | ***digger 0.92 | ||
+ | ***simian 0.94 | ||
+ | **Коэффициент по объединению. Если строка встретилась в результате несколько раз, она учитывается несколько раз. | ||
+ | ***idea 0.86 | ||
+ | ***digger 0.12 | ||
+ | ***simian 0.18 | ||
+ | *Попарные сравнения алгоритмов по тем же параметрам: | ||
+ | **digger | 1.12 | 0.55 | 29589 | ||
+ | **simian | 1.03 | 0.76 | 21863 | ||
+ | |||
+ | **idea | 1.0 | 0.93 |19123 | ||
+ | **digger | 1.0 | 0.15 | 28710 | ||
+ | |||
+ | **idea | 1.0 | 0.89 | 18060 | ||
+ | **simian | 1.0 | 0.19 | 19921 | ||
+ | * Решено использовать алгоритм из Simian. | ||
+ | |||
+ | ===11.04.2012=== | ||
+ | : Пишется прототип, в основе которого лежит Simian. Прототип будет представлять собой плагин к IntelliJ IDEA. Для отображения найденных дублирующих строк будет использоваться механизм Inspections. В качестве возможных исправлений пользователю будет предложено заменить строки на вызов соответствующего метода. Эквивалентность найденных дублирующих строк будет дополнительно проверяться с помощью соответствующих синтаксических деревьев. | ||
+ | |||
+ | ===16.04.2012=== | ||
+ | : Написан плагин для замены дублирующего кода вызовами соответствующих методов. В основе лежит поиск дубликатов IntelliJ Idea, так как при первом рассмотрении данный алгоритм находит гораздо более сложные дубликаты нежели Simian. В плагине используется механизм Inspections из IntelliJ Idea. При запуске анализатора кода находятся все public static методы, после чего каждый класс из предлагаемого скоупа анализируется на предмет наличия кода дублирующего найденные методы. Затем пользователю предлагается заменить дублирующий код на вызов соответствующих методов. | ||
+ | |||
+ | ===26.04.2012=== | ||
+ | Новое распределение задач: | ||
+ | * Маша | ||
+ | ** Дописать плагин для IntelliJ IDEA | ||
+ | ***добавить анализ всех методов (не только public static) | ||
+ | ***изучить анализ дубликатов IntelliJ IDEA и добавить нереализованные параметры выявления дубликатов в плагин | ||
+ | |||
+ | * Ярослав | ||
+ | ** Изучить Antlr и написать (упростить существующую?) грамматику для С(С++?) | ||
+ | |||
+ | * Дима | ||
+ | ** С помощью построенной Ярославом грамматики написать простейший анализатор дублирования кода для C(C++?) | ||
+ | |||
+ | ===14.05.2012=== | ||
+ | Маша: | ||
+ | |||
+ | *В плагин добавлены следующие возможности: | ||
+ | **поиск методов-дубликатов в иерархии; | ||
+ | **поиск дублирующих строк в иерархии и вынесение дублируемы строк в отдельный метод в предке. | ||
+ | |||
+ | Распределение задач: | ||
+ | Маша: | ||
+ | *Дописать плагин: | ||
+ | **поиск дублирующих строк в братьях и вынесение дублируемых строк в отдельный метод в минимальном предке; | ||
+ | **анализ дубликатов в каждом классе (делает IntelliJ IDEA); | ||
+ | **исправить вынесение дублируемых строк из static-методов; | ||
+ | **возможность конфигурации: | ||
+ | ***определение папки, в которой производится поиск дубликатов; | ||
+ | ***определение папки, в которой производится замена дублирующего кода; | ||
+ | **проверить возможность поиска в java.lang.*; | ||
+ | **документация; | ||
+ | **тестирование. | ||
+ | |||
+ | Ярослав и Дима: | ||
+ | *исследовать stl; | ||
+ | *написать прототип поисковика дубликатов в C++ на основе Antlr (например, pair<int,int>(2,3) стоит заменить на std::make_pair(2,3)). Предлагается производить замену в синтаксическом дереве. | ||
== Конфигуратор контейнеров AndroidVM == | == Конфигуратор контейнеров AndroidVM == | ||
Строка 121: | Строка 253: | ||
* Владислав Савельев | * Владислав Савельев | ||
* Дмитрий Шеставин | * Дмитрий Шеставин | ||
− | * Сергей Казенюк | + | * Сергей Казенюк ([[AVMConf_Kazenyuk|отчёты]]) |
− | + | Владислав: | |
− | 13 марта. Встреча с разработчиками проекта. Поставлены задачи. | + | 13 марта. |
− | + | : Встреча с разработчиками проекта. Поставлены задачи. | |
+ | : Послушал лекцию Кирилла Владимировича про QT. Подумал об интерфейсе конфигуратора. Написал очень черновой вариант, создающий и запускающий контейнеры. Начал смотреть видео лекций Кирилла Владимировича про QT и шаблон MVC, а также читать про QML. | ||
+ | |||
+ | 27 марта. | ||
+ | : Написал интерфейс с лейаутами, правильно создающий контейнеры. Для создания добавил диалоговое окно (с валидацией адреса и прочих штук). | ||
+ | |||
+ | 10 апреля. | ||
+ | : Переписал интерфейс с использованием «модели — представления — модели представления». Нарисовал иконок и спроектировал внешний вид приложения в перспективе для презентации Жени Баталова на предзащите. | ||
+ | : Добавил в программный интерфейс конфигуратора возможность для получения от устройства информации о списке контейнеров. | ||
+ | |||
+ | 30 апреля. | ||
+ | : В программный интерфейс симулятора добавил функциональность для извлечения сервисов и их параметров и уведомления об их изменении. | ||
+ | |||
+ | 7 мая. | ||
+ | : Встроил в MVC-архитектуру поддержку списка сервисов для устройства. | ||
+ | |||
+ | 14 мая. | ||
+ | : Переписал поддержку параметров: | ||
+ | :: — разделил параметры и их значения | ||
+ | :: — в графическом интерфейсе убрал модели и вьюхи для сервисов и переделал всё с диалоговыми окнами и лейаутам, поскольку динамическая поддержка не нужна. | ||
+ | :: — упростил код, перевёл в package-by-layer. | ||
+ | |||
+ | 21 мая. | ||
+ | : Добавил функциональность для уведомления устройства об изменении параметров. | ||
== Поиск дублирующих сообщений об ошибках == | == Поиск дублирующих сообщений об ошибках == | ||
Строка 154: | Строка 309: | ||
* Добавлен ui для администрирования приложение | * Добавлен ui для администрирования приложение | ||
* Начата реализация JobProcessor'a, обрабатывающего сообщения об ошибках на предмет поиска дубликатов. | * Начата реализация JobProcessor'a, обрабатывающего сообщения об ошибках на предмет поиска дубликатов. | ||
+ | |||
+ | Отчет 19.03 - 25.03 | ||
+ | * Написан классификатор, разбивающий сообщения об ошибках на кластеры. | ||
+ | * Добавлены новые возможности web-интерфейса для администрирования приложения. | ||
+ | |||
+ | Отчет 25.03 - 7.04 | ||
+ | * Написан JobProcessor, разбивающий сообщения об ошибках на кластеры. | ||
+ | * Написаны тесты на JobProcessor | ||
+ | * Начата реализация интеграции приложения с Ютрэком | ||
+ | * Осуществлен переход на более новую версию библиотеки jersey | ||
+ | |||
+ | Отчет 7.04 - 14.04 | ||
+ | * Решены проблемы, связанные с переходом на более новую версию jersey ("плохой" формат json, исключения при сериализации объектов с дублирующими xml-элементами и тп) | ||
+ | * Начата работа над REST-клиентом для интеграции с YoutTack | ||
+ | |||
+ | 21.04 встреча не проводилась из-за практики по SE | ||
+ | |||
+ | Отчет 21.04 - 28.04 | ||
+ | * Продолжение работы над REST-клиентом | ||
+ | |||
+ | Отчет 28.04 - 12.05 | ||
+ | * Закончена работа над rest-клиентом, добавлены бины для конфигурирования | ||
+ | * Добавлены тесты на rest-клиент | ||
+ | * Начато внесение изменений в парсеры, обусловленное тем, что в Ютреке вместе со стек трейсами лежат пользовательские комментарии. | ||
+ | |||
+ | Отчёт 12.05 - 26.05 | ||
+ | * Внесение изменение в парсеры завершилось (успехом) | ||
+ | * В GUI добавлены возможности для настройки интеграции с ютреком | ||
+ | * Ишью в GUI теперь раскрашиваются в разные цвета по кластерам, чтобы было видно, что же мы сделали | ||
+ | * Кластеризующий алгоритм сделан lightning-fast |
Текущая версия на 22:20, 26 мая 2012
Содержание
Карта дорог
Руководитель: Лесин
Ссылка на проект:
Команда:
- Иванов Антон
- Сорокин Артем
- Кононенко Василий
Отчёт:
- 6.03.2012 - Первая встреча.
- Задачи на неделю:
- Кононенко: подготовить результаты прошлого семестра для коллективного проекта.
- Сорокин, Иванов: разобраться с базовыми алгоритмами поиска кратчайших путей.
- 20.03.2012 - Третья встреча.
- Обсудили структуру проекта. Определили "первые шаги" реализации.
- Задачи на неделю:
- Кононенко: Презентация (reaches), организация проекта, загрузка OSM формата, reaches preprocessing.
- Сорокин: создать wiki, github, разобраться с визуализатором и написать алг. Дейкстры, презентация?
- Иванов: web интерфейс (client-side), работающий сервер обрабатывающий запросы поиска евклидова расстояния между 2мя точками
- ?- допишите на какую тему презентации плиз.
- 27.03.2012
- Была проведена презентация Артема Сорокина по алгоритмам на графах (? уточни плз. название алгоритмов)
- Задачи на неделю:
- Иванов: закончить предыдущее задание. (ServerSide договорились делать на python'e, клиент уже почти написан на javascript'e с использованием openLayers api)
- 13.04.2012
- Задачи на неделю:
- Кононенко: реализация препроцессинга с Penalties и Shortcuts.
- Сорокин: Transit points (?)
- Иванов: Веб-сервер (?)
- 15.05.2012
- Задачи на неделю:
- Кононенко: приблизительные reaches для полного графа, точные reaches для объединения с transit nodes, структура и интерфейс проекта.
- Иванов: взаимодействие с пользователем и интерфейсом проекта (?)
MyFit
Руководитель: EMC
Ссылка на проект:
Команда:
- Опейкин Александр
- Певзнер Алина
- Башоров Залим
09.03.2012
Выполнено 2 тестовых задания на Java и на GWT.
Получены следующие задачи:
12.03.2012
Получены следующие задачи:
27.03.2012
Митинг в EMC -- обсудили текущие задачи и тестовые задания.
Закоммитили рабочие версии кода по задачам, ожидаем ревью.
(задачи: Башоров, Опейкин, Певзнер)
09.03.2012
Певзнер: обсудила замечания по результатам ревью по старой задаче, получила новую задачу переноса тегов для suite в button панель.
Башоров: сделать главную страницу для Test Suites.
Опейкин: реализация фильтрации на стороне сервера.
13.03.2012
Unit testing seminar
19.03.2012
Митинг в EMC -- обсудили текущие задачи и тестовые задания.
Башоров: получил новую задачу.
Опейкин:
Певзнер: обсудила некоторые вопросы по новой задаче.
GPU
Руководитель: Рубен Артурович Гиргидов
Ссылка на проект:
Команда:
- Коровин Алексей
- Лазарев Сергей
- Кормишин Сергей
Отчёт:
- 1я встреча нам были выданы вводные задачи:
- Разобраться с CUDA, установить и настроить окружение. Написать простенький алгоритм. (Коровин А.)
- Вспомнить "всё" о регулярных выражениях: какие бывают, как пишутся (Лазарев С.)
- Найти обработчики регулярных выражений (Matcher'ы), разобраться в их строении и принципе работы. (Кормишин С.)
- 2я встреча:
- Обсудили наши предыдущие задания, расписали план выполнения проекта, цели и др.
- Выданы следующие задачи:
- Реализовать обработчик РВ на Cuda для одной и n строк (Коровин А.)
- Найти обработчики РВ на CPU на C++ и адаптировать его для n строк (Кормишин С.)
- Реализовать обработчик РВ нa cuBLAS (Лазарев С.)
- 3я встреча:
- Обсудили наши успехи, искали нужное представление автомата в виде матрицы для задачи реализации РВ на cuBLAS
- Решили какие паттерны РВ будут в бенчмарках
- По CUDA на неделю нужно было реализовать простейшую схему распараллеливания существующих реализаций регулярных выражений(Regexp9, Cuda paper code) и посмотреть на производительность.
- 4я встреча:
- Портированная библиотека работать не хочет и разобраться без отладчика - очень трудно. Попытались настроить удалённую отладку на CUDA. Всё настроилось, но софт (Nsight) очень сырой, происходят непонятные ошибки и они нигде не журналируются и не объясняются. (Коровин А.)
- 5я встреча:
- Реализован поиск с помощью регулярных выражений на основе матричных вычислений с использованием библиотеки cuBLAS. Пока сделан поиск в одной строке. Дальше надо распараллелить на несколько строк. (Лазарев С.)
- Портированная библиотека после длительной отладки начала матчить строку с регулярным выражением. Задача 1 выражение - 1 строка решена. Следующая задача задействовать все ядра видеокарты и научиться матчить N строк на одно регулярное выражение. (Коровин А.)
- Реализовн поиск с помощью re2 одной строки на одном ядре. Теперь нужно сделать для n строк на к ядрах.
- 6я встреча:
- Был реализован матчинг N строк на 1 регулярное выражение на CUDA. К следующей встрече нужно попробовать оптимизировать программу. (Коровин А.)
- 7я встреча:
- Собираем данные, делаем отчет, приводим код в порядок.
Syrop
Руководитель: Смаль Александр Владимирович
Ссылка на проект: Syrop
Wiki проекта: Github
Команда:
- Кринкин Михаил
- Мартынов Семён
- Крашенинникова Ксения
- Великий Алексей
Отчёт:
- 27/feb/2011 - Первая встреча. Обсуждение цели проекта, способов реализации и внутри командного взаимодействия. Разделение задач. Создан репозиторий проекта на GitHub. Открытый вопрос - применение методологий разработки в проекте.
- 01/mar/2011 - Сode review.
- 05/mar/2011 - Введение договоренностей о code style, оформлении документации, спецификация на интерфейсы. Показ первого GUI, уточнение новых задач.
- 12/mar/2011 - Всё хорошо.
- 19/mar/2011 - Снова всё хорошо - работаем.
- 26/mar/2011 - Семен у нас большой шутник, см. список задач на трекере
Дублирующий код
Руководитель: Иваницкий
Ссылка на проект: http://code.google.com/p/aptu-practice-code-duplication/
Команда:
- Бандурин Дима (Project manager)
- Лепенькин Ярослав (Поиск дублирующего кода в C++)
- Фофанова Маша (Поиск дублирующего кода в Java)
Отчёт:
28.02.2012 - Вводная встреча
- Распределение ролей в команде
- Бандурин Дима (Project manager)
- Лепенькин Ярослав. Изучение специфики C++ для поиска дублирующего кода
- Фофанова Маша. Изучение специфики Java для поиск дублирующего кода.
- Уточнение функционала
- Организационные вопросы
06.03.2012 - Контрольная встреча
- Изучение существующих решений
- Michael Wise's Greedy String Tiling algorithm
- Преобразование Барроуза-Уиллера
- Алгоритм Рабина-Карпа
- Механизм использующийся в IntelliJ IDEA
15.03.2012
В рамках НИР необходимо ответить на три вопроса.
- Научная новизна
- Список существующих решений для нашей задачи.(Ярослав)
- Способы оценки существующих решений.(Маша)
- Библиотеки, для проведения испытания (исследуемая выборка) (Дмитрий)
- Рабочий прототип. Решено делать плагин на базе IntelliJ IDEA. Функциональность плагина будет выяснена дальше.
- Этапы разработки
Решено разбить разработку на три этапа.
- Определение требований к разрабатываемой программе.(3 недели)
- Создание прототипа (2 недели)
- Разработка плагина (4 недели)
- Основная функциональность (2 недели)
- Тестирование и доведение (2 неделя)
- Документирование и создание презентационных материалов (1 неделя параллельно со вторым пунктом.)
Итого 9 недель. Предположительный срок завершения проекта : 21 мая
21.03.2012
- Возможные метрики для сравнения алгоритмов поиска дубликатов
- Время работы, используемая память, CPU
- Число правильно найденных дубликатов
- Необходимо учитывать длину каждого дубликата, чтобы учитывать возможную вложенность. Длина дубликата определяется числом символов в нем.
- Число неправильно найденных дубликатов
- Метрики для алгоритмов замены дубликатов
- Объем кода, получающегося после замены найденных дубликатов на вызовы соответствующих методов
- Релевантность участка кода. Код считается иррелевантным, если его замена на предлагающийся код слишком трудоемка и не имеет смысла.
- Стоит также определить, на каких констукциях дубликатов алгоритмы работают лучше, а на каких хуже.
6.04.2012
- Исследованы IdeaCodeDuplicatePlugin, Digger, Simian и получены следующие метрики:
- Весовой коэффициент. Каждой строке присваивается вес, который соответствует числу программ, сказавших, что эта строка что-то дублирует.
- idea 23310
- digger 34839
- simian 26050
- Коэффициент по пересечению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.
- idea 0.94
- digger 0.92
- simian 0.94
- Коэффициент по объединению. Если строка встретилась в результате несколько раз, она учитывается несколько раз.
- idea 0.86
- digger 0.12
- simian 0.18
- Весовой коэффициент. Каждой строке присваивается вес, который соответствует числу программ, сказавших, что эта строка что-то дублирует.
- Попарные сравнения алгоритмов по тем же параметрам:
- digger | 1.12 | 0.55 | 29589
- simian | 1.03 | 0.76 | 21863
- idea | 1.0 | 0.93 |19123
- digger | 1.0 | 0.15 | 28710
- idea | 1.0 | 0.89 | 18060
- simian | 1.0 | 0.19 | 19921
- Решено использовать алгоритм из Simian.
11.04.2012
- Пишется прототип, в основе которого лежит Simian. Прототип будет представлять собой плагин к IntelliJ IDEA. Для отображения найденных дублирующих строк будет использоваться механизм Inspections. В качестве возможных исправлений пользователю будет предложено заменить строки на вызов соответствующего метода. Эквивалентность найденных дублирующих строк будет дополнительно проверяться с помощью соответствующих синтаксических деревьев.
16.04.2012
- Написан плагин для замены дублирующего кода вызовами соответствующих методов. В основе лежит поиск дубликатов IntelliJ Idea, так как при первом рассмотрении данный алгоритм находит гораздо более сложные дубликаты нежели Simian. В плагине используется механизм Inspections из IntelliJ Idea. При запуске анализатора кода находятся все public static методы, после чего каждый класс из предлагаемого скоупа анализируется на предмет наличия кода дублирующего найденные методы. Затем пользователю предлагается заменить дублирующий код на вызов соответствующих методов.
26.04.2012
Новое распределение задач:
- Маша
- Дописать плагин для IntelliJ IDEA
- добавить анализ всех методов (не только public static)
- изучить анализ дубликатов IntelliJ IDEA и добавить нереализованные параметры выявления дубликатов в плагин
- Дописать плагин для IntelliJ IDEA
- Ярослав
- Изучить Antlr и написать (упростить существующую?) грамматику для С(С++?)
- Дима
- С помощью построенной Ярославом грамматики написать простейший анализатор дублирования кода для C(C++?)
14.05.2012
Маша:
- В плагин добавлены следующие возможности:
- поиск методов-дубликатов в иерархии;
- поиск дублирующих строк в иерархии и вынесение дублируемы строк в отдельный метод в предке.
Распределение задач: Маша:
- Дописать плагин:
- поиск дублирующих строк в братьях и вынесение дублируемых строк в отдельный метод в минимальном предке;
- анализ дубликатов в каждом классе (делает IntelliJ IDEA);
- исправить вынесение дублируемых строк из static-методов;
- возможность конфигурации:
- определение папки, в которой производится поиск дубликатов;
- определение папки, в которой производится замена дублирующего кода;
- проверить возможность поиска в java.lang.*;
- документация;
- тестирование.
Ярослав и Дима:
- исследовать stl;
- написать прототип поисковика дубликатов в C++ на основе Antlr (например, pair<int,int>(2,3) стоит заменить на std::make_pair(2,3)). Предлагается производить замену в синтаксическом дереве.
Конфигуратор контейнеров AndroidVM
Руководитель: Кринкин К.В.
Команда:
- Владислав Савельев
- Дмитрий Шеставин
- Сергей Казенюк (отчёты)
Владислав:
13 марта.
- Встреча с разработчиками проекта. Поставлены задачи.
- Послушал лекцию Кирилла Владимировича про QT. Подумал об интерфейсе конфигуратора. Написал очень черновой вариант, создающий и запускающий контейнеры. Начал смотреть видео лекций Кирилла Владимировича про QT и шаблон MVC, а также читать про QML.
27 марта.
- Написал интерфейс с лейаутами, правильно создающий контейнеры. Для создания добавил диалоговое окно (с валидацией адреса и прочих штук).
10 апреля.
- Переписал интерфейс с использованием «модели — представления — модели представления». Нарисовал иконок и спроектировал внешний вид приложения в перспективе для презентации Жени Баталова на предзащите.
- Добавил в программный интерфейс конфигуратора возможность для получения от устройства информации о списке контейнеров.
30 апреля.
- В программный интерфейс симулятора добавил функциональность для извлечения сервисов и их параметров и уведомления об их изменении.
7 мая.
- Встроил в MVC-архитектуру поддержку списка сервисов для устройства.
14 мая.
- Переписал поддержку параметров:
- — разделил параметры и их значения
- — в графическом интерфейсе убрал модели и вьюхи для сервисов и переделал всё с диалоговыми окнами и лейаутам, поскольку динамическая поддержка не нужна.
- — упростил код, перевёл в package-by-layer.
21 мая.
- Добавил функциональность для уведомления устройства об изменении параметров.
Поиск дублирующих сообщений об ошибках
Команда:
- Ждан Анна
- Краско Евгений
- Кудинкин Алексей
Отчет 03.03 - 11.03
- Настроено окружение: проект в MPS, проект в IDEA
- Описана модель данных на языке dnq
- Написан rest api для админки и для добавления в базу новых сообщений об ошибках
- Написан парсер сообщений об ошибках
- Написана первая версия алгоритма сравнения сообщений об ошибках
- Написаны базовые классы для запуска тестов (различные заглушки для методов сервлет-контейнера, создание контекста для бинов и тп)
- Написаны тесты на парсер и алгоритм сравнения
- Частично написаны тесты на rest api (jmeter)
Отчет 11.03 - 18.03
- Улучшена первая версия алгоритма сравнения сообщений об ошибках
- Реализован альтернативный алгоритм сравнения сообщений об ошибках.
- Написаны тесты на оба алгоритма
- Реализован парсер сообщений об ошибках для языка C#. Парсер рассчитан на формат, принятый в Решарпере
- Написаны тесты на парсер
- В язык для рестовых тестов добавлена возможность проверять хереды респонса
- Добавлен ui для администрирования приложение
- Начата реализация JobProcessor'a, обрабатывающего сообщения об ошибках на предмет поиска дубликатов.
Отчет 19.03 - 25.03
- Написан классификатор, разбивающий сообщения об ошибках на кластеры.
- Добавлены новые возможности web-интерфейса для администрирования приложения.
Отчет 25.03 - 7.04
- Написан JobProcessor, разбивающий сообщения об ошибках на кластеры.
- Написаны тесты на JobProcessor
- Начата реализация интеграции приложения с Ютрэком
- Осуществлен переход на более новую версию библиотеки jersey
Отчет 7.04 - 14.04
- Решены проблемы, связанные с переходом на более новую версию jersey ("плохой" формат json, исключения при сериализации объектов с дублирующими xml-элементами и тп)
- Начата работа над REST-клиентом для интеграции с YoutTack
21.04 встреча не проводилась из-за практики по SE
Отчет 21.04 - 28.04
- Продолжение работы над REST-клиентом
Отчет 28.04 - 12.05
- Закончена работа над rest-клиентом, добавлены бины для конфигурирования
- Добавлены тесты на rest-клиент
- Начато внесение изменений в парсеры, обусловленное тем, что в Ютреке вместе со стек трейсами лежат пользовательские комментарии.
Отчёт 12.05 - 26.05
- Внесение изменение в парсеры завершилось (успехом)
- В GUI добавлены возможности для настройки интеграции с ютреком
- Ишью в GUI теперь раскрашиваются в разные цвета по кластерам, чтобы было видно, что же мы сделали
- Кластеризующий алгоритм сделан lightning-fast