SlideShare a Scribd company logo
1 of 63
Download to read offline
MediaGeniX	
  
Con,nuous	
  integra,on	
  
§  Context	
  
§  Current	
  system	
  
§  Tools	
                                                                 	
  


                                             CONTINUOUS	
  
CONTENTS	
                                   INTEGRATION	
                  	
  


                              Elke	
  Ma@hijs	
  and	
  Maïkel	
  Vandorpe	
  
                                       elke.ma@hijs@mediagenix.tv	
  
                                maikel.vandorpe@mediagenix.tv	
  
Our	
  Product	
  
Our	
  Customers	
  
Technical	
  Product	
  Informa,on	
  

MEDIAGENIX	
  
PRODUCT	
  COMPANY	
  
   20	
  YEARS	
  OF	
  
    WHATS’ON	
  
Halloween	
  Next	
  Year	
  
Halloween	
  next	
  year	
  
             	
  
             	
  
             	
  
CUSTOMERS	
  
VRT          RTBF

  MTV                               VT4

              Product
Pro7         (15.000	
  classes)         VTM


       NRK                         YLE
                     TV2
       MANY	
  CUSTOMIZATIONS	
  
90	
  Employees	
  
§  30	
  SoZware	
  Developers	
  
§  6	
  Project	
  Managers	
  
§  13	
  Func,onal	
  Analysts	
  
§  17	
  Customer	
  Support	
  Analysts	
  
§  Other	
  …	
  
Applica,on	
  Overview	
  
§  1.9	
  Million	
  lines	
  of	
  code	
  

§  15.000	
  own	
  classes	
  

§  200.000	
  methods	
  

§  1000	
  database	
  tables	
  
§  35	
  customers	
  wan,ng	
  different	
  things	
  

§  They	
  want	
  it	
  tomorrow	
  

§  30	
  developers	
  ‘spawning’	
  code	
  

§  Short	
  ,me	
  to	
  market	
  

=>	
  Con,nuous	
  Integra,on	
  
Context	
  
Current	
  tes,ng	
  system	
  
Tools	
  

CONTINUOUS	
  INTEGRATION	
  
Con$nuous	
  integra$on	
  
	
  
§ 	
  Many	
  isolated	
  changes	
  
§ 	
  Many	
  integra,ons	
  
§ 	
  Each	
  is	
  immediately	
  tested	
  
§ 	
  Detect	
  and	
  fix	
  problems	
  soon	
  
Con$nuous	
  integra$on	
  
	
  
	
  
Development	
  teams	
  integrate	
  frequently	
  	
  
       § 	
  Avg:	
  	
  70/day	
  
Tes,ng	
  system	
  
       § 	
  Each	
  integra,on	
  is	
  automa,cally	
  built	
  and	
  tested	
  



Efficiently	
  detect	
  and	
  fix	
  problems	
  
Significant	
  reduc,on	
  of	
  integra,on	
  problems	
  
Develop	
  cohesive	
  soZware	
  even	
  in	
  a	
  limited	
  ,me	
  frame	
  	
  
What	
  do	
  we	
  test?	
  
	
  
As	
  much	
  as	
  possible	
  
       § 	
  Unit	
  tests	
  
       § 	
  Consistency	
  checks	
  
       § 	
  UI	
  tests	
  and	
  Acceptance	
  tests	
  in	
  general	
  
       § 	
  Refactoring	
  tests	
  

	
  
Sequen,al	
  running	
  of	
  tests	
  take	
  over	
  12	
  hours	
  
Code	
  consistency	
  checks	
  
                  	
  	
  
Check	
  if	
  code	
  guidelines	
  have	
  been	
  followed	
  
	
  
Why	
  ?	
  
           § 	
  Consistent	
  code	
  makes	
  life	
  easy	
  
           § 	
  Reduce	
  number	
  of	
  bugs	
  
	
  
	
  	
  
	
  
Code	
  consistency	
  checks	
  
                     	
  	
  
	
                                            	
  	
  	
  	
  	
  buildMenuBar	
  
	
     	
  	
  	
  TopApplica?on	
            	
  
            	
  	
  	
  Applica,on	
  A	
               |	
  menu	
  |	
  
                                                        (menu	
  :=	
  Menu	
  new)	
  
            	
  	
  	
  Applica,on	
  B	
                        	
  addItem:	
  self	
  fileMenuItem;	
  
                                                                 	
  addItem:	
  self	
  editMenuItem;	
  
            	
  	
  	
  Applica,on	
  C	
                        	
  addItem:	
  self	
  toolsMenuItem.	
  
                                                        	
  
                                                        self	
  addMenuBarItemsTo:	
  menu.                 	
  	
  
                                                        menu	
  
                                                                 	
  addItem:	
  self	
  viewMenuItem;	
  
                                                                 	
  addItem:	
  self	
  windowsMenuItem.	
  
                                                        ^menu	
  
