SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
BDD Test Framework
                                 on PHP
                              ... develop you features
                                    philosophically


  Oleksii Zozulenko




   atdays.com
                                                         1
Saturday, February 9, 13
My name is Oleksii

                           I like automation
                            (for last 7 years)


   atdays.com                      #atdays
                                                 2
Saturday, February 9, 13
Context. Project




                            Engine for Internet stores


   atdays.com                         #atdays
                                                         3
Saturday, February 9, 13
Context. Docs




                           Test cases & Stories

   atdays.com                      #atdays
                                                  4
Saturday, February 9, 13
Context. Docs




                           Test cases & Stories

   atdays.com                      #atdays
                                                  4
Saturday, February 9, 13
Context. Tests

                               Takes too long time

                                Can not involve
                                developers

                                Hard to support
                Auto tests
   atdays.com                    #atdays
                                                     5
Saturday, February 9, 13
atdays.com              #atdays
                                     6
Saturday, February 9, 13
BEHAVIOR DRIVEN
                             DEVELOPMENT

   atdays.com                    #atdays
                                             7
Saturday, February 9, 13
Brief overview

                                         Behavior, not test/should
                                          Re-translation your user
                                             stories into code
                   Dan north




                               http://dannorth.net/introducing-bdd/

   atdays.com                                  #atdays
                                                                      8
Saturday, February 9, 13
We need documented tests

                                      But

                                Tests should run!




   atdays.com                          #atdays
                                                      9
Saturday, February 9, 13
TOOLS


   atdays.com              #atdays
                                     10
Saturday, February 9, 13
Different

                           RSpec

                           Cucumber


                                                      Behat
                           JSpec                    Fabulous
                           JBehave
                                                   Codeception


   atdays.com                            #atdays
                                                                 11
Saturday, February 9, 13
Cucumber&
                           Behat&       Symfony&
                                    Mink&(WebDriver)&
                                      Tags,&Events&
                                        Snippets&

   atdays.com                          #atdays
                                                        12
Saturday, February 9, 13
FRAMEWORK


   atdays.com              #atdays
                                     13
Saturday, February 9, 13
atdays.com              #atdays
                                     14
Saturday, February 9, 13
ARCHITECTURE


   atdays.com               #atdays
                                      15
Saturday, February 9, 13
Flexibility




   atdays.com                  #atdays
                                         16
Saturday, February 9, 13
Scalability




   atdays.com                  #atdays
                                         17
Saturday, February 9, 13
APPLICATION API


   atdays.com              #atdays
                                     18
Saturday, February 9, 13
Application API


                                    Model&


                             DAO&

                                        En##es&




   atdays.com                         #atdays
                                                  19
Saturday, February 9, 13
PAGE OBJECT PATTERN


   atdays.com              #atdays
                                     20
Saturday, February 9, 13
Yaml structure
           LayoutPage:
            elements:
              Element1: “xpathvalue”
              Element2: “xpathvalue”

          PageName:
           url: “canbedynamicwith%ID%”
           inherit: LayoutPage
           entityClass: “BundleEntitiesPageEnity”
           defaultFind: “byId”
           elements:
             Element: “%{AnotherPage/Element}%xpath”
   atdays.com                    #atdays
                                                       21
Saturday, February 9, 13
PageHelper
           Reading yaml structure

                    getPage($pageName)

                    getElement($pageName, $element, array
                    $attributes )

                    getUrl($pageName, $entityId)



   atdays.com                           #atdays
                                                            22
Saturday, February 9, 13
PITFALLS


   atdays.com              #atdays
                                     23
Saturday, February 9, 13
Native Language




   atdays.com                    #atdays
                                             24
Saturday, February 9, 13
Hard to re-use code




   atdays.com                      #atdays
                                                 25
Saturday, February 9, 13
SUMMARY


   atdays.com              #atdays
                                     26
Saturday, February 9, 13
Use your Application
                                     Use Your Application




   atdays.com                        #atdays
                                                            27
Saturday, February 9, 13
atdays.com              #atdays
                                     28
Saturday, February 9, 13
Saturday, February 9, 13
Thanks


                           ozozulenko@gmail.com
                                 @qainsider
                               qainsider.com


   atdays.com
                                                  30
Saturday, February 9, 13

Weitere ähnliche Inhalte

Mehr von automated-testing.info

Александр Кабалюк – SilkTest
Александр Кабалюк – SilkTestАлександр Кабалюк – SilkTest
Александр Кабалюк – SilkTestautomated-testing.info
 
Автоматизация тестирования как сервис
Автоматизация тестирования как сервисАвтоматизация тестирования как сервис
Автоматизация тестирования как сервисautomated-testing.info
 
