 .   
 


  ()
  . ,    ,   ,           .   ?   ,      ,   .         TDD (Test-Driven-Development  ,   ). ?     .   TDD      ,       .      ,       TDD.           TDD,     ,    TDD.      ,          .



  a4.pdf   .





 

 :   



 :   










 ,   (clean code that works),   ,   ,    (Ron Jeffries),        (Test-Driven Development, TDD).  ,  ,  ,     , 

?     .  ,            ;

?    ,   .      ,    ,       ,  ;

?     ;

?      ,      ;

?    .

    ,  ?       ,       ,   .     ,    ,    .       .   

?      ,     ,  ;

?   .

  ,   ?            :

?             ,     ;

?    ,     ,  -     ;

?          ;

?        ,   ,    .

   TDD    .

1.     ,   ,  ,   .

2.        ,          .    ,   .

3.        .

    TDD.

 ,     ,  ,          ,  ,     ,     .  ,    ,    ,     :

?         (Quality Assurance, QA)         ;

?                 ;

?       ,       ,         ;

?                     ,              .

,  ,     ?           ?      ,           ? .




TDD        .             .       ,  ,      ,   .       : !,        :  !      ,          :

?       ,        ;

?     ;

?        ;

?    .

        ,       . ,    ,      

?    ,       ;

?     ,    ;

?   , , ,             ;

? (     ).

      .   ,   ,        .   ,   ,   .      ,   ,   .       ,   ,   .   ,        .

  TDD      .   ,  ,    ,   .        ,    ,   .       ,  ,   . .   ,   ,        .

  Extreme Programming Explaine[1 -  .  . .: , 2002. ISBN 5-94723-032-1.],  ,          (Extreme Programming, XP)     (Test-Driven Development, TDD).    XP  TDD   . XP :   ,      . TDD    . TDD         ,       . ,          ,    ,    ?     TDD? , .               .

 ,  TDD, ,       .   (test infected)       (Erich Gamma),    .  TDD,  ,     ,  ,     ,      .   ,  ,   TDD,      ,  TDD   ,        .

,  ,   (  ,   )     .  , TDD                 . ,    ,      ,           .         ,    .

  ,  :

?   TDD;

?   ;

?  ,      .

    .

 I.   .        TDD.        (Ward Cunningham)   ,           TDD.     :      ,    .              .

 II.   xUnit.     ,     .       .        xUnit,       .          ,          .

 III.    .   ,       ,  :          xUnit.  ,          ,       .

   ,          .         ,         ,       .     ,     ,  ,                  .     , ,    ,       ,     .

    .  ,     ,    .   ,         (       ).       ,        .   ,  ,      ,  .       ,       ,         ,      ,  ,        .      . TDD   .







 ,          .           ,              .  ,   ,   :   (Steve Freeman),   (Frank Westphall),   (Ron Jeffries),  ʸ (Dirk Koning),   (Edward Heiatt),   (Tammo Freese),   (Jim Newkirk),   (Johannes Link),   (Manfred Lange),   (Steve Hayes),   (Alan Francis),   (Jonathan Rasmusson),   (Shane Clauson),   (Simon Crase),   (Kay Pantecost),   (Murrey Bishop),   (Ryan King),   (Bill Wake),   (Edmund Schweppe),   (Kevin Lawrence),   (John Carter),  (Phlip),   (Peter Hansen),   (Ben Schroeder),   (Alex Chaffee),    (Peter van Rooijen),   (Rick Kawala),    (Mark van Hamersveld),   (Doug Swartz),   (Laurent Bossavit),   (Ilia Preuz),    (Daniel Le Berre),   (Frank Carver),   (Mike Clark),   (Christian Pekeler),   (Karl Scotland),   (Carl Manaster), . .  (J. B. Rainsberger),   (Peter Lindberg),   (Darach Ennis),   (Kyle Cordes),   (Justin Sampson),   (Patrik Logan),   (Darren Hobbs),   (Aaron Sansone),   (Syver Enstad),   (Shinobu Kawai),   (Erik Meade),   (Patrik Logan),   (Dan Rawsthorne),   (Bill Rutiser),   (Eric Herman),   (Paul Chisholm),   (Asim Jalis),   (Ivan Moor),   (Levi Purvis),   (Rick Mugridge),   (Antony Adachi),   (Nigel Thorne),   (John Bley),   (Kari Hoijarvi),   (Manuel Amago),   (Kaouru Hosokawa),   (Pat Eyler),   (Ross Shaw),   (Sam Gentle),   (Jean Rajotte),   (Phillipe Antras)    (Jaime Nino).

       ,        .        ,    ,       TDD.      ,     .     ,       (Massimo Arnoldi),   (Ralph Beatti),   (Ron Jeffries),   (Martin Fowler)  (,    )   (Erich Gamma),     ,       ,       .

      (Martin Fowler)    FrameMaker.                ( ,   ,        ).

             .           ,    ,    ,      ,       Smalltalk.       ,       .   ,         ,      .

    :        ,    ,        .   ,           ,   .        ,      ,      ,    ,             .

   (Mike Henderson)  ,     (Marcy Barns)  ,        .

