SlideShare a Scribd company logo
1 of 36
Download to read offline
Test Failed, Then...

Optimizing communication between people	
Toru Furukawa"
@torufurukawa"
Agenda	
•  Introduction

Web app syncing with live TV show"
•  Loose coupling"
•  Testable components"
•  Efficient communication"
Test Failed, Then...
Agile App Development 

on Concrete Backend Services	
HTML App"
App Server	
Backend Service(s)"
Project	
  dependent	
Common
Because...	
•  Requirements keep changing"
•  Not only Web, but also TV"
•  Not only TV, but also Web"
•  Spiky access traffic"
•  Common fundamental features"
▼"
•  Easy to change application"
•  Well tested platform"
Ended up with…	
HTML App"
App Server	
Counter" Messenger"
High Communication Cost	
"Communication overheads increase as the
number of people increases." F. Brooks"
Minimal and Effective Communication
Optimize Communication	
•  Between Components"
•  Between People
Test Failed, Then...
How to Simplify Dependency?	
HTML App"
App Server	
 Counter" Messenger"
PHP	
•  IMPORTANT: PHP is fine"
•  Cannot be combined with Python
component in language layer easily
Loose Coupling	
"Write small services that speak HTTP and
bridge them together with another
application.""
Armin Ronacher (@mitsuhiko)"
http://lucumr.pocoo.org/2010/12/24/common-mistakes-as-web-developer/
Loose Coupling	
HTML App"
(JavaScript)	
App Server"
(whatever)	
Counter"
(Python)	
Messenger"
(Node.js)	
HTTP
Assign Engineer for Component	
HTML App"
(JavaScript)	
App Server"
(whatever)	
Counter"
(Python)	
Messenger"
(Node.js)	
HTTP
Communication Paths
2 Projects Running
Wrap Engineers' Communication	
•  New layers to simplify inter-component
communication"
•  Assign new roles to simplify inter-people
communication
HTML App"
(JavaScript)	
App Server"
(whatever)	
Counter"
(Python)	
Messenger"
(Node.js)	
Server/Server Communication"
(Python)	
Client/Server Communication
Test Failed, Then...
Test Failed, Then...
If a servicewise feature does not
work, how to identify the cause?"
•  Ask developer to check logs?"
•  Ask developer to check DB?"
▼"
Make component diagnosable"
Instrument Components
Log with fluentd	
App Server"
(whatever)	
Counter"
(Python)	
Messenger"
(Node.js)	
fluentd	
Mongo	
  DB	
 Web App
Define CRUD APIs	
•  Make DB accessible from test and admin	
•  REST /objects/:id"
•  /get_objects

/get_object, /set_object, /delete_object"
▼"
•  Diagnose 1-layer deeper from outside"
"requests" package 

for Web API Access	
>>>	
  r	
  =	
  requests.get(url,	
  auth=(...),	
  ...)	
  
>>>	
  r	
  =	
  requests.post(url,	
  data={...},	
  ...)	
  
>>>	
  r.status_code	
  
200	
  
>>>	
  r.content	
  
u'{"foo":"bar","x":true}'	
  
>>>	
  r.json()	
  
{u'foo':	
  u'bar',	
  'x':	
  True}	
  
Library for Productivity	
•  Use testing libraries to increase
productivity 

i.e. how many test you write per hour"
•  setup and teardown"
– unittest"
– nose"
– py.test"
– testfixtures"
– etc.
Test Failed, Then...
Translate Test Report	
Traceback	
  (most	
  recent	
  call	
  last):	
  
	
  	
  File	
  "mytest.py",	
  line	
  7,	
  in	
  test	
  
	
  	
  	
  	
  assert	
  result	
  ==	
  expected	
  
AssertionError	
  
▼"
•  How do YOU determine what is wrong?"
•  How do you tell OTHERS what is wrong?"
▼"
•  Need better way to communicate
Library for Readability	
class	
  MyTest(unittest.TestCase):	
  
	
  	
  	
  	
  def	
  test(self):	
  
	
  	
  	
  	
  	
  	
  	
  	
  expected	
  =	
  {...}	
  
	
  	
  	
  	
  	
  	
  	
  	
  result	
  =	
  {...}	
  
	
  	
  	
  	
  	
  	
  	
  	
  self.assertEqual(x,	
  y)	
  
"
"
Traceback	
  (most	
  recent	
  call	
  last):	
  
	
  	
  File	
  "mytest.py",	
  line	
  7,	
  in	
  test	
  
	
  	
  	
  	
  self.assertEqual(x,	
  y)	
  
AssertionError:	
  {'items':	
  ['spam',	
  'spam'],	
  
'foo':	
  'bar'}	
  !=	
  {'items':	
  ['spam',	
  'ham'],	
  
'foo':	
  'bar'}	
  
-­‐	
  {'foo':	
  'bar',	
  'items':	
  ['spam',	
  'spam']}	
  
?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ^^	
  
	
  
+	
  {'foo':	
  'bar',	
  'items':	
  ['spam',	
  'ham']}	
  
?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ^
Python vs HTTP	
Python	
HTTP	
Test Fast	
Loosely
Couple	
Develop
Fast
If I stick to Python too much,

my communication is

tightly coupled
Convert requests function to curl	
>>>	
  import	
  curledrequests	
  as	
  requests	
  
>>>	
  requests.debug	
  =	
  True	
  
>>>	
  r	
  =	
  requests.get(	
  
...	
  	
  	
  'http://www.google.com/',	
  
...	
  	
  	
  params={'q':'python'})	
  
...	
  
$	
  curl	
  “http://www.google.com/?q=python”	
  -­‐w	
  
'n%{http_code}n'	
  
<!doctype	
  html><html	
  itemscope=""	
  
itemtype="http://schema.org/WebPage"><head><me	
  
...	
  
200	
  
h5p://goo.gl/hO579O	
  
Test Failed, Then...
Loosely Couple

Components and Engineers
Share Your Practice	
@torufurukawa or grab me"

More Related Content

What's hot

Background processing with Resque
Background processing with ResqueBackground processing with Resque
Background processing with ResqueNicolas Blanco
 
Deploying on the cutting edge
Deploying on the cutting edgeDeploying on the cutting edge
Deploying on the cutting edgeericholscher
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)Puppet
 
Selenium sandwich-3: Being where you aren't.
Selenium sandwich-3: Being where you aren't.Selenium sandwich-3: Being where you aren't.
Selenium sandwich-3: Being where you aren't.Workhorse Computing
 
Performance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-MechanizePerformance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-Mechanizecoreygoldberg
 
Using Prometheus to monitor your build pipelines
Using Prometheus to monitor your build pipelinesUsing Prometheus to monitor your build pipelines
Using Prometheus to monitor your build pipelinesLander Van den Bulcke
 
Stress Testing at Twitter: a tale of New Year Eves
Stress Testing at Twitter: a tale of New Year EvesStress Testing at Twitter: a tale of New Year Eves
Stress Testing at Twitter: a tale of New Year EvesHerval Freire
 
So you think JSON is cool?
So you think JSON is cool?So you think JSON is cool?
So you think JSON is cool?Herval Freire
 
Faster PHP apps using Queues and Workers
Faster PHP apps using Queues and WorkersFaster PHP apps using Queues and Workers
Faster PHP apps using Queues and WorkersRichard Baker
 
Mad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not GoogleMad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not GoogleAbel Muíño
 
Automated interactive testing for i os
Automated interactive testing for i osAutomated interactive testing for i os
Automated interactive testing for i osMobile March
 
API Days Paris - Automatic Testing of (RESTful) API Documentation
API Days Paris - Automatic Testing of (RESTful) API DocumentationAPI Days Paris - Automatic Testing of (RESTful) API Documentation
API Days Paris - Automatic Testing of (RESTful) API DocumentationRouven Weßling
 
AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜
AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜 AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜
AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜 崇之 清水
 
DevOps with Serverless
DevOps with ServerlessDevOps with Serverless
DevOps with ServerlessYan Cui
 
Wrangling WP_Cron - WordCamp Grand Rapids 2014
Wrangling WP_Cron - WordCamp Grand Rapids 2014Wrangling WP_Cron - WordCamp Grand Rapids 2014
Wrangling WP_Cron - WordCamp Grand Rapids 2014cklosowski
 