Тестирование производительности Ajax приложений с помощью JMeter
Тестирование производительности Ajax приложений с помощью JMeterТестирование производительности Ajax приложений с помощью JMeter
Тестирование производительности Ajax приложений с помощью JMeterautomated-testing.info
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Pythonautomated-testing.info
 
Проблемы автоматизации крупных проектов: TestComplete
Проблемы автоматизации крупных проектов: TestCompleteПроблемы автоматизации крупных проектов: TestComplete
Проблемы автоматизации крупных проектов: TestCompleteautomated-testing.info
 
В поисках магической кнопки или как приручить SOAP UI
В поисках магической кнопки или как приручить SOAP UIВ поисках магической кнопки или как приручить SOAP UI
В поисках магической кнопки или как приручить SOAP UIautomated-testing.info
 
Andrey Azimov - Как найти работу тестировщику?
Andrey Azimov - Как найти работу тестировщику?Andrey Azimov - Как найти работу тестировщику?
Andrey Azimov - Как найти работу тестировщику?automated-testing.info
 
Иван Бордюг - Инструмент автоматизации регрессионного тестирования на основе ...
Иван Бордюг - Инструмент автоматизации регрессионного тестирования на основе ...Иван Бордюг - Инструмент автоматизации регрессионного тестирования на основе ...
Иван Бордюг - Инструмент автоматизации регрессионного тестирования на основе ...automated-testing.info
 
Alexei Zozulenko - Test automation failure
Alexei Zozulenko - Test automation failureAlexei Zozulenko - Test automation failure
Alexei Zozulenko - Test automation failureautomated-testing.info
 
Vladimir Primakov - Test Automation By Example
Vladimir Primakov - Test Automation By ExampleVladimir Primakov - Test Automation By Example
Vladimir Primakov - Test Automation By Exampleautomated-testing.info
 
Alexander Zvonov Test Automation Story
Alexander Zvonov Test Automation StoryAlexander Zvonov Test Automation Story
Alexander Zvonov Test Automation Storyautomated-testing.info
 
Daria Chernishova Test Automation Story
Daria Chernishova Test Automation StoryDaria Chernishova Test Automation Story
Daria Chernishova Test Automation Storyautomated-testing.info
 
Bdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui testsBdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui testsautomated-testing.info
 

Mehr von automated-testing.info (20)

Александр Кабалюк – SilkTest
Александр Кабалюк – SilkTestАлександр Кабалюк – SilkTest
Александр Кабалюк – SilkTest
 
Автоматизация тестирования как сервис
Автоматизация тестирования как сервисАвтоматизация тестирования как сервис
Автоматизация тестирования как сервис
 
Тестирование производительности Ajax приложений с помощью JMeter
Тестирование производительности Ajax приложений с помощью JMeterТестирование производительности Ajax приложений с помощью JMeter
Тестирование производительности Ajax приложений с помощью JMeter
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Python
 
Проблемы автоматизации крупных проектов: TestComplete
Проблемы автоматизации крупных проектов: TestCompleteПроблемы автоматизации крупных проектов: TestComplete
Проблемы автоматизации крупных проектов: TestComplete
 
В поисках магической кнопки или как приручить SOAP UI
В поисках магической кнопки или как приручить SOAP UIВ поисках магической кнопки или как приручить SOAP UI
В поисках магической кнопки или как приручить SOAP UI
 
Keyword driven testing
Keyword driven testingKeyword driven testing
Keyword driven testing
 
Andrey Azimov - Как найти работу тестировщику?
Andrey Azimov - Как найти работу тестировщику?Andrey Azimov - Как найти работу тестировщику?
Andrey Azimov - Как найти работу тестировщику?
 
Jenkins auto configureforbranch-php
Jenkins auto configureforbranch-phpJenkins auto configureforbranch-php
Jenkins auto configureforbranch-php
 
Иван Бордюг - Инструмент автоматизации регрессионного тестирования на основе ...
Иван Бордюг - Инструмент автоматизации регрессионного тестирования на основе ...Иван Бордюг - Инструмент автоматизации регрессионного тестирования на основе ...
Иван Бордюг - Инструмент автоматизации регрессионного тестирования на основе ...
 
Alexei Zozulenko - Test automation failure
Alexei Zozulenko - Test automation failureAlexei Zozulenko - Test automation failure
Alexei Zozulenko - Test automation failure
 
Vladimir Primakov - Test Automation By Example
Vladimir Primakov - Test Automation By ExampleVladimir Primakov - Test Automation By Example
Vladimir Primakov - Test Automation By Example
 
Codeception Introduction
Codeception IntroductionCodeception Introduction
Codeception Introduction
 
Ivan Bordug Test Automation Story
Ivan Bordug Test Automation StoryIvan Bordug Test Automation Story
Ivan Bordug Test Automation Story
 
