Comments (4)
Брыксин, Шпильман что-то недавно писали про рефакторинги
from gcm.
Критерии, по которым можно охарактеризовать прочитанные статьи:
- Summary концептов, изложенных в этой статье. Если идеи уже похожи на изложенные в других статьях, то указать это.
- Применимость изложенного подхода к нашей задаче. Если да, то как.
- Ключевые референсы, возможности развития этого подхода.
- Мой вывод, картинка, которая складывается в голове
from gcm.
Начну со статьи On Automatically Generating Commit Messages via
Summarization of Source Code Changes:
- Подход: проанализировать изменения в ast, выявить стереотипные, по шаблону сгенерировать для них commit message
- Их подход можно буквально имплементировать используя вывод gumtree, но это будет излишне. Можно использовать часть предложенных ими шаблонов, для того, чтобы отработать большие изменения, которые нельзя будет скормить модельке -- это Class rename, Method rename и Object state rename. Среди их шаблонов отсутствует случай перемещения блока кода/метода из одной части кода в другую (и из одного файла в другой, но это вообще отдельная история).
- мне показались важными ссылки на вот эти две статьи:
N. Dragan, M. Collard, M. Hammad, and J. Maletic. Using stereotypes to help characterize commits. In ICSM’11, pages 520–523, 2011.
[7] N. Dragan, M. Collard, and J. Maletic. Reverse engineering method stereotypes. In ICSM’06, pages 24–34, 2006.
Мне кажется что их подход близок к границам своей применимости -- можно пытаться придумывать еще шаблоны, но не уверен, что сообщения комитов станут от этого на порядок более читаемыми. - Шаблоны это неплохо, и мы от них никуда не денемся, по крайней мере в случае больших изменений кода. Но для конкретных изменений в небольших кусках кода они дают довольно слабые и не совсем human-readable описания. Итог -- можно следовать их подходу для обработки всех изменений на уровне деклараций классов/методов/файлов, заодно добавив туда возможность отслеживать перемещения больших кусков кода, которую предоставляет gumtree. После этого надо еще научится работать с изменениями внутри методов/добавлением новых методов (было бы хорошо, если бы это было не просто сообщение add method <method_name>, а краткое описание той функциональности, для которой он был введен, возможно нам поможет здесь code2seq).
from gcm.
Automated Refactoring of Object-Oriented Code Using Clustering Ensembles
- Ввести метрики набор метрик для специальных вершин ast -- классов и методов, каждой такой вершине теперь соответствует вектор со значениями этих метрик, можно кластеризовать. На основе перемещений из кластера в кластер можно выявить рефакторинги: Move Method, Extract Class, Inline Class, Move Field
- Идея довольно интересная, однако gumtree уже детектит перемещения кусков кода, поэтому полученные рефакторинги не очень актуальны в контексте нашей работы (разве что могут помочь проверить, что gumtree корректно работает). Однако, метрики могут быть полезны. Можно сравнивать эти метрики до и после, а также показания code2seq, и на основе этого пытаться провести кластеризацию рефакторингов (= обучить модель которая будет выдавать категории).
- Вот эти две статьи явно очень интересные
Marian, Z.-E. 2014. Machine learning based software de- velopment. Ph.D. Dissertation, Faculty of Mathematics and Computer Science, Babes-Bolyai University.
Pan, W.; Jiang, B.; and Xu, Y. 2013. Refactoring packages of object-oriented software using genetic algorithm based com- munity detection technique. Int. J. Comput. Appl. Technol. 48(3):185–194.
Развитий этого подхода я вижу два -- усложнять кластеризацию или добавлять метрики. Первое, пожалуй, совсем нам не в тему -- нам все таки нужны не кластеры, которые характеризуют код, а кластеры, характеризующие изменения в коде. А вот дополнительные метрики могут быть очень кстати, так что имеет смысл над ними подумать. - Метрики это круто. Пусть их идея буквально и не состыкуется с нашей задачей, мне нравится оригинальность их подхода, и я надеюсь, что его можно будет использовать для оценки изменений внутри методов.
from gcm.
Related Issues (20)
- [code2seq] add rnn in training pipeline HOT 1
- [merge messages] HOT 4
- [code2seq] new dataset HOT 5
- [code2seq] commits with 1, 2, 3 etc changed functions HOT 2
- [code2seq] repeat "perfect storm" HOT 3
- [scores] оценить качество данных - ранжирующая функция HOT 6
- [NMT] do not forget about this article HOT 6
- [scores] хватит смотреть в один bleu score, надо что-нибудь визуализировать, чтобы лучше понимать, что происходит HOT 2
- [dataset] гипотезы HOT 2
- [seim] выступление HOT 2
- [diploma] Текст диплома HOT 2
- [nmt-2.0] HOT 8
- [code2seq] 2 inputs HOT 2
- [dataset] анализ сообщений HOT 3
- [baseline] naive HOT 1
- [articles] metrics table HOT 3
- [baseline] naive message generation based on gumtree diff HOT 3
- [baseline] naive bayes HOT 4
- [baseline] code2seq HOT 1
- [code2seq] train on method diff until reasonable BLEU @natalymr
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gcm.