What's hot (20)

Background processing with Resque
Background processing with ResqueBackground processing with Resque
Background processing with Resque
 
Deploying on the cutting edge
Deploying on the cutting edgeDeploying on the cutting edge
Deploying on the cutting edge
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Selenium sandwich-3: Being where you aren't.
Selenium sandwich-3: Being where you aren't.Selenium sandwich-3: Being where you aren't.
Selenium sandwich-3: Being where you aren't.
 
Performance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-MechanizePerformance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-Mechanize
 
Using Prometheus to monitor your build pipelines
Using Prometheus to monitor your build pipelinesUsing Prometheus to monitor your build pipelines
Using Prometheus to monitor your build pipelines
 
Introdution to Node.js
Introdution to Node.jsIntrodution to Node.js
Introdution to Node.js
 
Stress Testing at Twitter: a tale of New Year Eves
Stress Testing at Twitter: a tale of New Year EvesStress Testing at Twitter: a tale of New Year Eves
Stress Testing at Twitter: a tale of New Year Eves
 
So you think JSON is cool?
So you think JSON is cool?So you think JSON is cool?
So you think JSON is cool?
 
Faster PHP apps using Queues and Workers
Faster PHP apps using Queues and WorkersFaster PHP apps using Queues and Workers
Faster PHP apps using Queues and Workers
 
Mad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not GoogleMad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not Google
 
Chef conf-2014
Chef conf-2014Chef conf-2014
Chef conf-2014
 
Automated interactive testing for i os
Automated interactive testing for i osAutomated interactive testing for i os
Automated interactive testing for i os
 
Getting testy with Perl
Getting testy with PerlGetting testy with Perl
Getting testy with Perl
 
Introduction to Celery
Introduction to CeleryIntroduction to Celery
Introduction to Celery
 
API Days Paris - Automatic Testing of (RESTful) API Documentation
API Days Paris - Automatic Testing of (RESTful) API DocumentationAPI Days Paris - Automatic Testing of (RESTful) API Documentation
API Days Paris - Automatic Testing of (RESTful) API Documentation
 
Queue your work
Queue your workQueue your work
Queue your work
 
AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜
AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜 AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜
AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜
 
DevOps with Serverless
DevOps with ServerlessDevOps with Serverless
DevOps with Serverless
 
Wrangling WP_Cron - WordCamp Grand Rapids 2014
Wrangling WP_Cron - WordCamp Grand Rapids 2014Wrangling WP_Cron - WordCamp Grand Rapids 2014
Wrangling WP_Cron - WordCamp Grand Rapids 2014
 

Viewers also liked

John De Jong: Optimizing Test & Courseware Development
John De Jong: Optimizing Test & Courseware DevelopmentJohn De Jong: Optimizing Test & Courseware Development
John De Jong: Optimizing Test & Courseware Developmenteaquals
 
Accenture testingchallenge casestudy Cgs test estimates
Accenture testingchallenge casestudy Cgs test estimatesAccenture testingchallenge casestudy Cgs test estimates
Accenture testingchallenge casestudy Cgs test estimatesAmit Bhardwaj
 
Estimator Metrics - Test Time Assessment
Estimator Metrics - Test Time AssessmentEstimator Metrics - Test Time Assessment
Estimator Metrics - Test Time AssessmentAmit Bhardwaj
 
Test Process Maturity Measurement and Related Measurements
Test Process Maturity Measurement and Related MeasurementsTest Process Maturity Measurement and Related Measurements
Test Process Maturity Measurement and Related MeasurementsSTAG Software Private Limited
 
2017 | E-Brochure | Professional Project Management - PPM (3 Days) | Project ...
2017 | E-Brochure | Professional Project Management - PPM (3 Days) | Project ...2017 | E-Brochure | Professional Project Management - PPM (3 Days) | Project ...
2017 | E-Brochure | Professional Project Management - PPM (3 Days) | Project ...Dcolearning
 
Software Testing Metrics with qTest Insights - QASymphony Webinar
Software Testing Metrics with qTest Insights  - QASymphony WebinarSoftware Testing Metrics with qTest Insights  - QASymphony Webinar
Software Testing Metrics with qTest Insights - QASymphony WebinarQASymphony
 
Software Test Metrics and Measurements
Software Test Metrics and MeasurementsSoftware Test Metrics and Measurements
Software Test Metrics and MeasurementsDavis Thomas
 
2017 | E-Brochure | PMP® Fast Track (4 Days) | Project Management Training - ...
2017 | E-Brochure | PMP® Fast Track (4 Days) | Project Management Training - ...2017 | E-Brochure | PMP® Fast Track (4 Days) | Project Management Training - ...
2017 | E-Brochure | PMP® Fast Track (4 Days) | Project Management Training - ...Dcolearning
 
Careers in software testing
Careers in software testingCareers in software testing
Careers in software testingBCS-IT
 
The Gartner IAM Program Maturity Model
The Gartner IAM Program Maturity ModelThe Gartner IAM Program Maturity Model
The Gartner IAM Program Maturity ModelSarah Moore
 
PMBOK-5th ed: PMP- Flashcards Part1/5
PMBOK-5th ed: PMP- Flashcards Part1/5PMBOK-5th ed: PMP- Flashcards Part1/5
PMBOK-5th ed: PMP- Flashcards Part1/5Anand Bobade
 

Viewers also liked (14)

John De Jong: Optimizing Test & Courseware Development
John De Jong: Optimizing Test & Courseware DevelopmentJohn De Jong: Optimizing Test & Courseware Development
John De Jong: Optimizing Test & Courseware Development
 
Accenture testingchallenge casestudy Cgs test estimates
Accenture testingchallenge casestudy Cgs test estimatesAccenture testingchallenge casestudy Cgs test estimates
Accenture testingchallenge casestudy Cgs test estimates
 
Estimator Metrics - Test Time Assessment
Estimator Metrics - Test Time AssessmentEstimator Metrics - Test Time Assessment
Estimator Metrics - Test Time Assessment
 
Test Process Maturity Measurement and Related Measurements
Test Process Maturity Measurement and Related MeasurementsTest Process Maturity Measurement and Related Measurements
Test Process Maturity Measurement and Related Measurements
 
2017 | E-Brochure | Professional Project Management - PPM (3 Days) | Project ...
2017 | E-Brochure | Professional Project Management - PPM (3 Days) | Project ...2017 | E-Brochure | Professional Project Management - PPM (3 Days) | Project ...
2017 | E-Brochure | Professional Project Management - PPM (3 Days) | Project ...
 
Software Testing Metrics with qTest Insights - QASymphony Webinar
Software Testing Metrics with qTest Insights  - QASymphony WebinarSoftware Testing Metrics with qTest Insights  - QASymphony Webinar
Software Testing Metrics with qTest Insights - QASymphony Webinar
 
Software Test Metrics and Measurements
Software Test Metrics and MeasurementsSoftware Test Metrics and Measurements
Software Test Metrics and Measurements
 
2017 | E-Brochure | PMP® Fast Track (4 Days) | Project Management Training - ...
2017 | E-Brochure | PMP® Fast Track (4 Days) | Project Management Training - ...2017 | E-Brochure | PMP® Fast Track (4 Days) | Project Management Training - ...
2017 | E-Brochure | PMP® Fast Track (4 Days) | Project Management Training - ...
 
Agile Testing
Agile Testing  Agile Testing
Agile Testing
 
ISTQB REX BLACK book
ISTQB REX BLACK bookISTQB REX BLACK book
ISTQB REX BLACK book
 
Careers in software testing
Careers in software testingCareers in software testing
Careers in software testing
 
The Gartner IAM Program Maturity Model
The Gartner IAM Program Maturity ModelThe Gartner IAM Program Maturity Model
The Gartner IAM Program Maturity Model
 
PMBOK-5th ed: PMP- Flashcards Part1/5
PMBOK-5th ed: PMP- Flashcards Part1/5PMBOK-5th ed: PMP- Flashcards Part1/5
PMBOK-5th ed: PMP- Flashcards Part1/5
 
Learning pmp formulas the easy way
Learning pmp formulas the easy wayLearning pmp formulas the easy way
Learning pmp formulas the easy way
 

Similar to Test Failed, Then...