Code	
  consistency	
  checks	
  
                     	
  	
  
	
  
	
     	
  	
  	
  TopApplica?on	
  
            	
  	
  	
  Applica,on	
  A	
  
            	
  	
  	
  Applica,on	
  B	
  
            	
  	
  	
  Applica,on	
  C	
  

                                test_topApplica,on_buildMenuBar	
  
                                   "Don't	
  implement	
  #buildMenuBar.	
  
                                   use	
  #addMenuBarItemsTo:"	
  
                                            	
  	
  
                                   self	
  assert:	
  (self	
  implementorsOf:	
  #buildMenuBar	
  
                                            	
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  inSubclassesOf:	
  TopApplica,on)	
  
                                   isEmpty.	
  
UI	
  tests	
  and	
  Acceptance	
  tests	
  	
  
	
  
Why	
  ?	
  
§ 	
  Unit	
  test	
  
        § 	
  Test	
  a	
  method	
  
        § 	
  Change	
  the	
  method,	
  change	
  the	
  test	
  


§ 	
  Acceptance	
  test	
  
        § 	
  Emulate	
  a	
  user	
  process	
  
        § 	
  More	
  stable	
  tests	
  
        =>	
  Never	
  change	
  func,onality,	
  unless	
  user	
  asks	
  for	
  it	
  
        	
  
UI	
  Tes,ng	
  –	
  A	
  Person	
  Editor	
  
test_editPerson	
  
         	
  |	
  person|	
  
         	
  person	
  :=	
  Person	
  withFirstName:	
  'Angelina'	
  	
  
         	
               	
  andLastName:	
  'Jolie'.	
  
         	
  self	
  deny:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p|	
  (p	
  firstName	
  =	
  'Bruce')	
  	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')]).	
  
         	
  self	
  openPersonEditorOn:	
  person.	
  
         	
  self	
  editField:	
  #lastName	
  value:	
  'Willis'.	
  
         	
  self	
  editField:	
  #firstName	
  value:	
  'Bruce'.	
  	
  
         	
  self	
  toolBarPress:	
  #saveCommand.	
  
         	
  self	
  assert:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p	
  |	
  (p	
  firstName	
  =	
  'Bruce')	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')])	
  
test_editPerson	
  
         	
  |	
  person|	
  
         	
  person	
  :=	
  Person	
  withFirstName:	
  'Angelina'	
  	
  
         	
               	
  andLastName:	
  'Jolie'.	
  
         	
  self	
  deny:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p|	
  (p	
  firstName	
  =	
  'Bruce')	
  	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')]).	
  
         	
  self	
  openPersonEditorOn:	
  person.	
  
         	
  self	
  editField:	
  #lastName	
  value:	
  'Willis'.	
  
         	
  self	
  editField:	
  #firstName	
  value:	
  'Bruce'.	
  	
  
	
       	
  self	
  toolBarPress:	
  #saveCommand.	
  
         	
  self	
  assert:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p	
  |	
  (p	
  firstName	
  =	
  'Bruce')	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')])	
  
test_editPerson	
  
         	
  |	
  person|	
  
         	
  person	
  :=	
  Person	
  withFirstName:	
  'Angelina'	
  	
  
         	
               	
  andLastName:	
  'Jolie'.	
  
         	
  self	
  deny:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p|	
  (p	
  firstName	
  =	
  'Bruce')	
  	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')]).	
  
         	
  self	
  openPersonEditorOn:	
  person.	
  
         	
  self	
  editField:	
  #lastName	
  value:	
  'Willis'.	
  
         	
  self	
  editField:	
  #firstName	
  value:	
  'Bruce'.	
  	
  
	
       	
  self	
  toolBarPress:	
  #saveCommand.	
  
         	
  self	
  assert:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p	
  |	
  (p	
  firstName	
  =	
  'Bruce')	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')])	
  
UI	
  Tes,ng	
  –	
  A	
  Person	
  Editor	
  
