On the (lack of) Empirical Validation of Delta-Oriented Programming: A Systematic Review

Abstract

Software systems change frequently over time, either due to new business requirements or technology pressures. Programming languages evolve in a similar constant fashion, though when a language release introduces new programming constructs, older constructs and idioms might become obsolete. The coexistence between newer and older constructs leads to several problems, such as increased maintenance efforts and higher learning curve for developers. In this paper we present a \rascal Java transformation library that evolves legacy systems to use more recent programming language constructs (such as multi-catch and lambda expressions). In order to understand how relevant automatic software rejuvenation is, we submitted \ntr transformations to 40 open source projects via the \github pull request mechanism. Initial results show that simple transformations, for instance the introduction of the diamond operator, are more likely to be accepted than transformations that change the code substantially, such as refactoring enhanced for loops to the newer functional style.

Tools: RJTL: Rascal Java Transformation Library

-

Pull-requests

project transformation files transfomations added removed status status02 URL X
1 flink MC 5 5 6 18 Merged ACC -
2 UltimateAndroid DI 4 6 6 6 Merged ACC -
3 zaproxy MC 8 10 11 41 Merged ACC https://github.com/zaproxy/zaproxy/pull/3600
4 jna MC 4 4 4 15 Reject (Version) RVersion https://github.com/java-native-access/jna/pull/823
5 antlr4 DI 28 60 60 60 Ignored IGN https://github.com/antlr/antlr4/pull/1896
6 processing All 10 18 20 36 Merged ACC https://github.com/processing/processing/pull/5134
7 spring-framwork Lambda 2 2 3 12 Rejected (Not Relevant) RIrrelevant https://github.com/spring-projects/spring-framework/pull/1460
8 CoreNLP Lambda 4 5 17 29 Rejected (Not Relevant) RIrrelevant https://github.com/stanfordnlp/CoreNLP/pull/527
9 apero / cas DI 1 1 1 1 Merged ACC https://github.com/apereo/cas/pull/2783
10 hazelcast DI 77 216 216 221 Rejected (Version) RVersion https://github.com/hazelcast/hazelcast/pull/10919
11 pinpoint DI 83 176 176 176 Rejected (Version) RVersion https://github.com/naver/pinpoint/pull/3150
12 jna DI 36 77 77 77 Rejected (Version) RVersion https://github.com/java-native-access/jna/pull/831
13 gephi DI 1 10 10 10 Merged ACC https://github.com/gephi/gephi/pull/1756
14 atmosphere DI 10 23 23 23 Merged ACC https://github.com/Atmosphere/atmosphere/pull/2280/files *
15 guava DI 105 226 226 259 Rejected (Version) RVersion https://github.com/google/guava/pull/2875
16 checkstyle DI 6 20 20 24 Rejected (Test Code) RIrrelevant https://github.com/checkstyle/checkstyle/pull/4774 *
17 gradle DI 365 702 702 708 Rejected (Version) RVersion https://github.com/gradle/gradle/pull/2554
18 rxJava Lambda 10 16 34 34 Rejected (Version) RVersion https://github.com/ReactiveX/RxJava/pull/5530
19 retrofit Lambda 7 7 15 17 Rejected (Version) RVersion https://github.com/square/retrofit/pull/2434
20 okhttp Lambda 10 13 26 29 Rejected (Version) RVersion https://github.com/square/okhttp/pull/3491/files
21 netty Lambda 43 61 138 135 Rejected (Version) RVersion https://github.com/netty/netty/pull/7043
22 alibaba / dubbo Lambda 10 19 82 83 Rejected (Version) RVersion https://github.com/alibaba/dubbo/pull/521
23 alibaba/fastjson Lambda 10 11 54 57 Rejected (Version) RVersion https://github.com/alibaba/fastjson/pull/1412
24 seleniumQuery Lambda 9 12 50 63 Merged ACC https://github.com/seleniumQuery/seleniumQuery/pull/178 *
25 coreNLP MC 16 35 31 96 Accepted ACC https://github.com/stanfordnlp/CoreNLP/pull/542
26 coreNLP SS 5 7 122 87 Accepted ACC https://github.com/stanfordnlp/CoreNLP/pull/543
27 coreNLP Lambda 10 11 19 83 Accepted ACC https://github.com/stanfordnlp/CoreNLP/pull/544
28 openRefine DI 29 59 59 59 Accepted ACC https://github.com/OpenRefine/OpenRefine/pull/1195
29 activiti DI 2 8 8 8 Rejected (Not Relevant) RIrrelevant https://github.com/Activiti/Activiti/pull/1215
30 seleniumQuery DI 5 8 8 8 Merged ACC https://github.com/seleniumQuery/seleniumQuery/pull/176
31 activiti DI 52 192 192 192 Merged ACC https://github.com/Activiti/Activiti/pull/1216
32 google / binavi DI 87 135 135 135 Merged ACC https://github.com/google/binnavi/pull/109
33 elasticsearch DI 18 23 23 23 Merged ACC https://github.com/elastic/elasticsearch/pull/25585
34 coreNLP DI 46 132 132 134 Accepted ACC https://github.com/stanfordnlp/CoreNLP/pull/479
35 apache/zeppelin DI 11 20 20 22 Not able to merge RIrrelevant https://github.com/apache/zeppelin/pull/2489
36 iluwatar/java-design-patterns Lambda 13 15 37 38 Accepted (Source Code Format Issue) ACC https://github.com/iluwatar/java-design-patterns/pull/604
37 Netflix/Hystrix Lambda 10 21 48 45 Rejected (Version) RVersion https://github.com/Netflix/Hystrix/pull/1657
38 kdn251/interviews Lambda 3 3 24 16 Rejected (Make the code harder to undestand) RIrrelevant https://github.com/kdn251/interviews/pull/42 *
39 deeplearning4j MC 2 2 2 10 Merged ACC https://github.com/deeplearning4j/deeplearning4j/pull/4125
40 bazelbuild/bazel SS 10 14 38 81 Reject (Source Code Format Issue) RIrrelevant ​https://github.com/bazelbuild/bazel/pull/3840
41 eclipse/vert.x VarArgs 11 20 20 20 Rejected (Not Relevant) RIrrelevant ​​https://github.com/eclipse/vert.x/pull/2152
42 prestodb/presto DI 3 4 4 4 Merged ACC https://github.com/prestodb/presto/pull/9072
43 apache/kafka Lambda 10 14 19 71 Rejected (Version) RVersion https://github.com/apache/kafka/pull/3997
44 dropwizard/dropwizard Lambda 4 4 4 26 Rejected (Not Relevant) RIrrelevant https://github.com/dropwizard/dropwizard/pull/2164
45 google / guice Lambda 12 35 60 125 Rejected (Not Relevant) RIrrelevant https://github.com/google/guice/pull/1131
project transformation files transfomations added removed status status02 URL X
1 flink MC 5 5 6 18 Merged ACC -
2 UltimateAndroid DI 4 6 6 6 Merged ACC -
3 zaproxy MC 8 10 11 41 Merged ACC https://github.com/zaproxy/zaproxy/pull/3600
4 jna MC 4 4 4 15 Reject (Version) RVersion https://github.com/java-native-access/jna/pull/823
5 antlr4 DI 28 60 60 60 Ignored IGN https://github.com/antlr/antlr4/pull/1896
6 processing All 10 18 20 36 Merged ACC https://github.com/processing/processing/pull/5134
7 spring-framwork Lambda 2 2 3 12 Rejected (Not Relevant) RIrrelevant https://github.com/spring-projects/spring-framework/pull/1460
8 CoreNLP Lambda 4 5 17 29 Rejected (Not Relevant) RIrrelevant https://github.com/stanfordnlp/CoreNLP/pull/527
9 apero / cas DI 1 1 1 1 Merged ACC https://github.com/apereo/cas/pull/2783
10 hazelcast DI 77 216 216 221 Rejected (Version) RVersion https://github.com/hazelcast/hazelcast/pull/10919
11 pinpoint DI 83 176 176 176 Rejected (Version) RVersion https://github.com/naver/pinpoint/pull/3150
12 jna DI 36 77 77 77 Rejected (Version) RVersion https://github.com/java-native-access/jna/pull/831
13 gephi DI 1 10 10 10 Merged ACC https://github.com/gephi/gephi/pull/1756
14 atmosphere DI 10 23 23 23 Merged ACC https://github.com/Atmosphere/atmosphere/pull/2280/files *
15 guava DI 105 226 226 259 Rejected (Version) RVersion https://github.com/google/guava/pull/2875
16 checkstyle DI 6 20 20 24 Rejected (Test Code) RIrrelevant https://github.com/checkstyle/checkstyle/pull/4774 *
17 gradle DI 365 702 702 708 Rejected (Version) RVersion https://github.com/gradle/gradle/pull/2554
18 rxJava Lambda 10 16 34 34 Rejected (Version) RVersion https://github.com/ReactiveX/RxJava/pull/5530
19 retrofit Lambda 7 7 15 17 Rejected (Version) RVersion https://github.com/square/retrofit/pull/2434
20 okhttp Lambda 10 13 26 29 Rejected (Version) RVersion https://github.com/square/okhttp/pull/3491/files
21 netty Lambda 43 61 138 135 Rejected (Version) RVersion https://github.com/netty/netty/pull/7043
22 alibaba / dubbo Lambda 10 19 82 83 Rejected (Version) RVersion https://github.com/alibaba/dubbo/pull/521
23 alibaba/fastjson Lambda 10 11 54 57 Rejected (Version) RVersion https://github.com/alibaba/fastjson/pull/1412
24 seleniumQuery Lambda 9 12 50 63 Merged ACC https://github.com/seleniumQuery/seleniumQuery/pull/178 *
25 coreNLP MC 16 35 31 96 Accepted ACC https://github.com/stanfordnlp/CoreNLP/pull/542
26 coreNLP SS 5 7 122 87 Accepted ACC https://github.com/stanfordnlp/CoreNLP/pull/543
27 coreNLP Lambda 10 11 19 83 Accepted ACC https://github.com/stanfordnlp/CoreNLP/pull/544
28 openRefine DI 29 59 59 59 Accepted ACC https://github.com/OpenRefine/OpenRefine/pull/1195
29 activiti DI 2 8 8 8 Rejected (Not Relevant) RIrrelevant https://github.com/Activiti/Activiti/pull/1215
30 seleniumQuery DI 5 8 8 8 Merged ACC https://github.com/seleniumQuery/seleniumQuery/pull/176
31 activiti DI 52 192 192 192 Merged ACC https://github.com/Activiti/Activiti/pull/1216
32 google / binavi DI 87 135 135 135 Merged ACC https://github.com/google/binnavi/pull/109
33 elasticsearch DI 18 23 23 23 Merged ACC https://github.com/elastic/elasticsearch/pull/25585
34 coreNLP DI 46 132 132 134 Accepted ACC https://github.com/stanfordnlp/CoreNLP/pull/479
35 apache/zeppelin DI 11 20 20 22 Not able to merge RIrrelevant https://github.com/apache/zeppelin/pull/2489
36 iluwatar/java-design-patterns Lambda 13 15 37 38 Accepted (Source Code Format Issue) ACC https://github.com/iluwatar/java-design-patterns/pull/604
37 Netflix/Hystrix Lambda 10 21 48 45 Rejected (Version) RVersion https://github.com/Netflix/Hystrix/pull/1657
38 kdn251/interviews Lambda 3 3 24 16 Rejected (Make the code harder to undestand) RIrrelevant https://github.com/kdn251/interviews/pull/42 *
39 deeplearning4j MC 2 2 2 10 Merged ACC https://github.com/deeplearning4j/deeplearning4j/pull/4125
40 bazelbuild/bazel SS 10 14 38 81 Reject (Source Code Format Issue) RIrrelevant ​https://github.com/bazelbuild/bazel/pull/3840
41 eclipse/vert.x VarArgs 11 20 20 20 Rejected (Not Relevant) RIrrelevant ​​https://github.com/eclipse/vert.x/pull/2152
42 prestodb/presto DI 3 4 4 4 Merged ACC https://github.com/prestodb/presto/pull/9072
43 apache/kafka Lambda 10 14 19 71 Rejected (Version) RVersion https://github.com/apache/kafka/pull/3997
44 dropwizard/dropwizard Lambda 4 4 4 26 Rejected (Not Relevant) RIrrelevant https://github.com/dropwizard/dropwizard/pull/2164
45 google / guice Lambda 12 35 60 125 Rejected (Not Relevant) RIrrelevant https://github.com/google/guice/pull/1131