Message Passing vs. Data Synchronization
Message Passing vs. Data SynchronizationMessage Passing vs. Data Synchronization
Message Passing vs. Data SynchronizationAnant Narayanan
 
Tests in Javascript using Jasmine and Testacular
Tests in Javascript using Jasmine and TestacularTests in Javascript using Jasmine and Testacular
Tests in Javascript using Jasmine and TestacularPaulo Cesar Ortins Brito
 
Announcing AWS Step Functions - December 2016 Monthly Webinar Series
Announcing AWS Step Functions - December 2016 Monthly Webinar SeriesAnnouncing AWS Step Functions - December 2016 Monthly Webinar Series
Announcing AWS Step Functions - December 2016 Monthly Webinar SeriesAmazon Web Services
 
CDC Tests - Integration Tests cant be made simpler than this!
CDC Tests - Integration Tests cant be made simpler than this!CDC Tests - Integration Tests cant be made simpler than this!
CDC Tests - Integration Tests cant be made simpler than this!Ramya Authappan
 
Python tools for testing web services over HTTP
Python tools for testing web services over HTTPPython tools for testing web services over HTTP
Python tools for testing web services over HTTPMykhailo Kolesnyk
 
MongoDB World 2018: Tutorial - Free the DBA: Building Chat Bots to Triage, Mo...
MongoDB World 2018: Tutorial - Free the DBA: Building Chat Bots to Triage, Mo...MongoDB World 2018: Tutorial - Free the DBA: Building Chat Bots to Triage, Mo...
MongoDB World 2018: Tutorial - Free the DBA: Building Chat Bots to Triage, Mo...MongoDB
 
Mountebank and you
Mountebank and youMountebank and you
Mountebank and youVodqaBLR
 
Introduction to AWS Step Functions:
Introduction to AWS Step Functions: Introduction to AWS Step Functions:
Introduction to AWS Step Functions: Amazon Web Services
 
When GenAI meets with Java with Quarkus and langchain4j
When GenAI meets with Java with Quarkus and langchain4jWhen GenAI meets with Java with Quarkus and langchain4j
When GenAI meets with Java with Quarkus and langchain4jJean-Francois James
 
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션Amazon Web Services Korea
 
User Expectations in Mobile App Security
User Expectations in Mobile App SecurityUser Expectations in Mobile App Security
User Expectations in Mobile App SecurityTao Xie
 
Пирамида Тестирования через призму ROI калькулятора и прочая геометрия
Пирамида Тестирования через призму ROI калькулятора и прочая геометрияПирамида Тестирования через призму ROI калькулятора и прочая геометрия
Пирамида Тестирования через призму ROI калькулятора и прочая геометрияSQALab
 
Test Pyramid vs Roi
Test Pyramid vs Roi Test Pyramid vs Roi
Test Pyramid vs Roi COMAQA.BY
 
Transferring Software Testing Tools to Practice
Transferring Software Testing Tools to PracticeTransferring Software Testing Tools to Practice
Transferring Software Testing Tools to PracticeTao Xie
 
Idea2app
Idea2appIdea2app
Idea2appFlumes
 
Google I/O 2011, Android Honeycomb Highlights
Google I/O 2011, Android Honeycomb HighlightsGoogle I/O 2011, Android Honeycomb Highlights
Google I/O 2011, Android Honeycomb HighlightsRomain Guy
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Pythongturnquist
 

Similar to Test Failed, Then... (20)

Message Passing vs. Data Synchronization
Message Passing vs. Data SynchronizationMessage Passing vs. Data Synchronization
Message Passing vs. Data Synchronization
 
Tests in Javascript using Jasmine and Testacular
Tests in Javascript using Jasmine and TestacularTests in Javascript using Jasmine and Testacular
Tests in Javascript using Jasmine and Testacular
 
OpenAI API crash course
OpenAI API crash courseOpenAI API crash course
OpenAI API crash course
 
Announcing AWS Step Functions - December 2016 Monthly Webinar Series
Announcing AWS Step Functions - December 2016 Monthly Webinar SeriesAnnouncing AWS Step Functions - December 2016 Monthly Webinar Series
Announcing AWS Step Functions - December 2016 Monthly Webinar Series
 
