{"id":277,"date":"2015-02-22T12:18:34","date_gmt":"2015-02-22T12:18:34","guid":{"rendered":"http:\/\/codinuum.com\/en\/?p=277"},"modified":"2015-07-03T01:41:41","modified_gmt":"2015-07-03T01:41:41","slug":"saner2015","status":"publish","type":"post","link":"https:\/\/codinuum.com\/en\/publications\/saner2015.html","title":{"rendered":"A Comprehensive and Scalable Method for Analyzing Fine-Grained Source Code Change Patterns (SANER&#8217;15)"},"content":{"rendered":"<div class=\"page\" title=\"Page 1\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p>This paper presents a comprehensive method for identifying fine-grained change patterns in the source code of large-scale software projects. Source code changes are computed by differencing abstract syntax trees of adjacent versions and transferred to a set of logical statements called a <em>factbase<\/em>. A factbase contains information for tracking and relating source code entities across versions and can be used to integrate analysis results of other tools such as call graphs and control flows. Users can obtain a list of change pattern instances by querying the factbase.<!--more-->Experiments conducted on the Linux-2.6 kernel, which involve more than 4 billions of facts, are reported to demonstrate capability of the method.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2>Reference<\/h2>\n<p>Masatomo Hashimoto, Akira Mori and Tomonori Izumida. A Comprehensive and Scalable Method for Analyzing Fine-Grained Source Code Change Patterns. In <em>Proceedings of the 22nd IEEE International Conference on Software Analysis, Evolution, and Reengineering<\/em> (SANER&#8217;15), pp. 351-360, 2015.<\/p>\n<p><a title=\"A Comprehensive and Scalable Method for Analyzing Fine-Grained Source Code Change Patterns\" href=\"http:\/\/codinuum.com\/publications\/cpi-saner2015.pdf\" target=\"_blank\">Download as PDF<\/a><\/p>\n<h2>Examples of Identified Change Patterns<\/h2>\n<p>You can see a few examples of <a title=\"Identified refactoring patterns\" href=\"http:\/\/codinuum.com\/cca\/cpi\/refactoring\/linux\/\" target=\"_blank\">non-essential<\/a> and <a title=\"Identified bug fixing patterns\" href=\"http:\/\/codinuum.com\/cca\/cpi\/bugfixing\/linux\/\" target=\"_blank\">bug fixing<\/a> changes found in Linux kernel releases 2.6.18 through 2.6.39:<\/p>\n<ul>\n<li><em>local variable extraction<\/em> (also known as <em>introduce explaining variable <\/em>or<a title=\"http:\/\/refactoring.com\/catalog\/extractVariable.html\" href=\"http:\/\/refactoring.com\/catalog\/extractVariable.html\" target=\"_blank\"><em> extract variable<\/em><\/a>) and its inverse, <em><a title=\"http:\/\/refactoring.com\/catalog\/inlineTemp.html\" href=\"http:\/\/refactoring.com\/catalog\/inlineTemp.html\" target=\"_blank\">inline temp<\/a><\/em>, and<\/li>\n<li><em><a title=\"http:\/\/coccinelle.lip6.fr\/impact_linux.php\" href=\"http:\/\/coccinelle.lip6.fr\/impact_linux.php\" target=\"_blank\">move dereference to after a NULL test<\/a>.<\/em><\/li>\n<\/ul>\n<p>We recommend Chrome or Firefox for browsing the patterns, since we have not tested the viewer (based on <a title=\"http:\/\/codemirror.net\/\" href=\"http:\/\/codemirror.net\/\" target=\"_blank\">CodeMirror<\/a>) with others yet. The patterns are identified by the latest unstable version of the system, which may yield different results from the ones shown in Sections III-A and III-B.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This paper presents a comprehensive method for identifying fine-grained change patterns in the source code of large-scale software projects. Source code changes are computed by differencing abstract syntax trees of adjacent versions and transferred to a set of logical statements called a factbase. A factbase contains information for tracking and relating source code entities across [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-277","post","type-post","status-publish","format-standard","hentry","category-publications"],"_links":{"self":[{"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/posts\/277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/comments?post=277"}],"version-history":[{"count":17,"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/posts\/277\/revisions"}],"predecessor-version":[{"id":284,"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/posts\/277\/revisions\/284"}],"wp:attachment":[{"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/media?parent=277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/categories?post=277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codinuum.com\/en\/wp-json\/wp\/v2\/tags?post=277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}