SlideShare une entreprise Scribd logo
1  sur  133
Télécharger pour lire hors ligne
1
The CI as a partner for test improvement suggestions
Benoit Baudry
Project Coordinator and Scientific Leader
KTH, Sweden
Caroline Landry
Project Technical Manager
INRIA, France
19-Apr-2019
This work was partially supported by the EU Project
STAMP ICT-16-10 No.731529
•4 research institutions
•5 companies
•1 open source
consortium
•Automated Testing in
DevOps
DevOps
3
DevOps
4
• Better quality
DevOps
5
• Better quality
• Shorter release cycles
DevOps
6
• Better quality
• Shorter release cycles
• Reconnect Ops to Dev
DevOps
7
Automation• Better quality
• Shorter release cycles
• Reconnect Ops to Dev
DevOps
8
Step acceptance & Feedback
Automation• Better quality
• Shorter release cycles
• Reconnect Ops to Dev
DevOps
9
DevOps
10
CI
DevOps
11
IDEs
CI
completion linter
DevOps
12
unit
perf.
UI
IDEs
CI
completion linter
DevOps
13
unit
perf.
UI
Config.
IDEs
CI
completion linter
DevOps
14
unit
perf.
fuzzing
UI
Config.
IDEs
CI
completion linter
coverage
mutation
DevOps
15
unit
perf.
fuzzing
UI
Config.
IDEs
CI
completion linter
coverage
mutation
CD
DevOps
16
unit
perf.
fuzzing
UI
chaos
A/B testing
Config.
IDEs
CI
completion linter
coverage
mutation
CD
DevOps
17
unit
perf.
fuzzing
UI
chaos
Logs
analysis
A/B testing
Config.
IDEs
CI
completion linter
coverage
mutation Crash
analysis
CD
DevOps
18
unit
perf.
fuzzing
UI
chaos
Logs
analysis
A/B testing
Config.
IDEs
Continuous testing
CI
completion linter
coverage
mutation Crash
analysis
CD
19
STAMP’s concept: amplification
 Amplify (v.): to increase the size or effect of
something
https://dictionary.cambridge.org/dictionary/english/amplify 20
STAMP’s concept: amplification
 Amplify (v.): to increase the size or effect of
something
 Test amplification: Increase the effect of test assets
21https://dictionary.cambridge.org/dictionary/english/amplify
STAMP’s concept: amplification
 Amplify (v.): to increase the size or effect of
something
 Test amplification: Increase the effect of test assets
 Test assets: test cases, configuration files, production logs
 Effect metrics: mutation score, feature interactions
 Automatic amplification
22https://dictionary.cambridge.org/dictionary/english/amplify
DevOps – STAMP focus
23
DevOps – STAMP focus
24
DevOps – STAMP focus
25
DevOps – STAMP focus
26
Unit test amplification
27
Descartes
Test Your Tests
•What do you expect from test cases?
28
Test Your Tests
•What do you expect from test cases?
• Cover requirements
• Code coverage
• Stress the application
• Reveal bugs
29
Test Your Tests
•What do you expect from test cases?
• Cover requirements
• Code coverage
• Stress the application
• Reveal bugs
30
Example
31
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
Example
32
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
Coverage
Example
33
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
Coverage
Example
34
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
@Test
factorialWith0Test() {
assertEqual(fact(0), 1);
}
Coverage
Example
35
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
Coverage
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
@Test
factorialWith0Test() {
assertEqual(fact(0), 1);
}
Is these test suite good at
detecting bugs?
Example
36
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
Coverage
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
@Test
factorialWith0Test() {
assertEqual(fact(0), 1);
}
Is these test suite good at
detecting bugs?
Let’s mutate our code to see.
Mutation Analysis
37
Mutation Analysis
38
inject fault
Mutant 1
Mutation Analysis
39
inject fault
Mutant 1
Run
Mutation Analysis
40
inject fault
Mutant 1
Run ✗ Mutant 1
Mutation Analysis
41
inject fault
Mutant 1
Run ✗ Mutant 1
Killed

Mutation Analysis
42
inject fault
Mutant 1
Mutant 2
Run ✗ Mutant 1
Killed

Mutation Analysis
43
inject fault
Mutant 1
Mutant 2
Run ✗ Mutant 1
Killed

