forked from EpsilonX/MuJava
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmutantsInfo.xml
More file actions
438 lines (438 loc) · 22.3 KB
/
Copy pathmutantsInfo.xml
File metadata and controls
438 lines (438 loc) · 22.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
<?xml version="1.0" encoding="UTF-8"?>
<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:mutantsInfo.xsd" date="2017-04-12">
<mutant name="AODS"
type="MethodLevel"
isBasic="true"
shortDescription="Delete short-cut arithmetic operators"
fullDescription="Deletes every occurrence of operators ++ and --"
affectsOneLine="true"
/>
<mutant name="AODU"
type="MethodLevel"
isBasic="true"
shortDescription="Delete basic unary arithmetic operators."
fullDescription="Deletes every occurrence of the unary operator -"
affectsOneLine="true"
/>
<mutant name="AOIS"
type="MethodLevel"
isBasic="true"
shortDescription="Insert short-cut arithmetic operators."
fullDescription="Insert operators ++ and -- on each variable and field"
affectsOneLine="true"
/>
<mutant name="AOIU"
type="MethodLevel"
isBasic="true"
shortDescription="Insert basic unary arithmetic operators."
fullDescription="Insert unary operator - on each arithmetic expression
e.g : -(1+a); -1; -a; -(a.f)"
affectsOneLine="true"
/>
<mutant name="AORB"
type="MethodLevel"
isBasic="true"
shortDescription="Replace basic binary arithmetic operators with other binary arithmetic operators."
fullDescription="Replace each of the (*, /, %, +, -) operators in every binary expression with all of the others"
affectsOneLine="true"
/>
<mutant name="AORS"
type="MethodLevel"
isBasic="true"
shortDescription="Replace short-cut arithmetic operators with other unary arithmetic operators."
fullDescription="Replace each ocurrence of the operators ++ and -- with the opposite
e.g : a++ => a--; a-- => a++"
affectsOneLine="true"
/>
<mutant name="AORU"
type="MethodLevel"
isBasic="true"
shortDescription="Replace basic unary arithmetic operators with other unary arithmetic operators."
fullDescription="Replace unary operators + and - with the opposite"
affectsOneLine="true"
/>
<mutant name="ASRS"
type="MethodLevel"
isBasic="true"
shortDescription="Replace short-cut assignment operators with other short-cut operators of the same kind"
fullDescription="replace each occurrence of one of the assignment operators
(+=, -+, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=)
by each of the other operators"
affectsOneLine="true"
/>
<mutant name="COD"
type="MethodLevel"
isBasic="true"
shortDescription="Delete unary conditional operators."
fullDescription="Deletes each occurrence of the ! operator"
affectsOneLine="true"
/>
<mutant name="COI"
type="MethodLevel"
isBasic="true"
shortDescription="Insert unary conditional operators."
fullDescription="Insert ! operator on variables, literals, binary and unary expressions"
affectsOneLine="true"
/>
<mutant name="COR"
type="MethodLevel"
isBasic="true"
shortDescription="Replace binary conditional operators with other binary conditional operators."
fullDescription="Replace each of the (&&, ||, &, |, ˆ) operators by each of the other operators"
affectsOneLine="true"
/>
<mutant name="LOD"
type="MethodLevel"
isBasic="true"
shortDescription="Delete unary logical operator"
fullDescription="Deletes each occurrence of the ~ operator"
affectsOneLine="true"
/>
<mutant name="LOI"
type="MethodLevel"
isBasic="true"
shortDescription="Insert unary logical operator."
fullDescription="Insert the unary operator ~ on every arithmetic type expression"
affectsOneLine="true"
/>
<mutant name="LOR"
type="MethodLevel"
isBasic="true"
shortDescription="Replace binary logical operators with other binary logical operators"
fullDescription="Replace each occurrence of the operators (&, |, ˆ) by each of the others"
affectsOneLine="true"
/>
<mutant name="ROR"
type="MethodLevel"
isBasic="true"
shortDescription="Replace relational operators with other relational operators, and replace the entire predicate with true and false."
fullDescription="Replace each occurrence of the operators (>, >=, <, <=, ==, !=) by each of the others
it also replace binary expressions with true and false"
affectsOneLine="true"
/>
<mutant name="SOR"
type="MethodLevel"
isBasic="true"
shortDescription="Replace shift operators with other shift operators"
fullDescription="Replace each occurrence of the operators (<<, >>, >>>) by each of the others"
affectsOneLine="true"
/>
<mutant name="PRVOL"
type="MethodLevel"
isBasic="false"
shortDescription="for each x = y expression it mutates x to compatible a, b and c expressions such that |x| == |a|, |x| + 1 == |b| and |x| - 1 == |c|"
fullDescription="mutates an assignment expression x = y such that x is a list of one or more elements linked by . operator and for each element e in x,
e will be removed or replaced with a, e.b and c.d; and for each e.f in x e.f will be replaced with e and g. The resulting list must be a valid expression
and the type of the resulting list must be compatible with the type of the right hand side of the assignment."
affectsOneLine="true"
/>
<mutant name="PRVOL_SMART"
type="MethodLevel"
isBasic="false"
shortDescription="the same as PRVOL but only uses reachable variables to make mutations"
fullDescription="Same as PRVOL but when using local variables to replace elements the variables used are only the ones that are reachables from the statement being mutated"
affectsOneLine="true"
/>
<mutant name="PRVOR"
type="MethodLevel"
isBasic="false"
shortDescription="for each x = y expression it mutates y to compatible a, b and c expressions such that |y| == |a|, |y| < |b| and |y| > |c"
fullDescription="mutates an assignment expression x = y such that y is a list of one or more elements linked by . operator and for each element e in y,
e will be removed or replaced with a, e.b and c.d; and for each e.f in y e.f will be replaced with e and g. The resulting list must be a valid expression
and the type of the resulting list must be compatible with the type of the left hand side of the assignment."
affectsOneLine="true"
/>
<mutant name="PRVOR_SMART"
type="MethodLevel"
isBasic="false"
shortDescription="the same as PRVOR but only uses reachable variables to make mutations"
fullDescription="Same as PRVOR but when using local variables to replace elements the variables used are only the ones that are reachables from the statement being mutated"
affectsOneLine="true"
/>
<mutant name="PRVOR_REFINED"
type="MethodLevel"
isBasic="false"
shortDescription="the same as PRVOR_SMART but it also uses Literals found inside the method to mutate and travels within expressions visited by PRVOR to apply PRVOR_REFINED"
fullDescription="Same as PRVOR_SMART but it also uses Literals found inside the method to mutate and will inside BinaryExpressions, UnaryExpressions, MethodCall arguments, ArrayAccess index expression"
affectsOneLine="true"
/>
<mutant name="PRVOU"
type="MethodLevel"
isBasic="false"
shortDescription="for each return x and variable declarator with x as initializer it mutates x to compatible a, b and c expressions such that |x| == |a|, |x| < |b| and |x| > |c|"
fullDescription="mutates a return expression return x such that x is a list of one or more elements linked by . operator and for each element e in x,
e will be removed or replaced with a, e.b and c.d; and for each e.f in x e.f will be replaced with e and g. The resulting list must be a valid expression
and the type of the resulting list must be compatible with the return type of the method."
affectsOneLine="true"
/>
<mutant name="PRVOU_SMART"
type="MethodLevel"
isBasic="false"
shortDescription="the same as PRVOU but only uses reachable variables to make mutations"
fullDescription="Same as PRVOU but when using local variables to replace elements the variables used are only the ones that are reachables from the statement being mutated"
affectsOneLine="true"
/>
<mutant name="PRVOU_REFINED"
type="MethodLevel"
isBasic="false"
shortDescription="the same as PRVOU_SMART but it also uses Literals found inside the method to mutate and travels within expressions visited by PRVOU (incuding if, while and for initialization (only if initialization declares a new variable)) to apply PRVOU_REFINED"
fullDescription="Same as PRVOU_SMART but it also uses Literals found inside the method to mutate and will inside BinaryExpressions, UnaryExpressions, MethodCall arguments, ArrayAccess index expression"
affectsOneLine="true"
/>
<mutant name="AMC"
type="ClassLevel"
isBasic="false"
shortDescription="changes the access modifier of methods and class fields"
fullDescription="replace (public|private|protected|<none>) access modifiers of methods and class fields with all of the others"
affectsOneLine="true"
/>
<mutant name="IHI"
type="ClassLevel"
isBasic="false"
shortDescription="hide inherited fields"
fullDescription="add all inherited public fields and all inherited protected fields that are used in the class to mutate"
affectsOneLine="false"
/>
<mutant name="EMM"
type="MethodLevel"
isBasic="false"
shortDescription="change a setter for anothe setter"
fullDescription="change a setter with all other setters whos parameters are compatible with the original"
affectsOneLine="true"
/>
<mutant name="EOA"
type="MethodLevel"
isBasic="false"
shortDescription="replace e1 = e2 with e1 = (e2).clone()"
fullDescription="replace right hand expression (e) on AssignmentExpression and VariableDeclarator with (e).clone() only if e have a declared clone() method other than Object#clone(), it also add cast if needed"
affectsOneLine="true"
/>
<mutant name="EOA_DUMB"
type="MethodLevel"
isBasic="false"
shortDescription="replace e1 = e2 with e1 = (e2).clone()"
fullDescription="replace right hand expression (e) on AssignmentExpression and VariableDeclarator with (e).clone()"
affectsOneLine="true"
/>
<mutant name="EOA_STRICT"
type="MethodLevel"
isBasic="false"
shortDescription="replace e1 = e2 with e1 = (e2).clone()"
fullDescription="replace right hand expression (e) on AssignmentExpression and VariableDeclarator with (e).clone() only if e have a declared clone() method other than Object#clone() and e.clone() must be of the same type as the left hand side of the assignment"
affectsOneLine="true"
/>
<mutant name="EOC"
type="MethodLevel"
isBasic="false"
shortDescription="change == for equals"
fullDescription="replace any expression e1 == e2 for e1.equals(e2) where e1 is not primitive and have equals method"
affectsOneLine="true"
/>
<mutant name="IHD"
type="ClassLevel"
isBasic="false"
shortDescription="unhide inherited fields"
fullDescription="delete all fields that are inherited"
affectsOneLine="false"
/>
<mutant name="IPC"
type="MethodLevel"
isBasic="false"
shortDescription="deletes super constructor invocations"
fullDescription="On ConstructorDeclararions, if there's a super ConstructorInvocations with one or more parameters then this invocation is deleted"
affectsOneLine="false"
/>
<mutant name="ISI"
type="MethodLevel"
isBasic="false"
shortDescription="adds super to Variable, FieldAccess and MethodCall, without doing any checks"
fullDescription="for every (Variable, FieldAccess and MethodCall) this will add super infront"
affectsOneLine="true"
/>
<mutant name="ISI_SMART"
type="MethodLevel"
isBasic="false"
shortDescription="adds super to Variable, FieldAccess and MethodCall"
fullDescription="for every (Variable, FieldAccess and MethodCall) this will add super infront when valid"
affectsOneLine="true"
/>
<mutant name="ISD"
type="MethodLevel"
isBasic="false"
shortDescription="deletes each occurrence of super on field and method calls"
fullDescription="for every expression super.x it mutates to x, even if x is not visible (for example there's no x variable)"
affectsOneLine="true"
/>
<mutant name="ISD_SMART"
type="MethodLevel"
isBasic="false"
shortDescription="ISD but only deletes super when the remaining expression is valid"
fullDescription="for each expression super.x, if x exists on it's own then it mutates to x"
affectsOneLine="true"
/>
<mutant name="EAM"
type="MethodLevel"
isBasic="false"
shortDescription="replace a getter with another one"
fullDescription="mutates every getXYZ(params) with every other getYWZ(params') such that the return types are compatibles and params is compatible with params'"
affectsOneLine="true"
/>
<mutant name="IOD"
type="ClassLevel"
isBasic="false"
shortDescription="Deletes overriding methods"
fullDescription="Deletes each method that overrides a parent method declaration"
affectsOneLine="false"
/>
<mutant name="IOP"
type="MethodLevel"
isBasic="false"
shortDescription="moves calls to a parent method inside the overriding child method"
fullDescription="for every super.method call inside overriding method's block moves super.method call to first and last line and to previous and next line"
affectsOneLine="false"
/>
<mutant name="JDC"
type="ClassLevel"
isBasic="false"
shortDescription="deletes constructors default constructor"
fullDescription="if a class have a constructor with no parameters then this will remove that constructor"
affectsOneLine="false"
/>
<mutant name="JID"
type="ClassLevel"
isBasic="false"
shortDescription="removes class fields initializers"
fullDescription="for every field f = X it mutates to f only if it doesn't have the final modifier"
affectsOneLine="true"
/>
<mutant name="JSD"
type="ClassLevel"
isBasic="false"
shortDescription="deletes static modifier"
fullDescription="mutates field and method declarations so that if they are static the mutants are not"
affectsOneLine="true"
/>
<mutant name="JSI"
type="ClassLevel"
isBasic="false"
shortDescription="insert static modifier"
fullDescription="mutates field and method declarations so that if they are not static the mutants are"
affectsOneLine="true"
/>
<mutant name="JTD"
type="MethodLevel"
isBasic="false"
shortDescription="deletes this"
fullDescription="mutates every this.x expression to x"
affectsOneLine="true"
/>
<mutant name="JTI"
type="MethodLevel"
isBasic="false"
shortDescription="inserts this before variables"
fullDescription="mutates a var to this.var"
affectsOneLine="true"
/>
<mutant name="JTI_SMART"
type="MethodLevel"
isBasic="false"
shortDescription="inserts this before variables only if there's a field with the same name and type"
fullDescription="mutates a var to this.var only if there's a reachable field with the same name and type as var"
affectsOneLine="true"
/>
<mutant name="OAN"
type="MethodLevel"
isBasic="false"
shortDescription="replace method calls with overriding method calls with compatible arguments, using strict type comparison"
fullDescription="replace f(args) with f(args') such that args is (args', xs), each argument in args' is the same type as the corresponding one in args"
affectsOneLine="true"
/>
<mutant name="OAN_RELAXED"
type="MethodLevel"
isBasic="false"
shortDescription="replace method calls with overriding method calls with compatible arguments"
fullDescription="replace f(args) with f(args') such that args is (args', xs), each argument in args' has a type compatible with the corresponding one in args"
affectsOneLine="true"
/>
<mutant name="PCC"
type="ClassAndMethodLevel"
isBasic="false"
shortDescription="Mutates a cast to use the superclass of the original type"
fullDescription="Mutates (T) exp to (T') exp where T' is the direct superclass of T"
affectsOneLine="true"
developerNotes="Could be used to modify initializers of class atributes"
/>
<mutant name="PCD"
type="ClassAndMethodLevel"
isBasic="false"
shortDescription="Deletes cast on expressions"
fullDescription='mutates "(T) exp" to "exp" '
affectsOneLine="true"
developerNotes="Could be used to modify initializers of class atributes"
/>
<mutant name="PCI"
type="ClassAndMethodLevel"
isBasic="false"
shortDescription="Add a cast to object references"
fullDescription="given an object reference o this will generate (P)o and (C)o where P is a Parent class of o and C is a Child class of o"
affectsOneLine="true"
developerNotes="Could be used to modify initializers of class atributes"
/>
<mutant name="PMD"
type="ClassAndMethodLevel"
isBasic="false"
shortDescription="change type of variables and fields to the parents type"
fullDescription="mutates T a in variables and fields to P a where T inherits from P"
affectsOneLine="true"
/>
<mutant name="PNC"
type="ClassAndMethodLevel"
isBasic="false"
shortDescription="changes an allocation expression to use the Childs constructor"
fullDescription="given an allocation expression Parent o = new Parent(args) this generates Parent o = new Child(args)"
affectsOneLine="true"
/>
<mutant name="OMR"
type="ClassLevel"
isBasic="false"
shortDescription="change the body of a method with the body of another with the same name"
fullDescription="mutates <modifiers> <return type> m(<params>) <body> with <modifiers> <return type> m(<params>) <body'> such that body' belongs to another method named m"
affectsOneLine="false"
></mutant>
<mutant name="PPD"
type="ClassLevel"
isBasic="false"
shortDescription="change type of method parameters to the parents type"
fullDescription="mutates T a in methods parameters to P a where T inherits from P"
affectsOneLine="true"
/><mutant name="NPER" type="MethodLevel" isBasic="false"
shortDescription="repairs NullPointerExceptions"
fullDescription="Adds try catch to code that produce NullPointerException (this operator was produces as a task in an ECI course)"
affectsOneLine="false">
</mutant>
<mutant name="BEE" type="MethodLevel" isBasic="false"
shortDescription="Boolean Expression Extender"
fullDescription="recursively adds op E to any boolean expression (Variable, FieldAccess, MethodCall, UnaryExpression, BinaryExpression)"
affectsOneLine="true">
</mutant>
<mutant name="CRCR" type="MethodLevel" isBasic="false"
shortDescription="CRCR operator from PIT (rv)"
fullDescription="from a constant c generates 1, 0, -1, -c, c + 1, and c - 1"
affectsOneLine="true">
</mutant>
<mutant name="IC" type="MethodLevel" isBasic="false"
shortDescription="IC operator from PIT (rv)"
fullDescription="for boolean : replace the unmutated value true with false and replace the unmutated value false with true; for integer, byte, and short: replace the unmutated value 1 with 0, -1 with 1, 5 with -1 or otherwise increment the unmutated value by one.; for long: replace the unmutated value 1 with 0, otherwise increment the unmutated value by one.; for float: replace the unmutated values 1.0 and 2.0 with 0.0 and replace any other value with 1.0; and for double: replace the unmutated value 1.0 with 0.0 and replace any other value with 1.0"
affectsOneLine="true">
</mutant>
<mutant name="LVR" type="MethodLevel" isBasic="false"
shortDescription="LVR operator from major" fullDescription="Replace a literal numeric value by 1, 0, and -1; replaces a string with an empty string; and replaces true and false for eachother"
affectsOneLine="true">
</mutant>
<mutant name="AOD" type="MethodLevel" isBasic="false"
shortDescription="AOD operator from PIT"
fullDescription="Replaces an arithmetic binary operation with one of its members"
affectsOneLine="true">
</mutant>
</info>