test_editPerson	
  
         	
  |	
  person|	
  
         	
  person	
  :=	
  Person	
  withFirstName:	
  'Angelina'	
  	
  
         	
               	
  andLastName:	
  'Jolie'.	
  
         	
  self	
  deny:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p|	
  (p	
  firstName	
  =	
  'Bruce')	
  	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')]).	
  
         	
  self	
  openPersonEditorOn:	
  person.	
  
         	
  self	
  editField:	
  #lastName	
  value:	
  'Willis'.	
  
         	
  self	
  editField:	
  #firstName	
  value:	
  'Bruce'.	
  	
  
	
       	
  self	
  toolBarPress:	
  #saveCommand.	
  
         	
  self	
  assert:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p	
  |	
  (p	
  firstName	
  =	
  'Bruce')	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')])	
  
UI	
  Tes,ng	
  –	
  A	
  Person	
  Editor	
  
test_editPerson	
  
         	
  |	
  person|	
  
         	
  person	
  :=	
  Person	
  withFirstName:	
  'Angelina'	
  	
  
         	
               	
  andLastName:	
  'Jolie'.	
  
         	
  self	
  deny:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p|	
  (p	
  firstName	
  =	
  'Bruce')	
  	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')]).	
  
         	
  self	
  openPersonEditorOn:	
  person.	
  
         	
  self	
  editField:	
  #lastName	
  value:	
  'Willis'.	
  
         	
  self	
  editField:	
  #firstName	
  value:	
  'Bruce'.	
  	
  
	
       	
  self	
  toolBarPress:	
  #saveCommand.	
  
         	
  self	
  assert:	
  (Person	
  existsWhere:	
  	
  
         	
               	
  [:p	
  |	
  (p	
  firstName	
  =	
  'Bruce')	
  
         	
               	
  &	
  (p	
  lastName	
  =	
  'Willis')])	
  
Refactoring	
  tests	
  	
  
	
  
Why	
  ?	
  
       	
      	
             	
                         	
  	
  	
  	
  	
  	
  	
  	
  	
  Basic	
  Whats’On	
  
	
                                                                                 Method	
  X	
  
                                                                                             Y
                                     Call	
  	
  X	
  
                                                 Y
	
   Press	
  Bu@on	
                                                                                                         C
                                                                                                                     Ac?on	
  A	
  
	
  
       	
      	
             	
                         	
  	
  	
  	
  	
  	
  	
  	
  	
  Whats’On	
  for	
  a	
  customer	
  
	
  
                                                                                   Method	
  X	
  
	
                                                                                                                   Ac?on	
  B	
  
	
  
       	
  =>	
  Important	
  during	
  upgrades	
  
Refactoring	
  tests	
  
           	
  	
  
test_methodX_deprecated	
  
	
  	
  	
  	
  	
  	
  	
  "use	
  methodY"	
  
	
  	
  	
  	
  	
  	
  	
  	
  self	
  assertNoImplementorsOf:	
  ‘methodX‘.	
  
	
  	
  	
  	
  	
  	
  	
  	
  self	
  assertNoReferencesTo:	
  ‘methodX’.	
  
	
  
	
  
Goals	
  
§ 	
  Get	
  test	
  results	
  as	
  fast	
  as	
  possible	
  
§ 	
  Alert	
  ASAP	
  when	
  build	
  is	
  broken	
  
§ 	
  Emulate	
  actual	
  users	
  
§ 	
  SLA:	
  Priority	
  1	
  bug	
  	
  
          	
  =>	
  deliver	
  bugfix	
  within	
  1	
  day	
  
Challenges	
  
§ 	
  Tests	
  take	
  over	
  12	
  hours	
  to	
  run	
  
§ 	
  No	
  out-­‐of-­‐the-­‐box	
  solu,on	
  
⇒ We	
  Built	
  a	
  distributed	
  system	
  ourselves	
  

§ 	
  Mul,ple	
  tests	
  on	
  the	
  same	
  DB	
  
Mul$ple	
  tests	
  on	
  same	
  DB	
  
§ 	
  Problem:	
  You	
  assume	
  a	
  ‘clean	
  DB’	
  
when	
  you	
  start	
  running	
  a	
  test	
  
§ 	
  Solu$on:	
  Take	
  snapshot	
  before	
  test,	
  
restore	
  snapshot	
  aZer	
  test	
  
            
               
               
      4 Test Coordinators
   4 x16 Test Slaves
Current	
  Tes,ng	
  System	
  
     
               


	
          
       Image Creator




           
           
           
           
           
       Test Master
Store          
 .
                    
                                                                       Test Master



	
  