CDC Tests - Integration Tests cant be made simpler than this!
CDC Tests - Integration Tests cant be made simpler than this!CDC Tests - Integration Tests cant be made simpler than this!
CDC Tests - Integration Tests cant be made simpler than this!
 
Python tools for testing web services over HTTP
Python tools for testing web services over HTTPPython tools for testing web services over HTTP
Python tools for testing web services over HTTP
 
MongoDB World 2018: Tutorial - Free the DBA: Building Chat Bots to Triage, Mo...
MongoDB World 2018: Tutorial - Free the DBA: Building Chat Bots to Triage, Mo...MongoDB World 2018: Tutorial - Free the DBA: Building Chat Bots to Triage, Mo...
MongoDB World 2018: Tutorial - Free the DBA: Building Chat Bots to Triage, Mo...
 
Mountebank and you
Mountebank and youMountebank and you
Mountebank and you
 
Swift meetup22june2015
Swift meetup22june2015Swift meetup22june2015
Swift meetup22june2015
 
Introduction to AWS Step Functions:
Introduction to AWS Step Functions: Introduction to AWS Step Functions:
Introduction to AWS Step Functions:
 
When GenAI meets with Java with Quarkus and langchain4j
When GenAI meets with Java with Quarkus and langchain4jWhen GenAI meets with Java with Quarkus and langchain4j
When GenAI meets with Java with Quarkus and langchain4j
 
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
 
User Expectations in Mobile App Security
User Expectations in Mobile App SecurityUser Expectations in Mobile App Security
User Expectations in Mobile App Security
 
Пирамида Тестирования через призму ROI калькулятора и прочая геометрия
Пирамида Тестирования через призму ROI калькулятора и прочая геометрияПирамида Тестирования через призму ROI калькулятора и прочая геометрия
Пирамида Тестирования через призму ROI калькулятора и прочая геометрия
 
Test Pyramid vs Roi
Test Pyramid vs Roi Test Pyramid vs Roi
Test Pyramid vs Roi
 
Transferring Software Testing Tools to Practice
Transferring Software Testing Tools to PracticeTransferring Software Testing Tools to Practice
Transferring Software Testing Tools to Practice
 
Idea2app
Idea2appIdea2app
Idea2app
 
Modern Python Testing
Modern Python TestingModern Python Testing
Modern Python Testing
 
Google I/O 2011, Android Honeycomb Highlights
Google I/O 2011, Android Honeycomb HighlightsGoogle I/O 2011, Android Honeycomb Highlights
Google I/O 2011, Android Honeycomb Highlights
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
 

More from Toru Furukawa

Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
 Twitter 広告と API を組み合わせたインタラクティブなキャンペーン Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Twitter 広告と API を組み合わせたインタラクティブなキャンペーンToru Furukawa
 
My client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with GoMy client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with GoToru Furukawa
 
Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1Toru Furukawa
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)Toru Furukawa
 
Python 3.3 チラ見
Python 3.3 チラ見Python 3.3 チラ見
Python 3.3 チラ見Toru Furukawa
 
Python32 pyhackathon-201011
Python32 pyhackathon-201011Python32 pyhackathon-201011
Python32 pyhackathon-201011Toru Furukawa
 

More from Toru Furukawa (10)

Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
 Twitter 広告と API を組み合わせたインタラクティブなキャンペーン Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
 
My client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with GoMy client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with Go
 
Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
Python 3.3 チラ見
Python 3.3 チラ見Python 3.3 チラ見
Python 3.3 チラ見
 
Python32 pyhackathon-201011
Python32 pyhackathon-201011Python32 pyhackathon-201011
Python32 pyhackathon-201011
 
Django
Django Django
Django
 
Python 2.7
Python 2.7Python 2.7
Python 2.7
 
BPStudy#34 導入
BPStudy#34 導入BPStudy#34 導入
BPStudy#34 導入
 

Recently uploaded

Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7DianaGray10
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarPrecisely
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 

Recently uploaded (20)

Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity Webinar
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 