,    ,     12- .        :    ,   ,       . , , .


 

 , ,       comp@piter.com ( ,  ).

     !

 -  http://www.piter.com       .







             ,    WyCash.       ,       .    ,  .     :     .   ,    ,     .    ,   .      :    ?

 ,     .   ,      ,    .  ,         ,      ,   ,  .

 WyCash        .          ,     .  ,        ,     (Guaranteed Investment Contracts),      .

   WyCash  - ,      .      Dollar, ,       .             .

               Dollar. ,     Smalltalk     ,           .       ,       ,      ,        .

        ,    Dollar.          ,     [2 -       2.com/doc/oopsla91.html.],        .  ,   ,   Dollar      

    ,   ,   .       ,    .  ,    ,  ,     ,      ,  AveragedColumn.      .

           ,       .           .             ,    .  ,          .

      ,      :  ,    ?    ,    ,  .

     Dollar    .              ,   .   3x


  4y


  15 USD  200 CHF[3 - USD  , CHF   . . .].

  ,         Dollar (),       Currency ().  ,       ,       PolyCurrency ().    ,    ,     ,   .  ,    ?

    Currency  ( )       ;     .           .    ,   .

    .        WyCash    ,    . ,     -       .     :

?       WyCash        ,      .

?                WyCash,            .

?    ,       ;  ,          .

   ,     ;  ,             -.   ,   ,     .          ,   .   , ,                  ( ,    ,    ),     ?

,  .     ,        ,         ,   .    (Test-Driven Development, TDD)    ,     ,     ,   ,    .   ,     .        .   ,     ,        :

?       ,   ,     ;

?  .

    ,                  ,    .    ,     ,   (multi-currency money).




 I

  



   ,       ( ,        ).           (TDD).   ,  TDD   :

    .

     ,     .

   .

      ,        .

     .

 ,      :

   ,       ?

       , ,       ?

     ?

        ?




1.  


   ,     WyCash,   (. ). ,      .








  ,   .








    .








$5 + 10 CHF = $10,    2:1

$5 * 2 = $10



  ,    ? ,  ,       ,      ?  :

?               ;

?      (  )   ,        .

  ,      ,     ,    .         ,  .      , 


.      ,      .

     ,    . ,       ?   .     ,   . (      ,    ,     ,   .)

 . ,       ?     ,     .      ,    ?    .

   ,  ,      .  ,     . ,       ,            (API)     ,     ,   .   [4 -   times()       . . .]:



public void testMultiplication() {

Dollar five = new Dollar(5);

five.times(2);

assertEquals(10, five.amount);

}



(, :  ,  ,        .    ?  ,  -  [5 -    (code that smells)    XP ,    ( ). . .],   .    ,   ,         [6 -          JUnit,   .     ,   .       ,   . . .].)



$5 + 10 CHF = $10,    2:1

$5 * 2 = $10

  amount   

    Dollar?

  ?



,     ,   ,    . ( ,     ,            , JUnit.)       (      )?     :

?   Dollar;

?  ;

?   times(int);

?   () amount.

    . (      .)     ,   Dollar:



Dollar

class Dollar



  ,   .    ,   ,   -     .



Dollar

Dollar(int amount) {

}



  .     times().     ,     :



Dollar

void times(int multiplier) {

}



    .    ,    () amount:



Dollar

int amount;



!      ,    :    . 1.1.

   .   (JUnit   )    ,    ,  ,     10  0. 






. 1.1. !   



 !     .       .  ,   ,    -  .          ,       .         .     .

,    ,        ,    .           .

 ,     ,   :



Dollar

int amount = 10;



 1.2     .       ,       .

 , !   ,     .      ,          .     ,  .






. 1.2.   



,   TDD    :

1.   .

2.     ,     .

3.   .

4.     ,     .

5.     .



  

  (Steve Freeman) ,           (      ,   ,    ).              ,   .         ,     ,      .

      .   SQL,      ,         ,   ,      .             .

  ,     .                   .     ,     .

       ,       ,       - ,       .      TDD.    ,    ,       ,    .


     ,      .    ?         ,            .   ?   ,   :



Dollar

int amount = 5 * 2;



 ,     10. ,     ,   ,    .  5   2    ,     .           10.   5  2    ,      ,     .   .

,       5  2   ,  .  ,     () amount   times()?



Dollar

int amount;

void times(int multiplier) {

amount= 5 * 2;

}



    ,    .    .

     ? , TDD      ,        .          ? .     ,       .       .      ,         .        ,     ,      .

 .    ?  ,          .     5?    ,       amount:



Dollar

Dollar(int amount) {

this.amount = amount;

}



    times():



Dollar

void times(int multiplier) {

amount = amount * 2;

}



 2    multiplier,     :



Dollar

void times(int multiplier) {

amount= amount * multiplier;

}



 ,       Java,   *= (, ,  ):



Dollar

void times(int multiplier) {

amount *= multiplier;

}



$5 + 10 CHF = $10,    2:1






  amount   

    Dollar?

  ?



      .        ;     .   :

?   ,       ;

?     ,      ;

?      JUnit;

?   ,   ;

?   ,   ;

?    ,   ;

?     ,        .




2.  


         :

1.  . ,        .   ,   , ,   , .

2.   .      .      ,  .        ,  .  ,     ,          .        (  ),       .      , ,    .

3.  . ,   ,          .  ,   ,    ,     .

    ,   (      ).          ,          ( ).   , ,    !    ,  ,     .        ,       ,   ,     ,  .



$5 + 10 CHF = $10,    2:1






  amount   

    Dollar?

  ?



    ,      :      Dollar   .    :



public void testMultiplication() {

Dollar five = new Dollar(5);

five.times(2);

assertEquals(10, five.amount);

five.times(3);

assertEquals(15, five.amount);

}



     ,     .

    times()            .    times()    ,           ,    .          Dollar , ,  .  ,   ,         ,     .



public void testMultiplication() {

Dollar five = new Dollar(5);

Dollar product = five.times(2);

assertEquals(10, product.amount);

product = five.times(3);

assertEquals(15, product.amount);

}



    ,       Dollar.times():



Dollar

Dollar times(int multiplier) {

amount *= multiplier;

return null;

}



  ,   .    !    ,     Dollar   :



Dollar

Dollar times(int multiplier) {

return new Dollar(amount * multiplier);

}

$5 + 10 CHF = $10,    2:1






  amount   






  ?



  1,     ,        ,     .        ,    (  ,       ).  ,   ,      .

       .   :

?  ,  ,  ,  ,        ,     ;




  .


   .

   ,     (https://www.litres.ru/kent-bek/ekstremalnoe-programmirovanie-razrabotka-cherez-testirovanie/)  .

      Visa, MasterCard, Maestro,    ,   ,     ,  PayPal, WebMoney, ., QIWI ,       .



notes



1


 .  . .: , 2002. ISBN 5-94723-032-1.




2


      2.com/doc/oopsla91.html.




3


USD  , CHF   . . .




4


  times()       . . .




5


   (code that smells)    XP ,    ( ). . .




6


         JUnit,   .     ,   .       ,   . . .


