SlideShare una empresa de Scribd logo
1 de 45
Is It Handmade Code If You Use Power Tools?




                                Photo by matsbeads on Etsy



               Laura Beth Denker (@elblinkin)
Is It Handmade Code If You Use Power Tools?




               In the beginning...



•Deployments happened weekly
•Development happened on branches
•Release Manager role rotations


      efo re
  B
Is It Handmade Code If You Use Power Tools?




                       Deployinator


•One button deployment
•Eliminated painful weekly deploys
 • Deployments went up to a handful a day
•Eliminated release manager role rotations
 • If you committed code, it was your responsibility to push the button


        efo re
    B
Is It Handmade Code If You Use Power Tools?




    Voila! Continuous Deployment



•Buy-in
•One-button deployment process (NO fear!*)
•Monitoring and graphs


       * NO fear in the deploy process, but still some healthy fear in the code changes
Is It Handmade Code If You Use Power Tools?




“Confidence is contagious; so is lack of
confidence.”
                                              Vince Lombardi
Is It Handmade Code If You Use Power Tools?




                             Buildbot
•Developer written and maintained CI System
 • Resulted in Test Infrastructure being convoluted with site architecture
 • Test infrastructure was untested
•Tests written in Python
 • But we’re a PHP shop
•Slow and resource intensive
 • Could not run on a developer VM
•Non-deterministic failures
 • Flaky tests
 • Assertions in helpers
 • EC2 connectivity issues
Is It Handmade Code If You Use Power Tools?




              (Hudson) Jenkins CI

•Open source
•High community involvement
•Highly configurable
•Numerous plugins
•Eliminated the pitfalls of developer written and
 maintained CI
             21
      J u ne
Is It Handmade Code If You Use Power Tools?




                PyUnit to PHPUnit


•~1,500 tests moved to our lingua franca
•~3 minutes to run new PHPUnit tests
•Eliminated context-switching between
 languages


                ly 19
           Ju
Is It Handmade Code If You Use Power Tools?




                       Commit Mutex
1. Commit code to trunk (maybe merge a development branch into trunk)
2. Wait for Buildbot (and Jenkins) to tests
  a. If tests PASS, continue to Deployinator and begin deployment
  b. If tests FAIL, kick Buildbot (and Jenkins) because it might be a flake,
    then do any of the following
    i. Repeat step (b) until it passes
    ii. Debug failures and begin fixing trunk
    iii. Rollback

 Note: While there are committed changes in trunk that have not been
 deployed, DO NOT COMMIT
Is It Handmade Code If You Use Power Tools?




     Why is there a Commit Mutex?



1.Branch development
2.Tests cannot run in a timely fashion on the
 developer VMs
Is It Handmade Code If You Use Power Tools?




                      Try Server v.1
•Jenkins parameterized build + shell script
 •Parameters
  • username
  • patch file
 •Shell script
  • Create a patch file
  • Create the JSON
  • Send a request to Jenkins via cURL
•Branches NOT SUPPORTED
•Eliminated the Commit Mutex
Is It Handmade Code If You Use Power Tools?




               g us t 19
          Au
Is It Handmade Code If You Use Power Tools?




                   Try Server v.1.1

•Jenkins parameterized build + PHP script
 •Parameters
  • username
  • patch file
 •PHP script
  • Support for creating git-svn patches
  • Support for dry runs
  • Support for uploading manually created patches
Is It Handmade Code If You Use Power Tools?




               Test Classification



•Unit
•Integration
•Functional (System)
Is It Handmade Code If You Use Power Tools?




                  Test Classification



•Functional (System)
 • Provides confidence that a particular use case works
• Unit
• Integration
Is It Handmade Code If You Use Power Tools?

       Legacy CI System is Dead!




                          er 15
                 pte mb
            Se
Is It Handmade Code If You Use Power Tools?




                        Test Classification


• Functional (System)
•Integration
 • Tests interaction between a discrete number of components
   • A set of interacting classes
   • Interaction with an external service
• Unit
Is It Handmade Code If You Use Power Tools?




                           Test Classification
• Functional (System)
• Integration
•Unit
 • Fast
 • Deterministic
   •   NO   database
   •   NO   file system
   •   NO   network
   •   NO   threading, forking processes
   •   NO   sleep
   •   NO   time dependencies
 • Tests a single object
   • Best way to obtain line coverage
   • Reduces debug time
Is It Handmade Code If You Use Power Tools?




               PHPUnit @group



•@group to declare external dependencies
•PHPUnit XML Configuration
•Jenkins Project for each configuration

                            er 21
                  Oc to b
Is It Handmade Code If You Use Power Tools?




                 PHPUnit @group




@group cache
for tests that use memcache or another cache




                              er 21
                    Oc to b
