SlideShare une entreprise Scribd logo
1  sur  108
Télécharger pour lire hors ligne
PHP Quebec - January 2014
Eric Hogue
@ehogue
erichogue.ca
Guarding Your Code Against
Bugs with Continuous Testing
Continuous Testing
Wikipedia
a software development practice that extends
test-driven development by means of automatic
test execution in the background.
http://en.wikipedia.org/wiki/Continuous_test-driven_development
How I Discovered it
Test Driven Development
Repetitive ...
Code Kata
Eureka!
Automate the Automated Tests
Searching
autotest
AutoPHPUnit
Watchr
Guard
Plugins
Installation - Settings
Ruby
Install Ruby With RVM
$ curl -sSL https://get.rvm.io | bash
-s stable --ruby
$ ruby -v
ruby 2.1.3p242 (2014-09-19 revision
47630) [x86_64-linux]
RubyGems + Bundler
Gemfile
source 'https://rubygems.org'
group :development do
gem 'guard'
end
bundle install
$ bundle install
Fetching gem metadata from https:
//rubygems.org/...........
...
Installing guard 2.6.1
Your bundle is complete!
Running Guard
$ bundle exec guard
00:53:09 - ERROR - No Guardfile found,
please create one with `guard init`.
Guardfile
Project root - Guardfile
Home folder - .Guardfile
Home folder - .guard.rb
notification :off
Guardfile
notification :off
guard 'guardname' do
end
Guardfile
notification :off
guard 'guardname', :option => value do
end
Guardfile
notification :off
guard 'guardname', :option => value do
watch(%r{^regex$})
end
Guardfile
Notifications
System Notification
group :development do
gem 'libnotify' #Linux
gem 'growl' #Mac OS
gem 'rb-notifu' #Windows
end
Gemfile
notification :libnotify #Linux
notification :growl #Mac OS
notification :notifu #Windows
Guardfile
Terminal Title
notification :terminal_title
Guardfile
tmux
notification :tmux,
display_message: true
Guardfile
notification :off
No Notifications
PHP Guards
Guard::PHPUnit2
Gemfile
group :development do
...
gem 'guard-phpunit2', :git =>
"https://github.com/EricHogue/guard-
phpunit2.git"
end
Guardfile
guard 'phpunit2', :cli => '--colors',
:tests_path => 'tests' do
watch(%r{^tests/.+Test.php$})
end
Guardfile
guard 'phpunit2', :cli => '--colors',
:tests_path => 'tests' do
watch(%r{^tests/.+Test.php$})
end
Guardfile
guard 'phpunit2', :cli => '--colors',
:tests_path => 'tests' do
watch(%r{^tests/.+Test.php$})
end
Guardfile
guard 'phpunit2', :cli => '--colors',
:tests_path => 'tests' do
watch(%r{^tests/.+Test.php$})
end
bundle exec guard
Guardfile
…
watch(%r{^src/(.+).php$}) { |m|
"tests/#{m[1]}Test.php"
}
%r{^src/(.+).php$}
src/TDD/Factorial.php
"tests/#{m[1]}Test.php"
phpunit tests/TDD/FactorialTest.php
:all_on_start
guard 'phpunit2', :all_on_start =>
true do
end
default => true
:tests_path
guard 'phpunit2', :tests_path =>
'path/to/tests' do
end
default => pwd
:all_after_pass
guard 'phpunit2', :all_after_pass =>
true do
end
default => true
:keep_failed
guard 'phpunit2', :keep_failed =>
true do
end
default => true
:command
guard 'phpunit2', :command =>
'./vendor/bin/phpunit' do
end
default => phpunit
:cli
guard 'phpunit2',
:cli => '--colors' do
end
default => nil
Guard::PHPCS
Gemfile
group :development do
...
gem 'guard-phpcs'
end
Guardfile
guard 'phpcs', :standard => 'PSR2',
:executable => "./vendor/bin/phpcs"
do
watch(%r{.*.php$})
end
Guardfile
guard 'phpcs', :standard => 'PSR2',
:executable => "./vendor/bin/phpcs"
do
watch(%r{.*.php$})
end
Guardfile
guard 'phpcs', :standard => 'PSR2',
:executable => "./vendor/bin/phpcs"
do
watch(%r{.*.php$})
end
Guardfile
guard 'phpcs', :standard => 'PSR2',
:executable => "./vendor/bin/phpcs"
do
watch(%r{.*.php$})
end
PHPCS - PSR2
Guard::PHPMD
Gemfile
group :development do
...
gem 'guard-phpmd'
end
Guardfile
guard 'phpmd',
:executable => './vendor/bin/phpmd',
:rules => 'pmd-rules.xml' do
watch(%r{.*.php$})
end
Guardfile
guard 'phpmd',
:executable => './vendor/bin/phpmd',
:rules => 'pmd-rules.xml' do
watch(%r{.*.php$})
end
Guardfile
guard 'phpmd',
:executable => './vendor/bin/phpmd',
:rules => 'pmd-rules.xml' do
watch(%r{.*.php$})
end
pmd-rules.xml
...
<rule ref="rulesets/codesize.xml" />
<rule ref="rulesets/design.xml" />
<rule ref="rulesets/naming.xml" />
<rule ref="rulesets/unusedcode.xml" />
<rule ref="rulesets/controversial.xml" />
...
Guardfile
guard 'phpmd',
:executable => './vendor/bin/phpmd',
:rules => 'pmd-rules.xml' do
watch(%r{.*.php$})
end
PHPMD
Other Guards
More
More than 200 plugins
JavaScript
Gemfile
group :development do
...
gem 'guard-jasmine'
end
Guardfile
guard 'jasmine', :jasmine_url => 'http:
//localhost:8000/SpecRunner.html'
...
end
Guardfile
guard 'jasmine', :jasmine_url => '',
:server => :none do
watch(%r{spec/.+Spec.js$})
end
Guardfile
guard 'jasmine', :jasmine_url => '',
:server => :none do
watch(%r{spec/.+Spec.js$})
end
Guard::Jasmine
LiveReload
LiveReload
Gemfile
group :development do
...
gem 'guard-livereload'
end
Guardfile
guard 'livereload' do
watch(%r{public/.+.(css|js|html)})
end
Guard::Bundler
Gemfile
group :development do
...
gem 'guard-bundler'
end
Guardfile
guard :bundler do
watch('Gemfile')
end
Guard::Bundler
Guard::Shell
Gemfile
group :development do
...
gem 'guard-shell'
end
Guardfile
guard 'shell' do
watch(%r{^.+.php$}) do |m|
`php -l #{m[0]}`
true
end
end
Lint check
Guardfile
`php -l #{m[0]}`
if ($?.success?)
n "#{m[0]} correct",'Syntax',:success
else
n "#{m[0]} incorrect",'Syntax',:failed
end
Composer
Guardfile
guard 'shell' do
watch("composer.lock") do |m|
p "Running composer install"
`composer install`
…
end
end
Composer
Inline Guard
Guardfile
require 'guard/plugin'
module ::Guard
class BehatGuard < ::Guard::Plugin
end
end
Guardfile
def start
puts 'Run all Behat tests'
puts `./vendor/bin/behat`
end
Guardfile
def run_on_changes(paths)
paths.each do |file|
puts `./vendor/bin/behat #{file}`
end
end
Guardfile
guard 'BehatGuard' do
watch(%r{^features/.+.feature$})
end
Behat
PHPUnit
PHPCS
PHPMD
php -l
composer install
Jasmine
LiveReload
Behat
Automate Your Automated Test
Questions?
PHP Mentoring: http://phpmentoring.org/
Comments: https://joind.in/13245
twitter: @ehogue
Blog: http://erichogue.ca/
EndlessTunnel.jpg - Trey Ratcliff - https://www.flickr.com/photos/stuckincustoms/4539732832
History.jpg - Morten Diesen - http://www.flickr.com/photos/mortendiesen/8091682612
StreetLights.jpg - William Warby - http://www.flickr.com/photos/wwarby/2460655511
FadeToGrey.jpg - Andreas Levers - https://www.flickr.com/photos/96dpi/2571056264
Kata.jpg - ser... ser... - http://www.flickr.com/photos/el_ser_lomo/3267627038
Archimedes.jpg - Sputnik Beanburger III - https://www.flickr.com/photos/sputnikbeanburgeriii/4690475562/in/photostream/
GearWork2.jpg - Curious Expeditions - https://www.flickr.com/photos/curiousexpeditions/489992128
SARHelicopter.jpg - UK Ministry of Defence - https://www.flickr.com/photos/defenceimages/8695434365
RelayBox.jpg - Ed Hunsinger - https://www.flickr.com/photos/edrabbit/4698481573
Ruby.jpg - Joren De Groof - https://www.flickr.com/photos/jorendegroof/4470431763
RubyGems.png - Linux Screenshots - https://www.flickr.com/photos/xmodulo/14652484443
Files.jpg - Travis Wise - https://www.flickr.com/photos/photographingtravis/14745936519
Root.jpg - きうこ - https://www.flickr.com/photos/kiuko/9112281601
Home.jpg - Warren - https://www.flickr.com/photos/jety/3277812553
Alarm.jpg - Fabian - https://www.flickr.com/photos/snapsi42/3436162040
Containers.jpg - www.GlynLowe.com - https://www.flickr.com/photos/glynlowe/10921733615
Mess.jpg - Moyan Brenn - https://www.flickr.com/photos/aigle_dore/5481297641
Shells.jpg - Bemep - https://www.flickr.com/photos/40626436@N00/40822551
DoItYourself.jpg - Vlasta Juricek - https://www.flickr.com/photos/vlastula/3229196769
Languages.jpg - Valerie Everett - https://www.flickr.com/photos/valeriebb/3008977110
Javascript.jpg - Nathan Smith - https://www.flickr.com/photos/nathansmith/4704268314
Stacks.jpg - Roman Boed - https://www.flickr.com/photos/romanboed/13356494013
js.png - Chris Williams - https://github.com/voodootikigod/logo.js
AssemblyLine.jpg - Fiat Chrysler Automobiles: Corporate - https://www.flickr.com/photos/chryslergroup/13194222244
CarCrash.jpg - JaseMan - http://www.flickr.com/photos/bargas/3695903512/

