011 232455
play

!"#$%#&'&#&()*+,-. !"#$%&'$()*"+,-$(( - PowerPoint PPT Presentation

!"#$%#&'&#&()*+,-. !"#$%&'$()*"+,-$(( .&&/011&."232455 6789):; % & ):<<= Who I am ! !"#$%&'$()*"+,-$(( ! .(/01/"2)'()&3")454) 6+07"8&)%'(8")9:::


  1. The Bowling Game Kata Running the tests of a test case class !"#$"$%&$'(')'*/*$%3&'U4?03%8V,W+Y+!&'''''''''''''''' @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 c Y3W+N'D'!+.4%2! Y/+-+'?,!'h'+--4-N hM'&+!&F.4-+[4-V$&&+-V,W+^!DGU4?03%8V,W+Y+!&M e$%&3W+cZ.+*&34%N'f4&'<+&'3W*0+W+%&+26 >/4W+>!">U4?03%8V,W+6*/*NhD >/4W+>!">U4?03%8V,W+Y+!&6*/*Nhh [7^iBecFj Y+!&!N'hK'7!!+-&34%!N'DK'c--4-!N'h6

  2. The Bowling Game Kata The !"#$%&'()*+ class PQ*/* .0,!!'U4?03%8V,W+ \ ''''*$"03.'=$%.&34%'-400G_*3%!M ''''\ ''''] ''''*$"03.'=$%.&34%'!.4-+GM ''''\ ''''''''-+&$-%'DX ''''] ]

  3. The Bowling Game Kata Running the tests of a test case class !"#$"$%&$'(')'*/*$%3&'U4?03%8V,W+Y+!&'''''''''''''''' @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 6 Y3W+N'D'!+.4%2! kl'Gh'&+!&K'h',!!+-&34%M

  4. The Bowling Game Kata Running the tests of a test case class !"#$"$%&$'(')'*/*$%3&'11.404-!'U4?03%8V,W+Y+!&'''''''''''''''' @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 6 Y3W+N'D'!+.4%2! kl'Gh'&+!&K'h',!!+-&34%M

  5. Interlude Test-Driven Development ! T"&302)0<)2"%',('(,)%0<&A$+"G)))))))))))))) (0&)7@%&)$)-"&302)0<)&"%&'(,)%0<&A$+"))))))))) )))))))))) ! J"%&%)2+'/")&3")2"/"106-"(& ! J"%&%)A+'&&"()#"<0+")802" ! V0)802")A'&30@&)&"%&%

  6. Interlude Test-Driven Development ! J"%& ! X3$&)20)A")A$(&) ,-".+/0 )&0)20Y ! 50A)20)A")A$(&)&0)&"11) ,-".+/0 )&0)20)'&Y ! 50A)A'11)A")F(0A)A3"() ,-".+/0 )3$%)20(")'&Y) ))))))))))))))) ! ;02" ! 50A)20"%) ,-".+/0 )20)'&Y

  7. The best time to test is when the code is fresh Your code is like clay. When it’s fresh, it’s soft and malleable. As it ages, it becomes hard and brittle. If you write tests when the code is fresh and easy to change, testing will be easy, and both the code and the tests will be strong. J3'%)%1'2")80(&$'(%)-$&"+'$1)#E)L1#"+&0)!$/0'$

  8. Think of code and test as one When writing the code, think of the test. When writing the test, think of the code. When you think of code and test as one, testing is easy and code is beautiful. J3'%)%1'2")80(&$'(%)-$&"+'$1)#E)L1#"+&0)!$/0'$

  9. The Bowling Game Kata The second test PQ*/* -+R$3-+S4%.+'TU4?03%8V,W+6*/*TX .0,!!'U4?03%8V,W+Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''>>'666 ''''*$"03.'=$%.&34%'&+!&F.4-+[4-700k%+!^!HDGM ''''\ ''''''''_8,W+'`'%+?'U4?03%8V,W+X ''''''''=4-'G_3'`'DX'_3'P'HDX'_3aaM'\ ''''''''''''_8,W+1b-400GhMX ''''''''] ''''''''_&/3!1b,!!+-&cR$,0!GHDK'_8,W+1b!.4-+GMMX ''''] ]

  10. The Bowling Game Kata The second test !"#$"$%&$'(')'*/*$%3&'U4?03%8V,W+Y+!&'''''''''''''''' @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 6[ Y3W+N'D'!+.4%2! Y/+-+'?,!'h'=,30$-+N hM'&+!&F.4-+[4-700k%+!^!HDGU4?03%8V,W+Y+!&M [,30+2',!!+-&3%8'&/,&'P3%&+8+-NDb'W,&./+!'+Z*+.&+2'5,0$+'P3%&+8+-NHDb6 >/4W+>!">U4?03%8V,W+Y+!&6*/*NHL [7^iBecFj Y+!&!N'HK'7!!+-&34%!N'HK'[,30$-+!N'h6

  11. The Bowling Game Kata The second test !"#$"$%&$'(')'*/*$%3&'11.404-!'U4?03%8V,W+Y+!&'''''''''''''''' @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 6[ Y3W+N'D'!+.4%2! Y/+-+'?,!'h'=,30$-+N hM'&+!&F.4-+[4-700k%+!^!HDGU4?03%8V,W+Y+!&M [,30+2',!!+-&3%8'&/,&'P3%&+8+-NDb'W,&./+!'+Z*+.&+2'5,0$+'P3%&+8+-NHDb6 >/4W+>!">U4?03%8V,W+Y+!&6*/*NHL [7^iBecFj [7^iBecFj Y+!&!N'HK'7!!+-&34%!N'HK'[,30$-+!N'h6 Y+!&!N'HK'7!!+-&34%!N'HK'[,30$-+!N'h6

  12. The Bowling Game Kata Leveraging the ,+123/0 template method PQ*/* -+R$3-+S4%.+'TU4?03%8V,W+6*/*TX .0,!!'U4?03%8V,W+Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''*-4&+.&+2'_8,W+X ''''*-4&+.&+2'=$%.&34%'!+&B*GM ''''\ ''''''''_&/3!1b8,W+'`'%+?'U4?03%8V,W+X ''''] ''''>>'666 ''''*$"03.'=$%.&34%'&+!&F.4-+[4-700k%+!^!HDGM ''''\ ''''''''=4-'G_3'`'DX'_3'P'HDX'_3aaM'\ ''''''''''''_&/3!1b8,W+1b-400GhMX ''''''''] ''''''''_&/3!1b,!!+-&cR$,0!GHDK'_&/3!1b8,W+1b!.4-+GMMX ''''] ''''>>'666 ]

  13. The Bowling Game Kata Introducing the ."$$4)&5/0 template method PQ*/* -+R$3-+S4%.+'TU4?03%8V,W+6*/*TX .0,!!'U4?03%8V,W+Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''>>'666 ''''*-4&+.&+2'=$%.&34%'-400m,%<G_%K'_*3%!M ''''\ ''''''''=4-'G_3'`'DX'_3'P'_%X'_3aaM'\ ''''''''''''_&/3!1b8,W+1b-400G_*3%!MX ''''''''] ''''] ''''*$"03.'=$%.&34%'&+!&F.4-+[4-V$&&+-V,W+^!DGM ''''\ ''''''''_&/3!1b-400m,%<GHDK'DMX ''''''''_&/3!1b,!!+-&cR$,0!GDK'_&/3!1b8,W+1b!.4-+GMMX ''''] ''''*$"03.'=$%.&34%'&+!&F.4-+[4-700k%+!^!HDGM ''''\ ''''''''_&/3!1b-400m,%<GHDK'hMX ''''''''_&/3!1b,!!+-&cR$,0!GHDK'_&/3!1b8,W+1b!.4-+GMMX ''''] ]

  14. The Bowling Game Kata The third test PQ*/* -+R$3-+S4%.+'TU4?03%8V,W+6*/*TX .0,!!'U4?03%8V,W+Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''>>'666 ''''*$"03.'=$%.&34%'&+!&F.4-+[4-k%+F*,-+7%2C^!hIGM ''''\ ''''''''_&/3!1b8,W+1b-400GLMX ''''''''_&/3!1b8,W+1b-400GLMX ''''''''_&/3!1b8,W+1b-400GCMX ''''''''_&/3!1b-400m,%<GhnK'DMX ''''''''_&/3!1b,!!+-&cR$,0!GhIK'_&/3!1b8,W+1b!.4-+GMMX ''''] ]

  15. The Bowling Game Kata The fourth test PQ*/* -+R$3-+S4%.+'TU4?03%8V,W+6*/*TX .0,!!'U4?03%8V,W+Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''>>'666 ''''*$"03.'=$%.&34%'&+!&F.4-+[4-k%+F&-3O+7%2C7%2J^!HJGM ''''\ ''''''''_&/3!1b8,W+1b-400GhDMX ''''''''_&/3!1b8,W+1b-400GCMX ''''''''_&/3!1b8,W+1b-400GJMX ''''''''_&/3!1b-400m,%<GhnK'DMX ''''''''_&/3!1b,!!+-&cR$,0!GHJK'_&/3!1b8,W+1b!.4-+GMMX ''''] ]

  16. The Bowling Game Kata The fifth test PQ*/* -+R$3-+S4%.+'TU4?03%8V,W+6*/*TX .0,!!'U4?03%8V,W+Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''>>'666 ''''*$"03.'=$%.&34%'&+!&F.4-+[4-@+-=+.&V,W+^!CDDGM ''''\ ''''''''_&/3!1b-400m,%<GhHK'hDMX ''''''''_&/3!1b,!!+-&cR$,0!GCDDK'_&/3!1b8,W+1b!.4-+GMMX ''''] ]

  17. The Bowling Game Kata Running the tests of a test case class !"#$"$%&$'(')'*/*$%3&'U4?03%8V,W+Y+!& @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 6[[[[ Y3W+N'D'!+.4%2! Y/+-+'?+-+'J'=,30$-+!N hM'&+!&F.4-+[4-700k%+!^!HDGU4?03%8V,W+Y+!&M [,30+2',!!+-&3%8'&/,&'P3%&+8+-NDb'W,&./+!'+Z*+.&+2'5,0$+'P3%&+8+-NHDb6 >/4W+>!">U4?03%8V,W+Y+!&6*/*NIn HM'&+!&F.4-+[4-k%+F*,-+7%2C^!hIGU4?03%8V,W+Y+!&M [,30+2',!!+-&3%8'&/,&'P3%&+8+-NDb'W,&./+!'+Z*+.&+2'5,0$+'P3%&+8+-NhIb6 >/4W+>!">U4?03%8V,W+Y+!&6*/*NnL CM'&+!&F.4-+[4-k%+F&-3O+7%2C7%2J^!HJGU4?03%8V,W+Y+!&M [,30+2',!!+-&3%8'&/,&'P3%&+8+-NDb'W,&./+!'+Z*+.&+2'5,0$+'P3%&+8+-NHJb6 >/4W+>!">U4?03%8V,W+Y+!&6*/*NoJ JM'&+!&F.4-+[4-@+-=+.&V,W+^!CDDGU4?03%8V,W+Y+!&M [,30+2',!!+-&3%8'&/,&'P3%&+8+-NDb'W,&./+!'+Z*+.&+2'5,0$+'P3%&+8+-NCDDb6 >/4W+>!">U4?03%8V,W+Y+!&6*/*NpD [7^iBecFj Y+!&!N'LK'7!!+-&34%!N'LK'[,30$-+!N'J6

  18. The Bowling Game Kata TestDox: Report test result as executable specification !"#$"$%&$'(')'*/*$%3&'11&+!&24Z'U4?03%8V,W+Y+!& @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 U4?03%8V,W+ 'qZr'F.4-+'=4-'8$&&+-'8,W+'3!'D 'q'r'F.4-+'=4-',00'4%+!'3!'HD 'q'r'F.4-+'=4-'4%+'!*,-+',%2'C'3!'hI 'q'r'F.4-+'=4-'4%+'!&-3O+',%2'C',%2'J'3!'HJ 'q'r'F.4-+'=4-'*+-=+.&'8,W+'3!'CDD

  19. The Bowling Game Kata The !"#$%&'()*+ class PQ*/* .0,!!'U4?03%8V,W+ \ ''''*-4&+.&+2'_-400!'`',--,<GMX ''''*$"03.'=$%.&34%'-400G_*3%!M ''''\ ''''''''_&/3!1b-400!qr'`'_*3%!X ''''] ''''>>'666 ]

  20. The Bowling Game Kata The !"#$%&'()*+ class PQ*/* .0,!!'U4?03%8V,W+ \ ''''>>'666 ''''*-4&+.&+2'=$%.&34%'3!F*,-+G_=-,W+^%2+ZM ''''\ ''''''''-+&$-%'_&/3!1b!$Wk=@3%!^%[-,W+G_=-,W+^%2+ZM'``'hDX ''''] ''''*-4&+.&+2'=$%.&34%'3!F&-3O+G_=-,W+^%2+ZM ''''\ ''''''''-+&$-%'_&/3!1b-400!q_=-,W+^%2+Zr'``'hDX ''''] ''''*-4&+.&+2'=$%.&34%'!$Wk=@3%!^%[-,W+G_=-,W+^%2+ZM ''''\ ''''''''-+&$-%'_&/3!1b-400!q_=-,W+^%2+Zr'a '''''''''''''''_&/3!1b-400!q_=-,W+^%2+Z'a'hrX ''''] ]

  21. The Bowling Game Kata The !"#$%&'()*+ class PQ*/* .0,!!'U4?03%8V,W+ \ ''''>>'666 ''''*-4&+.&+2'=$%.&34%'!*,-+U4%$!G_=-,W+^%2+ZM ''''\ ''''''''-+&$-%'_&/3!1b-400!q_=-,W+^%2+Z'a'HrX ''''] ''''*-4&+.&+2'=$%.&34%'!&-3O+U4%$!G_=-,W+^%2+ZM ''''\ ''''''''-+&$-%'_&/3!1b-400!q_=-,W+^%2+Z'a'hr'a '''''''''''''''_&/3!1b-400!q_=-,W+^%2+Z'a'HrX ''''] ]

  22. The Bowling Game Kata The !"#$%&'()*+ class PQ*/* .0,!!'U4?03%8V,W+ \ ''''>>'666 ''''*$"03.'=$%.&34%'!.4-+GM ''''\ ''''''''_!.4-+''''''`'DX ''''''''_=-,W+^%2+Z'`'DX ''''''''=4-'G_=-,W+'`'DX'_=-,W+'P'hDX'_=-,W+aaM'\ ''''''''''''3='G_&/3!1b3!F&-3O+G_=-,W+^%2+ZMM'\ ''''''''''''''''_!.4-+'a`'hD'a'_&/3!1b!&-3O+U4%$!G_=-,W+^%2+ZMX ''''''''''''''''_=-,W+^%2+ZaaX ''''''''''''] ''''''''''''+0!+'3='G_&/3!1b3!F*,-+G_=-,W+^%2+ZMM'\ ''''''''''''''''_!.4-+'a`'hD'a'_&/3!1b!*,-+U4%$!G_=-,W+^%2+ZMX ''''''''''''''''_=-,W+^%2+Z'a`'HX ''''''''''''] ''''''''''''+0!+'\ ''''''''''''''''_!.4-+'a`'_&/3!1b!$Wk=@3%!^%[-,W+G_=-,W+^%2+ZMX ''''''''''''''''_=-,W+^%2+Z'a`'HX ''''''''''''] ''''''''] ''''''''-+&$-%'_!.4-+X ''''] ]

  23. The Bowling Game Kata TestDox: Report test result as executable specification !"#$"$%&$'(')'*/*$%3&'11&+!&24Z'U4?03%8V,W+Y+!& @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 U4?03%8V,W+ 'qZr'F.4-+'=4-'8$&&+-'8,W+'3!'D 'qZr'F.4-+'=4-',00'4%+!'3!'HD 'qZr'F.4-+'=4-'4%+'!*,-+',%2'C'3!'hI 'qZr'F.4-+'=4-'4%+'!&-3O+',%2'C',%2'J'3!'HJ 'qZr'F.4-+'=4-'*+-=+.&'8,W+'3!'CDD

  24. Software Testing Categorization ! !-$11U)=('&)J"%&% ! ;3"8F)80(2'&'0($1)10,'8)'()&3")802" ! L)2"#@,,"+)%30@12)(0&)#")+"^@'+"2)'()8$%")0<)<$'1@+" ! O@(%)'()1"%%)&3$()[)-% ! T"2'@-U)?@(8&'0($1)J"%&% ! ;3"8F)A3"&3"+)&3")'(&"+<$8"%)#"&A""()81$%%"%))) $#'2")#E)&3"'+)80(&+$8&% ! R$+,"U)S(2>&0>S(2)J"%&% ! ;3"8F)<0+)CA'+'(,)#@,%C !"#$%$&#'(%)*+,-#+$%.-,(/#-&%01%2#34*%5(6(/1

  25. The Bowling Game Kata Creating a test case class skeleton for existing code !"#$"$%&$'(')'*/*$%3&'11!O+0+&4%1&+!&'U4?03%8V,W+ @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 g-4&+'!O+0+&4%'=4-':U4?03%8V,W+Y+!&:'&4':U4?03%8V,W+Y+!&6*/*:6 !"#$"$%&$'(')'*/*$%3&'115+-"4!+'U4?03%8V,W+Y+!& @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 U4?03%8V,W+Y+!& ^^ Y3W+N'D'!+.4%2! Y/+-+'?+-+'H'3%.4W*0+&+'&+!&!N hM'&+!&e400GU4?03%8V,W+Y+!&M Y/3!'&+!&'/,!'%4&'"++%'3W*0+W+%&+2'<+&6 >/4W+>!">U4?03%8V,W+Y+!&6*/*NJI HM'&+!&F.4-+GU4?03%8V,W+Y+!&M Y/3!'&+!&'/,!'%4&'"++%'3W*0+W+%&+2'<+&6 >/4W+>!">U4?03%8V,W+Y+!&6*/*NLI klK'"$&'3%.4W*0+&+'4-'!O3**+2'&+!&!j Y+!&!N'HK'7!!+-&34%!N'DK'^%.4W*0+&+N'H6

  26. The Bowling Game Kata Code Coverage !"#$"$%&$'(')'*/*$%3&'11.45+-,8+1/&W0'>&W*>-+*4-&'U4?03%8V,W+Y+!& @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 66666 Y3W+N'D'!+.4%2! kl'GL'&+!&!K'L',!!+-&34%!M V+%+-,&3%8'-+*4-&K'&/3!'W,<'&,O+','W4W+%&6

  27. ! " # $ % & ' (& ) # *

  28. Test Doubles ! !"#$%&'$#($)(*+,-$."/+%$+'0(1('0('2.-$$$$$$$$ #3('$%"0($+2$0(1('04$"'$+4$5'54&6.(7 ! !"#$%&'$#($&)"+0$4."#$2(4247 ! !"#$"%&'("#'#()*%)+"+,#)+#-./(.#,."#012# 3"%"+34#-/,.#'#5,"4,64%"(/7/(#"89/:'&"+,;<

  29. Test Doubles Terminology N@--E ! V0&)&3")+"$1)0#7"8& ?$F" ! =%$#1")<0+)&"%&'(,)#@&) (0&)<0+)+"$1)70# !&@# ! ?$F")&3$&)+"&@+(%)8$(("2) 2$&$ !6E ! !&@#)&3$&)+"80+2%)8$11"2) -"&302%G)"&8B T08F ! !6E)A'&3)"I6"8&$&'0(%

  30. Test Doubles Stubbing a method with PHPUnit PQ*/* .0,!!'F&$"Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''*$"03.'=$%.&34%'&+!&F&$"GM ''''\ ''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''' ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''' ''''] ] Qb

  31. Test Doubles Stubbing a method with PHPUnit PQ*/* .0,!!'F&$"Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''*$"03.'=$%.&34%'&+!&F&$"GM ''''\ ''''''''_!&$"'`'_&/3!1b8+&m4.OGTF4W+90,!!TMX ''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''' ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''' ''''] ] Qb

  32. Test Doubles Stubbing a method with PHPUnit: .+16.&7)$6+/0 PQ*/* .0,!!'F&$"Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''*$"03.'=$%.&34%'&+!&F&$"GM ''''\ ''''''''_!&$"'`'_&/3!1b8+&m4.OGTF4W+90,!!TMX ''''''''_!&$"1b+Z*+.&!G_&/3!1b,%<GMM '''''''''''''1bW+&/42GT24F4W+&/3%8TM '''''''''''''1b?300G_&/3!1b-+&$-%s,0$+GT=44TMMX ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''' ''''] ] Qb

  33. Test Doubles Stubbing a method with PHPUnit: .+16.&7)$6+/0 PQ*/* .0,!!'F&$"Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''*$"03.'=$%.&34%'&+!&F&$"GM ''''\ ''''''''_!&$"'`'_&/3!1b8+&m4.OGTF4W+90,!!TMX ''''''''_!&$"1b+Z*+.&!G_&/3!1b,%<GMM '''''''''''''1bW+&/42GT24F4W+&/3%8TM '''''''''''''1b?300G_&/3!1b-+&$-%s,0$+GT=44TMMX ' ''''''''>>'9,003%8'_!&$"1b24F4W+&/3%8GM'?300'%4?'-+&$-% ''''''''>>'T=44T6 ''''] ] Qb

  34. Test Doubles Stubbing a method with PHPUnit: .+16.&8.'6*+&1/0 PQ*/* .0,!!'F&$"Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''*$"03.'=$%.&34%'&+!&e+&$-%7-8$W+%&F&$"GM ''''\ ''''''''_!&$"'`'_&/3!1b8+&m4.OG ''''''''''TF4W+90,!!TK',--,<GT24F4W+&/3%8TM ''''''''MX ''''''''_!&$"1b+Z*+.&!G_&/3!1b,%<GMM '''''''''''''1bW+&/42GT24F4W+&/3%8TM '''''''''''''1b?300G_&/3!1b-+&$-%7-8$W+%&GDMMX ' ''''''''>>'_!&$"1b24F4W+&/3%8GT=44TM'-+&$-%!'T=44T ''''''''>>'_!&$"1b24F4W+&/3%8GT",-TM'-+&$-%!'T",-T ''''] ]

  35. Test Doubles Stubbing a method with PHPUnit: .+16.&9)$$:)-;/0 PQ*/* .0,!!'F&$"Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''*$"03.'=$%.&34%'&+!&e+&$-%9,00",.OF&$"GM ''''\ ''''''''_!&$"'`'_&/3!1b8+&m4.OG ''''''''''TF4W+90,!!TK',--,<GT24F4W+&/3%8TM ''''''''MX ''''''''_!&$"1b+Z*+.&!G_&/3!1b,%<GMM '''''''''''''1bW+&/42GT24F4W+&/3%8TM '''''''''''''1b?300G_&/3!1b-+&$-%9,00",.OGT.,00",.OTMMX ' ''''''''>>'_!&$"1b24F4W+&/3%8GM'-+&$-%!'.,00",.OG666M ''''] ] =$%.&34%'.,00",.OGM'\ ''''_,-8!'`'=$%.S8+&S,-8!GMX ''''>>'666 ]

  36. Test Doubles Stubbing a method with PHPUnit: throwException /0 PQ*/* .0,!!'F&$"Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''*$"03.'=$%.&34%'&+!&Y/-4?cZ.+*&34%F&$"GM ''''\ ''''''''_!&$"'`'_&/3!1b8+&m4.OG ''''''''''TF4W+90,!!TK',--,<GT24F4W+&/3%8TM ''''''''MX ''''''''_!&$"1b+Z*+.&!G_&/3!1b,%<GMM '''''''''''''1bW+&/42GT24F4W+&/3%8TM '''''''''''''1b?300G_&/3!1b&/-4?cZ.+*&34%G%+?'cZ.+*&34%MMX ' ''''''''>>'_!&$"1b24F4W+&/3%8GM'&/-4?!'cZ.+*&34% ''''] ]

  37. Test Doubles Mocking a method with PHPUnit PQ*/* .0,!!'k"!+-5+-Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+'\ ''''*$"03.'=$%.&34%'&+!&B*2,&+^!9,00+2k%.+GM'\ '''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''' '''''''''' ' ''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''' ' '''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''' ''''] ] Qb

  38. Test Doubles Mocking a method with PHPUnit PQ*/* .0,!!'k"!+-5+-Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+'\ ''''*$"03.'=$%.&34%'&+!&B*2,&+^!9,00+2k%.+GM'\ ''''''''_4"!+-5+-'`'_&/3!1b8+&m4.OG ''''''''''Tk"!+-5+-TK',--,<GT$*2,&+TM ''''''''MX ' '''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' '''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''' ''''] ] Qb

  39. Test Doubles Mocking a method with PHPUnit PQ*/* .0,!!'k"!+-5+-Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+'\ ''''*$"03.'=$%.&34%'&+!&B*2,&+^!9,00+2k%.+GM'\ ''''''''_4"!+-5+-'`'_&/3!1b8+&m4.OG ''''''''''Tk"!+-5+-TK',--,<GT$*2,&+TM ''''''''MX ' ''''''''_4"!+-5+-1b+Z*+.&!G_&/3!1b4%.+GMM '''''''''''''''''1bW+&/42GT$*2,&+TM '''''''''''''''''1b?3&/G_&/3!1b+R$,0Y4GT!4W+&/3%8TMMX ' ''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''' ''''] ] Qb

  40. Test Doubles Mocking a method with PHPUnit PQ*/* .0,!!'k"!+-5+-Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+'\ ''''*$"03.'=$%.&34%'&+!&B*2,&+^!9,00+2k%.+GM'\ ''''''''_4"!+-5+-'`'_&/3!1b8+&m4.OG ''''''''''Tk"!+-5+-TK',--,<GT$*2,&+TM ''''''''MX ' ''''''''_4"!+-5+-1b+Z*+.&!G_&/3!1b4%.+GMM '''''''''''''''''1bW+&/42GT$*2,&+TM '''''''''''''''''1b?3&/G_&/3!1b+R$,0Y4GT!4W+&/3%8TMMX ' ''''''''_!$"t+.&'`'%+?'F$"t+.&X ''''''''_!$"t+.&1b,&&,./G_4"!+-5+-MX ''''''''_!$"t+.&1b24F4W+&/3%8GMX ''''] ] Qb

  41. Test Doubles Mocking the filesystem with vfsStream PQ*/* .0,!!'cZ,W*0+'\ ''''*-4&+.&+2'_32X ''''*-4&+.&+2'_23-+.&4-<X ''''*$"03.'=$%.&34%' << .4%!&-$.&G_32M'\ ''''''''_&/3!1b32'`'_32X ''''] ''''*$"03.'=$%.&34%'!+&;3-+.&4-<G_23-+.&4-<M'\ ''''''''_&/3!1b23-+.&4-<'`'_23-+.&4-<'6';^ec9YkeuSFc@7e7Yke'6'_&/3!1b32X ''''''''3='Gj=30+S+Z3!&!G_&/3!1b23-+.&4-<MM'\ ''''''''''''WO23-G_&/3!1b23-+.&4-<K'DnDDK'YeBcMX ''''''''] ''''] ] Qb

  42. Test Doubles Mocking the filesystem with vfsStream PQ*/* -+R$3-+S4%.+'T5=!F&-+,W>5=!F&-+,W6*/*TX -+R$3-+S4%.+'TcZ,W*0+6*/*TX .0,!!'cZ,W*0+Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+'\ ''''*$"03.'=$%.&34%'!+&B*GM'\ ''''''''5=!F&-+,Wg-,**+-NN-+83!&+-GMX ''''''''5=!F&-+,Wg-,**+-NN!+&e44&G%+?'5=!F&-+,W;3-+.&4-<GT+Z,W*0+;3-TMMX ''''] ''''*$"03.'=$%.&34%'&+!&;3-+.&4-<^!9-+,&+2GM'\ ''''''''_+Z,W*0+'`'%+?'cZ,W*0+GT32TMX ''''''''_&/3!1b,!!+-&[,0!+G5=!F&-+,Wg-,**+-NN8+&e44&GM1b/,!9/302GT32TMMX ''''''''_+Z,W*0+1b!+&;3-+.&4-<G5=!F&-+,WNN$-0GT+Z,W*0+;3-TMMX ''''''''_&/3!1b,!!+-&Y-$+G5=!F&-+,Wg-,**+-NN8+&e44&GM1b/,!9/302GT32TMMX ''''] ] Qb

  43. PHPUnit Data Provider PQ*/* .0,!!';,&,Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''>dd '''''d'#2,&,@-4532+-'*-4532+-m+&/42 '''''d> ''''*$"03.'=$%.&34%'&+!&722G_,K'_"K'_.M ''''\ ''''''''_&/3!1b,!!+-&cR$,0!G_.K'_,'a'_"MX ''''] ''''*$"03.'=$%.&34%'*-4532+-m+&/42GM ''''\ ''''''''-+&$-%',--,<G '''''''''',--,<GDK'DK'DMK '''''''''',--,<GDK'hK'hMK '''''''''',--,<GhK'hK'CMK '''''''''',--,<GhK'DK'hM ''''''''MX ''''] ]

  44. PHPUnit Data Provider !"#$"$%&$'(')'*/*$%3&';,&,Y+!& @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 66[6 Y3W+N'D'!+.4%2! Y/+-+'?,!'h'=,30$-+N hM'&+!&722G;,&,Y+!&M'?3&/'2,&,'GhK'hK'CM [,30+2',!!+-&3%8'&/,&'P3%&+8+-NHb'W,&./+!'+Z*+.&+2'5,0$+'P3%&+8+-NCb6 >/4W+>!">;,&,Y+!&6*/*Nhp [7^iBecFj Y+!&!N'JK'7!!+-&34%!N'JK'[,30$-+!N'h6

  45. PHPUnit Test Dependencies PQ*/* .0,!!'F&,.OY+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+'\ ''''*$"03.'=$%.&34%'&+!&cW*&<GM'\ ''''''''_!&,.O'`',--,<GMX ''''''''_&/3!1b,!!+-&Y-$+G+W*&<G_!&,.OMMX ' ''''''''-+&$-%'_!&,.OX ''''] ' ' ' ]

  46. PHPUnit Test Dependencies PQ*/* .0,!!'F&,.OY+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+'\ ''''*$"03.'=$%.&34%'&+!&cW*&<GM'\ ''''''''_!&,.O'`',--,<GMX ''''''''_&/3!1b,!!+-&Y-$+G+W*&<G_!&,.OMMX ' ''''''''-+&$-%'_!&,.OX ''''] ' ''''>dd '''''d'#2+*+%2!'&+!&cW*&< '''''d> ''''*$"03.'=$%.&34%'&+!&@$!/G,--,<'_!&,.OM'\ '''''''',--,<S*$!/G_!&,.OK'T=44TMX ''''''''_&/3!1b,!!+-&[,0!+G+W*&<G_!&,.OMMX ''''''''_&/3!1b,!!+-&cR$,0!GT=44TK'_!&,.Oq.4$%&G_!&,.OM'1'hrMX ' ''''''''-+&$-%'_!&,.OX ''''] ' ]

  47. PHPUnit Test Dependencies PQ*/* .0,!!'F&,.OY+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+'\ ''''*$"03.'=$%.&34%'&+!&cW*&<GM'\ ''''''''_!&,.O'`',--,<GMX ''''''''_&/3!1b,!!+-&Y-$+G+W*&<G_!&,.OMMX ' ''''''''-+&$-%'_!&,.OX ''''] ' ''''>dd '''''d'#2+*+%2!'&+!&cW*&< '''''d> ''''*$"03.'=$%.&34%'&+!&@$!/G,--,<'_!&,.OM'\ '''''''',--,<S*$!/G_!&,.OK'T=44TMX ''''''''_&/3!1b,!!+-&[,0!+G+W*&<G_!&,.OMMX ''''''''_&/3!1b,!!+-&cR$,0!GT=44TK'_!&,.Oq.4$%&G_!&,.OM'1'hrMX ' ''''''''-+&$-%'_!&,.OX ''''] ' ''''>dd '''''d'#2+*+%2!'&+!&@$!/ '''''d> ''''*$"03.'=$%.&34%'&+!&@4*G,--,<'_!&,.OM'\ ''''''''_&/3!1b,!!+-&cR$,0!GT=44TK',--,<S*4*G_!&,.OMMX ''''''''_&/3!1b,!!+-&Y-$+G+W*&<G_!&,.OMMX ''''] ]

  48. PHPUnit Test Dependencies PQ*/* .0,!!';+*+%2+%.<[,30$-+Y+!&'+Z&+%2!'@A@B%3&S[-,W+?4-OSY+!&9,!+ \ ''''*$"03.'=$%.&34%'&+!&k%+GM ''''\ ''''''''_&/3!1b,!!+-&Y-$+G[7iFcMX ''''] ' ''''>dd '''''d'#2+*+%2!'&+!&k%+ '''''d> ''''*$"03.'=$%.&34%'&+!&Y?4GM ''''\ ''''] ]

  49. PHPUnit Test Dependencies !"#$"$%&$'(')'*/*$%3&'115+-"4!+';+*+%2+%.<[,30$-+Y+!& @A@B%3&'C6J6D'"<'F+",!&3,%'U+-8W,%%6 ;+*+%2+%.<[,30$-+Y+!& [F Y3W+N'D'!+.4%2! Y/+-+'?,!'h'=,30$-+N hM'&+!&k%+G;+*+%2+%.<[,30$-+Y+!&M [,30+2',!!+-&3%8'&/,&'P"440+,%N=,0!+b'3!'&-$+6 >/4W+>!">;+*+%2+%.<[,30$-+Y+!&6*/*NI Y/+-+'?,!'h'!O3**+2'&+!&N hM'&+!&Y?4G;+*+%2+%.<[,30$-+Y+!&M Y/3!'&+!&'2+*+%2!'4%':;+*+%2+%.<[,30$-+Y+!&NN&+!&k%+:'&4'*,!!6 [7^iBecFj Y+!&!N'HK'7!!+-&34%!N'hK'[,30$-+!N'hK'FO3**+2N'h6

  50. PHPUnit =)1):),+>+,19),+ =%"2)&0)&"%&)2$&$#$%">2+'/"()6+07"8&% ! 4@&%)&3")2$&$#$%")'(&0)$)F(0A()%&$&") #"&A""()&"%&)+@(% ! L/0'2%)6+0#1"-%)A'&3)0(")&"%&)80++@6&'(,)&3") 2$&$#$%")<0+)0&3"+)&"%&% ! L#'1'&E)&0)"I60+&)$(2)'-60+&)2$&$)&0)$(2)<+0-) ;!_G)`TR)$(2)QLTR)2$&$%"&%

  51. PHPUnit =)1):),+>+,19),+ PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>;,&,",!+>Y+!&9,!+6*/*TX ' .0,!!'U,%O7..4$%&;UY+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!S;,&,",!+SY+!&9,!+'\ ]

  52. PHPUnit =)1):),+>+,19),+ PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>;,&,",!+>Y+!&9,!+6*/*TX ' .0,!!'U,%O7..4$%&;UY+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!S;,&,",!+SY+!&9,!+'\ ''''*-4&+.&+2'_*24X ''''''''''' ''''*$"03.'=$%.&34%'SS.4%!&-$.&GM'\ ''''''''_&/3!1b*24'`'@A@B%3&SB&30S@;kNN=,.&4-<G ''''''''''TW<!R0N>>&+!&#04.,0/4!&>&+!&T ''''''''MX ''''''''U,%O7..4$%&NN.-+,&+Y,"0+G_&/3!1b*24MX ''''] ]

  53. PHPUnit =)1):),+>+,19),+ PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>;,&,",!+>Y+!&9,!+6*/*TX ' .0,!!'U,%O7..4$%&;UY+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!S;,&,",!+SY+!&9,!+'\ ''''*-4&+.&+2'_*24X ''''''''''' ''''*$"03.'=$%.&34%'SS.4%!&-$.&GM'\ ''''''''_&/3!1b*24'`'@A@B%3&SB&30S@;kNN=,.&4-<G ''''''''''TW<!R0N>>&+!&#04.,0/4!&>&+!&T ''''''''MX ''''''''U,%O7..4$%&NN.-+,&+Y,"0+G_&/3!1b*24MX ''''] ''''*-4&+.&+2'=$%.&34%'8+&94%%+.&34%GM'\ ''''''''-+&$-%'_&/3!1b.-+,&+;+=,$0&;U94%%+.&34%G_&/3!1b*24K'TW<!R0TMX ''''] ]

  54. PHPUnit =)1):),+>+,19),+ PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>;,&,",!+>Y+!&9,!+6*/*TX ' .0,!!'U,%O7..4$%&;UY+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!S;,&,",!+SY+!&9,!+'\ ''''*-4&+.&+2'_*24X ''''''''''' ''''*$"03.'=$%.&34%'SS.4%!&-$.&GM'\ ''''''''_&/3!1b*24'`'@A@B%3&SB&30S@;kNN=,.&4-<G ''''''''''TW<!R0N>>&+!&#04.,0/4!&>&+!&T ''''''''MX ''''''''U,%O7..4$%&NN.-+,&+Y,"0+G_&/3!1b*24MX ''''] ''''*-4&+.&+2'=$%.&34%'8+&94%%+.&34%GM'\ ''''''''-+&$-%'_&/3!1b.-+,&+;+=,$0&;U94%%+.&34%G_&/3!1b*24K'TW<!R0TMX ''''] ''''*-4&+.&+2'=$%.&34%'8+&;,&,F+&GM'\ ''''''''-+&$-%'_&/3!1b.-+,&+[0,&vmi;,&,F+&GT>*,&/>&4>!++26ZW0TMX ''''] ]

  55. PHPUnit =)1):),+>+,19),+ P2,&,!+&b ''P,..4$%&',..4$%&S%$W"+-`:hLpCJpDCIJpIHDJoI:'",0,%.+`:hDD6DD:'>b ''P,..4$%&',..4$%&S%$W"+-`:hLpCIJonHCDHhLDIn:'",0,%.+`:hHhI6DD:'>b ''P,..4$%&',..4$%&S%$W"+-`:hHCJoIhHCLnHCIhoL:'",0,%.+`:op6DD:'>b ''P,..4$%&',..4$%&S%$W"+-`:hLpCIJonHCDHhLDIn:'",0,%.+`:hHhI6DD:'>b P>2,&,!+&b

  56. PHPUnit =)1):),+>+,19),+ PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>;,&,",!+>Y+!&9,!+6*/*TX ' .0,!!'U,%O7..4$%&;UY+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!S;,&,",!+SY+!&9,!+'\ ''''>>'666 ''''*$"03.'=$%.&34%'&+!&f+?7..4$%&GM'\ ''''] ]

  57. PHPUnit =)1):),+>+,19),+ PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>;,&,",!+>Y+!&9,!+6*/*TX ' .0,!!'U,%O7..4$%&;UY+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!S;,&,",!+SY+!&9,!+'\ ''''>>'666 ''''*$"03.'=$%.&34%'&+!&f+?7..4$%&GM'\ ''''''''_",'`'%+?'U,%O7..4$%&;UGThHCJLInophHCJLInoTK'_&/3!1b*24MX ''''] ]

  58. PHPUnit =)1):),+>+,19),+ PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>;,&,",!+>Y+!&9,!+6*/*TX ' .0,!!'U,%O7..4$%&;UY+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!S;,&,",!+SY+!&9,!+'\ ''''>>'666 ''''*$"03.'=$%.&34%'&+!&f+?7..4$%&GM'\ ''''''''_",'`'%+?'U,%O7..4$%&;UGThHCJLInophHCJLInoTK'_&/3!1b*24MX ''''''''_!+&'`'_&/3!1b.-+,&+[0,&vmi;,&,F+&G ''''''''''T>*,&/>&4>,=&+-1%+?1,..4$%&6ZW0T ''''''''MX ''''] ]

  59. PHPUnit =)1):),+>+,19),+ PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>;,&,",!+>Y+!&9,!+6*/*TX ' .0,!!'U,%O7..4$%&;UY+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!S;,&,",!+SY+!&9,!+'\ ''''>>'666 ''''*$"03.'=$%.&34%'&+!&f+?7..4$%&GM'\ ''''''''_",'`'%+?'U,%O7..4$%&;UGThHCJLInophHCJLInoTK'_&/3!1b*24MX ''''''''_!+&'`'_&/3!1b.-+,&+[0,&vmi;,&,F+&G ''''''''''T>*,&/>&4>,=&+-1%+?1,..4$%&6ZW0T ''''''''MX ''''''''_&/3!1b,!!+-&Y,"0+!cR$,0G ''''''''''_!+&1b8+&Y,"0+GT,..4$%&TMK ''''''''''_&/3!1b8+&94%%+.&34%GM '''''''''''''''1b.-+,&+;,&,F+&GM '''''''''''''''1b8+&Y,"0+GT,..4$%&TM ''''''''MX ''''] ]

  60. PHPUnit =)1):),+>+,19),+ P2,&,!+&b ''P,..4$%&',..4$%&S%$W"+-`:hLpCJpDCIJpIHDJoI:'",0,%.+`:hDD6DD:'>b ''P,..4$%&',..4$%&S%$W"+-`:hLpCIJonHCDHhLDIn:'",0,%.+`:hHhI6DD:'>b ''P,..4$%&',..4$%&S%$W"+-`:hHCJoIhHCLnHCIhoL:'",0,%.+`:op6DD:'>b ''P,..4$%&',..4$%&S%$W"+-`:hLpCIJonHCDHhLDIn:'",0,%.+`:hHhI6DD:'>b ''P,..4$%&',..4$%&S%$W"+-`:hHCJLInophHCJLIno:'",0,%.+`:D6DD:'>b P>2,&,!+&b

  61. PHPUnit =)1):),+>+,19),+ X3"()&"%&'(,)454)802")&3$&)@%"%)4NK)))) &0)80(("8&)&0)$)2$&$#$%"G)'&)-$F"%)%"(%") &0)F""6)E0@+)!aR)80-6$&'#1")A'&3)!aR'&" ! V0)%"+/"+) ! )V0)'(&"+>6+08"%%)80--@('8$&'0( ! .(>T"-0+E)N$&$#$%"%) ! )V0)N'%F).WK =%"+ !E%&"- ;4= J0&$1 ?@AB, C@DE, FCG HI@CFJ, 4NK)W)TE!aR B@CH, H@BF, J?G HC@?BA, 4NK)W)!aR'&")\<'1"] 4NK)W)!aR'&")\-"-0+E] ?@HJ, C@JD, AAG ?@DFA,

  62. PHPUnit Integration with Selenium RC PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>F+0+%3$WY+!&9,!+6*/*TX ' .0,!!'g+"Y+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!SF+0+%3$WY+!&9,!+ \ ' ] Qb

  63. PHPUnit Integration with Selenium RC PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>F+0+%3$WY+!&9,!+6*/*TX ' .0,!!'g+"Y+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!SF+0+%3$WY+!&9,!+ \ ''''*-4&+.&+2'=$%.&34%'!+&B*GM ''''\ ''''''''_&/3!1b!+&U-4?!+-GTd=3-+=4ZTMX ''''''''_&/3!1b!+&U-4?!+-B-0GT/&&*N>>???6+Z,W*0+6.4W>TMX ''''''''_&/3!1b!+&F0++*GhDMX ''''] ' ] Qb

  64. PHPUnit Integration with Selenium RC PQ*/* -+R$3-+S4%.+'T@A@B%3&>cZ&+%!34%!>F+0+%3$WY+!&9,!+6*/*TX ' .0,!!'g+"Y+!&'+Z&+%2!'@A@B%3&ScZ&+%!34%!SF+0+%3$WY+!&9,!+ \ ''''*-4&+.&+2'=$%.&34%'!+&B*GM ''''\ ''''''''_&/3!1b!+&U-4?!+-GTd=3-+=4ZTMX ''''''''_&/3!1b!+&U-4?!+-B-0GT/&&*N>>???6+Z,W*0+6.4W>TMX ''''''''_&/3!1b!+&F0++*GhDMX ''''] ' ''''*$"03.'=$%.&34%'&+!&Y3&0+GM ''''\ ''''''''_&/3!1b4*+%GT/&&*N>>???6+Z,W*0+6.4W>TMX ''''''''_&/3!1b,!!+-&Y3&0+GTcZ,W*0+'g+"'@,8+TMX ''''] ] Qb

  65. ! " # $ % & ' (& ) # *

  66. ')/#0)#/+#1+2.3(+ 4)5-/2(+#!326$-78

  67. Software Metrics ! L)%0<&A$+")-"&+'8)'%)$)-"$%@+")0<)%0-") 6+06"+&E)0<)$)6'"8")0<)%0<&A$+")0+)'&%) %6"8'<'8$&'0(%B)))))) ! bQ0@)8$((0&)80(&+01)A3$&)E0@)8$((0&) -"$%@+"Bc)\J0-)N"T$+80]

  68. Software Metrics Code Coverage ! X3'83)%&$&"-"(&%G)#+$(83"%G)$(2)6$&3%) $+")"I"8@&"2)A3"()&3")&"%&%)+@(Y ! ; : >;0/"+$,"U)!&$&"-"(&);0/"+$," ! ; [ >;0/"+$,"U)*+$(83);0/"+$," ! ; " >;0/"+$,"U)4$&3);0/"+$,")))))))))))))))))))))))))))) )) ! [::d);02");0/"+$,")'%)$)+"^@'+"2G)#@&) (0&)$)%@<<'8'"(&)8+'&"+'$)<0+)&"%&) 80-61"&"("%%

  69. Software Metrics Lines of Code ! J"I&>#$%"2)-"&+'8)<0+)802")%'e" ! _$+'0@%)2"<'('&'0(% ! R'("%)0<);02")\RK;] ! ;0--"(&)R'("%)0<);02")\;RK;] ! V0(>;0--"(&)R'("%)0<);02")\V;RK;] ! SI"8@&$#1")R'("%)0<);02")\SRK;])))))))))))))))))))))) )))) ! O$&'0%)8$()#")'(&"+"%&'(, ! ;RK;)W)\S]RK;

  70. Software Metrics Lines of Code !"#$"$%&$'(')'*+,-'3%!&,00'*/*$%3&>*/*04. 24?%04,23%8'*/*04.1h6h6h6&8E'666 F&,-&3%8'&4'24?%04,2'*/*04.1h6h6h6&8E'GIKIhI'"<&+!M 6666624%+N'IKIhI'"<&+! 3%!&,00'4ON'./,%%+0N>>*+,-6*/*$%3&62+>*/*04.1h6h6h !"#$"$%&$'(')'*/*04.'>$!->04.,0>!-.>+E.4W*4%+%&!>&-$%O>g4-O=04? */*04.'h6h6h'"<'F+",!&3,%'U+-8W,%%6 ;3-+.&4-3+!N'''''''''''''''''''''''''''''''hC [30+!N''''''''''''''''''''''''''''''''''''hDH i3%+!'4='942+'Gik9MN''''''''''''''''''''hJhCo cZ+.$&,"0+'i3%+!'4='942+'Gcik9MN'''''''''LoCh 94WW+%&'i3%+!'4='942+'G9ik9MN''''''''''''LHJJ f4%194WW+%&'i3%+!'4='942+'Gf9ik9MN'''''''oopJ ^%&+-=,.+!N'''''''''''''''''''''''''''''''''n 90,!!+!N'''''''''''''''''''''''''''''''''''pD f4%1F&,&3.'m+&/42!N'''''''''''''''''''''''LCI F&,&3.'m+&/42!N''''''''''''''''''''''''''''CC [$%.&34%!N''''''''''''''''''''''''''''''''''D

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend