Slide 1

Slide 1 text

SPECIFICATION BY EXAMPLE BY EXAMPLE Presented by / Leszek Prabucki @l3l0

Slide 2

Slide 2 text

FEW WORDS OF INTRODUCTION

Slide 3

Slide 3 text

WHAT "SPECIFICATION BY EXAMPLE" IS ?

Slide 4

Slide 4 text

COLLABORATION AND COMMUNICATION

Slide 5

Slide 5 text

ABILITY TO CHANGE

Slide 6

Slide 6 text

QUALITY

Slide 7

Slide 7 text

LESS REWORK

Slide 8

Slide 8 text

YEAH... WE ARE SPEAKING ABOUT BEHAVIOR DRIVEN DEVELOPMENT!

Slide 9

Slide 9 text

TIME TO USE CASE: HOW WE ARE TRYING TO IMPLEMENT BDD IN OUR COMPANY ?

Slide 10

Slide 10 text

FIRST OF ALL DO NOT USE BUZZWORDS

Slide 11

Slide 11 text

INCREASE CONFIDENCE BETWEEN COLLABORATORS Draft project with small team Internal "Avazanga" timesheet application Focus on quality

Slide 12

Slide 12 text

GOAL: MAKE OUR INTERNAL TIME MANAGEMENT EASIER SO WE WILL BE ABLE TO DECREASE WORK NEEDED FOR GENERATING TIME REPORTS

Slide 13

Slide 13 text

DERIVING SCOPE FROM GOAL - IMPACT MAPPING

Slide 14

Slide 14 text

SPECIFYING COLLABORATIEVLY USING EXAMPLES

Slide 15

Slide 15 text

F e a t u r e : M a n a g i n g t i m e s p e n t o n t a s k s A s a e m p l o y e e I w a n t t o m a n a g e m y s p e n t t i m e o n t a s k i n o r d e r t o g e t p a i d f o r m y w o r k t i m e S c e n a r i o : D e f i n e s s p e n t t i m e o n t a s k S c e n a r i o : R e d e f i n e t i m e a d d e d b e f o r e

Slide 16

Slide 16 text

F e a t u r e : M a n a g i n g t i m e s p e n t o n t a s k s A s a e m p l o y e e I w a n t t o m a n a g e m y s p e n t t i m e o n t a s k i n o r d e r t o g e t p a i d f o r m y w o r k t i m e S c e n a r i o : D e f i n e s s p e n t t i m e o n t a s k G i v e n I a m e m p l o y e e W h e n I d e f i n e s t h a t I s p e n t t i m e o n s o m e t a s k T h e n I s e e t h a t t i m e o n m y c a l e n d a r S c e n a r i o : R e d e f i n e t i m e a d d e d b e f o r e G i v e n I a m e m p l o y e e A n d I d e f i n e d t h a t I s p e n t t i m e o n s o m e t a s k W h e n I r e d e f i n e s t h i s t i m e T h e n I s e e e d i t e d t i m e o n m y c a l e n d a r

Slide 17

Slide 17 text

REFINING THE SPECIFICATION

Slide 18

Slide 18 text

F e a t u r e : M a n a g i n g t i m e s p e n t o n t a s k s A s a e m p l o y e e I w a n t t o m a n a g e m y s p e n t t i m e o n t a s k i n o r d e r t o g e t p a i d f o r m y w o r k t i m e B a c k g r o u n d : G i v e n c o m p a n y a v a l t o n h a s s u c h e m p l o y e e s : | f i r s t n a m e | l a s t n a m e | e m a i l | | L e s z e k | P r a b u c k i | l e s z e k . p r a b u c k i + s b e @ g m a i l . c o m | | J a n | K o w a l s k i | j k @ a v a l t o n . c o m | A n d c o m p a n y a v a l t o n h a s s u c h t a s k s : | c o d e | n a m e | | A Z G - D E V | A v a z a n g a d e v e l o p i n g | A n d I a m " L e s z e k P r a b u c k i " e m p l o y e e S c e n a r i o : D e f i n e s s p e n t t i m e o n t a s k W h e n I a m l o g g e d i n A n d I d e f i n e s t h a t t i m e f r o m 9 a m t o 3 p m I s p e n t o n t h e " A v a z a n g a d e v e l o p i n g " t a s k T h e n I n m y c a l e n d a r A n d I s h o u l d s e e t h a t " A v a z a n g a d e v e l o p i n g " t a s k t a k e s m e 6 h o u r s t o d a y S c e n a r i o : R e d e f i n e t i m e a d d e d b e f o r e G i v e n I d e f i n e d t h a t t i m e f r o m 9 a m t o 3 p m I s p e n t o n t h e " A v a z a n g a d e v e l o p i n g " t a s k W h e n I a m l o g g e d i n A n d I d e f i n e s t h a t t i m e f r o m 9 a m t o 2 p m I s p e n t o n t h e " A v a z a n g a d e v e l o p i n g " t a s k T h e n I n m y c a l e n d a r A n d I s h o u l d s e e t h a t " A v a z a n g a d e v e l o p i n g " t a s k t a k e s m e 5 h o u r s t o d a y

Slide 19

Slide 19 text

AVAZANGA USE CASE IMPLEMENTATION DETAILS Symfony2 REST API AngularJS client

Slide 20

Slide 20 text

SPECIFICATION LAYERS Business specification layer (BEHAT + selenium) Client unit specification layer (jasmine) API specification layer (BEHAT + symfony driver) API units specification layer (phpspec)

Slide 21

Slide 21 text