Contenu connexe

Tendances

Puppet Module Reusability - What I Learned from Shipping to the Forge
Puppet Module Reusability - What I Learned from Shipping to the ForgePuppet Module Reusability - What I Learned from Shipping to the Forge
Puppet Module Reusability - What I Learned from Shipping to the Forge
Puppet
 
Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013
Puppet
 
How to deploy node to production
How to deploy node to productionHow to deploy node to production
How to deploy node to production
Sean Hess
 
Nginx 0.9.x 安装手册
Nginx 0.9.x 安装手册Nginx 0.9.x 安装手册
Nginx 0.9.x 安装手册
Yiwei Ma
 
Node.js basics
Node.js basicsNode.js basics
Node.js basics
Ben Lin
 

Tendances (20)

Puppet Module Reusability - What I Learned from Shipping to the Forge
Puppet Module Reusability - What I Learned from Shipping to the ForgePuppet Module Reusability - What I Learned from Shipping to the Forge
Puppet Module Reusability - What I Learned from Shipping to the Forge
 
Codeigniter4の比較と検証
Codeigniter4の比較と検証Codeigniter4の比較と検証
Codeigniter4の比較と検証
 
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018) Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
 
Intro django
Intro djangoIntro django
Intro django
 
Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013
 
Docker command
Docker commandDocker command
Docker command
 