Test Failed, Then...

  • 1. Test Failed, Then...
 Optimizing communication between people Toru Furukawa" @torufurukawa"
  • 2. Agenda •  Introduction
 Web app syncing with live TV show" •  Loose coupling" •  Testable components" •  Efficient communication"
  • 4. Agile App Development 
 on Concrete Backend Services HTML App" App Server Backend Service(s)" Project  dependent Common
  • 5. Because... •  Requirements keep changing" •  Not only Web, but also TV" •  Not only TV, but also Web" •  Spiky access traffic" •  Common fundamental features" ▼" •  Easy to change application" •  Well tested platform"
  • 6. Ended up with… HTML App" App Server Counter" Messenger"
  • 7. High Communication Cost "Communication overheads increase as the number of people increases." F. Brooks"
  • 8. Minimal and Effective Communication
  • 9. Optimize Communication •  Between Components" •  Between People
  • 11. How to Simplify Dependency? HTML App" App Server Counter" Messenger"
  • 12. PHP •  IMPORTANT: PHP is fine" •  Cannot be combined with Python component in language layer easily
  • 13. Loose Coupling "Write small services that speak HTTP and bridge them together with another application."" Armin Ronacher (@mitsuhiko)" http://lucumr.pocoo.org/2010/12/24/common-mistakes-as-web-developer/
  • 14. Loose Coupling HTML App" (JavaScript) App Server" (whatever) Counter" (Python) Messenger" (Node.js) HTTP
  • 15. Assign Engineer for Component HTML App" (JavaScript) App Server" (whatever) Counter" (Python) Messenger" (Node.js) HTTP
  • 18. Wrap Engineers' Communication •  New layers to simplify inter-component communication" •  Assign new roles to simplify inter-people communication
  • 22. If a servicewise feature does not work, how to identify the cause?" •  Ask developer to check logs?" •  Ask developer to check DB?" ▼" Make component diagnosable" Instrument Components
  • 23. Log with fluentd App Server" (whatever) Counter" (Python) Messenger" (Node.js) fluentd Mongo  DB Web App
  • 24. Define CRUD APIs •  Make DB accessible from test and admin •  REST /objects/:id" •  /get_objects
 /get_object, /set_object, /delete_object" ▼" •  Diagnose 1-layer deeper from outside"
  • 25. "requests" package 
 for Web API Access >>>  r  =  requests.get(url,  auth=(...),  ...)   >>>  r  =  requests.post(url,  data={...},  ...)   >>>  r.status_code   200   >>>  r.content   u'{"foo":"bar","x":true}'   >>>  r.json()   {u'foo':  u'bar',  'x':  True}  
  • 26. Library for Productivity •  Use testing libraries to increase productivity 
 i.e. how many test you write per hour" •  setup and teardown" – unittest" – nose" – py.test" – testfixtures" – etc.
  • 28. Translate Test Report Traceback  (most  recent  call  last):      File  "mytest.py",  line  7,  in  test          assert  result  ==  expected   AssertionError   ▼" •  How do YOU determine what is wrong?" •  How do you tell OTHERS what is wrong?" ▼" •  Need better way to communicate
  • 29. Library for Readability class  MyTest(unittest.TestCase):          def  test(self):                  expected  =  {...}                  result  =  {...}                  self.assertEqual(x,  y)   " "
  • 30. Traceback  (most  recent  call  last):      File  "mytest.py",  line  7,  in  test          self.assertEqual(x,  y)   AssertionError:  {'items':  ['spam',  'spam'],   'foo':  'bar'}  !=  {'items':  ['spam',  'ham'],   'foo':  'bar'}   -­‐  {'foo':  'bar',  'items':  ['spam',  'spam']}   ?                                                                      ^^     +  {'foo':  'bar',  'items':  ['spam',  'ham']}   ?                                                                      ^
  • 31. Python vs HTTP Python HTTP Test Fast Loosely Couple Develop Fast
  • 32. If I stick to Python too much,
 my communication is
 tightly coupled
  • 33. Convert requests function to curl >>>  import  curledrequests  as  requests   >>>  requests.debug  =  True   >>>  r  =  requests.get(   ...      'http://www.google.com/',   ...      params={'q':'python'})   ...   $  curl  “http://www.google.com/?q=python”  -­‐w   'n%{http_code}n'   <!doctype  html><html  itemscope=""   itemtype="http://schema.org/WebPage"><head><me   ...   200   h5p://goo.gl/hO579O