EXAMPLE BUSINESS LAYER STEP IMPLEMENTATION F e a t u r e : M a n a g i n g t i m e s p e n t o n t a s k s A s a e m p l o y e e I w a n t t o m a n a g e m y s p e n t t i m e o n t a s k i n o r d e r t o g e t p a i d f o r m y w o r k t i m e B a c k g r o u n d : A n d c o m p a n y a v a l t o n h a s s u c h t a s k s : | c o d e | n a m e | | A Z G - D E V | A v a z a n g a d e v e l o p i n g | c l a s s F e a t u r e C o n t e x t e x t e n d s R a w M i n k C o n t e x t { / * * * @ G i v e n / ^ c o m p a n y ( [ a - z A - Z ] + ) h a s s u c h t a s k s : $ / * / p u b l i c f u n c t i o n c o m p a n y H a s S u c h T a s k s ( $ c o m p a n y N a m e , T a b l e N o d e $ t a b l e ) { $ c o m p a n y I d = $ t h i s - > g e t C o m p a n y I d ( $ c o m p a n y N a m e ) ; f o r e a c h ( $ t a b l e - > g e t H a s h ( ) a s $ r o w ) { $ t h i s - > i n s e r t C o m p a n y ( $ c o m p a n y I d , $ r o w ) ; } } }

Slide 22

Slide 22 text

EXAMPLE CLIENT SPECIFICATION IMPLEMENTATION b e f o r e E a c h ( i n j e c t ( f u n c t i o n ( $ c o n t r o l l e r , $ r o o t S c o p e , $ s t a t e , $ q ) { / / m o c k a j a x r e s t r e s p o n s e } ) ; i t ( ' a d d s t i m e r o w s f r o m a p i t o s c o p e ' , i n j e c t ( f u n c t i o n ( ) { s c o p e . $ a p p l y ( ) ; v a r t i m r o w s = [ { f r o m : " 2 0 1 4 - 0 3 - 0 7 T 1 2 : 0 0 : 0 0 Z " , t o : " 2 0 1 4 - 0 3 - 0 7 T 1 3 : 0 5 : 0 0 Z " , t a s k : " 1 " , d e s c r i p t i o n : " P r e p a r i n g f o r p h p e r s " } ] ; e x p e c t ( s c o p e . t i m e r o w s ) . t o E q u a l ( e x p e c t e d T r e e ) ; } ) ) ; } ) ;

Slide 23

Slide 23 text

API SPECIFICATION IMPLEMENTATION F e a t u r e : M a n a g e t i m e s h e e t s A s a A P I c l i e n t I w a n t t o m a n a g e m y t i m e s h e e t s S c e n a r i o : S h o w m y t i m e r o w s G i v e n I s e n d " G E T " r e q u e s t t o " / u s e r s / l e s z e k - p / t i m e r o w s " T h e n t h e r e s p o n s e s t a t u s c o d e s h o u l d b e 2 0 0 A n d I s h o u l d s e e j s o n : " " " [ { " i d " : 2 , " d e s c r i p t i o n " : " P r e p a r i n g f o r p h p e r s " , " f r o m " : " 2 0 1 4 - 0 3 - 0 7 T 1 2 : 0 0 : 0 0 Z " , " t o " : " 2 0 0 7 - 1 2 - 0 1 T 1 5 : 5 0 : 0 0 + 0 0 0 0 " , " l e v e l " : 1 , " _ l i n k s " : { " s e l f " : { " h r e f " : " h t t p : / / l o c a l h o s t / t i m e r o w s / 2 " } } } ] " " "

Slide 24

Slide 24 text

API UNIT SPECIFICATION IMPLEMENTATION c l a s s T i m e r o w s C o n t r o l l e r S p e c e x t e n d s O b j e c t B e h a v i o r { f u n c t i o n l e t ( V i e w H a n d l e r I n t e r f a c e $ v i e w H a n d l e r , T i m e r o w R e p o s i t o r y $ t i m e r o w R e p o s i t o r y ) { $ t h i s - > b e C o n s t r u c t e d W i t h ( $ v i e w H a n d l e r , $ t i m e r o w R e p o s i t o r y ) ; } f u n c t i o n i t _ g e t s _ t i m e r o w s ( V i e w H a n d l e r I n t e r f a c e $ v i e w H a n d l e r , T i m e r o w R e p o s i t o r y $ t i m e r o w R e p o s i t o r y , R e s p o n s e $ r e s p o n s e ) { $ t i m e r o w R e p o s i t o r y - > f i n d U s e r T i m e r o w s ( ' l - p r a b u c k i ' ) - > w i l l R e t u r n ( [ $ t i m e r o w ] ) ; $ v i e w H a n d l e r - > h a n d l e ( A r g u m e n t : : t h a t ( f u n c t i o n ( V i e w $ v i e w ) u s e ( $ t i m e r o w ) { r e t u r n $ v i e w - > g e t D a t a ( ) [ 0 ] = = $ t i m e r o w s ; } ) ) - > s h o u l d B e C a l l e d ( ) - > w i l l R e t u r n ( $ r e s p o n s e ) ; $ t h i s - > g e t T i m e r o w s A c t i o n ( ' l - p r a b u c k i ' ) - > s h o u l d B e ( $ r e s p o n s e ) ; } }

Slide 25

Slide 25 text

SUM UP: LIVING DOCUMENTATION

Slide 26

Slide 26 text

KNOWN ISSUES AND PROBLEMS

Slide 27

Slide 27 text

THE END. QUESTIONS ?