SlideShare ist ein Scribd-Unternehmen logo
This Presentation Courtesy of the
                              International SOA Symposium
                              October 7-8, 2008 Amsterdam Arena
                              www.soasymposium.com
                              info@soasymposium.com


                                                  Founding Sponsors




Platinum Sponsors




Gold Sponsors          Silver Sponsors




        Testable Foundations for Service‐Oriented 
                     Development
                                         Ian Robinson




    http://iansrobinson.com
Tests, Testing and Testability




                                     Design & 
                                     discovery
                             Tests
    Asserted 
    behaviour




Micro Alignment




                                      Stories
                      Business‐IT 
                      Alignment
     Tests
A Map of the Territories: From What to How


                       Why?
    Who?                                            What?                               How?
                 What?

                        Benefits


       Stakeholders                                                                       Processes
                                                                          provide
     want                      deliver
                                                   Capabilities

                                         realise                                      host
                  Outcomes

                                                                                    Services

   motivate
                             prevent
                                                                                                 implement
              Forces



                                                                                                Technologies
                       Obstacles




Stories, Capabilities, Services and Contracts


                                   Stories                        Capabilities
                              Describe goals                        Resources to 
                              & outcomes                            realise 
                                                                    outcomes




                               Contracts
                                                                   Services
                             Assert 
                             interactions                          Host 
                             between                               capabilities
                             services
(Behaviour‐Driven Development) Stories


Outside‐in
                As an rolee Man
                               Outcomes
                     < Ord r > agemen
               I want <felfill orders bast service
                        to fu
                              a offer
                       current ture> ed on 
               So that <cbn m ings
                         I  a eneet
                         ex
                                 ef ct> mer 
                                     i usto
                             pectations

       Value
                                        efficiently
                                                       

                                           External 
                                          behaviour



Capabilities


                    Resources
 People         Processes                  Technology


          Capabilities
   Outcomes                              Stable
                              Processes          Technology
     What not How              change              changes
Contracts




        Consumer‐Driven 
        Contract                                                               Design




                                                      Consumer 
                                        Adopt
                                                      Contract



                                       Communicate



            (Validate according to…)                  (Use according to…)
                                                                               Execute

                Produce                                       Consume




XmlUnit
public class ArtistUpdatedTestCase extends XMLTestCase {

    ...

    protected String xml;

    public void testXPaths() throws Exception {
        assertXpathExists("/n:ArtistUpdated", xml);

          assertXpathExists("/n:ArtistUpdated/a:Artist", xml);
          assertXpathExists("/n:ArtistUpdated/a:Artist/a:GlobalArtistCode", xml);
          assertXpathExists("/n:ArtistUpdated/a:Artist/a:DefaultName", xml);

          assertXpathExists("/n:ArtistUpdated/a:Artist/a:MainRepertoireOwnerCompany",
              xml);
          assertXpathExists("/n:ArtistUpdated/a:Artist/a:MainRepertoireOwnerCompany/" +
              "s:OperatingCompanyCode", xml);
          assertXpathExists("/n:ArtistUpdated/a:Artist/a:MainRepertoireOwnerCompany/" +
              "s:Name", xml);

          assertXpathExists("/n:ArtistUpdated/a:Artist/a:ChangedDate", xml);
    }
}
Schematron
<?xml version="1.0" encoding="utf-8" ?>
<schema xmlns="http://www.ascc.net/xml/schematron">                               XML
                                                                                   XML
    <title>ArtistUpdated Contract</title>

    <ns uri="http://example.com/notifications" prefix="n"/>
    <ns uri="http://example.com/artist" prefix="a"/>
    <ns uri="http://example.com/sharedtypes" prefix="s"/>


    <phase id="validateStructure">
        <active pattern="structure"/>
    </phase>

                 Schematron                    Intermediate 
    <pattern name="Validate structure" id="structure">
                  Schematron                    Intermediate                      XSLT
                                                                                   XSLT
                     rules
        <rule context="/">
                      rules                      transform
                                                  transform
            <assert test="n:ArtistUpdated"/>
        </rule>
        <rule context="n:ArtistUpdated">
            <assert test="a:Artist"/>
        </rule>
        <rule context="n:ArtistUpdated/a:Artist">
            <assert test="a:GlobalArtistCode"/>
            <assert test="a:DefaultName"/>
            <assert test="a:MainRepertoireOwnerCompany"/>
            <assert test="a:ChangedDate"/>
        </rule>
        <rule context="n:ArtistUpdated/a:Artist/a:MainRepertoireOwnerCompany">
            <assert test="s:OperatingCompanyCode"/>                              Results
            <assert test="s:Name"/>                                              Results
        </rule>
    </pattern>

</schema>