Docker remote-api
Docker remote-apiDocker remote-api
Docker remote-api
 
Using Puppet to Create a Dynamic Network - PuppetConf 2013
Using Puppet to Create a Dynamic Network - PuppetConf 2013Using Puppet to Create a Dynamic Network - PuppetConf 2013
Using Puppet to Create a Dynamic Network - PuppetConf 2013
 
はじめてのSymfony2
はじめてのSymfony2はじめてのSymfony2
はじめてのSymfony2
 
How to deploy node to production
How to deploy node to productionHow to deploy node to production
How to deploy node to production
 
Nginx 0.9.x 安装手册
Nginx 0.9.x 安装手册Nginx 0.9.x 安装手册
Nginx 0.9.x 安装手册
 
EC2
EC2EC2
EC2
 
Node.js basics
Node.js basicsNode.js basics
Node.js basics
 
Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)
Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)
Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)
 
DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)
 
Zen: Building Maintainable Catalyst Applications
Zen: Building Maintainable Catalyst ApplicationsZen: Building Maintainable Catalyst Applications
Zen: Building Maintainable Catalyst Applications
 
Docker practice
Docker practiceDocker practice
Docker practice
 
Puppet User Group Presentation - 15 March 2012
Puppet User Group Presentation - 15 March 2012Puppet User Group Presentation - 15 March 2012
Puppet User Group Presentation - 15 March 2012
 
An introduction to PHP 5.4
An introduction to PHP 5.4An introduction to PHP 5.4
An introduction to PHP 5.4
 
Composer, putting dependencies on the score
Composer, putting dependencies on the scoreComposer, putting dependencies on the score
Composer, putting dependencies on the score
 

En vedette