Is It Handmade Code If You Use Power Tools?




                  PHPUnit @group




@group database
for tests that use a database like postgres or mysql




                                er 21
                      Oc to b
Is It Handmade Code If You Use Power Tools?




                   PHPUnit @group




@group network
for tests that talk to external services (in-house or 3rd party)




                                er 21
                      Oc to b
Is It Handmade Code If You Use Power Tools?




                   PHPUnit @group




@group sleep
for tests that call a sleep() function




                                 er 21
                       Oc to b
Is It Handmade Code If You Use Power Tools?




                  PHPUnit @group




@group time
for tests that depend on the time of day or day of the year, etc.




                                er 21
                      Oc to b
Is It Handmade Code If You Use Power Tools?




                  PHPUnit @group



@group smoke
for tests that execute cURL and regex based tests against an instance of
the web service under test




                               er 21
                     Oc to b
Is It Handmade Code If You Use Power Tools?




                  PHPUnit @group




@group flaky
for tests that fail without code changes




                                er 21
                      Oc to b
Is It Handmade Code If You Use Power Tools?




              PHPUnit @group




       There is NO @group for unit tests.




                           er 21
                 Oc to b
Is It Handmade Code If You Use Power Tools?




               PHPUnit @group



•@group to declare external dependencies
•PHPUnit XML Configuration
•Jenkins Project for each configuration

                            er 21
                  Oc to b
Is It Handmade Code If You Use Power Tools?




                 40 Deploys in a Day


•November 18th, 2010
 • <5 months after first dedicated Test & Automation engineer
 • <3 months after releasing Try Server
 • 1 week before Thanksgiving freeze
•34 deploys the day after
                                   ber
                            No ve m !
                                   !!
                                18
Is It Handmade Code If You Use Power Tools?




   How do we keep the momentum?

•The tests ported to PHPUnit are flaky
 • Re-building intermittent failures is wasting time in the push queue
•We are hiring more engineers
 • We need to deploy as fast, if not faster
•We are writing more tests
 • More tests can take more time, so we need to write faster tests
 • Started at 1,500 tests, now running >7,000 tests
                                   ber !
                                 Cy y !
                                Mo n da
Is It Handmade Code If You Use Power Tools?




                  Random Data BAD


•Fixtures Framework
 •Written and maintained by developers
 •Original intent
  • Generate data to run test instance of the website
 •Unexpected usage
  • Flaky and hard to debug integration tests posing as unit tests
Is It Handmade Code If You Use Power Tools?




       DBUnit for Multiple Databases

•Shard-ed database architecture
•Our ORM talks to multiple databases
 • At least the index and a shard
•PHPUnit_Extensions_Database_MultipleDatab
 ases
•Increased clarity in old tests ported to PHPUnit
 • Data explicitly specified in YAML, not at random
 • Developer needs to know what databases 8test will touch
                                            ra
                                     em be
                              De c
Is It Handmade Code If You Use Power Tools?




    Worth Mentioning: Try Server v.2


•Master try project in Jenkins
 • PHP Script executed in Jenkins shell builder
 • Started all sub-projects over cURL
 • Pinged all sub-projects for status
 • Used Jenkins Text Finder plugin to toggle project state
 • Sent a unified result e-mail
•Eliminated problems finding test results
                                       be r8
                              De cem
Is It Handmade Code If You Use Power Tools?



 Worth Mentioning: Try Server v.2




                                be r8
                       De cem
Is It Handmade Code If You Use Power Tools?




                       Why to mock?


unit tests
test the functionality of a single method in a single object with the
expectations of the collaborating objects


test case
as a suitcase contains suits, a test case contains tests
Is It Handmade Code If You Use Power Tools?




              PHPUnit Mock Helpers
           Making it easier to create mocks,
         should support writing more unit tests

• Tweaking prod code
• Writing short, tested helpers for internal types
• PHPUnit_Extensions_MockObject_Stub_ReturnMapping
  • UPDATE: Now in PHPUnit as $this->returnValueMap()

• Still more to do...
                                        ry 31
                               Ja nua
Is It Handmade Code If You Use Power Tools?




            PHPUnit Extensions




             Open-sourced on Github



                                            ry 27
                                Fe b r ua
Is It Handmade Code If You Use Power Tools?




                 Try Server v.3




           Jenkins Master Project Plugin
                    Try’d out on Try Server




                                              ch 24
                                         M ar
Is It Handmade Code If You Use Power Tools?




                        Pake




        Now test locally, just like Jenkins!




                                         Ap ril 5
Is It Handmade Code If You Use Power Tools?




    Deployinator Info in Jenkins!

            Jenkins Master Project Plugin
                            Just like Try
             Jenkins Deployinator Plugin
                       Special CLI Command


     ONE Jenkins job per deployment stage
  Previously, ~15 Jobs that were difficult to correlate with a push



                                                      pr il 9
                                                  A