Tes,ng	
  a	
  version	
  
	
  
§ 	
  	
  Step	
  by	
  step:	
  
          § 	
  The	
  version	
  has	
  to	
  be	
  loaded	
  
          § 	
  Create	
  a	
  database	
  
          § 	
  The	
  version	
  has	
  to	
  be	
  tested	
  
          § 	
  The	
  developer	
  gets	
  the	
  results	
  
§ 	
  The	
  test	
  master	
  orchestrates	
  this	
  whole	
  process	
  
	
  
Test Master
                        
                                                                                                                    Image Creator

                                                                    To	
  Load	
              To	
  Test	
  

	
                                                                  Your	
  
                                                                    …	
   version	
           …	
  

Image	
  Creator	
                                                  Your	
  
                                                                    …	
   version	
  
                                                                    …	
  
                                                                    Your	
  version	
  
                                                                                              Your	
  
                                                                                              …	
   version	
  
                                                                                              …	
  
                                                                                              Your	
  version	
          
                                                                                                                         
§ 	
  TM	
  instructs	
  IC	
  to	
  load	
  your	
  version	
                                                      Store   
 .

§ 	
  Get	
  customers	
  code	
  from	
  Store	
  
§ 	
  AZer	
  loading	
  
        § 	
  Puts	
  the	
  new	
  image	
  on	
  a	
  fileserver	
  
        § 	
  IC	
  no,fies	
  TM	
  he’s	
  done	
  
 
Test	
  Coordinator	
  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
                                                                                               

§ 	
  TM	
  instructs	
  a	
  TC	
  to	
  start	
  tes,ng	
  a	
  version	
               Test Master

§ 	
  A	
  TM	
  is	
  responsible	
  for	
  1	
  whole	
  version	
  
                                                                          To	
  Load	
             To	
  Test	
  
                                                                          …	
                      Your	
  version	
  
                                                                          …	
                      …	
  




                                 4 Test Coordinators
 
Test	
  Slave	
  
                                                                                                       
                                                                                                       
                                                                                                       
                                                                                                       
                                                                                                       
§ 	
  TC	
  orders	
  TSs	
  to	
  copy	
  image	
                                              Test Master
	
  	
  	
  and	
  create	
  a	
  local	
  database	
  
§ 	
  When	
  database	
  ready,	
  start	
  tes,ng!	
  
       § 	
  Test	
  Class	
  per	
  Test	
  Class	
  
       § 	
  Report	
  back	
  to	
  TC	
  when	
  tes,ng	
  of	
  1	
  Class	
  is	
  done	
  	
  
       	
  	
  	
  and	
  receive	
  a	
  new	
  class	
  un,l	
  finished	
  




                           1 of the 4 Test Coordinators


                                                                                                                16 Test Slaves
                                                                                                 
                                                                                                    
Op,miza,ons	
  
                                                                               
                                                                               
                    
                                                                               
                    
                                                                               
                    
                                                                               
                                                                           Test Master
            
§ 	
  Parallel	
  vs	
  sequen,al	
  	
                                                      Image Creator
        § 	
  IC	
  can	
  load	
  4	
  versions	
  simultaneously	
  
        § 	
  4	
  TCs	
  
        	
  	
  	
  4	
  Versions	
  are	
  tested	
  simultaneously	
  
        § 	
  16	
  TSs	
  
        	
  	
  	
  Tes,ng	
  1	
  version	
  is	
  much	
  faster	
  




                         1 of the 4 Test Coordinators


                                                                                          16 Test Slaves
Test Master


                                                                     To	
  Load	
                                   To	
  Test	
  
                                                                     Version	
  z	
  	
                             Version	
  (x+1)	
  	
       y
                                                                                                                                                 x	
  	
  
                                                                     	
  	
  	
  	
  	
  for	
  customer	
  C	
     	
  	
  	
  	
  	
  for	
  customer	
  A	
  	
  
                                                                                                                                                           B
	
                                                                   …	
                                            Version	
  (x+1)	
  	
       y	
  	
  

Op,miza,ons	
  
                                                                                                                    	
  	
  	
  	
  	
  for	
  customer	
  B	
  
                                                                                                                                                           A
                                                                                                                    Version	
  (x+1)	
  	
  
                                                                                                                    …	
  
                                                                                                                    	
  	
  	
  	
  	
  for	
  customer	
  A	
  
                                                                                                                    …	
  
§ 	
  Dialog	
  ‘Would	
  you	
  like	
  to	
  schedule	
  the	
  tests’	
  