Mobility Management Campaigns - Powered by Commute Greener
Mobility Management Campaigns - Powered by Commute Greener Mobility Management Campaigns - Powered by Commute Greener
Mobility Management Campaigns - Powered by Commute Greener
Henrik Willford
 
Morphic Media Presentation
Morphic Media PresentationMorphic Media Presentation
Morphic Media Presentation
LoriDuncs
 
Semana Santa Huelva
Semana Santa HuelvaSemana Santa Huelva
Semana Santa Huelva
JAVIER
 

En vedette (18)

Mobility Management Campaigns - Powered by Commute Greener
Mobility Management Campaigns - Powered by Commute Greener Mobility Management Campaigns - Powered by Commute Greener
Mobility Management Campaigns - Powered by Commute Greener
 
Morphic Media Presentation
Morphic Media PresentationMorphic Media Presentation
Morphic Media Presentation
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tdd
 
Introduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHPIntroduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHP
 
Semana Santa Huelva
Semana Santa HuelvaSemana Santa Huelva
Semana Santa Huelva
 
Q1
Q1Q1
Q1
 
Continuous Testing
Continuous TestingContinuous Testing
Continuous Testing
 
Class 1; introduction
Class 1; introductionClass 1; introduction
Class 1; introduction
 
Introduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec JenkinsIntroduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec Jenkins
 
Introduction to ci with jenkins
Introduction to ci with jenkinsIntroduction to ci with jenkins
Introduction to ci with jenkins
 
Team Building(Silver Shadow Train The Trainer)By Waqas Hassan Khan
Team Building(Silver Shadow Train The Trainer)By Waqas Hassan KhanTeam Building(Silver Shadow Train The Trainer)By Waqas Hassan Khan
Team Building(Silver Shadow Train The Trainer)By Waqas Hassan Khan
 
Team Building(Train The Trainer Silver Shadow) By Waqas Hassan Khan
Team Building(Train The Trainer  Silver Shadow) By Waqas Hassan KhanTeam Building(Train The Trainer  Silver Shadow) By Waqas Hassan Khan
Team Building(Train The Trainer Silver Shadow) By Waqas Hassan Khan
 
Introduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with JenkinsIntroduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with Jenkins
 
Concevez votre site web avec php et mysql
Concevez votre site web avec php et mysqlConcevez votre site web avec php et mysql
Concevez votre site web avec php et mysql
 
Guide bonnes pratiques energies renouvelables
Guide bonnes pratiques energies renouvelablesGuide bonnes pratiques energies renouvelables
Guide bonnes pratiques energies renouvelables
 
Integration continue
Integration continueIntegration continue
Integration continue
 
Arbol de amigos
Arbol de amigosArbol de amigos
Arbol de amigos
 
Sobres de amistad
Sobres de amistadSobres de amistad
Sobres de amistad
 

Similaire à Guarding Your Code Against Bugs with Continuous Testing

Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Carlos Sanchez
 
Virtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + Puppet
Omar Reygaert
 

Similaire à Guarding Your Code Against Bugs with Continuous Testing (20)

Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Instrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con GitlabInstrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con Gitlab
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
 
Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!
 
Composer
ComposerComposer
Composer
 
Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
 
Installing php 7.4 Nginx Laravel 7.x on Centos 8
Installing php 7.4 Nginx Laravel 7.x on Centos 8Installing php 7.4 Nginx Laravel 7.x on Centos 8
Installing php 7.4 Nginx Laravel 7.x on Centos 8
 
Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36
 
Redmine on amazon ec2
Redmine on amazon ec2Redmine on amazon ec2
Redmine on amazon ec2
 
Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011
 
Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
 
My name is Trinidad
My name is TrinidadMy name is Trinidad
My name is Trinidad
 
Php Power Tools
Php Power ToolsPhp Power Tools
Php Power Tools
 
infra-as-code
infra-as-codeinfra-as-code
infra-as-code
 
Virtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + Puppet
 
Nodejs in Production
Nodejs in ProductionNodejs in Production
Nodejs in Production
 
PHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the CloudPHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the Cloud
 
Chef - industrialize and automate your infrastructure
Chef - industrialize and automate your infrastructureChef - industrialize and automate your infrastructure
Chef - industrialize and automate your infrastructure
 
Symfony2 for Midgard Developers
Symfony2 for Midgard DevelopersSymfony2 for Midgard Developers
Symfony2 for Midgard Developers
 

Dernier

%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Dernier (20)

%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 

Guarding Your Code Against Bugs with Continuous Testing