Is It Handmade Code If You Use Power Tools?




           On the Big Monitors!
Is It Handmade Code If You Use Power Tools?




             Still More to Come...


•Flaky test resolution
•More focused DBUnit Tests
•Make pure unit testing even easier

•Try to solve whatever comes next...
                                                   on d !!
                                                Bey
Is It Handmade Code If You Use Power Tools?




                      References
Code As Craft
  http://codeascraft.etsy.com/
Deployinator
  http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/
Divide and Concur
  http://codeascraft.etsy.com/2011/04/20/divide-and-concur/
Etsy PHPUnit Extensions
  https://github.com/etsy/phpunit-extensions
Jenkins CI
  http://jenkins-ci.org/
PHPUnit
  https://github.com/sebastianbergmann/phpunit/
Is It Handmade Code If You Use Power Tools?




                Wardrobe Furnished By

Spring Daisies Short Patchwork Dress
http://www.etsy.com/shop/pineapplepop of Nashville, TN


Asymmetric Flower and Beads Necklace (Silver)
Created by Michelle D’Netto, Software Engineer @ Etsy


Knitted DROPS Bolero with Lace Pattern
http://www.garnstudio.com/lang/en/visoppskrift.php?d_nr=127&d_id=24
Design by DROPS Design                    Kni t
                                      bu t        te