An External DSL for Consumer Contracts


 Declarative
                ArtistUpdated [http://example.com/notifications]
                    Artist[http://example.com/artist]
                        GlobalArtistCode : int
                        DefaultName : string
                        MainRepertoireOwnerCompany : companyType (0..1)
                        ChangedDate : datetime

                Company[http://example.com/company] id(companyType)
                    OperatingCompanyCode : string
                    Name : string




            What                                  not           How
Validating XML

 ArtistUpdated [http://example.com/notifications]
     Artist[http://example.com/artist]
         GlobalArtistCode : int
         DefaultName : string
         MainRepertoireOwnerCompany : companyType (0..1)
         ChangedDate : datetime

 Company[http://example.com/company] id(companyType)
     OperatingCompanyCode : string
     Name : string




 <ArtistUpdated xmlns="http://example.com/notifications">
     <Artist xmlns="http://example.com/artist">
         <GlobalArtistCode>13570</GlobalArtistCode>
         <DefaultName>Tom Waits</DefaultName>
         <MainRepertoireOwnerCompany xmlns:c="xmlns="http://example.com/company">
             <c:OperatingCompanyCode>HF32L</c:OperatingCompanyCode>
             <c:Name>Mercury Records Ltd</c:Name>
         </MainRepertoireOwnerCompany>
         <ChangedDate>2008-09-10T13:57:14+01:00</ChangedDate>
         ...
     </Artist>
 <ArtistUpdated>




Validating JSON

 ArtistUpdated [http://example.com/notifications]
     Artist[http://example.com/artist]
         GlobalArtistCode : int
         DefaultName : string
         MainRepertoireOwnerCompany : companyType (0..1)
         ChangedDate : datetime

 Company[http://example.com/company] id(companyType)
     OperatingCompanyCode : string
     Name : string




 {
     "ArtistUpdated": {
         "Artist": {
             "GlobalArtistCode": 13570,
             "DefaultName": "Tom Waits",
             "MainRepertoireOwnerCompany": {
                 "OperatingCompanyCode": "HF32L",
                 "Name": "Mercury Records Ltd",
             },
             "ChangedDate": "2008-09-10T13:57:14+01:00"
          }
     }
 }
Validating YAML

 ArtistUpdated [http://example.com/notifications]
     Artist[http://example.com/artist]
         GlobalArtistCode : int
         DefaultName : string
         MainRepertoireOwnerCompany : companyType (0..1)
         ChangedDate : datetime

 Company[http://example.com/company] id(companyType)
     OperatingCompanyCode : string
     Name : string




 ArtistUpdated:
     Artist:
         GlobalArtistCode: 13570
         DefaultName: Tom Waits
         MainRepertoireOwnerCompany:
             OperatingCompanyCode: HF32L
             Name: Mercury Records Ltd
         ChangedDate: 2008-09-10T13:57:14+01:00




Transformations

                                                                        Validator
                                                                         Validator




               ArtistUpdated [http://example.com/notifications]
                    Artist[http://example.com/artist]
                          GlobalArtistCode : int
                          DefaultName : string
                          MainRepertoireOwnerCompany : companyType (0..1)
                 Contract ChangedDate : datetime
                  Contract                     AST
                                               AST                   Serializer
                                                                      Serializer

               Company[http://example.com/company] id(companyType)
                   OperatingCompanyCode : string
                   Name : string




                                                                         Graph
                                                                         Graph
Validating Forms

 ArtistUpdated [http://example.com/notifications]
     Artist[http://example.com/artist]
         GlobalArtistCode : int
         DefaultName : string
         MainRepertoireOwnerCompany : companyType (0..1)
         ChangedDate : datetime

 Company[http://example.com/company] id(companyType)
     OperatingCompanyCode : string
     Name : string




 POST /notifications HTTP/1.1
 Host: example.com
 Content-Type: application/x-www-form-urlencoded
 Content-Length: 301

 ArtistUpdated_Artist_GlobalArtistCode=13570&ArtistUpdated_Artist_DefaultName=Tom+W
 aits&ArtistUpdated_Artist_MainRepertoireOwnerCompany_OperatingCompanyCode=HF32L&Ar
 tistUpdated_Artist_MainRepertoireOwnerCompany_Name=Mercury+Records+Ltd&ArtistUpdat
 ed_Artist_ChangedDate=2008-09-10T13%3A57%3A14%2B01%3A00




Social Networks for Contracts
                                                  Product Catalog
                                                  Product Catalog
          Warehouse
          Warehouse                                                                  Marketing
                                                                                     Marketing



                                                      offers
                                                      offers
                               expects
                               expects                                   expects
                                                                         expects



                                             Name = ArtistUpdated
                                             Name = ArtistUpdated

                                       expects
                                       expects                      expects
                                                                    expects
                                                      has
                                                      has
            expects
            expects                                                                    expects
                                                                                       expects
                                   expects
                                   expects                              expects
                                                                        expects

                                                  Name = Artist
                                                  Name = Artist



                                                      has
                                                      has
                               has
                               has                                            has



         Name = GlobalArtistCode
         Name = GlobalArtistCode                 Name = ChangedDate
                                                 Name = ChangedDate                 Name = DefaultName
                                                                                    Name = DefaultName
         Type = int
         Type = int                              Type = datetime
                                                 Type = datetime                    Type = string
                                                                                    Type = string
Generating Consumer‐Driven Contracts

  ArtistUpdated
      Artist
          GlobalArtistCode : int
          ChangedDate : datetime




                                                        ArtistUpdated
                                                            Artist
                                                                GlobalArtistCode : int
                                                                DefaultName : string
                                                                ChangedDate : datetime




  ArtistUpdated
      Artist
          DefaultName : string
          ChangedDate : datetime




Services Share Contract, Not Type



                                   Graph                                   Contract
                                                                            Contract
                                   Graph
     Consumer‐Driven 
     Contract                                                                            Design




                                                         Consumer 
                                                         Contract




                                           Validator
                                            Validator                      Serializer
                                                                            Serializer




                                                                                         Execute

             Produce                                             Consume
Summary

• How do we get started?
   – Iteratively fill out map of the territories
• 4 core artefacts:
   – Stories
   – Capabilities
   – Services
   – Contracts
• Consumer and consumer‐driven contracts:
   – Tests exchanged between teams
   – DSL for consumer contracts




Consumer‐Driven Contracts

• http://www.martinfowler.com/articles/consumerDrivenCon
  tracts.html
• http://www.infoq.com/articles/consumer‐driven‐contracts
• http://iansrobinson.com/
Thank you




http://iansrobinson.com

Weitere ähnliche Inhalte

Was ist angesagt?

Agile certification integrated services faq
Agile certification integrated services faqAgile certification integrated services faq
Agile certification integrated services faq
johnlucy
 
Working together frequently asked era questions
Working together   frequently asked era questions Working together   frequently asked era questions
Working together frequently asked era questions
Ray Stapleton
 
Designing the User Experience
Designing the User ExperienceDesigning the User Experience
Designing the User Experience
Jason Wehmhoener
 
Making service quality improvement work
Making service quality improvement workMaking service quality improvement work
Making service quality improvement work
Taylrocentre
 
Kim.yunjin
Kim.yunjinKim.yunjin
Kim.yunjin
NASAPMC
 
Scm pro career transition feb 2013
Scm pro   career transition feb 2013Scm pro   career transition feb 2013
Scm pro career transition feb 2013
Darryl Judd
 
Lecture 'Servicialisation - Service Consumers Center Stage' 2012-05-24 V01.02.00
Lecture 'Servicialisation - Service Consumers Center Stage' 2012-05-24 V01.02.00Lecture 'Servicialisation - Service Consumers Center Stage' 2012-05-24 V01.02.00
Lecture 'Servicialisation - Service Consumers Center Stage' 2012-05-24 V01.02.00
servicEvolution
 
IBM Service Science & Innovation Community of Practice 3/6/2012
IBM Service Science & Innovation Community of Practice 3/6/2012IBM Service Science & Innovation Community of Practice 3/6/2012
IBM Service Science & Innovation Community of Practice 3/6/2012
Stephen Kwan
 
Infrastructure Trends -Jan 2010
Infrastructure Trends -Jan 2010Infrastructure Trends -Jan 2010
Infrastructure Trends -Jan 2010
Shahar Geiger Maor
 

Was ist angesagt? (19)

Agile certification integrated services faq
Agile certification integrated services faqAgile certification integrated services faq
Agile certification integrated services faq
 
Working together frequently asked era questions
Working together   frequently asked era questions Working together   frequently asked era questions
Working together frequently asked era questions
 
Presentation To Association Of Strategic Alliance Professionals Feb 12 2009
Presentation To Association Of Strategic Alliance Professionals Feb 12  2009Presentation To Association Of Strategic Alliance Professionals Feb 12  2009
Presentation To Association Of Strategic Alliance Professionals Feb 12 2009
 
Designing the User Experience
Designing the User ExperienceDesigning the User Experience
Designing the User Experience
 
Innovation in Services - LBS Professor Kamalini Ramdas
Innovation in Services - LBS Professor Kamalini RamdasInnovation in Services - LBS Professor Kamalini Ramdas
Innovation in Services - LBS Professor Kamalini Ramdas
 
Poseidon Consulting Services - Company Presentation
Poseidon Consulting Services - Company PresentationPoseidon Consulting Services - Company Presentation
Poseidon Consulting Services - Company Presentation
 
Market Vista: Q4 2012
Market Vista: Q4 2012Market Vista: Q4 2012
Market Vista: Q4 2012
 
Making service quality improvement work
Making service quality improvement workMaking service quality improvement work
Making service quality improvement work
 
Frameworks2go business insights delivered socially
Frameworks2go business insights delivered socially Frameworks2go business insights delivered socially
Frameworks2go business insights delivered socially
 
Kim.yunjin
Kim.yunjinKim.yunjin
Kim.yunjin
 
Service Design
Service DesignService Design
Service Design
 
Scm pro career transition feb 2013
Scm pro   career transition feb 2013Scm pro   career transition feb 2013
Scm pro career transition feb 2013
 
ESF Provision - Cornwall
ESF Provision - CornwallESF Provision - Cornwall
ESF Provision - Cornwall
 
Lecture 'Servicialisation - Service Consumers Center Stage' 2012-05-24 V01.02.00
Lecture 'Servicialisation - Service Consumers Center Stage' 2012-05-24 V01.02.00Lecture 'Servicialisation - Service Consumers Center Stage' 2012-05-24 V01.02.00
Lecture 'Servicialisation - Service Consumers Center Stage' 2012-05-24 V01.02.00
 
IBM Service Science & Innovation Community of Practice 3/6/2012
IBM Service Science & Innovation Community of Practice 3/6/2012IBM Service Science & Innovation Community of Practice 3/6/2012
IBM Service Science & Innovation Community of Practice 3/6/2012
 
Cie 42
Cie 42Cie 42
Cie 42
 
Service Design
Service Design Service Design
Service Design
 
Infrastructure Trends -Jan 2010
Infrastructure Trends -Jan 2010Infrastructure Trends -Jan 2010
Infrastructure Trends -Jan 2010
 
Vendor risk management 2013
Vendor risk management 2013Vendor risk management 2013
Vendor risk management 2013
 

Andere mochten auch

Andre Tost Service Models Java
Andre  Tost    Service Models JavaAndre  Tost    Service Models Java
Andre Tost Service Models Java
SOA Symposium
 
Mohamad Afshar Moving Beyond Project Level S O A V1
Mohamad  Afshar    Moving Beyond Project Level S O A V1Mohamad  Afshar    Moving Beyond Project Level S O A V1
Mohamad Afshar Moving Beyond Project Level S O A V1
SOA Symposium
 
Dharmes Mistry Tony De Bree S O A Business Persp V1a
Dharmes  Mistry    Tony De  Bree   S O A Business Persp V1aDharmes  Mistry    Tony De  Bree   S O A Business Persp V1a
Dharmes Mistry Tony De Bree S O A Business Persp V1a
SOA Symposium
 
Mark Little R E S Tand W S Star
Mark  Little    R E S Tand W S StarMark  Little    R E S Tand W S Star
Mark Little R E S Tand W S Star
SOA Symposium
 
Raj Anthony Carrato R E S T Patterns
Raj    Anthony  Carrato    R E S T PatternsRaj    Anthony  Carrato    R E S T Patterns
Raj Anthony Carrato R E S T Patterns
SOA Symposium
 
David Booth R D F & S O A
David  Booth    R D F &  S O ADavid  Booth    R D F &  S O A
David Booth R D F & S O A
SOA Symposium
 
Chris Riley Design Patterns For Web Service Versioning
Chris  Riley   Design Patterns For Web Service VersioningChris  Riley   Design Patterns For Web Service Versioning
Chris Riley Design Patterns For Web Service Versioning
SOA Symposium
 
Anish Karmakar S C A
Anish  Karmakar    S C AAnish  Karmakar    S C A
Anish Karmakar S C A
SOA Symposium
 
Robert Schneider 10 Strategies
Robert  Schneider   10  StrategiesRobert  Schneider   10  Strategies
Robert Schneider 10 Strategies
SOA Symposium
 
Paul Butterworth Policy Based Approach
Paul  Butterworth    Policy  Based  ApproachPaul  Butterworth    Policy  Based  Approach
Paul Butterworth Policy Based Approach
SOA Symposium
 

Andere mochten auch (10)

Andre Tost Service Models Java
Andre  Tost    Service Models JavaAndre  Tost    Service Models Java
Andre Tost Service Models Java
 
Mohamad Afshar Moving Beyond Project Level S O A V1
Mohamad  Afshar    Moving Beyond Project Level S O A V1Mohamad  Afshar    Moving Beyond Project Level S O A V1
Mohamad Afshar Moving Beyond Project Level S O A V1
 
Dharmes Mistry Tony De Bree S O A Business Persp V1a
Dharmes  Mistry    Tony De  Bree   S O A Business Persp V1aDharmes  Mistry    Tony De  Bree   S O A Business Persp V1a
Dharmes Mistry Tony De Bree S O A Business Persp V1a
 
Mark Little R E S Tand W S Star
Mark  Little    R E S Tand W S StarMark  Little    R E S Tand W S Star
Mark Little R E S Tand W S Star
 
Raj Anthony Carrato R E S T Patterns
Raj    Anthony  Carrato    R E S T PatternsRaj    Anthony  Carrato    R E S T Patterns
Raj Anthony Carrato R E S T Patterns
 
David Booth R D F & S O A
David  Booth    R D F &  S O ADavid  Booth    R D F &  S O A
David Booth R D F & S O A
 
Chris Riley Design Patterns For Web Service Versioning
Chris  Riley   Design Patterns For Web Service VersioningChris  Riley   Design Patterns For Web Service Versioning
Chris Riley Design Patterns For Web Service Versioning
 
Anish Karmakar S C A
Anish  Karmakar    S C AAnish  Karmakar    S C A
Anish Karmakar S C A
 
Robert Schneider 10 Strategies
Robert  Schneider   10  StrategiesRobert  Schneider   10  Strategies
Robert Schneider 10 Strategies
 
Paul Butterworth Policy Based Approach
Paul  Butterworth    Policy  Based  ApproachPaul  Butterworth    Policy  Based  Approach
Paul Butterworth Policy Based Approach
 

Ähnlich wie Ian Robinson Testable Foundations

Corporate Presentation
Corporate PresentationCorporate Presentation
Corporate Presentation
vickgandhi
 
BeachCherry Corporate Presentation
BeachCherry Corporate PresentationBeachCherry Corporate Presentation
BeachCherry Corporate Presentation
vimalgandhi1975
 
Arena product presentation
Arena product presentationArena product presentation
Arena product presentation
jhjsmits
 
Mandas Deb S O Aand E D A Benefits And Best Practices V1
Mandas  Deb   S O Aand E D A  Benefits And Best Practices V1Mandas  Deb   S O Aand E D A  Benefits And Best Practices V1
Mandas Deb S O Aand E D A Benefits And Best Practices V1
SOA Symposium
 
Jimwebber soa
Jimwebber soaJimwebber soa
Jimwebber soa
d0nn9n
 
Topics in Verification: Reuse, Coverage, Regression Engineering, Planning, Qu...
Topics in Verification: Reuse, Coverage, Regression Engineering, Planning, Qu...Topics in Verification: Reuse, Coverage, Regression Engineering, Planning, Qu...
Topics in Verification: Reuse, Coverage, Regression Engineering, Planning, Qu...
DVClub
 

Ähnlich wie Ian Robinson Testable Foundations (20)

Using Business Architecture To Drive Business Services
Using Business Architecture To Drive Business ServicesUsing Business Architecture To Drive Business Services
Using Business Architecture To Drive Business Services
 
Corporate Presentation
Corporate PresentationCorporate Presentation
Corporate Presentation
 
BeachCherry Corporate Presentation
BeachCherry Corporate PresentationBeachCherry Corporate Presentation
BeachCherry Corporate Presentation
 
Testing Rich Domain Models
Testing Rich Domain ModelsTesting Rich Domain Models
Testing Rich Domain Models
 
Human scaling on the front end
Human scaling on the front endHuman scaling on the front end
Human scaling on the front end
 
SOA - Enabling Interoperability And Business Agility March 2009
SOA - Enabling Interoperability And Business Agility   March 2009SOA - Enabling Interoperability And Business Agility   March 2009
SOA - Enabling Interoperability And Business Agility March 2009
 
Visure Solutions Requirements Engineering_The word in a nutshell - Ulf Sandberg
Visure Solutions Requirements Engineering_The word in a nutshell - Ulf SandbergVisure Solutions Requirements Engineering_The word in a nutshell - Ulf Sandberg
Visure Solutions Requirements Engineering_The word in a nutshell - Ulf Sandberg
 
Business processes, business rules, complex event processing, the JBoss way
Business processes, business rules, complex event processing, the JBoss wayBusiness processes, business rules, complex event processing, the JBoss way
Business processes, business rules, complex event processing, the JBoss way
 
SAF 2008 - Analysis and Architecture
SAF 2008 - Analysis  and ArchitectureSAF 2008 - Analysis  and Architecture
SAF 2008 - Analysis and Architecture
 
Arena product presentation
Arena product presentationArena product presentation
Arena product presentation
 
Soa limitations
Soa limitationsSoa limitations
Soa limitations
 
Services Oriented Infrastructure in a Web2.0 World
Services Oriented Infrastructure in a Web2.0 WorldServices Oriented Infrastructure in a Web2.0 World
Services Oriented Infrastructure in a Web2.0 World
 
Next Generation BPM
Next Generation BPMNext Generation BPM
Next Generation BPM
 
Web tek labs Services profile
Web tek labs Services profile Web tek labs Services profile
Web tek labs Services profile
 
Smartere test og udvikling med virtualiserede miljøer, Mark Garcia, IBM US
Smartere test og udvikling med virtualiserede miljøer, Mark Garcia, IBM USSmartere test og udvikling med virtualiserede miljøer, Mark Garcia, IBM US
Smartere test og udvikling med virtualiserede miljøer, Mark Garcia, IBM US
 
Mandas Deb S O Aand E D A Benefits And Best Practices V1
Mandas  Deb   S O Aand E D A  Benefits And Best Practices V1Mandas  Deb   S O Aand E D A  Benefits And Best Practices V1
Mandas Deb S O Aand E D A Benefits And Best Practices V1
 
Jimwebber soa
Jimwebber soaJimwebber soa
Jimwebber soa
 
Topics in Verification: Reuse, Coverage, Regression Engineering, Planning, Qu...
Topics in Verification: Reuse, Coverage, Regression Engineering, Planning, Qu...Topics in Verification: Reuse, Coverage, Regression Engineering, Planning, Qu...
Topics in Verification: Reuse, Coverage, Regression Engineering, Planning, Qu...
 
Shelter Services
Shelter ServicesShelter Services
Shelter Services
 
Intro to Drools - St Louis Gateway JUG
Intro to Drools - St Louis Gateway JUGIntro to Drools - St Louis Gateway JUG
Intro to Drools - St Louis Gateway JUG
 

Mehr von SOA Symposium

Sven Hakan Olsson Composability Index V2
Sven Hakan Olsson    Composability  Index V2Sven Hakan Olsson    Composability  Index V2
Sven Hakan Olsson Composability Index V2
SOA Symposium
 
Thomas Erl Introducing S O A Design Patterns
Thomas  Erl    Introducing  S O A  Design  PatternsThomas  Erl    Introducing  S O A  Design  Patterns
Thomas Erl Introducing S O A Design Patterns
SOA Symposium
 
Radovan Janecek Avoiding S O A Pitfalls
Radovan  Janecek   Avoiding  S O A  PitfallsRadovan  Janecek   Avoiding  S O A  Pitfalls
Radovan Janecek Avoiding S O A Pitfalls
SOA Symposium
 
Natasja Paulssen S A P M D M And E S O A At Philips
Natasja  Paulssen    S A P  M D M And E S O A At  PhilipsNatasja  Paulssen    S A P  M D M And E S O A At  Philips
Natasja Paulssen S A P M D M And E S O A At Philips
SOA Symposium
 
Anthony Carrato S O A Business Architecture
Anthony  Carrato    S O A  Business  ArchitectureAnthony  Carrato    S O A  Business  Architecture
Anthony Carrato S O A Business Architecture
SOA Symposium
 
David Chappel S O A Grid
David  Chappel    S O A  GridDavid  Chappel    S O A  Grid
David Chappel S O A Grid
SOA Symposium
 
Johan Kumps Federal E S B
Johan  Kumps    Federal  E S BJohan  Kumps    Federal  E S B
Johan Kumps Federal E S B
SOA Symposium
 
Laurent Tarin B P M Ilog
Laurent  Tarin    B P M  IlogLaurent  Tarin    B P M  Ilog
Laurent Tarin B P M Ilog
SOA Symposium
 
Jim Webber Guerrilla S O A With Web Services
Jim Webber    Guerrilla  S O A With  Web  ServicesJim Webber    Guerrilla  S O A With  Web  Services
Jim Webber Guerrilla S O A With Web Services
SOA Symposium
 
Robert Schneider What Every Developer
Robert  Schneider    What Every DeveloperRobert  Schneider    What Every Developer
Robert Schneider What Every Developer
SOA Symposium
 
Thomas Rischbeck Real Life E S B
Thomas  Rischbeck    Real  Life  E S BThomas  Rischbeck    Real  Life  E S B
Thomas Rischbeck Real Life E S B
SOA Symposium
 
Stefan Pappe Making S O A Operational
Stefan  Pappe    Making  S O A  OperationalStefan  Pappe    Making  S O A  Operational
Stefan Pappe Making S O A Operational
SOA Symposium
 
Paul Brown Org Man Issues
Paul  Brown    Org  Man  IssuesPaul  Brown    Org  Man  Issues
Paul Brown Org Man Issues
SOA Symposium
 
Arnaud Simon Flight Data Processing
Arnaud  Simon    Flight  Data ProcessingArnaud  Simon    Flight  Data Processing
Arnaud Simon Flight Data Processing
SOA Symposium
 
Mark Little Web Services And Transactions
Mark  Little    Web  Services And  TransactionsMark  Little    Web  Services And  Transactions
Mark Little Web Services And Transactions
SOA Symposium
 
S Ven Hakan Olsson Compos Index
S Ven  Hakan  Olsson    Compos IndexS Ven  Hakan  Olsson    Compos Index
S Ven Hakan Olsson Compos Index
SOA Symposium
 
Art Ligthart Service Identification Techniques
Art  Ligthart    Service  Identification  TechniquesArt  Ligthart    Service  Identification  Techniques
Art Ligthart Service Identification Techniques
SOA Symposium
 
Paul C Brown S O A Governance
Paul  C  Brown    S O A  GovernancePaul  C  Brown    S O A  Governance
Paul C Brown S O A Governance
SOA Symposium
 
Brian Loesgen An Early Look At Oslo
Brian  Loesgen    An  Early  Look At  OsloBrian  Loesgen    An  Early  Look At  Oslo
Brian Loesgen An Early Look At Oslo
SOA Symposium
 
Chris Riley S O A Modeling
Chris  Riley    S O A ModelingChris  Riley    S O A Modeling
Chris Riley S O A Modeling
SOA Symposium
 

Mehr von SOA Symposium (20)

Sven Hakan Olsson Composability Index V2
Sven Hakan Olsson    Composability  Index V2Sven Hakan Olsson    Composability  Index V2
Sven Hakan Olsson Composability Index V2
 
Thomas Erl Introducing S O A Design Patterns
Thomas  Erl    Introducing  S O A  Design  PatternsThomas  Erl    Introducing  S O A  Design  Patterns
Thomas Erl Introducing S O A Design Patterns
 
Radovan Janecek Avoiding S O A Pitfalls
Radovan  Janecek   Avoiding  S O A  PitfallsRadovan  Janecek   Avoiding  S O A  Pitfalls
Radovan Janecek Avoiding S O A Pitfalls
 
Natasja Paulssen S A P M D M And E S O A At Philips
Natasja  Paulssen    S A P  M D M And E S O A At  PhilipsNatasja  Paulssen    S A P  M D M And E S O A At  Philips
Natasja Paulssen S A P M D M And E S O A At Philips
 
Anthony Carrato S O A Business Architecture
Anthony  Carrato    S O A  Business  ArchitectureAnthony  Carrato    S O A  Business  Architecture
Anthony Carrato S O A Business Architecture
 
David Chappel S O A Grid
David  Chappel    S O A  GridDavid  Chappel    S O A  Grid
David Chappel S O A Grid
 
Johan Kumps Federal E S B
Johan  Kumps    Federal  E S BJohan  Kumps    Federal  E S B
Johan Kumps Federal E S B
 
Laurent Tarin B P M Ilog
Laurent  Tarin    B P M  IlogLaurent  Tarin    B P M  Ilog
Laurent Tarin B P M Ilog
 
Jim Webber Guerrilla S O A With Web Services
Jim Webber    Guerrilla  S O A With  Web  ServicesJim Webber    Guerrilla  S O A With  Web  Services
Jim Webber Guerrilla S O A With Web Services
 
Robert Schneider What Every Developer
Robert  Schneider    What Every DeveloperRobert  Schneider    What Every Developer
Robert Schneider What Every Developer
 
Thomas Rischbeck Real Life E S B
Thomas  Rischbeck    Real  Life  E S BThomas  Rischbeck    Real  Life  E S B
Thomas Rischbeck Real Life E S B
 
Stefan Pappe Making S O A Operational
Stefan  Pappe    Making  S O A  OperationalStefan  Pappe    Making  S O A  Operational
Stefan Pappe Making S O A Operational
 
Paul Brown Org Man Issues
Paul  Brown    Org  Man  IssuesPaul  Brown    Org  Man  Issues
Paul Brown Org Man Issues
 
Arnaud Simon Flight Data Processing
Arnaud  Simon    Flight  Data ProcessingArnaud  Simon    Flight  Data Processing
Arnaud Simon Flight Data Processing
 
Mark Little Web Services And Transactions
Mark  Little    Web  Services And  TransactionsMark  Little    Web  Services And  Transactions
Mark Little Web Services And Transactions
 
S Ven Hakan Olsson Compos Index
S Ven  Hakan  Olsson    Compos IndexS Ven  Hakan  Olsson    Compos Index
S Ven Hakan Olsson Compos Index
 
Art Ligthart Service Identification Techniques
Art  Ligthart    Service  Identification  TechniquesArt  Ligthart    Service  Identification  Techniques
Art Ligthart Service Identification Techniques
 
Paul C Brown S O A Governance
Paul  C  Brown    S O A  GovernancePaul  C  Brown    S O A  Governance
Paul C Brown S O A Governance
 
Brian Loesgen An Early Look At Oslo
Brian  Loesgen    An  Early  Look At  OsloBrian  Loesgen    An  Early  Look At  Oslo
Brian Loesgen An Early Look At Oslo
 
Chris Riley S O A Modeling
Chris  Riley    S O A ModelingChris  Riley    S O A Modeling
Chris Riley S O A Modeling
 

Kürzlich hochgeladen

Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Kürzlich hochgeladen (20)

Connecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKConnecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAK
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Motion for AI: Creating Empathy in Technology
Motion for AI: Creating Empathy in TechnologyMotion for AI: Creating Empathy in Technology
Motion for AI: Creating Empathy in Technology
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
The architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdfThe architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdf
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 

Ian Robinson Testable Foundations

  • 1. This Presentation Courtesy of the International SOA Symposium October 7-8, 2008 Amsterdam Arena www.soasymposium.com info@soasymposium.com Founding Sponsors Platinum Sponsors Gold Sponsors Silver Sponsors Testable Foundations for Service‐Oriented  Development Ian Robinson http://iansrobinson.com
  • 2. Tests, Testing and Testability Design &  discovery Tests Asserted  behaviour Micro Alignment Stories Business‐IT  Alignment Tests
  • 3. A Map of the Territories: From What to How Why? Who? What? How? What? Benefits Stakeholders Processes provide want deliver Capabilities realise host Outcomes Services motivate prevent implement Forces Technologies Obstacles Stories, Capabilities, Services and Contracts Stories Capabilities Describe goals  Resources to  & outcomes realise  outcomes Contracts Services Assert  interactions  Host  between  capabilities services
  • 4. (Behaviour‐Driven Development) Stories Outside‐in As an rolee Man Outcomes  < Ord r > agemen I want <felfill orders bast service to fu a offer current ture> ed on  So that <cbn m ings I  a eneet ex ef ct> mer  i usto pectations Value  efficiently   External  behaviour Capabilities Resources People Processes Technology Capabilities Outcomes Stable Processes Technology What not How change changes
  • 5. Contracts Consumer‐Driven  Contract Design Consumer  Adopt Contract Communicate (Validate according to…) (Use according to…) Execute Produce Consume XmlUnit public class ArtistUpdatedTestCase extends XMLTestCase { ... protected String xml; public void testXPaths() throws Exception { assertXpathExists("/n:ArtistUpdated", xml); assertXpathExists("/n:ArtistUpdated/a:Artist", xml); assertXpathExists("/n:ArtistUpdated/a:Artist/a:GlobalArtistCode", xml); assertXpathExists("/n:ArtistUpdated/a:Artist/a:DefaultName", xml); assertXpathExists("/n:ArtistUpdated/a:Artist/a:MainRepertoireOwnerCompany", xml); assertXpathExists("/n:ArtistUpdated/a:Artist/a:MainRepertoireOwnerCompany/" + "s:OperatingCompanyCode", xml); assertXpathExists("/n:ArtistUpdated/a:Artist/a:MainRepertoireOwnerCompany/" + "s:Name", xml); assertXpathExists("/n:ArtistUpdated/a:Artist/a:ChangedDate", xml); } }
  • 6. Schematron <?xml version="1.0" encoding="utf-8" ?> <schema xmlns="http://www.ascc.net/xml/schematron"> XML XML <title>ArtistUpdated Contract</title> <ns uri="http://example.com/notifications" prefix="n"/> <ns uri="http://example.com/artist" prefix="a"/> <ns uri="http://example.com/sharedtypes" prefix="s"/> <phase id="validateStructure"> <active pattern="structure"/> </phase> Schematron  Intermediate  <pattern name="Validate structure" id="structure"> Schematron  Intermediate  XSLT XSLT rules <rule context="/"> rules transform transform <assert test="n:ArtistUpdated"/> </rule> <rule context="n:ArtistUpdated"> <assert test="a:Artist"/> </rule> <rule context="n:ArtistUpdated/a:Artist"> <assert test="a:GlobalArtistCode"/> <assert test="a:DefaultName"/> <assert test="a:MainRepertoireOwnerCompany"/> <assert test="a:ChangedDate"/> </rule> <rule context="n:ArtistUpdated/a:Artist/a:MainRepertoireOwnerCompany"> <assert test="s:OperatingCompanyCode"/> Results <assert test="s:Name"/> Results </rule> </pattern> </schema> An External DSL for Consumer Contracts Declarative ArtistUpdated [http://example.com/notifications] Artist[http://example.com/artist] GlobalArtistCode : int DefaultName : string MainRepertoireOwnerCompany : companyType (0..1) ChangedDate : datetime Company[http://example.com/company] id(companyType) OperatingCompanyCode : string Name : string What not How
  • 7. Validating XML ArtistUpdated [http://example.com/notifications] Artist[http://example.com/artist] GlobalArtistCode : int DefaultName : string MainRepertoireOwnerCompany : companyType (0..1) ChangedDate : datetime Company[http://example.com/company] id(companyType) OperatingCompanyCode : string Name : string <ArtistUpdated xmlns="http://example.com/notifications"> <Artist xmlns="http://example.com/artist"> <GlobalArtistCode>13570</GlobalArtistCode> <DefaultName>Tom Waits</DefaultName> <MainRepertoireOwnerCompany xmlns:c="xmlns="http://example.com/company"> <c:OperatingCompanyCode>HF32L</c:OperatingCompanyCode> <c:Name>Mercury Records Ltd</c:Name> </MainRepertoireOwnerCompany> <ChangedDate>2008-09-10T13:57:14+01:00</ChangedDate> ... </Artist> <ArtistUpdated> Validating JSON ArtistUpdated [http://example.com/notifications] Artist[http://example.com/artist] GlobalArtistCode : int DefaultName : string MainRepertoireOwnerCompany : companyType (0..1) ChangedDate : datetime Company[http://example.com/company] id(companyType) OperatingCompanyCode : string Name : string { "ArtistUpdated": { "Artist": { "GlobalArtistCode": 13570, "DefaultName": "Tom Waits", "MainRepertoireOwnerCompany": { "OperatingCompanyCode": "HF32L", "Name": "Mercury Records Ltd", }, "ChangedDate": "2008-09-10T13:57:14+01:00" } } }
  • 8. Validating YAML ArtistUpdated [http://example.com/notifications] Artist[http://example.com/artist] GlobalArtistCode : int DefaultName : string MainRepertoireOwnerCompany : companyType (0..1) ChangedDate : datetime Company[http://example.com/company] id(companyType) OperatingCompanyCode : string Name : string ArtistUpdated: Artist: GlobalArtistCode: 13570 DefaultName: Tom Waits MainRepertoireOwnerCompany: OperatingCompanyCode: HF32L Name: Mercury Records Ltd ChangedDate: 2008-09-10T13:57:14+01:00 Transformations Validator Validator ArtistUpdated [http://example.com/notifications] Artist[http://example.com/artist] GlobalArtistCode : int DefaultName : string MainRepertoireOwnerCompany : companyType (0..1) Contract ChangedDate : datetime Contract AST AST Serializer Serializer Company[http://example.com/company] id(companyType) OperatingCompanyCode : string Name : string Graph Graph
  • 9. Validating Forms ArtistUpdated [http://example.com/notifications] Artist[http://example.com/artist] GlobalArtistCode : int DefaultName : string MainRepertoireOwnerCompany : companyType (0..1) ChangedDate : datetime Company[http://example.com/company] id(companyType) OperatingCompanyCode : string Name : string POST /notifications HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 301 ArtistUpdated_Artist_GlobalArtistCode=13570&ArtistUpdated_Artist_DefaultName=Tom+W aits&ArtistUpdated_Artist_MainRepertoireOwnerCompany_OperatingCompanyCode=HF32L&Ar tistUpdated_Artist_MainRepertoireOwnerCompany_Name=Mercury+Records+Ltd&ArtistUpdat ed_Artist_ChangedDate=2008-09-10T13%3A57%3A14%2B01%3A00 Social Networks for Contracts Product Catalog Product Catalog Warehouse Warehouse Marketing Marketing offers offers expects expects expects expects Name = ArtistUpdated Name = ArtistUpdated expects expects expects expects has has expects expects expects expects expects expects expects expects Name = Artist Name = Artist has has has has has Name = GlobalArtistCode Name = GlobalArtistCode Name = ChangedDate Name = ChangedDate Name = DefaultName Name = DefaultName Type = int Type = int Type = datetime Type = datetime Type = string Type = string
  • 10. Generating Consumer‐Driven Contracts ArtistUpdated Artist GlobalArtistCode : int ChangedDate : datetime ArtistUpdated Artist GlobalArtistCode : int DefaultName : string ChangedDate : datetime ArtistUpdated Artist DefaultName : string ChangedDate : datetime Services Share Contract, Not Type Graph Contract Contract Graph Consumer‐Driven  Contract Design Consumer  Contract Validator Validator Serializer Serializer Execute Produce Consume
  • 11. Summary • How do we get started? – Iteratively fill out map of the territories • 4 core artefacts: – Stories – Capabilities – Services – Contracts • Consumer and consumer‐driven contracts: – Tests exchanged between teams – DSL for consumer contracts Consumer‐Driven Contracts • http://www.martinfowler.com/articles/consumerDrivenCon tracts.html • http://www.infoq.com/articles/consumer‐driven‐contracts • http://iansrobinson.com/