SlideShare a Scribd company logo
1 of 79
Download to read offline
Mutation Testing


   Filip van Laenen
       OOP 2012
      2012-01-24



                      © Computas AS 27.01.12
Agenda


•   Basics of mutation testing
•   Relation to other testing techniques
•   Example
•   Mutation testing techniques
•   Mutation testing tools
•   Personal experiences and recommendations
•   Improvements
•   Questions and comments



                         2                © Computas AS 27.01.12
Basics of
Mutation Testing




       3           © Computas AS 27.01.12
Mutation Testing in a Nutshell




   Seeking The Summoner @ The Daily WTF
   http://thedailywtf.com/Articles/Seeking-The-Summoner.aspx

                                                     4         © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)




                        5                 © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)




                        6                 © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)


• Unit tests guard the source code
• But who guards the guardians?
   • Do the unit tests cover all source code?
      • Lines?
      • Branches?
      • Paths?
   • Do the unit tests test the right things?

    Mutation testing tests the tests!

                         7                  © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)




                        8                 © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)




                        9                 © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)




                        10                © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)




                        11                © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)




                        12                © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)




                        13                © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)


def max(a, b) {
   return (a < b) ? b : a;
}



def max(a, b) {
   return (a ≤ b) ? b : a;
}


                        14                © Computas AS 27.01.12
