Тип работы:
Предмет:
Язык работы:


Анализ программного кода методами машинного обучения

Работа №131046

Тип работы

Дипломные работы, ВКР

Предмет

программирование

Объем работы27
Год сдачи2017
Стоимость4850 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
43
Не подходит работа?

Узнай цену на написание


Введение 5
Постановка задачи 6
1. Обзор существующих решений 7
1.1. Поиск паттернов проектирования в объектно-ориентированном коде 7
1.2. Поиск ошибок в объектно-ориентированном коде 8
1.3. Поиск и исправление ошибок архитектуры 8
1.3.1. Реструктуризация на уровне методов 8
1.3.2. Реструктуризация на уровне классов 8
1.3.3. Реструктуризация на уровне пакетов 9
2. Подход к реструктуризации кода на уровне классов 11
2.1. Построение моделей 11
2.2. Алгоритм на основе поиска сообществ 12
2.3. Алгоритмы на основе кластеризации 13
2.3.1. Модификация алгоритма ARI 14
2.3.2. Модификация алгоритма HAC 14
2.3.3. Алгоритм FMC 15
3. Особенности реализации 16
3.1. Реализация плагина для среды разработки IntelliJ IDEA 16
3.2. Архитектура 17
3.3. Рекурсивный обход элементов кода с помощью PSI 18
4. Апробация 19
4.1. Первый пример 19
4.1.1. Результат работы алгоритма CCDA 19
4.1.2. Результат работы алгоритма ARI 20
4.1.3. Результат работы алгоритма HAC 21
4.1.4. Результат работы алгоритма FMC 21
4.2. Второй пример 22
4.3. Третий пример 22
Заключение 24
Список литературы 25

Методы машинного обучения активно совершенствуются в течение последних десятилетий и применяются в разных областях, например, в медицине, экономике, компьютерном зрении, биоинформатике, инфор­мационном поиске и т.д. Однако, на сегодняшний день всё ещё суще­ствуют такие задачи, с которыми человек справляется намного лучше обученного алгоритма. Одно из таких направлений — анализ программ­ного кода.
Можно выделить несколько конкретных задач, связанных с анали­зом кода, в которых применимо машинное обучение:
• поиск одинаковых участков кода;
• поиск паттернов и антипаттернов проектирования;
• поиск и исправление ошибок в коде;
• поиск и исправление ошибок архитектуры.
Объектно-ориентированный код наиболее интересен для исследова­ний, так как этот подход к разработке сейчас является наиболее массово используемым. Кроме того, объектно-ориентированный код имеет от­носительно несложную структуру, и его компоненты легко поддаются анализу.
Ошибки проектирования при разработке программных продуктов усложняют переиспользование и дальнейшее сопровождение. На ис­правление таких ошибок может уходить много времени и сил, и в этом могли бы помочь средства автоматической реструктуризации программ.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В ходе выполнения данной работы были достигнуты следующие ре­зультаты.
1. Произведён анализ предметной области применения машинного обучения для анализа объектно-ориентированного кода.
2. Для реализации выбраны алгоритмы кластеризации и поиска со­обществ в сложных сетях.
3. Реализован инструмент автоматической реструктуризации про­грамм в виде плагина к среде разработки IntelliJ IDEA.
• Модифицированы и реализованы два алгоритма кластериза­ции сущностей исходного кода и алгоритм выделения сооб­ществ в сложных сетях.
• Разработан и реализован алгоритм кластеризации методов и полей (FMC).
4. Произведена апробация алгоритмов на трёх примерах, в том числе на исходном коде проекта JHotDraw.
Результаты данной работы позволили расширить возможности ал­горитмов автоматической реструктуризации посредством добавления нового типа рефакторинга ’’Перемещение поля”. Кроме того, благодаря введению новой сущности, соответствующей атрибутам классов, век­торная модель сущностей исходного кода стала полнее отражать суще­ствующие в нём зависимости.


[1] Automated code metrics plugin for IntelliJ IDEA.— 2011.— URL: https://github.com/BasLeijdekkers/MetricsReloaded (online; accessed: 19.04.2017).
[2] Bishop C. M. Neural Networks for Pattern Recognition.— Oxford University Press, 1995.
[3] Breiman L. Random Forests // Machine Learning. — Vol. 45.— P. 5-32.
[4] Complete-linkage clustering.— 2016.— URL: https://en.wikipedia.org/wiki/Complete-linkage_clustering (online; accessed: 20.05.2017).
[5] Fowler Martin. Refactoring: Improving the Design of Existing Code. -­Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 1999, 1999.
[6] G. John P. Langley. Estimating Continuous Distributions in Bayesian Classifiers // Eleventh Conference on Uncertainty in Artificial Intelligence. — P. 338-345.
[7] Gamma Erich. JHotDraw.— 2017.— URL: https://sourceforge. net/projects/jhotdraw/ (online; accessed: 07.04.2017).
[8] Hautus E. Improving Java software through package structure analysis // Proceedings of the 6th IASTED International Conference on Software Engineering and Applications, IEEE. -- 2002.
[9] Hierarchical clustering. — 2017. — URL: https://en.wikipedia.org/ wiki/Hierarchical_clustering (online; accessed: 20.05.2017).
[10] IntelliJ IDEA.— 2000.— URL: https://www.jetbrains.com/idea/ (online; accessed: 19.04.2017).
[11] J. Friedman T. Hastie R. Tibshiran. Additive Logistic Regression: a Statistical View of Boosting. — Stanford University, 1998.
[12] John G. Cleary Leonard E. Trigg. K*: An Instance-based Learner Using an Entropic Distance Measure // 12h International Conference on Machine Learning. — P. 108-114.
[13] Jureczko M., Spinellis D. Using object-oriented design metrics to predict software defects // Proceedings of the Fifth InternationalConference on Dependability of Computer Systems, Monographs of System Dependability. — 2010. — P. 69-81.
[14] Kannadhasan N., Maheswari B. Uma. Machine Learning based Methodology for Testing Object Oriented Applications // Journal of Engineering and Applied Sciences.— 2015.— Vol. 10, no. 17.— P. 7400-7405.
[15] Katsuhisa Maruyama Ken-ichi Shima. Automatic Method Refactoring Using Weighted Dependence Graphs // Proceedings of the 1999 International Conference on Software Engineering, 1999.— 1999.
...


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