Mutation Analysis
44
inject fault
Mutant 1
Mutant 2
Run ✗
✗
Mutant 1
Mutant 2
Killed

Mutation Analysis
45
inject fault
Mutant 1
Mutant 2
Run ✗
✗
Mutant 1
Mutant 2
Killed

Killed

Mutation Analysis
46
inject fault
Mutant 1
Mutant 2
Mutant 3
Run ✗
✗
Mutant 1
Mutant 2
Killed

Killed

Mutation Analysis
47
inject fault
Mutant 1
Mutant 2
Mutant 3
Run ✗
✗
Mutant 1
Mutant 2
Killed

Killed

Mutation Analysis
48
inject fault
Mutant 1
Mutant 2
Mutant 3
Run ✗
✓
✗
Mutant 1
Mutant 2
Mutant 3
Killed

Killed

Mutation Analysis
49
inject fault
Mutant 1
Mutant 2
Mutant 3
Run ✗
✓
✗
Mutant 1
Mutant 2
Mutant 3
Killed

Alive

Killed

Mutation Analysis
50
inject fault
Mutant 1
Mutant 2
Mutant 3
Run ✗
✓
✗
 Mutation score
Mutant 1
Mutant 2
Mutant 3
Killed

Alive

Killed

Example
51
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
@Test
factorialWith0Test() {
assertEqual(fact(0), 1);
}
long fact(int n) {
if (n != 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
Example
52
✗
✓
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
@Test
factorialWith0Test() {
assertEqual(fact(0), 1);
}
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
Example
53
n!=0
return 1+1
i < n
!(i<=n)
i--
result/i
result+1
Example
54
n!=0
return 1+1
i < n
!(i<=n)
i--
result/i
result+1
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
Example
55
n!=0
return 1+1
i < n
!(i<=n)
i--
result/i
result+1
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
@Test
factorialWith0Test() {
assertEqual(fact(0), 1);
}
Example
56
n!=0
return 1+1
i < n
!(i<=n)
i--
result/i
result+1
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
@Test
factorialWith0Test() {
assertEqual(fact(0), 1);
}
Example
57
 Mutation score = 71%
Test suite:
• Weak oracle
• Missing input
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
@Test
factorialWith0Test() {
assertEqual(fact(0), 1);
}
Example
58
n!=0
return 1+1
i < n
!(i<=n)
i--
result/i
result+1
@Test
factorialWith5Test() {
assertEqual(fact(5),120);
}
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
@Test
factorialWith5Test() {
long obs = fact(5);
assertTrue(obs > 5);
}
@Test
factorialWith0Test() {
assertEqual(fact(0), 1);
}
Mutation Analysis
•Tests are good if they can detect bugs
•Mutation operators
• Based on common faults
•PIT or PITest
• Open source, in active development and production ready
• Integrates with major build systems
• State of the art mutation testing
• Extensible via plugins
• Concurrent execution
• Test selection
59
Limitations of mutation testing
•Expensive computation
•Huge number of mutants
•Presence of equivalent mutants
Limitations of mutation testing
•Expensive computation
•Huge number of mutants
•Presence of equivalent mutants
 Extreme Mutation
Extreme mutation
•Proposed in 2016 by Niedermayr et al.
•Remove the body of the method
•Replace by a single return
•Less mutants
•Most equivalent mutants can be detected
62
R. Niedermayr, E. Juergens, and S. Wagner, “Will my tests tell me if I break this code?,” in Proceedings of the International Workshop on Continuous
Software Evolution and Delivery, 2016, pp. 23–29.
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
Example
63
n!=0
return 1+1
i < n
!(i<=n)
i--
result/i
result+1
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
Example
64
n!=0
return 1+1
i < n
!(i<=n)
i--
result/i
result+1
long fact(int n) {
if (n == 0) {
return 1;
}
long result = 1;
for (int i = 2; i <= n; i++) {
result = result * i;
}
return result;
}
long fact(int n) {
return 0;
}
long fact(int n) {
return 1;
}
Example
65
Descartes I mutate therefore I am
• A mutation engine for PIT
• Implement extreme mutation
• Compute code coverage & mutation score
• Identify weaknesses in your tests
• Find pseudo-tested methods
Pseudo-tested methods
•A method executed by the test suite
•No extreme mutation is detected
•Found in well tested projects
class SingletonListIterator
implements Iterator<Node> {
...
void add() {
throw
new
UnsupportedOperationException();
}
...
}
A pseudo-tested method
68
Apache Commons Collections
A pseudo-tested method
69
class SingletonListIterator
implements Iterator<Node> {
...
void add() {
throw
new
UnsupportedOperationException();
}
...
}
@Test
void testAdd() {
SingletonListIterator it = ...;
try {
it.add(value);
}
catch(Exception ex) {}
}
Apache Commons Collections
class SingletonListIterator
implements Iterator<Node> {
...
void add() {
throw
new
UnsupportedOperationException();
}
...
}
A pseudo-tested method
70
Pseudo-tested
@Test
void testAdd() {
SingletonListIterator it = ...;
try {
it.add(value);
}
catch(Exception ex) {}
}
Apache Commons Collections
class SingletonListIterator
implements Iterator<Node> {
...
void add() {
throw
new
UnsupportedOperationException();
}
...
}
A pseudo-tested method
71
No exception is thrown
A fail is needed here
Pseudo-tested
@Test
void testAdd() {
SingletonListIterator it = ...;
try {
it.add(value);
}
catch(Exception ex) {}
}
Apache Commons Collections
public class VersionedSet {
private long version = 0;
private ArrayList elements = new ArrayList();
public void add(Object item) {
if (! elements.contains(item)) {
elements.add(item);
incrementVersion();
}
}
private void incrementVersion() { version++; }
}
A pseudo-tested method (2)
72
public class VersionedSet {
private long version = 0;
private ArrayList elements = new ArrayList();
public void add(Object item) {
if (! elements.contains(item)) {
elements.add(item);
incrementVersion();
}
}
private void incrementVersion() { version++; }
}
A pseudo-tested method (2)
73
@Test
public void testAdd() {
VersionedSet list = new VersionedSet();
list.add(1);
assertEquals(list.size(), 1);
}
public class VersionedSet {
private long version = 0;
private ArrayList elements = new ArrayList();
public void add(Object item) {
if (! elements.contains(item)) {
elements.add(item);
incrementVersion();
}
}
private void incrementVersion() { version++; }
}
A pseudo-tested method (2)
74
@Test
public void testAdd() {
VersionedSet list = new VersionedSet();
list.add(1);
assertEquals(list.size(), 1);
}
Pseudo-tested
public class VersionedSet {
private long version = 0;
private ArrayList elements = new ArrayList();
public void add(Object item) {
if (! elements.contains(item)) {
elements.add(item);
incrementVersion();
}
}
private void incrementVersion() { version++; }
}
A pseudo-tested method (2)
75
@Test
public void testAdd() {
VersionedSet list = new VersionedSet();
list.add(1);
assertEquals(list.size(), 1);
}
Pseudo-tested
Testability issue
Descartes reports
76
Descartes reports
77
Descartes reports
78
Descartes reports
79
Descartes results
80
Unit test amplification
81
Descartes
Unit test amplification
82
Descartes &
DSpot
DSpot
•Automatically enhances existing JUnit test suites
•Generate new assertions or new test cases
83
Dspot principle
84
x
Dspot principle
85
Test criterion
x
Dspot principle
86
Test criterion
(Mutation score)
x
Dspot principle
87
Test criterion
(Mutation score)
x
Dspot principle
88
Test criterion
(Mutation score)
x
Dspot principle
89
Test criterion
(Mutation score)
Dspot – How does it work ?
90
Dspot – How does it work ?
91
Mutation
Analysis
✗
✓
✗
✗
✓
Dspot – How does it work ?
92
Amplified
Test 1
Mutation
Analysis
✗
✓
✗
✗
✓
amplify
93
@Test
public void html() {
Food kouignAmann = new Food("KouignAmann");
PhD benjamin = new PhD("Benjamin");
benjamin.eat(kouignAmann);
assertFalse(benjamin.isHungry());
}
Example
Original
test case
94
@Test
public void html() {
Food kouignAmann = new Food("KouignAmann");
PhD benjamin = new PhD("Benjamin");
benjamin.eat(kouignAmann);
assertFalse(benjamin.isHungry());
}
Example
Original
test case
Remove a method call
95
@Test
public void html() {
Food kouignAmann = new Food("KouignAmann");
PhD benjamin = new PhD("Benjamin");
assertFalse(benjamin.isHungry());
}
Example
Original
test case
Remove existing assertions
Remove a method call
96
@Test
public void html() {
Food kouignAmann = new Food("KouignAmann");
PhD benjamin = new PhD("Benjamin");
benjamin.isHungry();
Log.log(benjamin, id : "benjamin");
}
Example
Original
test case
Instrument the test
97
@Test
public void html() {
Food kouignAmann = new Food("KouignAmann");
PhD benjamin = new PhD("Benjamin");
benjamin.isHungry();
Log.log(benjamin, id : "benjamin");
}
Example
Original
test case
Instrument the test
Run the
instrumented test
benjamin.isHungry()true
benjamin.isHappy()false
98
@Test
public void html() {
Food kouignAmann = new Food("KouignAmann");
PhD benjamin = new PhD("Benjamin");
benjamin.isHungry();
Log.log(benjamin, id : "benjamin");
}
Example
Original
test case
Instrument the test
Run the
instrumented test
benjamin.isHungry()true
benjamin.isHappy()false
99
@Test
public void html() {
Food kouignAmann = new Food("KouignAmann");
PhD benjamin = new PhD("Benjamin");
benjamin.isHungry();
Log.log(benjamin, id : "benjamin");
}
Example
Original
test case
Instrument the test
Run the
instrumented test
assertTrue(benjamin.isHungry());
assertFalse(benjamin.isHappy());Generate assertions
@Test
public void html() {
Food kouignAmann = new Food("KouignAmann");
PhD benjamin = new PhD("Benjamin");
assertTrue(benjamin.isHungry());
assertFalse(benjamin.isHappy());
} 100
Example
Original
test case
Amplified
test case
@Test
public void html() {
Food kouignAmann = new Food("KouignAmann");
PhD benjamin = new PhD("Benjamin");
benjamin.eat(kouignAmann);
assertFalse(benjamin.isHungry());
}
Dspot – How does it work ?
101
Amplified
Test 1
Mutation
Analysis
✗
✓
✗
✗
✓
amplify
Dspot – How does it work ?
102
Amplified
Test 1
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✓
amplify
Dspot – How does it work ?
103
Amplified
Test 1
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✓
amplify
Dspot – How does it work ?
104
Amplified
Test 1
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✓
amplify
Dspot – How does it work ?
105
Amplified
Test 1
Amplified
Test 2
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✓
amplify
Dspot – How does it work ?
106
Amplified
Test 1
Amplified
Test 2
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✓ ✓
✓
✓
✗
✓
amplify
Dspot – How does it work ?
107
Amplified
Test 1
Amplified
Test 2
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✓ ✓
✓
✓
✗
✓
amplify
Dspot – How does it work ?
108
Amplified
Test 1
Amplified
Test 2
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✓ ✓
✓
✓
✗
✓
amplify
Dspot – How does it work ?
109
Amplified
Test 1
Amplified
Test 2
Amplified
Test 3
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✓ ✓
✓
✓
✗
✓
amplify
Dspot – How does it work ?
110
Amplified
Test 1
Amplified
Test 2
Amplified
Test 3
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✗
✓
✗
✗
✓
✓ ✓
✓
✓
✗
✓
amplify
Dspot – How does it work ?
111
Amplified
Test 1
Amplified
Test 2
Amplified
Test 3
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✗
✓
✗
✗
✓
✓ ✓
✓
✓
✗
✓
amplify
Dspot – How does it work ?
112
Amplified
Test 1
Amplified
Test 2
Amplified
Test 3
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✗
✓
✗
✗
✓
✓ ✓
✓
✓
✗
✓
amplify
Dspot – How does it work ?
113
Amplified
Test 1
Amplified
Test 2
Amplified
Test 3
Mutation
Analysis
✗
✓
✗
✗
✓
✗
✓
✗
✓
✗
✓
✗
✗
✓
✓ ✓
✓
✓
✗
✓
✗
✗
✗
✗
✗
amplify
114
DSpot
Automatic Test Improvement with DSpot: a Study with Ten Mature Open-Source Projects. B. Danglot, O. Luis Vera-Pérez, B. Baudry, M. Monperrus. Submitted to EMSE.
The pull request loop
Collaborative
platform
115
The pull request loop
Collaborative
platformpull req.
116
The pull request loop
Collaborative
platformpull req.
code
117
The pull request loop
Collaborative
platformpull req.
code
analysesfeedback
118
The pull request loop
Collaborative
platformpull req.
code
analysesfeedback
119
The pull request loop
pull req.
code
analysesfeedback
120
The pull request loop
Collaborative
platformpull req.
code
analysesfeedback
121
The pull request loop
Collaborative
platformpull req.
code
analysesfeedback
122
Novel analyses
The pull request loop
Collaborative
platformpull req.
code
analysesfeedback
123
Novel analyses
Integration
•Command line
•Eclipse plugins
•Maven plugins
•Gradle plugins
The pull request loop
Collaborative
platformpull req.
code
analysesfeedback
125
Novel analyses
The pull request loop
Collaborative
platformpull req.
code
analysesfeedback
126
Novel analyses
Integration
•Jenkins
• Plugin to monitor score and pseudo-tested methods
• Xwiki
• Same strategy used with the code coverage
• Threshold on the mutation score
• https://massol.myxwiki.org/xwiki/bin/view/Blog/MutationTestingDescar
tes
The pull request loop
Collaborative
platformpull req.
code
analysesfeedback
128
Novel analyses
The pull request loop
Collaborative
platformpull req.
code
analysesfeedback
129
Novel analyses
Integration
•In the CI as a service
• GitHub Application
• Find pseudo-tested methods in pull-requests
• Feedback using GitHub Check Runs API
More
•Open Source tools
• https://github.com/STAMP-project
•Public website
• https://www.stamp-project.eu
•Medium on Descartes
• https://medium.com/@almyre/short-circuiting-method-
executions-to-assess-test-quality-2d3fda45bc7f
•Publications
• https://www.stamp-project.eu/view/main/publications
131
Contacts
https://github.com/STAMP-project/
http://stamp-project.eu/
baudry@kth.se
caroline.landry@inria.fr
http://www.diverse-team.fr/
barais@irisa.fr
132
133

Contenu connexe

Tendances

C# Advanced L04-Threading
C# Advanced L04-ThreadingC# Advanced L04-Threading
C# Advanced L04-ThreadingMohammad Shaker
 
Mutation Testing: Start Hunting The Bugs
Mutation Testing: Start Hunting The BugsMutation Testing: Start Hunting The Bugs
Mutation Testing: Start Hunting The BugsAri Waller
 
GeeCON - Improve your tests with Mutation Testing
GeeCON - Improve your tests with Mutation TestingGeeCON - Improve your tests with Mutation Testing
GeeCON - Improve your tests with Mutation TestingNicolas Fränkel
 
Integrating Erlang and Java
Integrating Erlang and Java Integrating Erlang and Java
Integrating Erlang and Java Dennis Byrne
 
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...Victoria Schiffer
 
Unit Testing Standards - Recommended Best Practices
Unit Testing Standards - Recommended Best PracticesUnit Testing Standards - Recommended Best Practices
Unit Testing Standards - Recommended Best PracticesVitaliy Kulikov
 
Investigating the Quality Aspects of Crowd-Sourced Developer Forum: A Case St...
Investigating the Quality Aspects of Crowd-Sourced Developer Forum: A Case St...Investigating the Quality Aspects of Crowd-Sourced Developer Forum: A Case St...
Investigating the Quality Aspects of Crowd-Sourced Developer Forum: A Case St...University of Saskatchewan
 
OWF12/PAUG Conf Days Pro guard optimizer and obfuscator for android, eric l...
OWF12/PAUG Conf Days Pro guard   optimizer and obfuscator for android, eric l...OWF12/PAUG Conf Days Pro guard   optimizer and obfuscator for android, eric l...
OWF12/PAUG Conf Days Pro guard optimizer and obfuscator for android, eric l...Paris Open Source Summit
 
Make Testing Groovy
Make Testing GroovyMake Testing Groovy
Make Testing GroovyPaul King
 

Tendances (11)

C# Advanced L04-Threading
C# Advanced L04-ThreadingC# Advanced L04-Threading
C# Advanced L04-Threading
 
Mutation Testing: Start Hunting The Bugs
Mutation Testing: Start Hunting The BugsMutation Testing: Start Hunting The Bugs
Mutation Testing: Start Hunting The Bugs
 
TDD Hands-on
TDD Hands-onTDD Hands-on
TDD Hands-on
 
GeeCON - Improve your tests with Mutation Testing
GeeCON - Improve your tests with Mutation TestingGeeCON - Improve your tests with Mutation Testing
GeeCON - Improve your tests with Mutation Testing
 
Integrating Erlang and Java
Integrating Erlang and Java Integrating Erlang and Java
Integrating Erlang and Java
 
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
 
Unit Testing Standards - Recommended Best Practices
Unit Testing Standards - Recommended Best PracticesUnit Testing Standards - Recommended Best Practices
Unit Testing Standards - Recommended Best Practices
 
Investigating the Quality Aspects of Crowd-Sourced Developer Forum: A Case St...
Investigating the Quality Aspects of Crowd-Sourced Developer Forum: A Case St...Investigating the Quality Aspects of Crowd-Sourced Developer Forum: A Case St...
Investigating the Quality Aspects of Crowd-Sourced Developer Forum: A Case St...
 
OWF12/PAUG Conf Days Pro guard optimizer and obfuscator for android, eric l...
OWF12/PAUG Conf Days Pro guard   optimizer and obfuscator for android, eric l...OWF12/PAUG Conf Days Pro guard   optimizer and obfuscator for android, eric l...
OWF12/PAUG Conf Days Pro guard optimizer and obfuscator for android, eric l...
 
Make Testing Groovy
Make Testing GroovyMake Testing Groovy
Make Testing Groovy
 
Lect04
Lect04Lect04
Lect04
 

Similaire à The CI as a partner for test improvement suggestions

Mutate and Test your Tests
Mutate and Test your TestsMutate and Test your Tests
Mutate and Test your TestsSTAMP Project
 
Mutate and Test your Tests with STAMP, Caroline Landry, Inria, Paris Open Sou...
Mutate and Test your Tests with STAMP, Caroline Landry, Inria, Paris Open Sou...Mutate and Test your Tests with STAMP, Caroline Landry, Inria, Paris Open Sou...
Mutate and Test your Tests with STAMP, Caroline Landry, Inria, Paris Open Sou...STAMP Project
 
Mutation Testing: Leaving the Stone Age. FOSDEM 2017
Mutation Testing: Leaving the Stone Age. FOSDEM 2017Mutation Testing: Leaving the Stone Age. FOSDEM 2017
Mutation Testing: Leaving the Stone Age. FOSDEM 2017Alex Denisov
 
Modularity for Accurate Static Analysis of Smart Contracts
Modularity for Accurate Static Analysis of Smart ContractsModularity for Accurate Static Analysis of Smart Contracts
Modularity for Accurate Static Analysis of Smart ContractsFacultad de Informática UCM
 
DSR Testing (Part 1)
DSR Testing (Part 1)DSR Testing (Part 1)
DSR Testing (Part 1)Steve Upton
 
Must.kill.mutants. TopConf Tallinn 2016
Must.kill.mutants. TopConf Tallinn 2016Must.kill.mutants. TopConf Tallinn 2016
Must.kill.mutants. TopConf Tallinn 2016Gerald Muecke
 
NIO-ICSE2022.pptx
NIO-ICSE2022.pptxNIO-ICSE2022.pptx
NIO-ICSE2022.pptxDavidWei89
 
Mutation testing
Mutation testingMutation testing
Mutation testing기영 이
 
Facts about multithreading that'll keep you up at night - Guy Bar on, Vonage
Facts about multithreading that'll keep you up at night - Guy Bar on, VonageFacts about multithreading that'll keep you up at night - Guy Bar on, Vonage
Facts about multithreading that'll keep you up at night - Guy Bar on, VonageCodemotion Tel Aviv
 
White-box Unit Test Generation with Microsoft IntelliTest
White-box Unit Test Generation with Microsoft IntelliTestWhite-box Unit Test Generation with Microsoft IntelliTest
White-box Unit Test Generation with Microsoft IntelliTestDávid Honfi
 
ALE2014 let tests drive or let dijkstra derive
ALE2014 let tests drive or let dijkstra deriveALE2014 let tests drive or let dijkstra derive
ALE2014 let tests drive or let dijkstra deriveSanderSlideShare
 
Test drivendevelopment onstage demo
Test drivendevelopment   onstage demoTest drivendevelopment   onstage demo
Test drivendevelopment onstage demoLlewellyn Falco
 
Introduction to computing Processing and performance.pdf
Introduction to computing Processing and performance.pdfIntroduction to computing Processing and performance.pdf
Introduction to computing Processing and performance.pdfTulasiramKandula1
 
Fuzzing for CPS Mutation Testing
Fuzzing for CPS Mutation TestingFuzzing for CPS Mutation Testing
Fuzzing for CPS Mutation TestingLionel Briand
 

Similaire à The CI as a partner for test improvement suggestions (20)

Mutate and Test your Tests
Mutate and Test your TestsMutate and Test your Tests
Mutate and Test your Tests
 
Mutate and Test your Tests with STAMP, Caroline Landry, Inria, Paris Open Sou...
Mutate and Test your Tests with STAMP, Caroline Landry, Inria, Paris Open Sou...Mutate and Test your Tests with STAMP, Caroline Landry, Inria, Paris Open Sou...
Mutate and Test your Tests with STAMP, Caroline Landry, Inria, Paris Open Sou...
 
Mutation Testing: Leaving the Stone Age. FOSDEM 2017
Mutation Testing: Leaving the Stone Age. FOSDEM 2017Mutation Testing: Leaving the Stone Age. FOSDEM 2017
Mutation Testing: Leaving the Stone Age. FOSDEM 2017
 
Modularity for Accurate Static Analysis of Smart Contracts
Modularity for Accurate Static Analysis of Smart ContractsModularity for Accurate Static Analysis of Smart Contracts
Modularity for Accurate Static Analysis of Smart Contracts
 
DSR Testing (Part 1)
DSR Testing (Part 1)DSR Testing (Part 1)
DSR Testing (Part 1)
 
Must.kill.mutants. TopConf Tallinn 2016
Must.kill.mutants. TopConf Tallinn 2016Must.kill.mutants. TopConf Tallinn 2016
Must.kill.mutants. TopConf Tallinn 2016
 
NIO-ICSE2022.pptx
NIO-ICSE2022.pptxNIO-ICSE2022.pptx
NIO-ICSE2022.pptx
 
Mutation testing
Mutation testingMutation testing
Mutation testing
 
Facts about multithreading that'll keep you up at night - Guy Bar on, Vonage
Facts about multithreading that'll keep you up at night - Guy Bar on, VonageFacts about multithreading that'll keep you up at night - Guy Bar on, Vonage
Facts about multithreading that'll keep you up at night - Guy Bar on, Vonage
 
VST2022.pdf
VST2022.pdfVST2022.pdf
VST2022.pdf
 
GW SDAB Dev Tools 2012
GW SDAB Dev Tools 2012GW SDAB Dev Tools 2012
GW SDAB Dev Tools 2012
 
AAD UNIT 2.pptx
AAD UNIT 2.pptxAAD UNIT 2.pptx
AAD UNIT 2.pptx
 
AAD.pptx
AAD.pptxAAD.pptx
AAD.pptx
 
06.Loops
06.Loops06.Loops
06.Loops
 
ppt02.ppt
ppt02.pptppt02.ppt
ppt02.ppt
 
White-box Unit Test Generation with Microsoft IntelliTest
White-box Unit Test Generation with Microsoft IntelliTestWhite-box Unit Test Generation with Microsoft IntelliTest
White-box Unit Test Generation with Microsoft IntelliTest
 
ALE2014 let tests drive or let dijkstra derive
ALE2014 let tests drive or let dijkstra deriveALE2014 let tests drive or let dijkstra derive
ALE2014 let tests drive or let dijkstra derive
 
Test drivendevelopment onstage demo
Test drivendevelopment   onstage demoTest drivendevelopment   onstage demo
Test drivendevelopment onstage demo
 
Introduction to computing Processing and performance.pdf
Introduction to computing Processing and performance.pdfIntroduction to computing Processing and performance.pdf
Introduction to computing Processing and performance.pdf
 
Fuzzing for CPS Mutation Testing
Fuzzing for CPS Mutation TestingFuzzing for CPS Mutation Testing
Fuzzing for CPS Mutation Testing
 

Dernier

Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 

Dernier (20)

Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 

The CI as a partner for test improvement suggestions