§ 	
  Only	
  test	
  latest	
  available	
  version	
  
§ 	
  TM	
  queues	
  can	
  be	
  manipulated	
  
        § 	
  Priori,ze	
  
        § 	
  Unschedule	
  
	
  
                                                        
                                                           
Op,miza,ons	
                                              
                                                           
                                                           
                                                           
§ 	
  Time-­‐outs	
                                  Image Creator
        § 	
  IC	
  aZer	
  30minutes	
  
        § 	
  TC	
  aZer	
  75minutes	
  
        § 	
  TS	
  aZer	
  +/-­‐	
  10minutes	
  
 
Op,miza,ons	
  

§ 	
  Assign	
  test	
  classes	
  in	
  a	
  smart	
  order	
  
§ 	
  ‘Nuke’	
  tests	
  




                                                                    16 Test Slaves
 
Test	
  Results	
  

§ 	
  What?	
  Timing?	
  
        § 	
  Build	
  failed	
  	
  	
  <	
  45minutes	
  
        § 	
  AZer	
  tests	
  have	
  successfully	
  run	
  
                  § 	
  X	
  total	
  tests,	
  Y	
  failures,	
  Z	
  errors,	
  T	
  not	
  run	
  
                  § 	
  With	
  wai,ng	
  in	
  a	
  queue	
  +/-­‐	
  4hours	
  
                  § 	
  Without	
  wai,ng	
  in	
  a	
  queue	
  <	
  1hour	
  

§ 	
  Saved	
  on	
  Store!	
  
Con,nuous	
  integra,on	
  –	
  VERA/
      Seaside	
  interface	
  
Con,nuous	
  integra,on	
  –	
  VERA/
      Seaside	
  interface	
  
VERA/Seaside	
  interface	
  
VERA/Seaside	
  interface	
  
Integrated	
  Tools	
  
§ Open	
  SUnit	
  on	
  failed	
  tests	
  
§ Find	
  origin	
  failing	
  test	
  
 
   	
  

Demo	
  
Goals	
  
§ Get	
  test	
  results	
  as	
  fast	
  as	
  possible	
  
§ Alert	
  ASAP	
  when	
  build	
  is	
  broken	
  
§ Emulate	
  actual	
  users	
  
§ SLA:	
  Priority	
  1	
  bug	
  	
  
         	
  =>	
  deliver	
  bugfix	
  within	
  1	
  day	
  
Conclusion	
  
Goals	
  have	
  been	
  met!	
  
    §  Build	
  with	
  report	
  on	
  broken	
  builds	
  
        within	
  45	
  minutes	
  
    §  Test	
  results	
  can	
  come	
  in	
  within	
  1	
  hour	
  
         §  Prio	
  1	
  bugs	
  can	
  be	
  fixed	
  within	
  a	
  day	
  
    §  ‘Reasonable’	
  ,me	
  for	
  results	
  
         §  4	
  hours	
  on	
  average	
  
    §  Bonus:	
  integrated	
  tools	
  on	
  SUnit	
  
Conclusion	
  
Future	
  areas	
  of	
  improvement	
  …	
  
   §  Test	
  every	
  version	
  
       §  Be@er	
  pin-­‐point	
  where	
  an	
  error	
  started	
  
   §  Speed	
  up	
  through-­‐put	
  of	
  unpriori,sed	
  
       tests	
  
 
	
  
       Ques,ons?	
  
Q:	
  Which	
  customisa,ons	
  do	
  customers	
  want?	
  
A:	
  See	
  next	
  presenta,on	
  
	
  
Q:	
   Why	
   does	
   the	
   product	
   need	
   to	
   change	
   that	
  
oZen?	
  
A:	
   Technical	
   evolu,on,	
   target	
   different	
  
markets,	
  new	
  regula,ons,	
  …	
  

More Related Content

Viewers also liked

Welcome ghent
Welcome ghentWelcome ghent
Welcome ghentESUG
 
Object Centric Profiling
Object Centric ProfilingObject Centric Profiling
Object Centric ProfilingESUG
 
Object Centric Reflection
Object Centric ReflectionObject Centric Reflection
Object Centric ReflectionESUG
 
IWST12: Spec
IWST12: SpecIWST12: Spec
IWST12: SpecESUG
 
Across 31 Years
Across 31 YearsAcross 31 Years
Across 31 YearsESUG
 
Smalltalk In the Cloud
Smalltalk In the CloudSmalltalk In the Cloud
Smalltalk In the CloudESUG
 