Knitted by Laura Beth Denker                a l as d at t h
                                                  ,         e
                                           f o r i t wa s C o n f,
                                                 the       t
                                                     dre s o o d a r k
                                                          s :-(
Is It Handmade Code If You Use Power Tools?




  Our software is artisanally crafted using the
ancient techniques from the 1960s. All releases
are aged in a handmade filled cave for at least
   20 minutes before decanting to the Web.
                                               --Noah Sussman

Más contenido relacionado

La actualidad más candente

Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...Raffi Khatchadourian
 
QTP Automation Testing Tutorial 6
QTP Automation Testing Tutorial 6QTP Automation Testing Tutorial 6
QTP Automation Testing Tutorial 6Akash Tyagi
 
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMs
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMsPhosphor: Illuminating Dynamic Data Flow in Commodity JVMs
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMsjon_bell
 
Automatic testing in DevOps
Automatic testing in DevOpsAutomatic testing in DevOps
Automatic testing in DevOpsBenoit Baudry
 
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, PuppetPuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, PuppetPuppet
 
Craftsmanship Workshop: Coding Kata
Craftsmanship Workshop: Coding KataCraftsmanship Workshop: Coding Kata
Craftsmanship Workshop: Coding KataMichael Ibarra
 
Need forbuildspeed agile2012
Need forbuildspeed agile2012Need forbuildspeed agile2012
Need forbuildspeed agile2012drewz lin
 
Performance Analysis of Idle Programs
Performance Analysis of Idle ProgramsPerformance Analysis of Idle Programs
Performance Analysis of Idle Programsgreenwop
 
ProspectusPresentationPrinterFriendly
ProspectusPresentationPrinterFriendlyProspectusPresentationPrinterFriendly
ProspectusPresentationPrinterFriendlymartijnetje
 
Master class in Java in 2018
Master class in Java in 2018Master class in Java in 2018
Master class in Java in 2018Miro Cupak
 
Master class in modern Java
Master class in modern JavaMaster class in modern Java
Master class in modern JavaMiro Cupak
 
Master class in modern Java
Master class in modern JavaMaster class in modern Java
Master class in modern JavaMiro Cupak
 
Autom editor video blooper recognition and localization for automatic monolo...
Autom editor  video blooper recognition and localization for automatic monolo...Autom editor  video blooper recognition and localization for automatic monolo...
Autom editor video blooper recognition and localization for automatic monolo...Carlos Toxtli
 
Reverse engineering and instrumentation of android apps
Reverse engineering and instrumentation of android appsReverse engineering and instrumentation of android apps
Reverse engineering and instrumentation of android appsGaurav Lochan
 
Continuous Automated Regression Testing to the Rescue
Continuous Automated Regression Testing to the RescueContinuous Automated Regression Testing to the Rescue
Continuous Automated Regression Testing to the RescueTechWell
 
PushToTest TestMaker 6.5 Open Source Test Design Document
PushToTest TestMaker 6.5 Open Source Test Design DocumentPushToTest TestMaker 6.5 Open Source Test Design Document
PushToTest TestMaker 6.5 Open Source Test Design DocumentClever Moe
 
Q con shanghai2013-[黄舒泉]-[intel it openstack practice]
Q con shanghai2013-[黄舒泉]-[intel it openstack practice]Q con shanghai2013-[黄舒泉]-[intel it openstack practice]
Q con shanghai2013-[黄舒泉]-[intel it openstack practice]Michael Zhang
 
Reproducibility in artificial intelligence
Reproducibility in artificial intelligenceReproducibility in artificial intelligence
Reproducibility in artificial intelligenceCarlos Toxtli
 

La actualidad más candente (20)

Kku2011
Kku2011Kku2011
Kku2011
 
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
 
QTP Automation Testing Tutorial 6
QTP Automation Testing Tutorial 6QTP Automation Testing Tutorial 6
QTP Automation Testing Tutorial 6
 
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMs
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMsPhosphor: Illuminating Dynamic Data Flow in Commodity JVMs
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMs
 
Automatic testing in DevOps
Automatic testing in DevOpsAutomatic testing in DevOps
Automatic testing in DevOps
 
Continuous Testing
Continuous TestingContinuous Testing
Continuous Testing
 
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, PuppetPuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
 
Craftsmanship Workshop: Coding Kata
Craftsmanship Workshop: Coding KataCraftsmanship Workshop: Coding Kata
Craftsmanship Workshop: Coding Kata
 
Need forbuildspeed agile2012
Need forbuildspeed agile2012Need forbuildspeed agile2012
Need forbuildspeed agile2012
 
Performance Analysis of Idle Programs
Performance Analysis of Idle ProgramsPerformance Analysis of Idle Programs
Performance Analysis of Idle Programs
 
ProspectusPresentationPrinterFriendly
ProspectusPresentationPrinterFriendlyProspectusPresentationPrinterFriendly
ProspectusPresentationPrinterFriendly
 
Master class in Java in 2018
Master class in Java in 2018Master class in Java in 2018
Master class in Java in 2018
 
Master class in modern Java
Master class in modern JavaMaster class in modern Java
Master class in modern Java
 
Master class in modern Java
Master class in modern JavaMaster class in modern Java
Master class in modern Java
 
Autom editor video blooper recognition and localization for automatic monolo...
Autom editor  video blooper recognition and localization for automatic monolo...Autom editor  video blooper recognition and localization for automatic monolo...
Autom editor video blooper recognition and localization for automatic monolo...
 
Reverse engineering and instrumentation of android apps
Reverse engineering and instrumentation of android appsReverse engineering and instrumentation of android apps
Reverse engineering and instrumentation of android apps
 
Continuous Automated Regression Testing to the Rescue
Continuous Automated Regression Testing to the RescueContinuous Automated Regression Testing to the Rescue
Continuous Automated Regression Testing to the Rescue
 
PushToTest TestMaker 6.5 Open Source Test Design Document
PushToTest TestMaker 6.5 Open Source Test Design DocumentPushToTest TestMaker 6.5 Open Source Test Design Document
PushToTest TestMaker 6.5 Open Source Test Design Document
 
Q con shanghai2013-[黄舒泉]-[intel it openstack practice]
Q con shanghai2013-[黄舒泉]-[intel it openstack practice]Q con shanghai2013-[黄舒泉]-[intel it openstack practice]
Q con shanghai2013-[黄舒泉]-[intel it openstack practice]
 
Reproducibility in artificial intelligence
Reproducibility in artificial intelligenceReproducibility in artificial intelligence
Reproducibility in artificial intelligence
 

Destacado

Building a Cloud-based Social Network with Zend Framework and Doctrine 2
Building a Cloud-based Social Network with Zend Framework and Doctrine 2Building a Cloud-based Social Network with Zend Framework and Doctrine 2
Building a Cloud-based Social Network with Zend Framework and Doctrine 2Mayflower GmbH
 
PHP Days 2011 - Keynote: Microsoft WebMatrix
PHP Days 2011 - Keynote: Microsoft WebMatrixPHP Days 2011 - Keynote: Microsoft WebMatrix
PHP Days 2011 - Keynote: Microsoft WebMatrixpietrobr
 
How to create social apps for millions of users
How to create social apps for millions of users How to create social apps for millions of users
How to create social apps for millions of users Bastian Hofmann
 
Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012Combell NV
 
2012 Confoo: Changing the Face of Identity in Ecommerce
2012 Confoo: Changing the Face of Identity in Ecommerce2012 Confoo: Changing the Face of Identity in Ecommerce
2012 Confoo: Changing the Face of Identity in EcommerceJonathan LeBlanc
 
23k guestbooks mix
23k guestbooks mix23k guestbooks mix
23k guestbooks mixWaleed Ahmad
 

Destacado (10)

Building a Cloud-based Social Network with Zend Framework and Doctrine 2
Building a Cloud-based Social Network with Zend Framework and Doctrine 2Building a Cloud-based Social Network with Zend Framework and Doctrine 2
Building a Cloud-based Social Network with Zend Framework and Doctrine 2
 
Write php deploy everywhere tek11
Write php deploy everywhere   tek11Write php deploy everywhere   tek11
Write php deploy everywhere tek11
 
Misguided manager
Misguided managerMisguided manager
Misguided manager
 
PHP Days 2011 - Keynote: Microsoft WebMatrix
PHP Days 2011 - Keynote: Microsoft WebMatrixPHP Days 2011 - Keynote: Microsoft WebMatrix
PHP Days 2011 - Keynote: Microsoft WebMatrix
 
How to create social apps for millions of users
How to create social apps for millions of users How to create social apps for millions of users
How to create social apps for millions of users
 
Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012
 
2012 Confoo: Changing the Face of Identity in Ecommerce
2012 Confoo: Changing the Face of Identity in Ecommerce2012 Confoo: Changing the Face of Identity in Ecommerce
2012 Confoo: Changing the Face of Identity in Ecommerce
 
Mashing up JavaScript
Mashing up JavaScriptMashing up JavaScript
Mashing up JavaScript
 
23k guestbooks mix
23k guestbooks mix23k guestbooks mix
23k guestbooks mix
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 

Similar a Php com con-2011

Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperMike Melusky
 
Automation for Anyone at Nutanix NEXT 2017 US
Automation for Anyone at Nutanix NEXT 2017 USAutomation for Anyone at Nutanix NEXT 2017 US
Automation for Anyone at Nutanix NEXT 2017 USChris Wahl
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperMike Melusky
 
Test parallelization using Jenkins
Test parallelization using JenkinsTest parallelization using Jenkins
Test parallelization using JenkinsRogue Wave Software
 
Continuous Integration @ Haptik
Continuous Integration @ HaptikContinuous Integration @ Haptik
Continuous Integration @ HaptikPrateek Gupte
 
Introduction to jenkins
Introduction to jenkinsIntroduction to jenkins
Introduction to jenkinsAbe Diaz
 
Tool Up Your LAMP Stack
Tool Up Your LAMP StackTool Up Your LAMP Stack
Tool Up Your LAMP StackLorna Mitchell
 
Tools for Software Testing
Tools for Software TestingTools for Software Testing
Tools for Software TestingMohammed Moishin
 
Introduction to jenkins for the net developer
Introduction to jenkins for the net developerIntroduction to jenkins for the net developer
Introduction to jenkins for the net developerAbe Diaz
 
Introduction to Automated Testing
Introduction to Automated TestingIntroduction to Automated Testing
Introduction to Automated TestingLars Thorup
 
Introduction to-automated-testing
Introduction to-automated-testingIntroduction to-automated-testing
Introduction to-automated-testingBestBrains
 
How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.Matt Eland
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
 
Unit Testing in R with Testthat - HRUG
Unit Testing in R with Testthat - HRUGUnit Testing in R with Testthat - HRUG
Unit Testing in R with Testthat - HRUGegoodwintx
 

Similar a Php com con-2011 (20)

Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and Dapper
 
Automation for Anyone at Nutanix NEXT 2017 US
Automation for Anyone at Nutanix NEXT 2017 USAutomation for Anyone at Nutanix NEXT 2017 US
Automation for Anyone at Nutanix NEXT 2017 US
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and Dapper
 
Test parallelization using Jenkins
Test parallelization using JenkinsTest parallelization using Jenkins
Test parallelization using Jenkins
 
Continuous Integration @ Haptik
Continuous Integration @ HaptikContinuous Integration @ Haptik
Continuous Integration @ Haptik
 
Introduction to jenkins
Introduction to jenkinsIntroduction to jenkins
Introduction to jenkins
 
Functional Tests. PHP Unconf 2016
Functional Tests. PHP Unconf 2016Functional Tests. PHP Unconf 2016
Functional Tests. PHP Unconf 2016
 
Tool up your lamp stack
Tool up your lamp stackTool up your lamp stack
Tool up your lamp stack
 
Tool Up Your LAMP Stack
Tool Up Your LAMP StackTool Up Your LAMP Stack
Tool Up Your LAMP Stack
 
Devops
DevopsDevops
Devops
 
Tools for Software Testing
Tools for Software TestingTools for Software Testing
Tools for Software Testing
 
Introduction to jenkins for the net developer
Introduction to jenkins for the net developerIntroduction to jenkins for the net developer
Introduction to jenkins for the net developer
 
Introduction to Automated Testing
Introduction to Automated TestingIntroduction to Automated Testing
Introduction to Automated Testing
 
Introduction to-automated-testing
Introduction to-automated-testingIntroduction to-automated-testing
Introduction to-automated-testing
 
Build Time Hacking
Build Time HackingBuild Time Hacking
Build Time Hacking
 
How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
Test automation proposal
Test automation proposalTest automation proposal
Test automation proposal
 
Framework
FrameworkFramework
Framework
 
Unit Testing in R with Testthat - HRUG
Unit Testing in R with Testthat - HRUGUnit Testing in R with Testthat - HRUG
Unit Testing in R with Testthat - HRUG
 

Más de LB Denker

Testing and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons LearnedTesting and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons LearnedLB Denker
 
Php|tek '12 It's More Than Just Style
Php|tek '12  It's More Than Just StylePhp|tek '12  It's More Than Just Style
Php|tek '12 It's More Than Just StyleLB Denker
 
Developer testing 201: When to Mock and When to Integrate
Developer testing 201: When to Mock and When to IntegrateDeveloper testing 201: When to Mock and When to Integrate
Developer testing 201: When to Mock and When to IntegrateLB Denker
 
Developer testing 101: Become a Testing Fanatic
Developer testing 101: Become a Testing FanaticDeveloper testing 101: Become a Testing Fanatic
Developer testing 101: Become a Testing FanaticLB Denker
 
phpDay 2012: Scaling Communication via Continuous Integration
phpDay 2012: Scaling Communication via Continuous IntegrationphpDay 2012: Scaling Communication via Continuous Integration
phpDay 2012: Scaling Communication via Continuous IntegrationLB Denker
 
QC Merge 2012: Growing community
QC Merge 2012: Growing communityQC Merge 2012: Growing community
QC Merge 2012: Growing communityLB Denker
 
PHP UK Conference 2012: Scaling Communication via Continuous Integration
PHP UK Conference 2012: Scaling Communication via Continuous IntegrationPHP UK Conference 2012: Scaling Communication via Continuous Integration
PHP UK Conference 2012: Scaling Communication via Continuous IntegrationLB Denker
 
Are Your Tests Really Helping You?
Are Your Tests Really Helping You?Are Your Tests Really Helping You?
Are Your Tests Really Helping You?LB Denker
 

Más de LB Denker (8)

Testing and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons LearnedTesting and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons Learned
 
Php|tek '12 It's More Than Just Style
Php|tek '12  It's More Than Just StylePhp|tek '12  It's More Than Just Style
Php|tek '12 It's More Than Just Style
 
Developer testing 201: When to Mock and When to Integrate
Developer testing 201: When to Mock and When to IntegrateDeveloper testing 201: When to Mock and When to Integrate
Developer testing 201: When to Mock and When to Integrate
 
Developer testing 101: Become a Testing Fanatic
Developer testing 101: Become a Testing FanaticDeveloper testing 101: Become a Testing Fanatic
Developer testing 101: Become a Testing Fanatic
 
phpDay 2012: Scaling Communication via Continuous Integration
phpDay 2012: Scaling Communication via Continuous IntegrationphpDay 2012: Scaling Communication via Continuous Integration
phpDay 2012: Scaling Communication via Continuous Integration
 
QC Merge 2012: Growing community
QC Merge 2012: Growing communityQC Merge 2012: Growing community
QC Merge 2012: Growing community
 
PHP UK Conference 2012: Scaling Communication via Continuous Integration
PHP UK Conference 2012: Scaling Communication via Continuous IntegrationPHP UK Conference 2012: Scaling Communication via Continuous Integration
PHP UK Conference 2012: Scaling Communication via Continuous Integration
 
Are Your Tests Really Helping You?
Are Your Tests Really Helping You?Are Your Tests Really Helping You?
Are Your Tests Really Helping You?
 

Último

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 

Último (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

Php com con-2011

  • 1. Is It Handmade Code If You Use Power Tools? Photo by matsbeads on Etsy Laura Beth Denker (@elblinkin)
  • 2. Is It Handmade Code If You Use Power Tools? In the beginning... •Deployments happened weekly •Development happened on branches •Release Manager role rotations efo re B
  • 3. Is It Handmade Code If You Use Power Tools? Deployinator •One button deployment •Eliminated painful weekly deploys • Deployments went up to a handful a day •Eliminated release manager role rotations • If you committed code, it was your responsibility to push the button efo re B
  • 4. Is It Handmade Code If You Use Power Tools? Voila! Continuous Deployment •Buy-in •One-button deployment process (NO fear!*) •Monitoring and graphs * NO fear in the deploy process, but still some healthy fear in the code changes
  • 5. Is It Handmade Code If You Use Power Tools? “Confidence is contagious; so is lack of confidence.” Vince Lombardi
  • 6. Is It Handmade Code If You Use Power Tools? Buildbot •Developer written and maintained CI System • Resulted in Test Infrastructure being convoluted with site architecture • Test infrastructure was untested •Tests written in Python • But we’re a PHP shop •Slow and resource intensive • Could not run on a developer VM •Non-deterministic failures • Flaky tests • Assertions in helpers • EC2 connectivity issues
  • 7. Is It Handmade Code If You Use Power Tools? (Hudson) Jenkins CI •Open source •High community involvement •Highly configurable •Numerous plugins •Eliminated the pitfalls of developer written and maintained CI 21 J u ne
  • 8. Is It Handmade Code If You Use Power Tools? PyUnit to PHPUnit •~1,500 tests moved to our lingua franca •~3 minutes to run new PHPUnit tests •Eliminated context-switching between languages ly 19 Ju
  • 9. Is It Handmade Code If You Use Power Tools? Commit Mutex 1. Commit code to trunk (maybe merge a development branch into trunk) 2. Wait for Buildbot (and Jenkins) to tests a. If tests PASS, continue to Deployinator and begin deployment b. If tests FAIL, kick Buildbot (and Jenkins) because it might be a flake, then do any of the following i. Repeat step (b) until it passes ii. Debug failures and begin fixing trunk iii. Rollback Note: While there are committed changes in trunk that have not been deployed, DO NOT COMMIT
  • 10. Is It Handmade Code If You Use Power Tools? Why is there a Commit Mutex? 1.Branch development 2.Tests cannot run in a timely fashion on the developer VMs
  • 11. Is It Handmade Code If You Use Power Tools? Try Server v.1 •Jenkins parameterized build + shell script •Parameters • username • patch file •Shell script • Create a patch file • Create the JSON • Send a request to Jenkins via cURL •Branches NOT SUPPORTED •Eliminated the Commit Mutex
  • 12. Is It Handmade Code If You Use Power Tools? g us t 19 Au
  • 13. Is It Handmade Code If You Use Power Tools? Try Server v.1.1 •Jenkins parameterized build + PHP script •Parameters • username • patch file •PHP script • Support for creating git-svn patches • Support for dry runs • Support for uploading manually created patches
  • 14. Is It Handmade Code If You Use Power Tools? Test Classification •Unit •Integration •Functional (System)
  • 15. Is It Handmade Code If You Use Power Tools? Test Classification •Functional (System) • Provides confidence that a particular use case works • Unit • Integration
  • 16. Is It Handmade Code If You Use Power Tools? Legacy CI System is Dead! er 15 pte mb Se
  • 17. Is It Handmade Code If You Use Power Tools? Test Classification • Functional (System) •Integration • Tests interaction between a discrete number of components • A set of interacting classes • Interaction with an external service • Unit
  • 18. Is It Handmade Code If You Use Power Tools? Test Classification • Functional (System) • Integration •Unit • Fast • Deterministic • NO database • NO file system • NO network • NO threading, forking processes • NO sleep • NO time dependencies • Tests a single object • Best way to obtain line coverage • Reduces debug time
  • 19. Is It Handmade Code If You Use Power Tools? PHPUnit @group •@group to declare external dependencies •PHPUnit XML Configuration •Jenkins Project for each configuration er 21 Oc to b
  • 20. Is It Handmade Code If You Use Power Tools? PHPUnit @group @group cache for tests that use memcache or another cache er 21 Oc to b
  • 21. Is It Handmade Code If You Use Power Tools? PHPUnit @group @group database for tests that use a database like postgres or mysql er 21 Oc to b
  • 22. Is It Handmade Code If You Use Power Tools? PHPUnit @group @group network for tests that talk to external services (in-house or 3rd party) er 21 Oc to b
  • 23. Is It Handmade Code If You Use Power Tools? PHPUnit @group @group sleep for tests that call a sleep() function er 21 Oc to b
  • 24. Is It Handmade Code If You Use Power Tools? PHPUnit @group @group time for tests that depend on the time of day or day of the year, etc. er 21 Oc to b
  • 25. Is It Handmade Code If You Use Power Tools? PHPUnit @group @group smoke for tests that execute cURL and regex based tests against an instance of the web service under test er 21 Oc to b
  • 26. Is It Handmade Code If You Use Power Tools? PHPUnit @group @group flaky for tests that fail without code changes er 21 Oc to b
  • 27. Is It Handmade Code If You Use Power Tools? PHPUnit @group There is NO @group for unit tests. er 21 Oc to b
  • 28. Is It Handmade Code If You Use Power Tools? PHPUnit @group •@group to declare external dependencies •PHPUnit XML Configuration •Jenkins Project for each configuration er 21 Oc to b
  • 29. Is It Handmade Code If You Use Power Tools? 40 Deploys in a Day •November 18th, 2010 • <5 months after first dedicated Test & Automation engineer • <3 months after releasing Try Server • 1 week before Thanksgiving freeze •34 deploys the day after ber No ve m ! !! 18
  • 30. Is It Handmade Code If You Use Power Tools? How do we keep the momentum? •The tests ported to PHPUnit are flaky • Re-building intermittent failures is wasting time in the push queue •We are hiring more engineers • We need to deploy as fast, if not faster •We are writing more tests • More tests can take more time, so we need to write faster tests • Started at 1,500 tests, now running >7,000 tests ber ! Cy y ! Mo n da
  • 31. Is It Handmade Code If You Use Power Tools? Random Data BAD •Fixtures Framework •Written and maintained by developers •Original intent • Generate data to run test instance of the website •Unexpected usage • Flaky and hard to debug integration tests posing as unit tests
  • 32. Is It Handmade Code If You Use Power Tools? DBUnit for Multiple Databases •Shard-ed database architecture •Our ORM talks to multiple databases • At least the index and a shard •PHPUnit_Extensions_Database_MultipleDatab ases •Increased clarity in old tests ported to PHPUnit • Data explicitly specified in YAML, not at random • Developer needs to know what databases 8test will touch ra em be De c
  • 33. Is It Handmade Code If You Use Power Tools? Worth Mentioning: Try Server v.2 •Master try project in Jenkins • PHP Script executed in Jenkins shell builder • Started all sub-projects over cURL • Pinged all sub-projects for status • Used Jenkins Text Finder plugin to toggle project state • Sent a unified result e-mail •Eliminated problems finding test results be r8 De cem
  • 34. Is It Handmade Code If You Use Power Tools? Worth Mentioning: Try Server v.2 be r8 De cem
  • 35. Is It Handmade Code If You Use Power Tools? Why to mock? unit tests test the functionality of a single method in a single object with the expectations of the collaborating objects test case as a suitcase contains suits, a test case contains tests
  • 36. Is It Handmade Code If You Use Power Tools? PHPUnit Mock Helpers Making it easier to create mocks, should support writing more unit tests • Tweaking prod code • Writing short, tested helpers for internal types • PHPUnit_Extensions_MockObject_Stub_ReturnMapping • UPDATE: Now in PHPUnit as $this->returnValueMap() • Still more to do... ry 31 Ja nua
  • 37. Is It Handmade Code If You Use Power Tools? PHPUnit Extensions Open-sourced on Github ry 27 Fe b r ua
  • 38. Is It Handmade Code If You Use Power Tools? Try Server v.3 Jenkins Master Project Plugin Try’d out on Try Server ch 24 M ar
  • 39. Is It Handmade Code If You Use Power Tools? Pake Now test locally, just like Jenkins! Ap ril 5
  • 40. Is It Handmade Code If You Use Power Tools? Deployinator Info in Jenkins! Jenkins Master Project Plugin Just like Try Jenkins Deployinator Plugin Special CLI Command ONE Jenkins job per deployment stage Previously, ~15 Jobs that were difficult to correlate with a push pr il 9 A
  • 41. Is It Handmade Code If You Use Power Tools? On the Big Monitors!
  • 42. Is It Handmade Code If You Use Power Tools? Still More to Come... •Flaky test resolution •More focused DBUnit Tests •Make pure unit testing even easier •Try to solve whatever comes next... on d !! Bey
  • 43. Is It Handmade Code If You Use Power Tools? References Code As Craft http://codeascraft.etsy.com/ Deployinator http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/ Divide and Concur http://codeascraft.etsy.com/2011/04/20/divide-and-concur/ Etsy PHPUnit Extensions https://github.com/etsy/phpunit-extensions Jenkins CI http://jenkins-ci.org/ PHPUnit https://github.com/sebastianbergmann/phpunit/
  • 44. Is It Handmade Code If You Use Power Tools? Wardrobe Furnished By Spring Daisies Short Patchwork Dress http://www.etsy.com/shop/pineapplepop of Nashville, TN Asymmetric Flower and Beads Necklace (Silver) Created by Michelle D’Netto, Software Engineer @ Etsy Knitted DROPS Bolero with Lace Pattern http://www.garnstudio.com/lang/en/visoppskrift.php?d_nr=127&d_id=24 Design by DROPS Design Kni t bu t te Knitted by Laura Beth Denker a l as d at t h , e f o r i t wa s C o n f, the t dre s o o d a r k s :-(
  • 45. Is It Handmade Code If You Use Power Tools? Our software is artisanally crafted using the ancient techniques from the 1960s. All releases are aged in a handmade filled cave for at least 20 minutes before decanting to the Web. --Noah Sussman

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. Reprise\n
  29. \n
  30. \n
  31. \n
  32. \n
  33. Moved all logic except for the patch creation to Jenkins\n diffutils to filter appropriate diffs for each sub-project\n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n