Mutation Testing in a Nutshell (cont'd)




                        15                © Computas AS 27.01.12
Does Mutation Testing Work?




“ In practice, if the software contains a
    fault, there will usually be a set of
 mutants that can only be killed by a test
     case that also detects that fault.
 Geist et. al., “Estimation and Enhancement of Real-time
    Software Reliability through Mutation Analysis,” 1992




                           16                    © Computas AS 27.01.12
Does Mutation Testing Work? (cont'd)




“ Complex faults are coupled to simple
 faults in such a way that a test data set
that detects all simple faults in a program
     will detect most complex faults.
   K. Wah, “Fault Coupling in Finite Bijective Functions,”
                                                      1995




                           17                     © Computas AS 27.01.12
Does Mutation Testing Work? (cont'd)


• “Generated mutants are similar to real faults.”
  • Andrews, Briand, Labiche, ICSE 2005
• “Mutation testing is more powerful than
  statement or branch coverage.”
  • Walsh, Ph.D. Thesis, State University of New York at
    Binghampton, 1985
• “Mutation testing is superior to data flow
  coverage criteria.”
  • Frankl, Weiss, Hu, Journal of Systems and Software,
    1997


                           18                    © Computas AS 27.01.12
Relation to Other
Testing Techniques




        19           © Computas AS 27.01.12
Relation to Other Testing Techniques


•   Unit tests
•   Test-Driven Development (TDD)
•   Test coverage
•   Static code analysis
•   Fuzz testing




                         20            © Computas AS 27.01.12
Relation to Other Testing Techniques




                       21              © Computas AS 27.01.12
Is Mutation Testing New?


• R. Lipton, “Fault Diagnosis of Computer
  Programs,” 1971
• R. Lipton et. al., “Hints on Test Data Selection:
  Help for the Practicing Programmer,” 1978
• Historical obstacles:
   • No unit testing
   • No TDD
   • Time-consuming
   • No integration with IDEs


                         22                  © Computas AS 27.01.12
Practical Example
of Mutation Testing




         23           © Computas AS 27.01.12
Practical Example


# Returns the maximum of a.
# @param a An array of integers.
def max(a) {
   return …;
}




                    24             © Computas AS 27.01.12
Practical Example (cont'd)


Omitted: max(null)
Omitted: max([])

def max(a) {
   return …;
}




                       25    © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0

def max(a) {
   return 0;
}




                       26    © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0
Assertion: max([1]) = 1

def max(a) {
   return 0;
}




                       27    © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0
Assertion: max([1]) = 1

def max(a) {
   return a.first;
}




                       28    © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0
Assertion: max([1]) = 1
Assertion: max([1, 2]) = 2

def max(a) {
   return a.first;
}




                       29    © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0
Assertion: max([1]) = 1
Assertion: max([1, 2]) = 2

def max(a) {
                        nit t ests!
   m ← a.first;        U             age!
                               cover
   foreach (e ∈ a)        line
                    100%               age?
      if (e > m)                  over
                            nch c
         m ← e;
                   100% b ra
   return m;
}
                       30              © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0
Assertion: max([1]) = 1
Assertion: max([1, 2]) = 2

def max(a) {
   m ← a.first;
   foreach (e ∈ a)
      if (e > m)
         m ← e;
   return m;
}
                       31    © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0
Assertion: max([1]) = 1
Assertion: max([1, 2]) = 2

def max(a) {
   m ← a.first;
   foreach (e ∈ a)
      if (true)
         m ← e;
   return m;
}
                       32    © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0
Assertion: max([1]) = 1
Assertion: max([1, 2]) = 2

def max(a) {
   return a.last;
}




                       33    © Computas AS 27.01.12
Practical Example (cont'd)


Assertion:    max([0]) = 0
Assertion:    max([1]) = 1
Assertion:    max([1, 2]) = 2
Assertion:    max([2, 1]) = 2

def max(a) {
   return a.last;
}



                       34       © Computas AS 27.01.12
Practical Example (cont'd)


Assertion:    max([0]) = 0
Assertion:    max([1]) = 1
Assertion:    max([1, 2]) = 2
Assertion:    max([2, 1]) = 2

def max(a) {
   m ← a.first;
   foreach (e ∈ a)
      if (e > m)
         m ← e;
   return m;
}                      35       © Computas AS 27.01.12
Practical Example (cont'd)


Assertion:    max([0]) = 0
Assertion:    max([1]) = 1
Assertion:    max([1, 2]) = 2
Assertion:    max([2, 1]) = 2

def max(a) {
   m ← -∞;
   foreach (e ∈ a)
      if (e > m)
         m ← e;
   return m;
}                      36       © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0
Assertion: max([1]) = 1
Assertion: max([1, 2]) = 2

def max(a) {
   m ← a.first;
   foreach (e ∈ a)
      if (e > m)   ← Implicit else-branch!
         m ← e;
   return m;
}
                       37           © Computas AS 27.01.12
Practical Example (cont'd)


Assertion: max([0]) = 0
Assertion: max([1]) = 1
Assertion: max([1, 2]) = 2

def max(a) {
   m ← -∞;
   foreach (e ∈ a)                       ?
                                     rage
      if (e > m)               h cove
                   ← Implicitcelse-branch!
                           ran
         m ← e;    10 0% b
   return m;
}
                       38           © Computas AS 27.01.12
Practical Example (cont'd)


• 100% test coverage may be illusory
   • Line coverage
   • Branch coverage
   • Path coverage
• TDD principles easily broken
   • Even if you're very careful




                        39             © Computas AS 27.01.12
Mutation Testing
  Techniques




       40          © Computas AS 27.01.12
Mutation Testing Techniques


• Three aspects:
   • Mutation injection
   • Mutation types
   • Unit test selection per mutant
• Key properties:
   • Efficiency
   • Performance




                        41            © Computas AS 27.01.12
Mutation Injection


• Source code mutation
• Binary code mutation
• Caveats:
   • De-mutation
   • Compilation errors
   • Invalid binary code




                           42   © Computas AS 27.01.12
Mutation Types


• Some mutations never change behaviour
   • Constants reused by unit tests
   • Log messages
• Some mutations can change behaviour
   • Switching between < and ≠
   • Switching between < and ≤
• Some mutations always change behaviour
   • Switching between < and ≥



                      43                   © Computas AS 27.01.12
Mutation Types (cont'd)


def max(a, b) {
   return (a < b) ? b : a;
}

def max(a, b) {
   return (a ≤ b) ? b : a;
}

def max(a, b) {
   return (a ≥ b) ? b : a;
}
                          44   © Computas AS 27.01.12
Mutation Types (cont'd)


for (i ← 0; i < 10; i++) …


for (i ← 0; i ≠ 10; i++) …


for (i ← 0; i ≥ 10; i++) …




                          45   © Computas AS 27.01.12
Mutation Types Guaranteed to Change
Behaviour *

• Negation of the comparison
   • Switching between = and ≠
   • Switching between < and ≥
   • Switching between > and ≤
• Negation of boolean conditions
   • Adding a ¬, ! or ~
• Shortcutting boolean conditions
   • Replacement with True or False



                       46             © Computas AS 27.01.12
Unit Test Selection


• Goal: find the unit test that “kills” the mutant
• Selection aids:
   • Hints
   • Name/package matching
   • Code coverage tools
   • Automatic learning
   • Other heuristics




                         47                 © Computas AS 27.01.12
Unit Test Selection (cont'd)


• System:
   • 50 classes
   • 20 unit tests per class
   • 1 ms per unit test
   • Unit testing time: 50 × 20 × 1ms = 1s
• 10 mutants per class:
   • Brute-force: 10 × 50 × 1s = 6m 20s
   • Educated: 10 × 50 × 20 × 1ms = 10s


                         48                  © Computas AS 27.01.12
Unit Test Selection (cont'd)


• System:
   • 500 classes
   • 20 unit tests per class
   • 1 ms per unit test
   • Unit testing time: 500 × 20 × 1ms = 10s
• 10 mutants per class:
   • Brute-force: 10 × 500 × 10s = 13h 53m 20s
   • Educated: 10 × 500 × 20 × 1ms = 1m 40s


                        49                 © Computas AS 27.01.12
Complexity


•   f: Number of function points
•   φ: Number of function points per class, ≥ 1
•   τ: Number of unit tests per function point, ≥ 1
•   μ: Number of mutants per function point, ≥ 1

• Brute-force: (f × τ) × (f × μ) = τ × μ × f²
• Educated force: τ × μ × φ × f
• Ideal: τ × μ × f


                           50                   © Computas AS 27.01.12
Complexity (cont'd)


•   c: Number of classes
•   φ: Number of function points per class, ≥ 1
•   τ: Number of unit tests per function point, ≥ 1
•   μ: Number of mutants per function point, ≥ 1

• Brute-force: (f × τ) × (f × μ) = τ × μ × φ² × c²
• Educated force: τ × μ × φ² × c
• Ideal: τ × μ × φ × c


                           51                 © Computas AS 27.01.12
Loops


for (i ← 0; i < 10; i++) …


for (i ← 0; i < 10; i--) …




                  52         © Computas AS 27.01.12
Infinite Loops


• Terminate mutants that take too long to run
   • What's too long?
• Ruins the performance
• Can be hard to predict




                        53                © Computas AS 27.01.12
Other Problems


• Recursion:
   • Stack overflows
   • Out of memory exceptions
• Syntax errors
• Segmentation faults




                       54       © Computas AS 27.01.12
Mutation Testing
     Tools




       55          © Computas AS 27.01.12
Mutation Testing Tools


• Ruby: Heckle
• Java:
   • Jester
   • Jumble
   • PIT
• C#: Nester
• Python: Pester




                         56   © Computas AS 27.01.12
Heckle


•   Ruby
•   Test::Unit and rSpec
•   Usually run from the command-line
•   Runs a set of unit tests on a class or a method
•   Good to-the-point reporting
•   Good performance
•   Virtually no documentation

• http://rubyforge.org/projects/seattlerb/
• http://docs.seattlerb.org/heckle/

                           57                 © Computas AS 27.01.12
Heckle Mutations


•   Booleans
•   Numbers
•   Strings
•   Symbols
•   Ranges
•   Regexes
•   Branches (if, while, unless, until)




                           58             © Computas AS 27.01.12
Heckle Sample Output


Initial tests pass. Let's rumble.
*****************************************************************
*** Greeter#greet loaded with 3 possible mutations
*****************************************************************

3 mutations remaining...
2 mutations remaining...
1 mutations remaining...
No mutants survived. Cool!




                                59                       © Computas AS 27.01.12
My Heckle Sample Output


filip@filip-laptop:~/github/wruf$ rake heckle
(in /home/filip/github/wruf)
Doing mutation testing on 15 method(s) of FlickrSearcher against
test/flickr_searcher_unit_test.rb:
 o FlickrSearcher#convert_photo_info [1/15]
 o FlickrSearcher#create_form_data_to_get_info_about_photo [2/15]
 o FlickrSearcher#create_form_data_to_get_info_about_user [3/15]
 o FlickrSearcher#create_form_data_to_search_photos [4/15]
 o FlickrSearcher#do_rest_request [5/15]
 o FlickrSearcher#get_author [6/15]
…
 o FlickrSearcher#get_photo_info [12/15]
 o FlickrSearcher#get_photo_url [13/15]
 o FlickrSearcher#get_ref_url [14/15]
 o FlickrSearcher#get_ref_url_from_xml_photo_info [15/15]
Checked 192 mutations, and no issues were found in FlickrSearcher.



                                60                       © Computas AS 27.01.12
My Heckle Sample Output (cont'd)


Doing mutation testing on 7 method(s) of WrufSettings against
test/wruf_settings_unit_test.rb:
 o WrufSettings#dimensions [1/7]
 o WrufSettings#dimensions= [2/7]
 o WrufSettings#hours [3/7]
 o WrufSettings#hours= [4/7]
 o WrufSettings#tags [5/7]
 o WrufSettings#tolerance [6/7]
 o WrufSettings#tolerance= [7/7]
Checked 0 mutations, and no issues were found in WrufSettings.




                                61                       © Computas AS 27.01.12
Heckle Sample Report


--- original
+++ mutation
 def calculate_precision(rescaled_number)
   if (rescaled_number < 9.995) then
     return 2
   else
     if (rescaled_number < 99.95) then
       return 1
     else
       if (rescaled_number >= 99.95) then
         return 0
       else
-        return -1
+        return -70
       end
     end
   end
 end
                                62          © Computas AS 27.01.12
Jester


• Java
• JUnit
• Usually run from the command-line
   • Grester for Maven2
• Operates on source code
• Runs all unit tests on all classes
• Reporting and documentation could be better

• http://jester.sourceforge.net/
• http://sourceforge.net/projects/grester/
                       63                © Computas AS 27.01.12
Jester Sample Report Overview




                     64         © Computas AS 27.01.12
Jester Sample Detailed Report




                      65        © Computas AS 27.01.12
Pester and Nester


• Pester
   • Jester for Python
   • PyUnit
• Nester
   • Port of Jester for C#
   • NUnit
   • Integrated with Visual Studio
   • But outdated…
   • http://nester.sourceforge.net/

                        66            © Computas AS 27.01.12
Nester Sample Report




                       67   © Computas AS 27.01.12
Jumble


•   Java
•   JUnit
•   Run from the command-line
•   Operates on byte code
•   Runs unit tests on a class
•   Reporting and documentation could be better
•   Claims to be faster than Jester

• http://jumble.sourceforge.net/index.html

                         68                © Computas AS 27.01.12
Jumble Sample Report


Mutating Foo
Tests: FooTest
Mutation points   = 12, unit test time limit 2.02s
..
M FAIL: Foo:31:   negated conditional
M FAIL: Foo:33:   negated conditional
M FAIL: Foo:34:   - -> +
M FAIL: Foo:35:   negated conditional
......
Score: 67%




                           69                  © Computas AS 27.01.12
PIT


• Java
• JUnit
• Maven or command-line
• Operates on byte code
• Large set of mutators
   • Also possibly equivalent mutators available
• Highly configurable
• Sensible defaults

• http://pitest.org/
                         70                 © Computas AS 27.01.12
PIT Mutators


•   Conditionals Boundary
•   Negate Conditionals
•   Math
•   Increments
•   Invert Negatives
•   Inline Constant*
•   Return Values
•   Void Method Call
•   Non Void Method Call*
•   Constructor Call*

                            71   © Computas AS 27.01.12
PIT Sample Report




                    72   © Computas AS 27.01.12
Personal Experiences
and Recommendations




          73            © Computas AS 27.01.12
Experiences and Recommendations


• Use mutation testing from day 1
   • Start on a small code base
• Keep number of unit tests per class low
   • Have small classes
• Select a good tool
   • Configurable
   • Flexible
   • One that can output the mutant


                        74                  © Computas AS 27.01.12
Experiences and Recommendations
(cont'd)

• Believe the tool
   • Or try to proof that the tool is wrong
• Fix the problem
   • Don't turn mutation testing off
• Embrace the “more than 100%” test coverage
   • Path coverage
   • Less code
   • More unit tests
   • More intelligent unit tests

                      75                © Computas AS 27.01.12
Improvements




     76        © Computas AS 27.01.12
Improvements


• Integration with more unit testing frameworks
• Better unit test–source code mapping
   • Better heuristics
• Parallellisation
• Better reporting
• IDE integration
• Building tool integration




                        77                © Computas AS 27.01.12
The Ideal Mutation Testing Tool™


•   Easy integration with building tools
•   Easy integration with IDEs
•   Support for all unit testing frameworks
•   Human-aided unit test selection heuristics
•   Full parallellisation
•   Good source code mutation reporting




                          78                 © Computas AS 27.01.12
Questions?




Contact:

    fvl@computas.com               @filipvanlaenen

    Computas AS                    Tel +47-67 83 10 00
    Lysaker Torg 45, pb 482        Fax +47-67 83 10 01
    N-1327 Lysaker                 Org.nr: NO 986 352 325 MVA
    NORWAY                         www.computas.com


                              79                      © Computas AS 27.01.12

More Related Content

What's hot

Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Jérôme Petazzoni
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDDDror Helper
 
Microservices Design Patterns
Microservices Design PatternsMicroservices Design Patterns
Microservices Design PatternsHaim Michael
 
ClickHouse on Kubernetes! By Robert Hodges, Altinity CEO
ClickHouse on Kubernetes! By Robert Hodges, Altinity CEOClickHouse on Kubernetes! By Robert Hodges, Altinity CEO
ClickHouse on Kubernetes! By Robert Hodges, Altinity CEOAltinity Ltd
 
An introduction to unit testing
An introduction to unit testingAn introduction to unit testing
An introduction to unit testingAdam Stephensen
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013Jaime Crespo
 
Devops Devops Devops, at Froscon
Devops Devops Devops, at FrosconDevops Devops Devops, at Froscon
Devops Devops Devops, at FrosconKris Buytaert
 
DevOps - Overview - One of the Top Trends in IT Industry
DevOps - Overview - One of the Top Trends in IT IndustryDevOps - Overview - One of the Top Trends in IT Industry
DevOps - Overview - One of the Top Trends in IT IndustryRahul Tilloo
 
Unit Testing And Mocking
Unit Testing And MockingUnit Testing And Mocking
Unit Testing And MockingJoe Wilson
 
DevOps Engineer [Arabic]
DevOps Engineer [Arabic]DevOps Engineer [Arabic]
DevOps Engineer [Arabic]ahmadezzeir
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
ProxySQL Cluster - Percona Live 2022
ProxySQL Cluster - Percona Live 2022ProxySQL Cluster - Percona Live 2022
ProxySQL Cluster - Percona Live 2022René Cannaò
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)David Ehringer
 
MySQL 8.0 EXPLAIN ANALYZE
MySQL 8.0 EXPLAIN ANALYZEMySQL 8.0 EXPLAIN ANALYZE
MySQL 8.0 EXPLAIN ANALYZENorvald Ryeng
 
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...Edureka!
 
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google MockICS
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker, Inc.
 

What's hot (20)

Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDD
 
Microservices Design Patterns
Microservices Design PatternsMicroservices Design Patterns
Microservices Design Patterns
 
ProxySQL at Scale on AWS.pdf
ProxySQL at Scale on AWS.pdfProxySQL at Scale on AWS.pdf
ProxySQL at Scale on AWS.pdf
 
ClickHouse on Kubernetes! By Robert Hodges, Altinity CEO
ClickHouse on Kubernetes! By Robert Hodges, Altinity CEOClickHouse on Kubernetes! By Robert Hodges, Altinity CEO
ClickHouse on Kubernetes! By Robert Hodges, Altinity CEO
 
An introduction to unit testing
An introduction to unit testingAn introduction to unit testing
An introduction to unit testing
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
 
Devops Devops Devops, at Froscon
Devops Devops Devops, at FrosconDevops Devops Devops, at Froscon
Devops Devops Devops, at Froscon
 
DevOps - Overview - One of the Top Trends in IT Industry
DevOps - Overview - One of the Top Trends in IT IndustryDevOps - Overview - One of the Top Trends in IT Industry
DevOps - Overview - One of the Top Trends in IT Industry
 
Unit Testing And Mocking
Unit Testing And MockingUnit Testing And Mocking
Unit Testing And Mocking
 
DevOps Engineer [Arabic]
DevOps Engineer [Arabic]DevOps Engineer [Arabic]
DevOps Engineer [Arabic]
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
ProxySQL Cluster - Percona Live 2022
ProxySQL Cluster - Percona Live 2022ProxySQL Cluster - Percona Live 2022
ProxySQL Cluster - Percona Live 2022
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)
 
MySQL 8.0 EXPLAIN ANALYZE
MySQL 8.0 EXPLAIN ANALYZEMySQL 8.0 EXPLAIN ANALYZE
MySQL 8.0 EXPLAIN ANALYZE
 
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
 
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
 

Viewers also liked

Mutation Testing
Mutation TestingMutation Testing
Mutation TestingESUG
 
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
 
Exploratory Testing Explained and Experienced
Exploratory Testing Explained and ExperiencedExploratory Testing Explained and Experienced
Exploratory Testing Explained and ExperiencedMaaret Pyhäjärvi
 
An introduction to mutation testing
An introduction to mutation testingAn introduction to mutation testing
An introduction to mutation testingdavidmus
 
Exploratory Testing
Exploratory TestingExploratory Testing
Exploratory Testingsriks7
 
How to Use Social Media to Identify Better Search Keywords
How to Use Social Media to Identify Better Search KeywordsHow to Use Social Media to Identify Better Search Keywords
How to Use Social Media to Identify Better Search KeywordsKelsey Jones
 
System testing
System testingSystem testing
System testingSlideshare
 
System testing ppt
System testing pptSystem testing ppt
System testing pptL ESHWAR
 
Successful Beta Testing
Successful Beta TestingSuccessful Beta Testing
Successful Beta TestingCentercode
 
Black box of Aircraft
Black box of AircraftBlack box of Aircraft
Black box of AircraftSusmit Sircar
 

Viewers also liked (16)

Mutation Testing
Mutation TestingMutation Testing
Mutation Testing
 
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
 
Exploratory Testing Explained and Experienced
Exploratory Testing Explained and ExperiencedExploratory Testing Explained and Experienced
Exploratory Testing Explained and Experienced
 
A Taste of Exploratory Testing
A Taste of Exploratory TestingA Taste of Exploratory Testing
A Taste of Exploratory Testing
 
An introduction to mutation testing
An introduction to mutation testingAn introduction to mutation testing
An introduction to mutation testing
 
Black box
Black box Black box
Black box
 
Exploratory Testing
Exploratory TestingExploratory Testing
Exploratory Testing
 
How to Use Social Media to Identify Better Search Keywords
How to Use Social Media to Identify Better Search KeywordsHow to Use Social Media to Identify Better Search Keywords
How to Use Social Media to Identify Better Search Keywords
 
System testing
System testingSystem testing
System testing
 
Black box
Black boxBlack box
Black box
 
System testing ppt
System testing pptSystem testing ppt
System testing ppt
 
Successful Beta Testing
Successful Beta TestingSuccessful Beta Testing
Successful Beta Testing
 
Black box of Aircraft
Black box of AircraftBlack box of Aircraft
Black box of Aircraft
 
Black Box
Black BoxBlack Box
Black Box
 
Black box
Black boxBlack box
Black box
 
Black Box Testing
Black Box TestingBlack Box Testing
Black Box Testing
 

Similar to Mutation testing (OOP 2012, 2012-JAN-24)

Oop 2015 – Mutation Testing
Oop 2015 – Mutation TestingOop 2015 – Mutation Testing
Oop 2015 – Mutation TestingFilip Van Laenen
 
Sudarshana Hore_2015 Intern MISO
Sudarshana Hore_2015 Intern MISOSudarshana Hore_2015 Intern MISO
Sudarshana Hore_2015 Intern MISOSudarshana Hore
 
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)Filip Van Laenen
 
Mixed Integer Programming: Analyzing 12 Years of Progress
Mixed Integer Programming: Analyzing 12 Years of ProgressMixed Integer Programming: Analyzing 12 Years of Progress
Mixed Integer Programming: Analyzing 12 Years of ProgressIBM Decision Optimization
 
Software Analytics In Action: A Hands-on Tutorial on Mining, Analyzing, Model...
Software Analytics In Action: A Hands-on Tutorial on Mining, Analyzing, Model...Software Analytics In Action: A Hands-on Tutorial on Mining, Analyzing, Model...
Software Analytics In Action: A Hands-on Tutorial on Mining, Analyzing, Model...Chakkrit (Kla) Tantithamthavorn
 
System Verilog 2009 & 2012 enhancements
System Verilog 2009 & 2012 enhancementsSystem Verilog 2009 & 2012 enhancements
System Verilog 2009 & 2012 enhancementsSubash John
 
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)Agile Lietuva
 
Dependable Systems - Structure-Based Dependabiilty Modeling (6/16)
Dependable Systems - Structure-Based Dependabiilty Modeling (6/16)Dependable Systems - Structure-Based Dependabiilty Modeling (6/16)
Dependable Systems - Structure-Based Dependabiilty Modeling (6/16)Peter Tröger
 
Formal Verification of Developer Tests: a Research Agenda Inspired by Mutatio...
Formal Verification of Developer Tests: a Research Agenda Inspired by Mutatio...Formal Verification of Developer Tests: a Research Agenda Inspired by Mutatio...
Formal Verification of Developer Tests: a Research Agenda Inspired by Mutatio...University of Antwerp
 
Advanced Econometrics L13-14.pptx
Advanced Econometrics L13-14.pptxAdvanced Econometrics L13-14.pptx
Advanced Econometrics L13-14.pptxakashayosha
 
Sampling-Based Planning Algorithms for Multi-Objective Missions
Sampling-Based Planning Algorithms for Multi-Objective MissionsSampling-Based Planning Algorithms for Multi-Objective Missions
Sampling-Based Planning Algorithms for Multi-Objective MissionsMd Mahbubur Rahman
 
Exploiting Hierarchy in the Abstraction-Based Verification of Statecharts Usi...
Exploiting Hierarchy in the Abstraction-Based Verification of Statecharts Usi...Exploiting Hierarchy in the Abstraction-Based Verification of Statecharts Usi...
Exploiting Hierarchy in the Abstraction-Based Verification of Statecharts Usi...Akos Hajdu
 
My Postdoctoral Research
My Postdoctoral ResearchMy Postdoctoral Research
My Postdoctoral ResearchPo-Ting Wu
 
Constraint-Based Fault-Localization
Constraint-Based Fault-LocalizationConstraint-Based Fault-Localization
Constraint-Based Fault-LocalizationMohammed Bekkouche
 
Biosight: Quantitative Methods for Policy Analysis - Introduction to GAMS, Li...
Biosight: Quantitative Methods for Policy Analysis - Introduction to GAMS, Li...Biosight: Quantitative Methods for Policy Analysis - Introduction to GAMS, Li...
Biosight: Quantitative Methods for Policy Analysis - Introduction to GAMS, Li...IFPRI-EPTD
 
Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?
Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?
Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?Agile Lietuva
 

Similar to Mutation testing (OOP 2012, 2012-JAN-24) (20)

Oop 2015 – Mutation Testing
Oop 2015 – Mutation TestingOop 2015 – Mutation Testing
Oop 2015 – Mutation Testing
 
Sudarshana Hore_2015 Intern MISO
Sudarshana Hore_2015 Intern MISOSudarshana Hore_2015 Intern MISO
Sudarshana Hore_2015 Intern MISO
 
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
 
Mit2 72s09 lec02 (1)
Mit2 72s09 lec02 (1)Mit2 72s09 lec02 (1)
Mit2 72s09 lec02 (1)
 
Converted ansys f
Converted ansys fConverted ansys f
Converted ansys f
 
Mixed Integer Programming: Analyzing 12 Years of Progress
Mixed Integer Programming: Analyzing 12 Years of ProgressMixed Integer Programming: Analyzing 12 Years of Progress
Mixed Integer Programming: Analyzing 12 Years of Progress
 
Software Analytics In Action: A Hands-on Tutorial on Mining, Analyzing, Model...
Software Analytics In Action: A Hands-on Tutorial on Mining, Analyzing, Model...Software Analytics In Action: A Hands-on Tutorial on Mining, Analyzing, Model...
Software Analytics In Action: A Hands-on Tutorial on Mining, Analyzing, Model...
 
System Verilog 2009 & 2012 enhancements
System Verilog 2009 & 2012 enhancementsSystem Verilog 2009 & 2012 enhancements
System Verilog 2009 & 2012 enhancements
 
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
Tieto tdd from-dreams_to_reality_s.narkevicius_v.pozdniakov_2013 (1)
 
Repair dagstuhl jan2017
Repair dagstuhl jan2017Repair dagstuhl jan2017
Repair dagstuhl jan2017
 
Dependable Systems - Structure-Based Dependabiilty Modeling (6/16)
Dependable Systems - Structure-Based Dependabiilty Modeling (6/16)Dependable Systems - Structure-Based Dependabiilty Modeling (6/16)
Dependable Systems - Structure-Based Dependabiilty Modeling (6/16)
 
Formal Verification of Developer Tests: a Research Agenda Inspired by Mutatio...
Formal Verification of Developer Tests: a Research Agenda Inspired by Mutatio...Formal Verification of Developer Tests: a Research Agenda Inspired by Mutatio...
Formal Verification of Developer Tests: a Research Agenda Inspired by Mutatio...
 
Advanced Econometrics L13-14.pptx
Advanced Econometrics L13-14.pptxAdvanced Econometrics L13-14.pptx
Advanced Econometrics L13-14.pptx
 
Sampling-Based Planning Algorithms for Multi-Objective Missions
Sampling-Based Planning Algorithms for Multi-Objective MissionsSampling-Based Planning Algorithms for Multi-Objective Missions
Sampling-Based Planning Algorithms for Multi-Objective Missions
 
eviewsOLSMLE
eviewsOLSMLEeviewsOLSMLE
eviewsOLSMLE
 
Exploiting Hierarchy in the Abstraction-Based Verification of Statecharts Usi...
Exploiting Hierarchy in the Abstraction-Based Verification of Statecharts Usi...Exploiting Hierarchy in the Abstraction-Based Verification of Statecharts Usi...
Exploiting Hierarchy in the Abstraction-Based Verification of Statecharts Usi...
 
My Postdoctoral Research
My Postdoctoral ResearchMy Postdoctoral Research
My Postdoctoral Research
 
Constraint-Based Fault-Localization
Constraint-Based Fault-LocalizationConstraint-Based Fault-Localization
Constraint-Based Fault-Localization
 
Biosight: Quantitative Methods for Policy Analysis - Introduction to GAMS, Li...
Biosight: Quantitative Methods for Policy Analysis - Introduction to GAMS, Li...Biosight: Quantitative Methods for Policy Analysis - Introduction to GAMS, Li...
Biosight: Quantitative Methods for Policy Analysis - Introduction to GAMS, Li...
 
Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?
Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?
Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?
 

More from Filip Van Laenen

How JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate OrbiterHow JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate OrbiterFilip Van Laenen
 
How JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate OrbiterHow JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate OrbiterFilip Van Laenen
 
Clouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp EdgesClouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp EdgesFilip Van Laenen
 
Become an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint ArchitectBecome an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint ArchitectFilip Van Laenen
 
Mutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kodeMutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kodeFilip Van Laenen
 
Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?Filip Van Laenen
 
Five Inconvenient Truths about REST
Five Inconvenient Truths about RESTFive Inconvenient Truths about REST
Five Inconvenient Truths about RESTFilip Van Laenen
 
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...Filip Van Laenen
 
#NoEstimates – Smidig 2014
 #NoEstimates – Smidig 2014 #NoEstimates – Smidig 2014
#NoEstimates – Smidig 2014Filip Van Laenen
 
#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014Filip Van Laenen
 
Tre ubeleilige sannheter om REST
Tre ubeleilige sannheter om RESTTre ubeleilige sannheter om REST
Tre ubeleilige sannheter om RESTFilip Van Laenen
 
Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?Filip Van Laenen
 
SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)Filip Van Laenen
 
SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)Filip Van Laenen
 

More from Filip Van Laenen (17)

Drawing for IT Architects
Drawing for IT ArchitectsDrawing for IT Architects
Drawing for IT Architects
 
How JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate OrbiterHow JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate Orbiter
 
How JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate OrbiterHow JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate Orbiter
 
Clouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp EdgesClouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp Edges
 
Become an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint ArchitectBecome an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint Architect
 
Dial M for Mutation
Dial M for MutationDial M for Mutation
Dial M for Mutation
 
Mutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kodeMutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kode
 
Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?
 
Five Inconvenient Truths about REST
Five Inconvenient Truths about RESTFive Inconvenient Truths about REST
Five Inconvenient Truths about REST
 
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
 
#NoEstimates – Smidig 2014
 #NoEstimates – Smidig 2014 #NoEstimates – Smidig 2014
#NoEstimates – Smidig 2014
 
#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014
 
Tre ubeleilige sannheter om REST
Tre ubeleilige sannheter om RESTTre ubeleilige sannheter om REST
Tre ubeleilige sannheter om REST
 
What Architects Really Do
What Architects Really DoWhat Architects Really Do
What Architects Really Do
 
Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?
 
SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)
 
SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)
 

Recently uploaded

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Recently uploaded (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

Mutation testing (OOP 2012, 2012-JAN-24)

  • 1. Mutation Testing Filip van Laenen OOP 2012 2012-01-24 © Computas AS 27.01.12
  • 2. Agenda • Basics of mutation testing • Relation to other testing techniques • Example • Mutation testing techniques • Mutation testing tools • Personal experiences and recommendations • Improvements • Questions and comments 2 © Computas AS 27.01.12
  • 3. Basics of Mutation Testing 3 © Computas AS 27.01.12
  • 4. Mutation Testing in a Nutshell Seeking The Summoner @ The Daily WTF http://thedailywtf.com/Articles/Seeking-The-Summoner.aspx 4 © Computas AS 27.01.12
  • 5. Mutation Testing in a Nutshell (cont'd) 5 © Computas AS 27.01.12
  • 6. Mutation Testing in a Nutshell (cont'd) 6 © Computas AS 27.01.12
  • 7. Mutation Testing in a Nutshell (cont'd) • Unit tests guard the source code • But who guards the guardians? • Do the unit tests cover all source code? • Lines? • Branches? • Paths? • Do the unit tests test the right things? Mutation testing tests the tests! 7 © Computas AS 27.01.12
  • 8. Mutation Testing in a Nutshell (cont'd) 8 © Computas AS 27.01.12
  • 9. Mutation Testing in a Nutshell (cont'd) 9 © Computas AS 27.01.12
  • 10. Mutation Testing in a Nutshell (cont'd) 10 © Computas AS 27.01.12
  • 11. Mutation Testing in a Nutshell (cont'd) 11 © Computas AS 27.01.12
  • 12. Mutation Testing in a Nutshell (cont'd) 12 © Computas AS 27.01.12
  • 13. Mutation Testing in a Nutshell (cont'd) 13 © Computas AS 27.01.12
  • 14. Mutation Testing in a Nutshell (cont'd) def max(a, b) { return (a < b) ? b : a; } def max(a, b) { return (a ≤ b) ? b : a; } 14 © Computas AS 27.01.12
  • 15. Mutation Testing in a Nutshell (cont'd) 15 © Computas AS 27.01.12
  • 16. Does Mutation Testing Work? “ In practice, if the software contains a fault, there will usually be a set of mutants that can only be killed by a test case that also detects that fault. Geist et. al., “Estimation and Enhancement of Real-time Software Reliability through Mutation Analysis,” 1992 16 © Computas AS 27.01.12
  • 17. Does Mutation Testing Work? (cont'd) “ Complex faults are coupled to simple faults in such a way that a test data set that detects all simple faults in a program will detect most complex faults. K. Wah, “Fault Coupling in Finite Bijective Functions,” 1995 17 © Computas AS 27.01.12
  • 18. Does Mutation Testing Work? (cont'd) • “Generated mutants are similar to real faults.” • Andrews, Briand, Labiche, ICSE 2005 • “Mutation testing is more powerful than statement or branch coverage.” • Walsh, Ph.D. Thesis, State University of New York at Binghampton, 1985 • “Mutation testing is superior to data flow coverage criteria.” • Frankl, Weiss, Hu, Journal of Systems and Software, 1997 18 © Computas AS 27.01.12
  • 19. Relation to Other Testing Techniques 19 © Computas AS 27.01.12
  • 20. Relation to Other Testing Techniques • Unit tests • Test-Driven Development (TDD) • Test coverage • Static code analysis • Fuzz testing 20 © Computas AS 27.01.12
  • 21. Relation to Other Testing Techniques 21 © Computas AS 27.01.12
  • 22. Is Mutation Testing New? • R. Lipton, “Fault Diagnosis of Computer Programs,” 1971 • R. Lipton et. al., “Hints on Test Data Selection: Help for the Practicing Programmer,” 1978 • Historical obstacles: • No unit testing • No TDD • Time-consuming • No integration with IDEs 22 © Computas AS 27.01.12
  • 23. Practical Example of Mutation Testing 23 © Computas AS 27.01.12
  • 24. Practical Example # Returns the maximum of a. # @param a An array of integers. def max(a) { return …; } 24 © Computas AS 27.01.12
  • 25. Practical Example (cont'd) Omitted: max(null) Omitted: max([]) def max(a) { return …; } 25 © Computas AS 27.01.12
  • 26. Practical Example (cont'd) Assertion: max([0]) = 0 def max(a) { return 0; } 26 © Computas AS 27.01.12
  • 27. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 def max(a) { return 0; } 27 © Computas AS 27.01.12
  • 28. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 def max(a) { return a.first; } 28 © Computas AS 27.01.12
  • 29. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 def max(a) { return a.first; } 29 © Computas AS 27.01.12
  • 30. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 def max(a) { nit t ests! m ← a.first; U age! cover foreach (e ∈ a) line 100% age? if (e > m) over nch c m ← e; 100% b ra return m; } 30 © Computas AS 27.01.12
  • 31. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 def max(a) { m ← a.first; foreach (e ∈ a) if (e > m) m ← e; return m; } 31 © Computas AS 27.01.12
  • 32. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 def max(a) { m ← a.first; foreach (e ∈ a) if (true) m ← e; return m; } 32 © Computas AS 27.01.12
  • 33. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 def max(a) { return a.last; } 33 © Computas AS 27.01.12
  • 34. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 Assertion: max([2, 1]) = 2 def max(a) { return a.last; } 34 © Computas AS 27.01.12
  • 35. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 Assertion: max([2, 1]) = 2 def max(a) { m ← a.first; foreach (e ∈ a) if (e > m) m ← e; return m; } 35 © Computas AS 27.01.12
  • 36. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 Assertion: max([2, 1]) = 2 def max(a) { m ← -∞; foreach (e ∈ a) if (e > m) m ← e; return m; } 36 © Computas AS 27.01.12
  • 37. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 def max(a) { m ← a.first; foreach (e ∈ a) if (e > m) ← Implicit else-branch! m ← e; return m; } 37 © Computas AS 27.01.12
  • 38. Practical Example (cont'd) Assertion: max([0]) = 0 Assertion: max([1]) = 1 Assertion: max([1, 2]) = 2 def max(a) { m ← -∞; foreach (e ∈ a) ? rage if (e > m) h cove ← Implicitcelse-branch! ran m ← e; 10 0% b return m; } 38 © Computas AS 27.01.12
  • 39. Practical Example (cont'd) • 100% test coverage may be illusory • Line coverage • Branch coverage • Path coverage • TDD principles easily broken • Even if you're very careful 39 © Computas AS 27.01.12
  • 40. Mutation Testing Techniques 40 © Computas AS 27.01.12
  • 41. Mutation Testing Techniques • Three aspects: • Mutation injection • Mutation types • Unit test selection per mutant • Key properties: • Efficiency • Performance 41 © Computas AS 27.01.12
  • 42. Mutation Injection • Source code mutation • Binary code mutation • Caveats: • De-mutation • Compilation errors • Invalid binary code 42 © Computas AS 27.01.12
  • 43. Mutation Types • Some mutations never change behaviour • Constants reused by unit tests • Log messages • Some mutations can change behaviour • Switching between < and ≠ • Switching between < and ≤ • Some mutations always change behaviour • Switching between < and ≥ 43 © Computas AS 27.01.12
  • 44. Mutation Types (cont'd) def max(a, b) { return (a < b) ? b : a; } def max(a, b) { return (a ≤ b) ? b : a; } def max(a, b) { return (a ≥ b) ? b : a; } 44 © Computas AS 27.01.12
  • 45. Mutation Types (cont'd) for (i ← 0; i < 10; i++) … for (i ← 0; i ≠ 10; i++) … for (i ← 0; i ≥ 10; i++) … 45 © Computas AS 27.01.12
  • 46. Mutation Types Guaranteed to Change Behaviour * • Negation of the comparison • Switching between = and ≠ • Switching between < and ≥ • Switching between > and ≤ • Negation of boolean conditions • Adding a ¬, ! or ~ • Shortcutting boolean conditions • Replacement with True or False 46 © Computas AS 27.01.12
  • 47. Unit Test Selection • Goal: find the unit test that “kills” the mutant • Selection aids: • Hints • Name/package matching • Code coverage tools • Automatic learning • Other heuristics 47 © Computas AS 27.01.12
  • 48. Unit Test Selection (cont'd) • System: • 50 classes • 20 unit tests per class • 1 ms per unit test • Unit testing time: 50 × 20 × 1ms = 1s • 10 mutants per class: • Brute-force: 10 × 50 × 1s = 6m 20s • Educated: 10 × 50 × 20 × 1ms = 10s 48 © Computas AS 27.01.12
  • 49. Unit Test Selection (cont'd) • System: • 500 classes • 20 unit tests per class • 1 ms per unit test • Unit testing time: 500 × 20 × 1ms = 10s • 10 mutants per class: • Brute-force: 10 × 500 × 10s = 13h 53m 20s • Educated: 10 × 500 × 20 × 1ms = 1m 40s 49 © Computas AS 27.01.12
  • 50. Complexity • f: Number of function points • φ: Number of function points per class, ≥ 1 • τ: Number of unit tests per function point, ≥ 1 • μ: Number of mutants per function point, ≥ 1 • Brute-force: (f × τ) × (f × μ) = τ × μ × f² • Educated force: τ × μ × φ × f • Ideal: τ × μ × f 50 © Computas AS 27.01.12
  • 51. Complexity (cont'd) • c: Number of classes • φ: Number of function points per class, ≥ 1 • τ: Number of unit tests per function point, ≥ 1 • μ: Number of mutants per function point, ≥ 1 • Brute-force: (f × τ) × (f × μ) = τ × μ × φ² × c² • Educated force: τ × μ × φ² × c • Ideal: τ × μ × φ × c 51 © Computas AS 27.01.12
  • 52. Loops for (i ← 0; i < 10; i++) … for (i ← 0; i < 10; i--) … 52 © Computas AS 27.01.12
  • 53. Infinite Loops • Terminate mutants that take too long to run • What's too long? • Ruins the performance • Can be hard to predict 53 © Computas AS 27.01.12
  • 54. Other Problems • Recursion: • Stack overflows • Out of memory exceptions • Syntax errors • Segmentation faults 54 © Computas AS 27.01.12
  • 55. Mutation Testing Tools 55 © Computas AS 27.01.12
  • 56. Mutation Testing Tools • Ruby: Heckle • Java: • Jester • Jumble • PIT • C#: Nester • Python: Pester 56 © Computas AS 27.01.12
  • 57. Heckle • Ruby • Test::Unit and rSpec • Usually run from the command-line • Runs a set of unit tests on a class or a method • Good to-the-point reporting • Good performance • Virtually no documentation • http://rubyforge.org/projects/seattlerb/ • http://docs.seattlerb.org/heckle/ 57 © Computas AS 27.01.12
  • 58. Heckle Mutations • Booleans • Numbers • Strings • Symbols • Ranges • Regexes • Branches (if, while, unless, until) 58 © Computas AS 27.01.12
  • 59. Heckle Sample Output Initial tests pass. Let's rumble. ***************************************************************** *** Greeter#greet loaded with 3 possible mutations ***************************************************************** 3 mutations remaining... 2 mutations remaining... 1 mutations remaining... No mutants survived. Cool! 59 © Computas AS 27.01.12
  • 60. My Heckle Sample Output filip@filip-laptop:~/github/wruf$ rake heckle (in /home/filip/github/wruf) Doing mutation testing on 15 method(s) of FlickrSearcher against test/flickr_searcher_unit_test.rb: o FlickrSearcher#convert_photo_info [1/15] o FlickrSearcher#create_form_data_to_get_info_about_photo [2/15] o FlickrSearcher#create_form_data_to_get_info_about_user [3/15] o FlickrSearcher#create_form_data_to_search_photos [4/15] o FlickrSearcher#do_rest_request [5/15] o FlickrSearcher#get_author [6/15] … o FlickrSearcher#get_photo_info [12/15] o FlickrSearcher#get_photo_url [13/15] o FlickrSearcher#get_ref_url [14/15] o FlickrSearcher#get_ref_url_from_xml_photo_info [15/15] Checked 192 mutations, and no issues were found in FlickrSearcher. 60 © Computas AS 27.01.12
  • 61. My Heckle Sample Output (cont'd) Doing mutation testing on 7 method(s) of WrufSettings against test/wruf_settings_unit_test.rb: o WrufSettings#dimensions [1/7] o WrufSettings#dimensions= [2/7] o WrufSettings#hours [3/7] o WrufSettings#hours= [4/7] o WrufSettings#tags [5/7] o WrufSettings#tolerance [6/7] o WrufSettings#tolerance= [7/7] Checked 0 mutations, and no issues were found in WrufSettings. 61 © Computas AS 27.01.12
  • 62. Heckle Sample Report --- original +++ mutation def calculate_precision(rescaled_number) if (rescaled_number < 9.995) then return 2 else if (rescaled_number < 99.95) then return 1 else if (rescaled_number >= 99.95) then return 0 else - return -1 + return -70 end end end end 62 © Computas AS 27.01.12
  • 63. Jester • Java • JUnit • Usually run from the command-line • Grester for Maven2 • Operates on source code • Runs all unit tests on all classes • Reporting and documentation could be better • http://jester.sourceforge.net/ • http://sourceforge.net/projects/grester/ 63 © Computas AS 27.01.12
  • 64. Jester Sample Report Overview 64 © Computas AS 27.01.12
  • 65. Jester Sample Detailed Report 65 © Computas AS 27.01.12
  • 66. Pester and Nester • Pester • Jester for Python • PyUnit • Nester • Port of Jester for C# • NUnit • Integrated with Visual Studio • But outdated… • http://nester.sourceforge.net/ 66 © Computas AS 27.01.12
  • 67. Nester Sample Report 67 © Computas AS 27.01.12
  • 68. Jumble • Java • JUnit • Run from the command-line • Operates on byte code • Runs unit tests on a class • Reporting and documentation could be better • Claims to be faster than Jester • http://jumble.sourceforge.net/index.html 68 © Computas AS 27.01.12
  • 69. Jumble Sample Report Mutating Foo Tests: FooTest Mutation points = 12, unit test time limit 2.02s .. M FAIL: Foo:31: negated conditional M FAIL: Foo:33: negated conditional M FAIL: Foo:34: - -> + M FAIL: Foo:35: negated conditional ...... Score: 67% 69 © Computas AS 27.01.12
  • 70. PIT • Java • JUnit • Maven or command-line • Operates on byte code • Large set of mutators • Also possibly equivalent mutators available • Highly configurable • Sensible defaults • http://pitest.org/ 70 © Computas AS 27.01.12
  • 71. PIT Mutators • Conditionals Boundary • Negate Conditionals • Math • Increments • Invert Negatives • Inline Constant* • Return Values • Void Method Call • Non Void Method Call* • Constructor Call* 71 © Computas AS 27.01.12
  • 72. PIT Sample Report 72 © Computas AS 27.01.12
  • 73. Personal Experiences and Recommendations 73 © Computas AS 27.01.12
  • 74. Experiences and Recommendations • Use mutation testing from day 1 • Start on a small code base • Keep number of unit tests per class low • Have small classes • Select a good tool • Configurable • Flexible • One that can output the mutant 74 © Computas AS 27.01.12
  • 75. Experiences and Recommendations (cont'd) • Believe the tool • Or try to proof that the tool is wrong • Fix the problem • Don't turn mutation testing off • Embrace the “more than 100%” test coverage • Path coverage • Less code • More unit tests • More intelligent unit tests 75 © Computas AS 27.01.12
  • 76. Improvements 76 © Computas AS 27.01.12
  • 77. Improvements • Integration with more unit testing frameworks • Better unit test–source code mapping • Better heuristics • Parallellisation • Better reporting • IDE integration • Building tool integration 77 © Computas AS 27.01.12
  • 78. The Ideal Mutation Testing Tool™ • Easy integration with building tools • Easy integration with IDEs • Support for all unit testing frameworks • Human-aided unit test selection heuristics • Full parallellisation • Good source code mutation reporting 78 © Computas AS 27.01.12
  • 79. Questions? Contact: fvl@computas.com @filipvanlaenen Computas AS Tel +47-67 83 10 00 Lysaker Torg 45, pb 482 Fax +47-67 83 10 01 N-1327 Lysaker Org.nr: NO 986 352 325 MVA NORWAY www.computas.com 79 © Computas AS 27.01.12