SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Specification by Examples
for Symfony2 applications
About me
Cofounder
Cofounder
on Github
on Twitter
- PHP & Cloud @ Genova - 24 Oct
- Internet Of Things! @ Turin [CFP] - 15 Nov
- CloudComputing @ Turin [CFP ASAP]
Corley S.r.l. - @CorleyCloud
UpCloo LTD - @UpCloo
wdalmut
walterdalmut
www.cloudparty.it
internetof.it
www.cloudconf.it
Repo with all examples
Repo on github
Software delivery
customer wants A
project manager understand B
developers write down C
developers effectively write down D
customer realize to get E
Successive refinements of E
E'
E''
E'''
E''''
E'''''
The customer will never obtain an A
The problem is to achieve a
single communication domain
How many points does it have?
Example from: Bridging the communication gap (Gojko Adzic)
10
5
14
9
Effectively, there is no right
answer.
It depends on what you consider as a point
Behaviour-driven development
is a software development process based on test-driven development
(TDD). Behavior-driven development combines the general techniques
and principles of TDD with ideas from domain-driven design and object-
oriented analysis and design to provide software development and
management teams with shared tools and a shared process to
collaborate on software development.
from wikipedia
BDD
Although BDD is principally an idea about how software development
should be managed by both business interests and technical insight
from wikipedia
Dan North: What is a story?
Behaviour-driven development is an “outside-in” methodology. It starts
at the outside by identifying business outcomes, and then drills down
into the feature set that will achieve those outcomes. Each feature is
captured as a “story”, which defines the scope of the feature along with
its acceptance criteria. This article introduces the BDD approach to
defining and identifying stories and their acceptance criteria.
Read the article here
BDD is more than tools, but we
are here in order to use BDD
methodology in our Symfony2
projects
Tools
Behat - Behaviour-driven framework
Mink - Web Acceptance testing framework
Pay attention on Behat version
The latest is 3.0 (at today) but there are so many examples and
docs for 2.5
We will work with 3.0
Here is a story
Feature: a description of this feature
        Scenario: A business situation
            Given a precondition
            And another precondition
            When an actor execute an action
            And another action appends
            Then some testable result is in place
            And another condition should be verified
        Scenario: Another business scenario starts
Here is a story in Italian
Funzionalità: una generica descrizione di questa funzionalità
        Scenario: una situazione di business
            Data una precondizione
            E ancora una nuova precondizione
            Quando un attore esegue una azione
            E succede anche un altra azione
            Allora esite un risultato testabile
            Ed un nuova condizione da verificare
        Scenario: Un altro scenario di business da verificare
Gherkin is a Business Readable
and Domain Specific Language
that let us describe software’s
behaviour without detailing
how that behaviour is
implemented.
From the cucumber project
Gherkin supports so many
languages
We are building a common language with
different actors involved into to design
process
There are at least two ways to use behat in
your Symfony2 applications
Per-bundle features
Specific features per bundle
Application features
All features in a single folder
Personally prefer a single place for all
features
Mainly because it is so difficult to share the
application bundle strategies to a
customer
Keep the focus on the communication not
how we implement the solution
behat.yml
default:
    suites:
        default:
            path: %paths.base%/features
            contexts: [BehatMinkExtensionContextMinkContext]
    extensions:
        BehatSymfony2Extension: ~
        BehatMinkExtension:
            base_url: http://localhost:8000
            sessions:
                default:
                    symfony2: ~
Behat uses a "FeatureContext"
as a clue for join the Gherkin
language with the application
A feature
Feature: An hello world feature example
    Scenario: Just say hello to me!
        When I am on "/hello/walter"
        Then I should see "Hello Walter"
Every step is a custom method in the
FeatureContext
/** @Given /^I am on "([^"]*)"$/ */
public function goOnPage($url)
{
...
}
Mink carries different predefined steps
I am on "a page"
I press "Get me in!"
I should see "Ok, you are in"
and more... (CSS selectors etc.)
But remember that we are building a
common communication domain
Write down a new step that use a mink's steps instead force a new
definition of something
By Examples
Scenario Outline: Just say hello to everyone!
    When I am on <page>
    Then I should see <hello>
    Examples:
        | page              | hello            |
        | "/hello/walter"   | "Hello Walter"   |
        | "/hello/marco"    | "Hello Marco"    |
        | "/hello/giovanni" | "Hello Giovanni" |
        | "/hello/martina"  | "Hello Martina"  |
Expectations
Scenario Outline: Say a better hello to special guests
    When I am on <page>
    Then I should see <hello>
    Examples:
        | page              | hello                   |
        | "/hello/fabien"   | "Captain on the bridge" |
        | "/hello/walter"   | "Hello Walter"          |
        | "/hello/marco"    | "Hello Marco"           |
        | "/hello/giovanni" | "Hello Giovanni"        |
        | "/hello/martina"  | "Hello Martina"         |
If we run it
Feature: An hello world feature example
Scenario Outline: Say a better hello to special guests
    When I am on <page>
    Then I should see <hello>
    Examples:
    | page              | hello                   |
    | "/hello/fabien"   | "Captain on the bridge" |
        The text "Captain on the bridge" was not found
        anywhere in the text of the current page. (BehatMinkExceptionResponseTextException)
    | "/hello/walter"   | "Hello Walter"          |
    | "/hello/marco"    | "Hello Marco"           |
    | "/hello/giovanni" | "Hello Giovanni"        |
    | "/hello/martina"  | "Hello Martina"         |
‐‐‐ Failed scenarios:
    features/hello.feature:24
Fix the code
class DefaultController extends Controller
{
    public function indexAction($name)
    {
        if ($name == "fabien") {
            $name = "Captain on the bridge";
        }
        return $this‐>render('CorleyBaseBundle:Default:index.html.twig', array('name' => $name));
    }
}
My steps interacts with the entity manager
default:
    suites:
        default:
            path: %paths.base%/features
            contexts:
                ‐ BehatMinkExtensionContextMinkContext
                ‐ HelloFeatureContext:
                    entityManager: '@doctrine.orm.entity_manager'
    extensions:
        BehatSymfony2Extension: ~
        BehatMinkExtension:
            base_url: http://localhost:8000
            sessions:
                default:
                    symfony2: ~
Create contexts
bin/behat ‐‐init
Context constructor
/**
 * Behat context class.
 */
class HelloFeatureContext implements SnippetAcceptingContext
{
    private $entityManager;
    /**
     * Initializes context.
     *
     * Every scenario gets its own context object.
     * You can also pass arbitrary arguments to the context constructor through behat.yml.
     */
    public function __construct(EntityManager $entityManager)
    {
        $this‐>entityManager = $entityManager;
    }
                        
My context clears all before runs
/**
 * @BeforeScenario
 */
public function clearDatabase()
{
    $purger = new ORMPurger($this‐>entityManager);
    $purger‐>purge();
}
Load books for this scenario
Feature: My books features
    Scenario: List my books
        Given there are books
            | title                          | author          |
            | Specification by Examples      | Gojko Adzic     |
            | Bridging the communication gap | Gojko Adzic     |
            | The RSpec Book                 | David Chelimsky |
        When I am on "/books"
        Then I should see "Specification by Examples"
        And I should see "Bridging the communication gap"
        And I should see "The RSpec Book"
Run it!
(and get the missing step definition)
‐‐‐ HelloFeatureContext has missing steps. Define them with these snippets:
    /**
    * @Given there are books
    */
    public function thereAreBooks(TableNode $table)
    {
        throw new PendingException();
    }
My custom step
/**
 * @Given there are books
 */
public function thereAreBooks(TableNode $table)
{
    foreach ($table‐>getHash() as $row) {
        $book = new Book();
        $book‐>setTitle($row["title"]);
        $book‐>setAuthor($row["author"]);
        $this‐>entityManager‐>persist($book);
    }
    $this‐>entityManager‐>flush();
}
Scenarios can share the same background
Feature: My books features
    Background:
        Given there are books
            | title                          | author          |
            | Specification by Examples      | Gojko Adzic     |
            | Bridging the communication gap | Gojko Adzic     |
            | The RSpec Book                 | David Chelimsky |
    Scenario: List my books
        When I am on "/books"
        Then I should see "Specification by Examples"
        And I should see "Bridging the communication gap"
        And I should see "The RSpec Book"
A story
Scenario: An interested user becomes an active user
    Given an interested user with email "walter.dalmut@gmail.com"
    When he goes to homepage
    And he fills all personal fields
    Then he confirms the registration
    And he should be registered as an unconfirmed user
    And he should receive the registration email
    And he should be in the reserved area
Signup Feature Context
class SignupContext implements SnippetAcceptingContext, MinkAwareContext
    {
        private $mink;
        private $minkParameters;
        private $entityManager;
    ...
        public function setMink(Mink $mink)
        {
            $this‐>mink = $mink;
        }
        public function setMinkParameters(array $parameters)
        {
            $this‐>minkParameters = $parameters;
        }
    ...
GIVEN i am an interested user with email
/**
 * @Given I am an interested user with email :arg1
 */
public function anInterestedUserWithEmail($email)
{
    // shared in the feature context
    $this‐>email = $email;
    // Check that is an interested user and not an existing one
    Assert::assertNull(
        $this‐>entityManager
            ‐>getRepository("CorleyBaseBundle:User")‐>findOneByEmail($email)
    );
}
WHEN i fill all personal fields
/**
 * @When I fill all personal fields
 */
public function heFillsAllPersonalFields()
{
    $this‐>mink‐>getSession()‐>getPage()
        ‐>find("css", "#corley_bundle_basebundle_user_email")
        ‐>setValue($this‐>email);
    $this‐>mink‐>getSession()‐>getPage()
        ‐>find("css", "#corley_bundle_basebundle_user_name")
        ‐>setValue(rand(0,100000));
}
THEN I confirm my registration
/**
 * @Then I confirm my registration
 */
public function iConfirmTheRegistration()
{
    $client = $this‐>mink
        ‐>getSession()
        ‐>getDriver()
        ‐>getClient();
    $client‐>followRedirects(false);
    $this‐>mink‐>getSession()‐>getPage()
        ‐>find("css", "#corley_bundle_basebundle_user_submit")‐>click();
}
THEN I should be registered as an
unconfirmed user
/**
 * @Then I should be registered as an unconfirmed user
 */
public function heShouldBeRegisteredAsAnUnconfirmedUser()
{
    $this‐>entityManager‐>clear();
    $entity = $this‐>entityManager
        ‐>getRepository("CorleyBaseBundle:User")
        ‐>findOneByEmail($this‐>email);
    Assert::assertNotNull($entity);
    Assert::assertFalse($entity‐>isConfirmed());
}
THEN I should receive the reg. email
/**
 * @Then I should receive the registration email
 */
public function heShouldReceiveTheRegistrationEmail()
{
    $driver = $this‐>mink‐>getSession()‐>getDriver();
    if (!$driver instanceof KernelDriver) {
        throw new RuntimeException("Only kernel drivers");
    }
    $profile = $driver‐>getClient()‐>getProfile();
    if (false === $profile) {
        throw new RuntimeException("Profiler is disabled");
    }
    $collector = $profile‐>getCollector('swiftmailer');
    Assert::assertCount(1, $collector‐>getMessages());
}
You can wrap a "getProfiler" in a separate method
THEN I should be in the reserved area
/**
 * @Then I should be in the reserved area
 */
public function heShouldBeInTheReservedArea()
{
    $client = $this‐>mink
        ‐>getSession()
        ‐>getDriver()
        ‐>getClient();
    $client‐>followRedirects(true);
    $client‐>followRedirect();
    $this‐>mink‐>assertSession()‐>pageTextContains("Hello reserved area!");
}
You can wrap the redirection in seperate, reusable steps
There are so many features in Behat
But, remember that the goal is to bridging the communication gap
between actors of the same project with different backgrounds
Do not use it for functional testing
(use LiipFunctionalTestBundle for that or anything else)
Thanks for listening
Any question?

Mais conteúdo relacionado

Mais procurados

GitHub Actions for 5 minutes
GitHub Actions for 5 minutesGitHub Actions for 5 minutes
GitHub Actions for 5 minutesSvetlin Nakov
 
Ultimate Productivity Tools
Ultimate Productivity ToolsUltimate Productivity Tools
Ultimate Productivity ToolsAmal Dev
 
Enjector Kernel - Workflow Module Demo
Enjector Kernel  - Workflow Module DemoEnjector Kernel  - Workflow Module Demo
Enjector Kernel - Workflow Module DemoAjay Soni
 
Visual studio 11 developer preview
Visual studio 11 developer previewVisual studio 11 developer preview
Visual studio 11 developer previewWei Sun
 
Python with dot net and vs2010
Python with dot net and vs2010Python with dot net and vs2010
Python with dot net and vs2010Wei Sun
 
Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!
Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!
Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!Michał Ćmil
 
Fullstack workshop
Fullstack workshopFullstack workshop
Fullstack workshopAssaf Gannon
 
Wuff: Building Eclipse Applications and Plugins with Gradle
Wuff: Building Eclipse Applications and Plugins with GradleWuff: Building Eclipse Applications and Plugins with Gradle
Wuff: Building Eclipse Applications and Plugins with GradleAndrey Hihlovsky
 
High Productivity Web Development Workflow
High Productivity Web Development WorkflowHigh Productivity Web Development Workflow
High Productivity Web Development WorkflowVũ Nguyễn
 
Continuous integration and delivery and deployment
Continuous integration and delivery and deploymentContinuous integration and delivery and deployment
Continuous integration and delivery and deploymentRubén Sospedra
 
KKBOX WWDC17 Xcode IDE - Hardy
KKBOX WWDC17  Xcode IDE - HardyKKBOX WWDC17  Xcode IDE - Hardy
KKBOX WWDC17 Xcode IDE - HardyLiyao Chen
 
CloudExpo 2018: Docker - Power Your Move to the Cloud
CloudExpo 2018: Docker - Power Your Move to the CloudCloudExpo 2018: Docker - Power Your Move to the Cloud
CloudExpo 2018: Docker - Power Your Move to the CloudElton Stoneman
 
Exploring the GitHub Service Universe
Exploring the GitHub Service UniverseExploring the GitHub Service Universe
Exploring the GitHub Service UniverseBjörn Kimminich
 
Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...
Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...
Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...VMware Tanzu
 
Eclipse 2011 Hot Topics
Eclipse 2011 Hot TopicsEclipse 2011 Hot Topics
Eclipse 2011 Hot TopicsLars Vogel
 
Continuous Integration of Mobile Apps with Docker and Appium
Continuous Integration of Mobile Apps with Docker and AppiumContinuous Integration of Mobile Apps with Docker and Appium
Continuous Integration of Mobile Apps with Docker and AppiumEmergya
 
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...OdessaJS Conf
 
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019Sargis Sargsyan
 

Mais procurados (20)

GitHub Actions for 5 minutes
GitHub Actions for 5 minutesGitHub Actions for 5 minutes
GitHub Actions for 5 minutes
 
Ultimate Productivity Tools
Ultimate Productivity ToolsUltimate Productivity Tools
Ultimate Productivity Tools
 
Enjector Kernel - Workflow Module Demo
Enjector Kernel  - Workflow Module DemoEnjector Kernel  - Workflow Module Demo
Enjector Kernel - Workflow Module Demo
 
Ci for-android-apps
Ci for-android-appsCi for-android-apps
Ci for-android-apps
 
Visual studio 11 developer preview
Visual studio 11 developer previewVisual studio 11 developer preview
Visual studio 11 developer preview
 
Python with dot net and vs2010
Python with dot net and vs2010Python with dot net and vs2010
Python with dot net and vs2010
 
Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!
Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!
Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!
 
Fullstack workshop
Fullstack workshopFullstack workshop
Fullstack workshop
 
Wuff: Building Eclipse Applications and Plugins with Gradle
Wuff: Building Eclipse Applications and Plugins with GradleWuff: Building Eclipse Applications and Plugins with Gradle
Wuff: Building Eclipse Applications and Plugins with Gradle
 
High Productivity Web Development Workflow
High Productivity Web Development WorkflowHigh Productivity Web Development Workflow
High Productivity Web Development Workflow
 
Continuous integration and delivery and deployment
Continuous integration and delivery and deploymentContinuous integration and delivery and deployment
Continuous integration and delivery and deployment
 
Workshop - Golang language
Workshop - Golang languageWorkshop - Golang language
Workshop - Golang language
 
KKBOX WWDC17 Xcode IDE - Hardy
KKBOX WWDC17  Xcode IDE - HardyKKBOX WWDC17  Xcode IDE - Hardy
KKBOX WWDC17 Xcode IDE - Hardy
 
CloudExpo 2018: Docker - Power Your Move to the Cloud
CloudExpo 2018: Docker - Power Your Move to the CloudCloudExpo 2018: Docker - Power Your Move to the Cloud
CloudExpo 2018: Docker - Power Your Move to the Cloud
 
Exploring the GitHub Service Universe
Exploring the GitHub Service UniverseExploring the GitHub Service Universe
Exploring the GitHub Service Universe
 
Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...
Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...
Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...
 
Eclipse 2011 Hot Topics
Eclipse 2011 Hot TopicsEclipse 2011 Hot Topics
Eclipse 2011 Hot Topics
 
Continuous Integration of Mobile Apps with Docker and Appium
Continuous Integration of Mobile Apps with Docker and AppiumContinuous Integration of Mobile Apps with Docker and Appium
Continuous Integration of Mobile Apps with Docker and Appium
 
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
 
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
 

Semelhante a Symfony2 Specification by examples

Behavior-Driven Development (BDD) in context
Behavior-Driven Development (BDD) in contextBehavior-Driven Development (BDD) in context
Behavior-Driven Development (BDD) in contextAlexander Kress
 
Testing stage. being ahead business with cucumber
Testing stage. being ahead business with cucumberTesting stage. being ahead business with cucumber
Testing stage. being ahead business with cucumberAlex Mikitenko
 
Learned lessons in real world projects by Jordi Anguela at Mallorca Software ...
Learned lessons in real world projects by Jordi Anguela at Mallorca Software ...Learned lessons in real world projects by Jordi Anguela at Mallorca Software ...
Learned lessons in real world projects by Jordi Anguela at Mallorca Software ...Codium
 
apidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflow
apidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflowapidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflow
apidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflowapidays
 
When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?Niklas Heidloff
 
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...Niklas Heidloff
 
TDD for Microservices
TDD for MicroservicesTDD for Microservices
TDD for MicroservicesVMware Tanzu
 
Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...marcin_pajdzik
 
Consumer Driven Contracts for microservices
Consumer Driven Contracts for microservicesConsumer Driven Contracts for microservices
Consumer Driven Contracts for microservicesReshmi Krishna
 
How open source is driving DevOps innovation: CloudOpen NA 2015
How open source is driving DevOps innovation: CloudOpen NA 2015How open source is driving DevOps innovation: CloudOpen NA 2015
How open source is driving DevOps innovation: CloudOpen NA 2015Gordon Haff
 
Presentazione resin.io
Presentazione resin.ioPresentazione resin.io
Presentazione resin.ioGianluca Leo
 
Next Level DevOps Implementation with GitOps
Next Level DevOps Implementation with GitOpsNext Level DevOps Implementation with GitOps
Next Level DevOps Implementation with GitOpsRamadoni Ashudi
 
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...Stefan Richter
 
Android presentation
Android presentationAndroid presentation
Android presentationImam Raza
 
Se chapter 1,2,3 2 mark qa
Se chapter 1,2,3   2 mark  qaSe chapter 1,2,3   2 mark  qa
Se chapter 1,2,3 2 mark qaAruna M
 
Microservices in Golang
Microservices in GolangMicroservices in Golang
Microservices in GolangMo'ath Qasim
 
Behavioral tests with behat for qa
Behavioral tests with behat for qaBehavioral tests with behat for qa
Behavioral tests with behat for qaSergey Bielanovskiy
 

Semelhante a Symfony2 Specification by examples (20)

Behavior-Driven Development (BDD) in context
Behavior-Driven Development (BDD) in contextBehavior-Driven Development (BDD) in context
Behavior-Driven Development (BDD) in context
 
Testing stage. being ahead business with cucumber
Testing stage. being ahead business with cucumberTesting stage. being ahead business with cucumber
Testing stage. being ahead business with cucumber
 
Learned lessons in real world projects by Jordi Anguela at Mallorca Software ...
Learned lessons in real world projects by Jordi Anguela at Mallorca Software ...Learned lessons in real world projects by Jordi Anguela at Mallorca Software ...
Learned lessons in real world projects by Jordi Anguela at Mallorca Software ...
 
apidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflow
apidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflowapidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflow
apidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflow
 
When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?
 
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
 
TDD for Microservices
TDD for MicroservicesTDD for Microservices
TDD for Microservices
 
Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...
 
Consumer Driven Contracts for microservices
Consumer Driven Contracts for microservicesConsumer Driven Contracts for microservices
Consumer Driven Contracts for microservices
 
How open source is driving DevOps innovation: CloudOpen NA 2015
How open source is driving DevOps innovation: CloudOpen NA 2015How open source is driving DevOps innovation: CloudOpen NA 2015
How open source is driving DevOps innovation: CloudOpen NA 2015
 
Presentazione resin.io
Presentazione resin.ioPresentazione resin.io
Presentazione resin.io
 
Next Level DevOps Implementation with GitOps
Next Level DevOps Implementation with GitOpsNext Level DevOps Implementation with GitOps
Next Level DevOps Implementation with GitOps
 
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
 
CEF.net
CEF.netCEF.net
CEF.net
 
Android presentation
Android presentationAndroid presentation
Android presentation
 
ch9.docx
ch9.docxch9.docx
ch9.docx
 
Se chapter 1,2,3 2 mark qa
Se chapter 1,2,3   2 mark  qaSe chapter 1,2,3   2 mark  qa
Se chapter 1,2,3 2 mark qa
 
Microservices in Golang
Microservices in GolangMicroservices in Golang
Microservices in Golang
 
JyothishNewResume5exp
JyothishNewResume5expJyothishNewResume5exp
JyothishNewResume5exp
 
Behavioral tests with behat for qa
Behavioral tests with behat for qaBehavioral tests with behat for qa
Behavioral tests with behat for qa
 

Mais de Corley S.r.l.

Aws rekognition - riconoscimento facciale
Aws rekognition  - riconoscimento faccialeAws rekognition  - riconoscimento facciale
Aws rekognition - riconoscimento faccialeCorley S.r.l.
 
AWSome day 2018 - scalability and cost optimization with container services
AWSome day 2018 - scalability and cost optimization with container servicesAWSome day 2018 - scalability and cost optimization with container services
AWSome day 2018 - scalability and cost optimization with container servicesCorley S.r.l.
 
AWSome day 2018 - API serverless with aws
AWSome day 2018  - API serverless with awsAWSome day 2018  - API serverless with aws
AWSome day 2018 - API serverless with awsCorley S.r.l.
 
AWSome day 2018 - database in cloud
AWSome day 2018 -  database in cloudAWSome day 2018 -  database in cloud
AWSome day 2018 - database in cloudCorley S.r.l.
 
Trace your micro-services oriented application with Zipkin and OpenTracing
Trace your micro-services oriented application with Zipkin and OpenTracing Trace your micro-services oriented application with Zipkin and OpenTracing
Trace your micro-services oriented application with Zipkin and OpenTracing Corley S.r.l.
 
Apiconf - The perfect REST solution
Apiconf - The perfect REST solutionApiconf - The perfect REST solution
Apiconf - The perfect REST solutionCorley S.r.l.
 
Apiconf - Doc Driven Development
Apiconf - Doc Driven DevelopmentApiconf - Doc Driven Development
Apiconf - Doc Driven DevelopmentCorley S.r.l.
 
Authentication and authorization in res tful infrastructures
Authentication and authorization in res tful infrastructuresAuthentication and authorization in res tful infrastructures
Authentication and authorization in res tful infrastructuresCorley S.r.l.
 
Flexibility and scalability of costs in serverless infrastructures
Flexibility and scalability of costs in serverless infrastructuresFlexibility and scalability of costs in serverless infrastructures
Flexibility and scalability of costs in serverless infrastructuresCorley S.r.l.
 
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented applicationCloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented applicationCorley S.r.l.
 
A single language for backend and frontend from AngularJS to cloud with Clau...
A single language for backend and frontend  from AngularJS to cloud with Clau...A single language for backend and frontend  from AngularJS to cloud with Clau...
A single language for backend and frontend from AngularJS to cloud with Clau...Corley S.r.l.
 
AngularJS: Service, factory & provider
AngularJS: Service, factory & providerAngularJS: Service, factory & provider
AngularJS: Service, factory & providerCorley S.r.l.
 
The advantage of developing with TypeScript
The advantage of developing with TypeScript The advantage of developing with TypeScript
The advantage of developing with TypeScript Corley S.r.l.
 
Angular coding: from project management to web and mobile deploy
Angular coding: from project management to web and mobile deployAngular coding: from project management to web and mobile deploy
Angular coding: from project management to web and mobile deployCorley S.r.l.
 
Corley cloud angular in cloud
Corley cloud   angular in cloudCorley cloud   angular in cloud
Corley cloud angular in cloudCorley S.r.l.
 
Measure your app internals with InfluxDB and Symfony2
Measure your app internals with InfluxDB and Symfony2Measure your app internals with InfluxDB and Symfony2
Measure your app internals with InfluxDB and Symfony2Corley S.r.l.
 
Read Twitter Stream and Tweet back pictures with Raspberry Pi & AWS Lambda
Read Twitter Stream and Tweet back pictures with Raspberry Pi & AWS LambdaRead Twitter Stream and Tweet back pictures with Raspberry Pi & AWS Lambda
Read Twitter Stream and Tweet back pictures with Raspberry Pi & AWS LambdaCorley S.r.l.
 
Deploy and Scale your PHP App with AWS ElasticBeanstalk and Docker- PHPTour L...
Deploy and Scale your PHP App with AWS ElasticBeanstalk and Docker- PHPTour L...Deploy and Scale your PHP App with AWS ElasticBeanstalk and Docker- PHPTour L...
Deploy and Scale your PHP App with AWS ElasticBeanstalk and Docker- PHPTour L...Corley S.r.l.
 
Middleware PHP - A simple micro-framework
Middleware PHP - A simple micro-frameworkMiddleware PHP - A simple micro-framework
Middleware PHP - A simple micro-frameworkCorley S.r.l.
 

Mais de Corley S.r.l. (20)

Aws rekognition - riconoscimento facciale
Aws rekognition  - riconoscimento faccialeAws rekognition  - riconoscimento facciale
Aws rekognition - riconoscimento facciale
 
AWSome day 2018 - scalability and cost optimization with container services
AWSome day 2018 - scalability and cost optimization with container servicesAWSome day 2018 - scalability and cost optimization with container services
AWSome day 2018 - scalability and cost optimization with container services
 
AWSome day 2018 - API serverless with aws
AWSome day 2018  - API serverless with awsAWSome day 2018  - API serverless with aws
AWSome day 2018 - API serverless with aws
 
AWSome day 2018 - database in cloud
AWSome day 2018 -  database in cloudAWSome day 2018 -  database in cloud
AWSome day 2018 - database in cloud
 
Trace your micro-services oriented application with Zipkin and OpenTracing
Trace your micro-services oriented application with Zipkin and OpenTracing Trace your micro-services oriented application with Zipkin and OpenTracing
Trace your micro-services oriented application with Zipkin and OpenTracing
 
Apiconf - The perfect REST solution
Apiconf - The perfect REST solutionApiconf - The perfect REST solution
Apiconf - The perfect REST solution
 
Apiconf - Doc Driven Development
Apiconf - Doc Driven DevelopmentApiconf - Doc Driven Development
Apiconf - Doc Driven Development
 
Authentication and authorization in res tful infrastructures
Authentication and authorization in res tful infrastructuresAuthentication and authorization in res tful infrastructures
Authentication and authorization in res tful infrastructures
 
Flexibility and scalability of costs in serverless infrastructures
Flexibility and scalability of costs in serverless infrastructuresFlexibility and scalability of costs in serverless infrastructures
Flexibility and scalability of costs in serverless infrastructures
 
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented applicationCloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
 
React vs Angular2
React vs Angular2React vs Angular2
React vs Angular2
 
A single language for backend and frontend from AngularJS to cloud with Clau...
A single language for backend and frontend  from AngularJS to cloud with Clau...A single language for backend and frontend  from AngularJS to cloud with Clau...
A single language for backend and frontend from AngularJS to cloud with Clau...
 
AngularJS: Service, factory & provider
AngularJS: Service, factory & providerAngularJS: Service, factory & provider
AngularJS: Service, factory & provider
 
The advantage of developing with TypeScript
The advantage of developing with TypeScript The advantage of developing with TypeScript
The advantage of developing with TypeScript
 
Angular coding: from project management to web and mobile deploy
Angular coding: from project management to web and mobile deployAngular coding: from project management to web and mobile deploy
Angular coding: from project management to web and mobile deploy
 
Corley cloud angular in cloud
Corley cloud   angular in cloudCorley cloud   angular in cloud
Corley cloud angular in cloud
 
Measure your app internals with InfluxDB and Symfony2
Measure your app internals with InfluxDB and Symfony2Measure your app internals with InfluxDB and Symfony2
Measure your app internals with InfluxDB and Symfony2
 
Read Twitter Stream and Tweet back pictures with Raspberry Pi & AWS Lambda
Read Twitter Stream and Tweet back pictures with Raspberry Pi & AWS LambdaRead Twitter Stream and Tweet back pictures with Raspberry Pi & AWS Lambda
Read Twitter Stream and Tweet back pictures with Raspberry Pi & AWS Lambda
 
Deploy and Scale your PHP App with AWS ElasticBeanstalk and Docker- PHPTour L...
Deploy and Scale your PHP App with AWS ElasticBeanstalk and Docker- PHPTour L...Deploy and Scale your PHP App with AWS ElasticBeanstalk and Docker- PHPTour L...
Deploy and Scale your PHP App with AWS ElasticBeanstalk and Docker- PHPTour L...
 
Middleware PHP - A simple micro-framework
Middleware PHP - A simple micro-frameworkMiddleware PHP - A simple micro-framework
Middleware PHP - A simple micro-framework
 

Último

Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Nikki Chapple
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 

Último (20)

Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 

Symfony2 Specification by examples