Zinc WebSockets
Zinc WebSocketsZinc WebSockets
Zinc WebSocketsESUG
 

Viewers also liked (7)

Welcome ghent
Welcome ghentWelcome ghent
Welcome ghent
 
Object Centric Profiling
Object Centric ProfilingObject Centric Profiling
Object Centric Profiling
 
Object Centric Reflection
Object Centric ReflectionObject Centric Reflection
Object Centric Reflection
 
IWST12: Spec
IWST12: SpecIWST12: Spec
IWST12: Spec
 
Across 31 Years
Across 31 YearsAcross 31 Years
Across 31 Years
 
Smalltalk In the Cloud
Smalltalk In the CloudSmalltalk In the Cloud
Smalltalk In the Cloud
 
Zinc WebSockets
Zinc WebSocketsZinc WebSockets
Zinc WebSockets
 

More from ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

More from ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Recently uploaded

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
 
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
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
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
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 

Recently uploaded (20)

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
 
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
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
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
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 

Continuous Integration: a practical approach

  • 1. MediaGeniX   Con,nuous  integra,on   §  Context   §  Current  system   §  Tools     CONTINUOUS   CONTENTS   INTEGRATION     Elke  Ma@hijs  and  Maïkel  Vandorpe   elke.ma@hijs@mediagenix.tv   maikel.vandorpe@mediagenix.tv  
  • 2. Our  Product   Our  Customers   Technical  Product  Informa,on   MEDIAGENIX  
  • 3. PRODUCT  COMPANY   20  YEARS  OF   WHATS’ON  
  • 4.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14. Halloween  next  year        
  • 16. VRT RTBF MTV VT4 Product Pro7 (15.000  classes) VTM NRK YLE TV2 MANY  CUSTOMIZATIONS  
  • 17. 90  Employees   §  30  SoZware  Developers   §  6  Project  Managers   §  13  Func,onal  Analysts   §  17  Customer  Support  Analysts   §  Other  …  
  • 18. Applica,on  Overview   §  1.9  Million  lines  of  code   §  15.000  own  classes   §  200.000  methods   §  1000  database  tables  
  • 19. §  35  customers  wan,ng  different  things   §  They  want  it  tomorrow   §  30  developers  ‘spawning’  code   §  Short  ,me  to  market   =>  Con,nuous  Integra,on  
  • 20. Context   Current  tes,ng  system   Tools   CONTINUOUS  INTEGRATION  
  • 21. Con$nuous  integra$on     §   Many  isolated  changes   §   Many  integra,ons   §   Each  is  immediately  tested   §   Detect  and  fix  problems  soon  
  • 22. Con$nuous  integra$on       Development  teams  integrate  frequently     §   Avg:    70/day   Tes,ng  system   §   Each  integra,on  is  automa,cally  built  and  tested   Efficiently  detect  and  fix  problems   Significant  reduc,on  of  integra,on  problems   Develop  cohesive  soZware  even  in  a  limited  ,me  frame    
  • 23. What  do  we  test?     As  much  as  possible   §   Unit  tests   §   Consistency  checks   §   UI  tests  and  Acceptance  tests  in  general   §   Refactoring  tests     Sequen,al  running  of  tests  take  over  12  hours  
  • 24. Code  consistency  checks       Check  if  code  guidelines  have  been  followed     Why  ?   §   Consistent  code  makes  life  easy   §   Reduce  number  of  bugs          
  • 25. Code  consistency  checks                  buildMenuBar          TopApplica?on          Applica,on  A   |  menu  |   (menu  :=  Menu  new)        Applica,on  B    addItem:  self  fileMenuItem;    addItem:  self  editMenuItem;        Applica,on  C    addItem:  self  toolsMenuItem.     self  addMenuBarItemsTo:  menu.     menu    addItem:  self  viewMenuItem;    addItem:  self  windowsMenuItem.   ^menu  
  • 26. Code  consistency  checks                TopApplica?on        Applica,on  A        Applica,on  B        Applica,on  C   test_topApplica,on_buildMenuBar   "Don't  implement  #buildMenuBar.   use  #addMenuBarItemsTo:"       self  assert:  (self  implementorsOf:  #buildMenuBar                          inSubclassesOf:  TopApplica,on)   isEmpty.  
  • 27. UI  tests  and  Acceptance  tests       Why  ?   §   Unit  test   §   Test  a  method   §   Change  the  method,  change  the  test   §   Acceptance  test   §   Emulate  a  user  process   §   More  stable  tests   =>  Never  change  func,onality,  unless  user  asks  for  it    
  • 28. UI  Tes,ng  –  A  Person  Editor  
  • 29. test_editPerson    |  person|    person  :=  Person  withFirstName:  'Angelina'        andLastName:  'Jolie'.    self  deny:  (Person  existsWhere:        [:p|  (p  firstName  =  'Bruce')        &  (p  lastName  =  'Willis')]).    self  openPersonEditorOn:  person.    self  editField:  #lastName  value:  'Willis'.    self  editField:  #firstName  value:  'Bruce'.      self  toolBarPress:  #saveCommand.    self  assert:  (Person  existsWhere:        [:p  |  (p  firstName  =  'Bruce')      &  (p  lastName  =  'Willis')])  
  • 30. test_editPerson    |  person|    person  :=  Person  withFirstName:  'Angelina'        andLastName:  'Jolie'.    self  deny:  (Person  existsWhere:        [:p|  (p  firstName  =  'Bruce')        &  (p  lastName  =  'Willis')]).    self  openPersonEditorOn:  person.    self  editField:  #lastName  value:  'Willis'.    self  editField:  #firstName  value:  'Bruce'.        self  toolBarPress:  #saveCommand.    self  assert:  (Person  existsWhere:        [:p  |  (p  firstName  =  'Bruce')      &  (p  lastName  =  'Willis')])  
  • 31. test_editPerson    |  person|    person  :=  Person  withFirstName:  'Angelina'        andLastName:  'Jolie'.    self  deny:  (Person  existsWhere:        [:p|  (p  firstName  =  'Bruce')        &  (p  lastName  =  'Willis')]).    self  openPersonEditorOn:  person.    self  editField:  #lastName  value:  'Willis'.    self  editField:  #firstName  value:  'Bruce'.        self  toolBarPress:  #saveCommand.    self  assert:  (Person  existsWhere:        [:p  |  (p  firstName  =  'Bruce')      &  (p  lastName  =  'Willis')])  
  • 32. UI  Tes,ng  –  A  Person  Editor  
  • 33. test_editPerson    |  person|    person  :=  Person  withFirstName:  'Angelina'        andLastName:  'Jolie'.    self  deny:  (Person  existsWhere:        [:p|  (p  firstName  =  'Bruce')        &  (p  lastName  =  'Willis')]).    self  openPersonEditorOn:  person.    self  editField:  #lastName  value:  'Willis'.    self  editField:  #firstName  value:  'Bruce'.        self  toolBarPress:  #saveCommand.    self  assert:  (Person  existsWhere:        [:p  |  (p  firstName  =  'Bruce')      &  (p  lastName  =  'Willis')])  
  • 34. UI  Tes,ng  –  A  Person  Editor  
  • 35. test_editPerson    |  person|    person  :=  Person  withFirstName:  'Angelina'        andLastName:  'Jolie'.    self  deny:  (Person  existsWhere:        [:p|  (p  firstName  =  'Bruce')        &  (p  lastName  =  'Willis')]).    self  openPersonEditorOn:  person.    self  editField:  #lastName  value:  'Willis'.    self  editField:  #firstName  value:  'Bruce'.        self  toolBarPress:  #saveCommand.    self  assert:  (Person  existsWhere:        [:p  |  (p  firstName  =  'Bruce')      &  (p  lastName  =  'Willis')])  
  • 36. Refactoring  tests       Why  ?                          Basic  Whats’On     Method  X   Y Call    X   Y   Press  Bu@on   C Ac?on  A                            Whats’On  for  a  customer     Method  X     Ac?on  B      =>  Important  during  upgrades  
  • 37. Refactoring  tests       test_methodX_deprecated                "use  methodY"                  self  assertNoImplementorsOf:  ‘methodX‘.                  self  assertNoReferencesTo:  ‘methodX’.      
  • 38. Goals   §   Get  test  results  as  fast  as  possible   §   Alert  ASAP  when  build  is  broken   §   Emulate  actual  users   §   SLA:  Priority  1  bug      =>  deliver  bugfix  within  1  day  
  • 39. Challenges   §   Tests  take  over  12  hours  to  run   §   No  out-­‐of-­‐the-­‐box  solu,on   ⇒ We  Built  a  distributed  system  ourselves   §   Mul,ple  tests  on  the  same  DB  
  • 40. Mul$ple  tests  on  same  DB   §   Problem:  You  assume  a  ‘clean  DB’   when  you  start  running  a  test   §   Solu$on:  Take  snapshot  before  test,   restore  snapshot  aZer  test  
  • 41.   4 Test Coordinators 4 x16 Test Slaves Current  Tes,ng  System     Image Creator Test Master
  • 42. Store . Test Master   Tes,ng  a  version     §     Step  by  step:   §   The  version  has  to  be  loaded   §   Create  a  database   §   The  version  has  to  be  tested   §   The  developer  gets  the  results   §   The  test  master  orchestrates  this  whole  process    
  • 43. Test Master Image Creator To  Load   To  Test     Your   …   version   …   Image  Creator   Your   …   version   …   Your  version   Your   …   version   …   Your  version   §   TM  instructs  IC  to  load  your  version   Store . §   Get  customers  code  from  Store   §   AZer  loading   §   Puts  the  new  image  on  a  fileserver   §   IC  no,fies  TM  he’s  done  
  • 44.   Test  Coordinator   §   TM  instructs  a  TC  to  start  tes,ng  a  version   Test Master §   A  TM  is  responsible  for  1  whole  version   To  Load   To  Test   …   Your  version   …   …   4 Test Coordinators
  • 45.   Test  Slave   §   TC  orders  TSs  to  copy  image   Test Master      and  create  a  local  database   §   When  database  ready,  start  tes,ng!   §   Test  Class  per  Test  Class   §   Report  back  to  TC  when  tes,ng  of  1  Class  is  done          and  receive  a  new  class  un,l  finished   1 of the 4 Test Coordinators 16 Test Slaves
  • 46.
  • 47.   Op,miza,ons   Test Master §   Parallel  vs  sequen,al     Image Creator §   IC  can  load  4  versions  simultaneously   §   4  TCs        4  Versions  are  tested  simultaneously   §   16  TSs        Tes,ng  1  version  is  much  faster   1 of the 4 Test Coordinators 16 Test Slaves
  • 48. Test Master To  Load   To  Test   Version  z     Version  (x+1)     y x              for  customer  C            for  customer  A     B   …   Version  (x+1)     y     Op,miza,ons            for  customer  B   A Version  (x+1)     …            for  customer  A   …   §   Dialog  ‘Would  you  like  to  schedule  the  tests’   §   Only  test  latest  available  version   §   TM  queues  can  be  manipulated   §   Priori,ze   §   Unschedule    
  • 49.   Op,miza,ons   §   Time-­‐outs   Image Creator §   IC  aZer  30minutes   §   TC  aZer  75minutes   §   TS  aZer  +/-­‐  10minutes  
  • 50.   Op,miza,ons   §   Assign  test  classes  in  a  smart  order   §   ‘Nuke’  tests   16 Test Slaves
  • 51.   Test  Results   §   What?  Timing?   §   Build  failed      <  45minutes   §   AZer  tests  have  successfully  run   §   X  total  tests,  Y  failures,  Z  errors,  T  not  run   §   With  wai,ng  in  a  queue  +/-­‐  4hours   §   Without  wai,ng  in  a  queue  <  1hour   §   Saved  on  Store!  
  • 52. Con,nuous  integra,on  –  VERA/ Seaside  interface  
  • 53.
  • 54. Con,nuous  integra,on  –  VERA/ Seaside  interface  
  • 57. Integrated  Tools   § Open  SUnit  on  failed  tests   § Find  origin  failing  test  
  • 58.     Demo  
  • 59. Goals   § Get  test  results  as  fast  as  possible   § Alert  ASAP  when  build  is  broken   § Emulate  actual  users   § SLA:  Priority  1  bug      =>  deliver  bugfix  within  1  day  
  • 60. Conclusion   Goals  have  been  met!   §  Build  with  report  on  broken  builds   within  45  minutes   §  Test  results  can  come  in  within  1  hour   §  Prio  1  bugs  can  be  fixed  within  a  day   §  ‘Reasonable’  ,me  for  results   §  4  hours  on  average   §  Bonus:  integrated  tools  on  SUnit  
  • 61. Conclusion   Future  areas  of  improvement  …   §  Test  every  version   §  Be@er  pin-­‐point  where  an  error  started   §  Speed  up  through-­‐put  of  unpriori,sed   tests  
  • 62.     Ques,ons?  
  • 63. Q:  Which  customisa,ons  do  customers  want?   A:  See  next  presenta,on     Q:   Why   does   the   product   need   to   change   that   oZen?   A:   Technical   evolu,on,   target   different   markets,  new  regula,ons,  …