Alexander Zvonov Test Automation Story
Alexander Zvonov Test Automation StoryAlexander Zvonov Test Automation Story
Alexander Zvonov Test Automation Story
 
Daria Chernishova Test Automation Story
Daria Chernishova Test Automation StoryDaria Chernishova Test Automation Story
Daria Chernishova Test Automation Story
 
Bdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui testsBdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui tests
 
Bdd + SpecFlow + WatiN
Bdd + SpecFlow + WatiNBdd + SpecFlow + WatiN
Bdd + SpecFlow + WatiN
 
Efficient performance testing
Efficient performance testingEfficient performance testing
Efficient performance testing
 
Qtp Automation and Extensibility
Qtp Automation and ExtensibilityQtp Automation and Extensibility
Qtp Automation and Extensibility
 

Kürzlich hochgeladen

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
 
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
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
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
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 

Kürzlich hochgeladen (20)

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
 
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
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
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
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Философия и построение тестового фреймворка на основе BDD в PHP проектах

  • 1. BDD Test Framework on PHP ... develop you features philosophically Oleksii Zozulenko atdays.com 1 Saturday, February 9, 13
  • 2. My name is Oleksii I like automation (for last 7 years) atdays.com #atdays 2 Saturday, February 9, 13
  • 3. Context. Project Engine for Internet stores atdays.com #atdays 3 Saturday, February 9, 13
  • 4. Context. Docs Test cases & Stories atdays.com #atdays 4 Saturday, February 9, 13
  • 5. Context. Docs Test cases & Stories atdays.com #atdays 4 Saturday, February 9, 13
  • 6. Context. Tests Takes too long time Can not involve developers Hard to support Auto tests atdays.com #atdays 5 Saturday, February 9, 13
  • 7. atdays.com #atdays 6 Saturday, February 9, 13
  • 8. BEHAVIOR DRIVEN DEVELOPMENT atdays.com #atdays 7 Saturday, February 9, 13
  • 9. Brief overview Behavior, not test/should Re-translation your user stories into code Dan north http://dannorth.net/introducing-bdd/ atdays.com #atdays 8 Saturday, February 9, 13
  • 10. We need documented tests But Tests should run! atdays.com #atdays 9 Saturday, February 9, 13
  • 11. TOOLS atdays.com #atdays 10 Saturday, February 9, 13
  • 12. Different RSpec Cucumber Behat JSpec Fabulous JBehave Codeception atdays.com #atdays 11 Saturday, February 9, 13
  • 13. Cucumber& Behat& Symfony& Mink&(WebDriver)& Tags,&Events& Snippets& atdays.com #atdays 12 Saturday, February 9, 13
  • 14. FRAMEWORK atdays.com #atdays 13 Saturday, February 9, 13
  • 15. atdays.com #atdays 14 Saturday, February 9, 13
  • 16. ARCHITECTURE atdays.com #atdays 15 Saturday, February 9, 13
  • 17. Flexibility atdays.com #atdays 16 Saturday, February 9, 13
  • 18. Scalability atdays.com #atdays 17 Saturday, February 9, 13
  • 19. APPLICATION API atdays.com #atdays 18 Saturday, February 9, 13
  • 20. Application API Model& DAO& En##es& atdays.com #atdays 19 Saturday, February 9, 13
  • 21. PAGE OBJECT PATTERN atdays.com #atdays 20 Saturday, February 9, 13
  • 22. Yaml structure LayoutPage: elements: Element1: “xpathvalue” Element2: “xpathvalue” PageName: url: “canbedynamicwith%ID%” inherit: LayoutPage entityClass: “BundleEntitiesPageEnity” defaultFind: “byId” elements: Element: “%{AnotherPage/Element}%xpath” atdays.com #atdays 21 Saturday, February 9, 13
  • 23. PageHelper Reading yaml structure getPage($pageName) getElement($pageName, $element, array $attributes ) getUrl($pageName, $entityId) atdays.com #atdays 22 Saturday, February 9, 13
  • 24. PITFALLS atdays.com #atdays 23 Saturday, February 9, 13
  • 25. Native Language atdays.com #atdays 24 Saturday, February 9, 13
  • 26. Hard to re-use code atdays.com #atdays 25 Saturday, February 9, 13
  • 27. SUMMARY atdays.com #atdays 26 Saturday, February 9, 13
  • 28. Use your Application Use Your Application atdays.com #atdays 27 Saturday, February 9, 13
  • 29. atdays.com #atdays 28 Saturday, February 9, 13
  • 31. Thanks ozozulenko@gmail.com @qainsider qainsider.com atdays.com 30 Saturday, February 9, 13